একটি স্ট্যান্ডার্ড কনভোলিউশনাল লেয়ার অদ্ভুতভাবে সমতাবাদী। এটি ডজন ডজন — এমনকি শত শত — ফিচার ডিটেক্টর স্তূপ করে রাখে, তারপর প্রতিটিকেই সমান গুরুত্ব দিয়ে দেখে। একটি চ্যানেল যা তির্যক প্রান্ত (diagonal edges) শনাক্ত করতে শিখেছে, তাকে নীল আকাশের পিক্সেল শনাক্তকারী চ্যানেলের মতোই সমান ভোট দেওয়া হয়। একটি বিড়ালের ছবির পশমের টেক্সচার (fur texture) শনাক্তকারী চ্যানেলকে ব্যাকগ্রাউন্ড নয়েজ দ্বারা সক্রিয় হওয়া চ্যানেলের মতোই সমান গুরুত্ব দিয়ে সামনে পাঠানো হয়। এই অভিন্নতাই হলো এর দুর্বলতা। প্রতিটি ছবির জন্য সব চ্যানেল সমান গুরুত্বপূর্ণ নয়, এবং ডিপ নেটওয়ার্কগুলোর ঐতিহাসিকভাবে এমন কোনো মেকানিজম ছিল না যা এটি প্রকাশ করতে পারে।
Hu এবং তাঁর সহকর্মীদের প্রবর্তিত Squeeze-and-Excitation একটি অত্যন্ত ক্ষুদ্র সংযোজনের মাধ্যমে এই সমস্যাটি সমাধান করে। এটি যেকোনো কনভোলিউশন ব্লকের সাথে একটি শিখণযোগ্য গেটিং মেকানিজম (learnable gating mechanism) যুক্ত করে, যাতে নেটওয়ার্কটি ডায়নামিকভাবে রিক্যালিব্রেট করতে পারে যে প্রতিটি চ্যানেল কতটা অবদান রাখবে, এবং এটি প্রতিটি ইনপুটের জন্য নতুন করে সম্পন্ন হয়। এর অতিরিক্ত খরচ খুবই সামান্য — ResNet-50-এর সাথে যুক্ত করলে প্যারামিটার মাত্র ২.৫ শতাংশ বৃদ্ধি পায় — কিন্তু এর রিপ্রেজেন্টেশনাল পাওয়ার বা উপস্থাপনা ক্ষমতা এতটাই বৃদ্ধি পায় যে SE ব্লকগুলো ILSVRC 2017 জিততে সাহায্য করেছিল এবং বর্তমানে MobileNetV3 এবং EfficientNet-এর মতো প্রোডাকশন আর্কিটেকচারে ব্যবহৃত হচ্ছে।
এর ধারণাটি তিনটি ধাপে শূন্য থেকে তৈরি করার মতো সহজ।
Squeeze: নেটওয়ার্ককে একটি ওয়াইড-অ্যাঙ্গেল লেন্স দেওয়া
কনভোলিউশন ডিজাইনের দিক থেকেই লোকাল বা স্থানীয়। একটি 3×3 কার্নেল ইমেজের ওপর দিয়ে স্লাইড করে এবং শুধুমাত্র তার নিকটবর্তী অংশটুকু দেখতে পায়। যথেষ্ট লেয়ার স্তূপ করলে রিসেপ্টিভ ফিল্ড (receptive field) বৃদ্ধি পায়, তবুও কোনো একক অপারেশন এক পলকে পুরো ফিচার ম্যাপ দেখতে পারে না। এর মানে হলো, একটি চ্যানেল একটি কুকুর বা গাড়ির পুরো স্পেশিয়াল এলাকা জুড়ে শক্তিশালীভাবে সক্রিয় হতে পারে, কিন্তু পরবর্তী লেয়ার কখনোই একটি স্পষ্ট সারাংশ পায় না যে, “এই ডিটেক্টরটি সব জায়গায় সক্রিয় হয়েছে।”
Squeeze ধাপটি গ্লোবাল অ্যাভারেজ পুলিং (global average pooling)-এর মাধ্যমে সেই শূন্যতা পূরণ করে। প্রতিটি চ্যানেলের জন্য, H×W স্পেশিয়াল গ্রিডের প্রতিটি মানকে গড় করে একটি মাত্র সংখ্যায় নামিয়ে আনা হয়। আপনার যদি ৫১২টি চ্যানেল থাকে, তবে এখন আপনার কাছে ৫১২টি স্কেলার (scalar) থাকবে। প্রতিটি স্কেলার সেই চ্যানেলটি যা শনাক্ত করতে শিখেছে তার গ্লোবাল উপস্থিতি প্রকাশ করে — তা চাকার রিম হোক, ঘাসের পট্টি হোক বা ত্বকের রঙের কোনো অংশ হোক। এটি পুরো দৃশ্যের একটি চ্যানেল-ভিত্তিক সারাংশ।
এটি গুরুত্বপূর্ণ কারণ প্রেক্ষাপট বা কনটেক্সট অর্থ পরিবর্তন করে দেয়। একটি অনুভূমিক রেখা শনাক্তকারী (horizontal-line detector) একটি ছবিতে দিগন্ত শনাক্ত করার জন্য দরকারী হতে পারে, কিন্তু অন্য একটি ছবিতে এটি বনের ক্যানোপিতে নয়েজ শনাক্ত করার কারণে অকেজো হতে পারে। স্পেশিয়াল অ্যাগ্রিগেশন ছাড়া, নেটওয়ার্কের পক্ষে এই পার্থক্য করার মতো কোনো পরিষ্কার সংকেত থাকে না।
Excite: একটি বটleneck যা সহযোগিতা করতে বাধ্য করে
Squeeze ধাপটি যখন গ্লোবাল চ্যানেল ডেসক্রিপ্টরগুলোর একটি ভেক্টর তৈরি করে, তখন Excite ধাপটি শেখে যে সেগুলো দিয়ে কী করতে হবে। এটি একটি ক্ষুদ্র দুই-স্তরের MLP। এটি ভেক্টরটি গ্রহণ করে, একটি বটleneck-এ সংকুচিত করে এবং তারপর এটিকে পুনরায় মূল চ্যানেল ডাইমেনশনে প্রসারিত করে।
সাধারণত এতে ১৬-এর একটি রিডাকশন রেশিও (reduction ratio) ব্যবহার করা হয়। যদি ইনপুটে ৫১২টি চ্যানেল থাকে, তবে প্রথম লিনিয়ার লেয়ার ৫১২টি স্কেলারকে ৩২-এ নামিয়ে আনে, মাঝখানে একটি ReLU থাকে, এবং দ্বিতীয় লেয়ারটি ৩২-কে পুনরায় ৫১২-এ ম্যাপ করে। এই সংকোচনটি উদ্দেশ্যমূলক। এটি একটি ফানেলের মতো কাজ করে: নেটওয়ার্কটি মূল মানগুলোকে অপরিবর্তিত অবস্থায় সরাসরি পাস করতে পারে না। চ্যানেলগুলো একে অপরের সাথে কীভাবে সম্পর্কিত তার একটি সংকুচিত, শেয়ার্ড রিপ্রেজেন্টেশন বা উপস্থাপনা শিখতে হয়। এই বটleneck চ্যানেলগুলোর মধ্যে পারস্পরিক নির্ভরশীলতা (cross-channel dependencies) প্রকাশ করতে বাধ্য করে। উদাহরণস্বরূপ, মডেলটি শিখতে পারে যে যখন একটি “bark texture” চ্যানেল শক্তিশালী হয়, তখন একটি “tree trunk” কন্টুর চ্যানেলকেও জোরদার করা উচিত, অন্যদিকে একটি “water reflection” চ্যানেলকে কমিয়ে দেওয়া উচিত।
এখানে চূড়ান্ত অ্যাক্টিভেশন অত্যন্ত গুরুত্বপূর্ণ, এবং এটি এমন একটি জায়গা যেখানে প্রায়ই ভুল ধারণা কাজ করে। অনেকে সহজাতভাবেই Softmax ব্যবহার করতে চান, কারণ তাদের মনে হয় অ্যাটেনশন একটি প্রোবাবিলিটি ডিস্ট্রিবিউশন হওয়া উচিত। Softmax সমস্ত চ্যানেলকে একে অপরের বিরুদ্ধে প্রতিযোগিতা করতে বাধ্য করবে যতক্ষণ না তাদের ওয়েট বা ওজনের সমষ্টি এক হয়। যদি একটি চ্যানেলের ওজন বাড়ে, তবে অন্যদের অবশ্যই কমাতে হবে। এই কাজের জন্য এটি একদমই ভুল পদ্ধতি। একটি সূর্যাস্তের ছবিতে একই সাথে একটি কমলা আভা (orange-glow) চ্যানেল এবং একটি মেঘের টেক্সচার (cloud-texture) চ্যানেল পূর্ণ শক্তিতে কাজ করার প্রয়োজন হতে পারে। গেটগুলো স্বাধীন ডিমার সুইচের মতো কাজ করা উচিত, কোনো জিরো-সাম বাজেটের মতো নয়।
Sigmoid এই সমস্যার সমাধান করে। এটি প্রতিটি স্কেলারকে শূন্য থেকে এক-এর মধ্যে একটি মানে সংকুচিত করে, কিন্তু প্রতিটি চ্যানেল স্বাধীনভাবে কাজ করার স্বাধীনতা পায়। মডেলটি কোনো কৃত্রিম প্রতিযোগিতা ছাড়াই যেকোনো সাবসেটকে বাড়িয়ে দিতে পারে, অন্যদের নিরপেক্ষ রাখতে পারে এবং বাকিগুলোকে দমন করতে পারে।
Scale: গেটগুলো প্রয়োগ করুন এবং এগিয়ে যান
শেষ ধাপটি প্রায় কিছুটা নিরানন্দ বা প্রত্যাশাভঙ্গের মতো মনে হতে পারে, যা এর আভিজাত্যেরই একটি অংশ। প্রতিটি মূল feature map-কে তার সংশ্লিষ্ট sigmoid-activated গেট ভ্যালু দিয়ে গুণ করা হয়। যদি গেটটি এক (one)-এর কাছাকাছি থাকে, তবে চ্যানেলটি অপরিবর্তিত অবস্থায় প্রবাহিত হয়। যদি গেটটি শূন্য (zero)-এর কাছাকাছি থাকে, তবে সেই সম্পূর্ণ feature map-টি মিউট বা নিস্তেজ হয়ে যায়, অনেকটা নীরবতার দিকে মিলিয়ে যাওয়ার মতো। এর ফলাফল নেটওয়ার্কের পরবর্তী লেয়ারে পাঠানো হয়।
যেহেতু এটি স্পেশাল ম্যাপগুলোর (spatial maps) ওপর শুধুমাত্র একটি গুণন প্রক্রিয়া, তাই ইনফারেন্সের (inference) সময় এটি খুব সামান্য কম্পিউটেশনাল ওভারহেড যোগ করে। আসল কাজটুকু সম্পন্ন হয় global pooling এবং দুটি ছোট প্রজেকশনের মাধ্যমে, যা আশেপাশের 3×3 convolutions-এর তুলনায় নগণ্য।
কেন এই ডিজাইনটি টিকে আছে
এর নিখুঁত গাণিতিক কাঠামোর বাইরেও, Squeeze-and-Excitation টিকে আছে কারণ এটি ইঞ্জিনিয়ারিং সীমাবদ্ধতাগুলোকে সম্মান করে।
স্বল্প প্যারামিটার। ResNet-50-এ SE ব্লক যোগ করলে মাত্র প্রায় ২.৫ শতাংশ অতিরিক্ত প্যারামিটার প্রয়োজন হয়। MLP লেয়ারগুলো ছোট; এগুলো মডেলকে ভারী করে না। এমন এক যুগে যেখানে নির্ভুলতা (accuracy) বৃদ্ধির জন্য প্রায়শই মডেলের আকার দ্বিগুণ করতে হয়, সেখানে SE একটি বিরল সুযোগ (free lunch) প্রদান করে।
মডুলারিটি। SE কোনো নতুন ব্যাকবোন আর্কিটেকচার নয় যা আপনার পাইপলাইন পুনরায় ডিজাইন করতে বাধ্য করবে। এটি একটি ড্রপ-ইন মডিউল। আপনি ResNet, DenseNet, বা কাস্টম স্ট্যাকের যেকোনো কনভোলিউশন ব্লকের পরে আশেপাশের লজিক পুনরায় না লিখেই এটি যুক্ত করতে পারেন। এই নমনীয়তার কারণেই এটি দ্রুত গৃহীত হয়েছে—প্রথমে গবেষণায় এবং পরে মোবাইল-অপ্টিমাইজড নেটওয়ার্কগুলোতে।
ইনপুট-অ্যাডাপ্টিভ আচরণ। ট্রেনিংয়ের সময় শেখা এবং স্থির (frozen) হয়ে যাওয়া স্ট্যাটিক চ্যানেল ওয়েটগুলোর বিপরীতে, SE গেটগুলো প্রতিটি ফরওয়ার্ড পাসের জন্য তাৎক্ষণিকভাবে (on the fly) গণনা করা হয়। নেটওয়ার্কে যদি একটি সমতল, বৈশিষ্ট্যহীন আকাশ দেখানো হয়, তবে সংশ্লিষ্ট চ্যানেলগুলো নিস্তেজ থাকে। আবার যদি পথচারী, সাইন এবং যানবাহনসহ একটি ব্যস্ত রাস্তার দৃশ্য দেখানো হয়, তবে গেটগুলো সেই নির্দিষ্ট ছবির জন্য গুরুত্বপূর্ণ ডিটেক্টরগুলোকে বুস্ট করতে পুনরায় ক্যালিব্রেট হয়। একই নেটওয়ার্ক দৃশ্য অনুযায়ী নিজের সংবেদনশীলতা (sensitivity) সমন্বয় করে নেয়।
প্রতিযোগিতার বিজয়ী থেকে দৈনন্দিন ব্যবহার পর্যন্ত
SE ব্লকগুলো ILSVRC 2017-এ শীর্ষস্থান দখল করেছিল, কিন্তু তাদের আসল স্বীকৃতি আসে পরে। এগুলোকে MobileNetV3-এ অন্তর্ভুক্ত করা হয়েছে, যেখানে এগুলো মোবাইল ব্যাটারি খরচ না করেই লাইটওয়েট মডেলগুলোকে তাদের সক্ষমতার চেয়েও বেশি পারফর্ম করতে সাহায্য করে। এগুলো EfficientNet-এর কম্পাউন্ড স্কেলিং রেসিপিতেও দেখা যায়, যা প্রমাণ করে যে চ্যানেল অ্যাটেনশন (channel attention) শুধুমাত্র ভারী সার্ভারের জন্য কোনো বিলাসিতা নয়, বরং দক্ষ ডিজাইনের জন্য একটি ব্যবহারিক সরঞ্জাম।
এটি আসলে কতটা কম কোড ব্যবহার করে তা দেখতে চাইলে, লাইভ ডেমোটি প্রতিটি লাইন ধরে ব্লকটিকে ব্যাখ্যা করে:
- লাইভ ডেমো: https://dev48v.infy.uk/dl/day40-squeeze-excitation.html
- ফুল বিল্ড ওয়াকথ্রু: https://dev.to/dev48v/squeeze-and-excitation-from-scratch-cheap-channel-attention-that-learns-which-feature-maps-matter-1hic
এবং আপনি যদি একটি কমিউনিটির সাথে কাজ করতে চান: https://t.me/GyaanSetuAi
মূল শিক্ষা
উন্নত ভিশন মডেলের জন্য সব সময় আরও গভীর স্ট্যাক বা আরও চওড়া ফিল্টারের প্রয়োজন হয় না। মাঝে মাঝে তাদের শুধু একটি মুহূর্তের প্রয়োজন হয় এটা জিজ্ঞাসা করার জন্য যে, তাদের সামনে থাকা ছবির জন্য কোন চ্যানেলগুলো আসলে গুরুত্বপূর্ণ। Squeeze-and-Excitation একটি পুলড অ্যাভারেজ (pooled average), একটি কম্প্রেসড MLP এবং একটি sigmoid গেটের মাধ্যমে তাদের সেই মুহূর্তটি প্রদান করে। এর ফলে এমন একটি নেটওয়ার্ক তৈরি হয় যা প্রতিটি ফিচারকে সমান ভলিউমে চিৎকার করে না, বরং দৃশ্য অনুযায়ী প্রতিটি চ্যানেলকে ঠিক কখন ফিসফিস করতে হবে, জোর দিতে হবে বা নিস্তেজ করতে হবে তা শিখতে পারে।
