Chapter 27 of 28
The whole course in one pass
আপনি এই কোর্সটি শুরু করেছিলেন একটি খুব সহজ প্রশ্নের উত্তর খুঁজতে: একটি ছবিকে সরাসরি সাধারণ MLP-তে পাঠালে কী ঘটবে? তার উত্তর — ওজনের প্যারামিটার সংখ্যার বিস্ফোরণ, ছবির স্থানিক বা spatial গঠন হারিয়ে যাওয়া এবং লোকাল প্রতিবেশের কোনো ধারণা না থাকা — হলো সেই সব মূল সমস্যা যা সমাধান করার জন্য কনভোলিউশনাল নিউরাল নেটওয়ার্ক (CNN) তৈরি করা হয়েছিল। প্রতিটি চ্যাপ্টারই মূলত একটি ধারণারই এক একটি বিস্তারিত রূপ: লোকাল প্রতিবেশ দেখা, ছবির সব জায়গায় ওজন শেয়ার বা রিইউজ করা, সেই অপারেশনগুলোকে ধাপভিত্তিক বা হায়ারার্কিকাল বিন্যাসে স্তুপ করা এবং মডেলকে নিজের মতো করে ফিচার শেখার স্বাধীনতা দেওয়া, মানুষের তৈরি করা ফিচারের ওপর নির্ভর না করে। এই চ্যাপ্টারটি সম্পূর্ণ কোর্সের সেই মূল ধারাটি পার্ট বাই পার্ট আরেকবার মনে করিয়ে দেবে, যাতে গুরুত্বপূর্ণ পয়েন্টগুলো আপনার মনে স্থায়ীভাবে গেঁথে থাকে।
কোর্সের শুরুতে আমরা জেনেছিলাম CNN কেন দরকার, শুধু এটি কী তা জানার আগে। সাধারণ MLP-তে ছবি প্রসেস করার জন্য পিক্সেলগুলোকে এক লাইনে ফ্ল্যাটেন করতে হয় যা পিক্সেলগুলোর স্থানিক বা spatial সম্পর্ক চিরতরে নষ্ট করে এবং ট্রেনিং শুরুর আগেই কোটি কোটি প্যারামিটার ওজনের দাবি করে বসে। পারসেপ্ট্রন ও MLP-র এই মৌলিক সীমাবদ্ধতা বোঝার পর আমরা প্রিরেকুইজিট বা আবশ্যক চ্যাপ্টারে ম্যাট্রিক্স, ভেক্টর, গ্রেডিয়েন্ট ও প্রোবাবিলিটির মতো বনিয়াদি গাণিতিক শব্দভাণ্ডারগুলো সাজিয়ে নিয়েছিলাম যাতে পরবর্তী চ্যাপ্টারের সমীকরণগুলো বোঝা সহজ হয়।
এই ভাগে আমরা কনভোলিউশন অপারেশনের গাণিতিক রূপের সাথে পরিচিত হয়েছিলাম: ছবির ওপর দিয়ে একটি ছোট ফিল্টার স্লাইড করা, প্রতি পজিশনে ওজনের গুণফলের সমষ্টি নেওয়া এবং সেই একই ওজনের ফিল্টার ছবির সব জায়গায় বারবার শেয়ার করা। আর্কিটেকচার ওভারভিউতে আমরা এর প্রতিটি ব্লক — কনভোলিউশন, অ্যাক্টিভেশন, পুলিং এবং সর্বশেষে ফ্ল্যাটেন, fully connected ও সফটম্যাক্স ক্লাসিফায়ার — এক সাথে সাজানো দেখেছিলাম। গাণিতিক ভিত্তি চ্যাপ্টারে আমরা আউটপুট সাইজের গাণিতিক সূত্রটি প্রতিপাদন করেছিলাম যা নিয়ন্ত্রণ করে কীভাবে স্থানিক আকার নেটওয়ার্কের গভীরে সংকুচিত হয়। ফরওয়ার্ড প্রোপাগেশনে আমরা একটি ছবিকে প্রতি লেয়ারের মধ্য দিয়ে নিজে হাতে চালিয়ে তার ওজনের পরিবর্তন দেখেছি, এবং ব্যাকপ্রোপাগেশনে গ্রেডিয়েন্ট প্রবাহের গাণিতিক রূপ নিবিড়ভাবে পর্যবেক্ষণ করেছি (যেখানে পুলিংয়ের কোনো ওজন আপডেট হয় না এবং Max Pooling শুধু সর্বোচ্চ মানের পজিশনে গ্রেডিয়েন্ট প্রবাহিত করে)। কনভোলিউশন, পুলিং, ফ্ল্যাটেন ও ডেন্স লেয়ারের পুঙ্খানুপুঙ্খ বিবরণ দিয়ে এই পার্টের ইতি টানা হয়েছিল।
আর্কিটেকচার প্রস্তুত হওয়ার পর কোর্সটি মনোযোগ দিয়েছিল আসলে সেটি ট্রেইন করার দিকে। অ্যাক্টিভেশন ফাংশনগুলো তুলনা করে দেখা হয়েছিল কেন Sigmoid ও Tanh-এর চেয়ে ReLU ডিফল্ট হয়ে উঠল — এটি পজিটিভ ইনপুটের জন্য কখনো স্যাচুরেট করে না, তাই গভীর নেটওয়ার্কে এটি তার পূর্বসূরিদের মতো গ্রেডিয়েন্ট শ্বাসরোধ করে না। লস ফাংশন অধ্যায়ে জানা গিয়েছিল কেন ক্লাসিফিকেশনের জন্য Cross-Entropy সঠিক পছন্দ, এবং কীভাবে এটি Softmax-এর সাথে জোড় বেঁধে সহজ গ্রেডিয়েন্ট তৈরি করে। অপ্টিমাইজার অধ্যায়ে সাধারণ SGD থেকে RMSProp হয়ে Adam পর্যন্ত যাত্রা করা হয়েছিল, যা মোমেন্টাম, প্রতি-প্যারামিটার অ্যাডাপ্টিভ লার্নিং রেট এবং বায়াস কারেকশনকে একত্রিত করে। হাইপারপ্যারামিটার ও ট্রেনিং পাইপলাইন অধ্যায়গুলো সবকিছুকে একটি সম্পূর্ণ এন্ড-টু-এন্ড ওয়ার্কফ্লোতে বেঁধে দিয়েছিল — ফরওয়ার্ড পাস, লস, ব্যাকপ্রোপাগেশন, ওয়েট আপডেট, এবং পুনরাবৃত্তি — আর রেগুলারাইজেশন (Dropout, L2, Batch Normalization, augmentation, early stopping) দেখিয়েছিল কীভাবে এই প্রক্রিয়াটিকে স্রেফ ট্রেনিং সেট মুখস্থ করা থেকে বিরত রাখা যায়।
একটি মডেল ট্রেইন করাটা কাজের অর্ধেক মাত্র; এটি আসলেই ভালো কিনা তা জানাই বাকি অর্ধেক। এই পার্টে কম্পিউটেশনাল কমপ্লেক্সিটি নিয়ে আলোচনা হয়েছিল — প্যারামিটার, FLOPs এবং মেমরি গণনা করে যাতে আপনি ট্রেনিং শুরুর আগেই খরচ সম্পর্কে ধারণা পেতে পারেন — এবং কেবল অ্যাকুরেসির বাইরেও গিয়ে ইভালুয়েশন মেট্রিক্স নিয়ে আলোচনা করা হয়েছিল, কারণ ইমব্যালেন্সড ডেটাতে শুধু অ্যাকুরেসি বিভ্রান্তিকর হতে পারে। এরপর একটি সম্পূর্ণ বাস্তব উদাহরণে একটি আসল ছবিকে হাতে-কলমে প্রতিটি লেয়ারের মধ্য দিয়ে চালিয়ে দেখানো হয়েছিল, যা আগের সব সূত্রকে একটি একক, বাস্তব ও এন্ড-টু-এন্ড হিসাবে রূপান্তরিত করেছিল।
এরপর কোর্সটি এই ক্ষেত্রের প্রকৃত ইতিহাস পর্যালোচনা করেছিল: LeNet-এর মূল conv-pool-FC টেমপ্লেট, AlexNet-এর বড় স্কেলে CNN-এর জয় প্রমাণ করা, VGGNet-এর অভিন্ন ছোট ফিল্টার, GoogLeNet-এর প্যারালাল-ফিল্টার Inception মডিউল, ResNet-এর স্কিপ কানেকশন দিয়ে গভীর নেটওয়ার্কে ভ্যানিশিং গ্রেডিয়েন্ট সমাধান করা, DenseNet-এর ঘন সংযোগ, MobileNet ও EfficientNet-এর দক্ষতার দিকে ধাবিত হওয়া, এবং Vision Transformer-এর কনভোলিউশন সম্পূর্ণ পরিত্যাগ করে self-attention গ্রহণ করা। এই ধারাবাহিকতার পাশাপাশি, কোর্সটি এটাও কভার করেছিল যে CNN আসলে কোথায় দুর্বল — adversarial ভালনারেবিলিটি, সীমিত রোটেশন/স্কেল ইনভ্যারিয়েন্স, ডেটাসেট বায়াস — এবং আজকের দিনে মেডিকেল ইমেজিং থেকে শুরু করে স্বয়ংক্রিয় গাড়ি ও নিরাপত্তা সিস্টেম পর্যন্ত কোথায় কোথায় এগুলো প্রোডাকশনে ব্যবহৃত হয়। তুলনামূলক অধ্যায়টি CNN-কে MLP, RNN, LSTM ও ViT-এর পাশাপাশি রেখে সেই যাত্রার সমাপ্তি টেনেছিল, যা প্রতিটি আর্কিটেকচারের পেছনের ট্রেড-অফকে স্পষ্ট করে তুলেছিল।
১. একটি CNN হলো স্বয়ংক্রিয় ফিচার এক্সট্র্যাকশন (convolution + pooling) ও ক্লাসিফিকেশনের (fully connected layers) সমন্বিত রূপ, যা ব্যাকপ্রোপাগেশনের মাধ্যমে এন্ড-টু-এন্ড ট্রেইন হয়। ২. Weight sharing এবং local receptive field CNN-কে স্প্যাশিয়াল ডেটার ক্ষেত্রে MLP-র চেয়ে অনেক বেশি প্যারামিটার-দক্ষ করে তোলে, সাথে আনুমানিক translation invariance-ও দিয়ে দেয়। ৩. কনভোলিউশন আউটপুট সাইজের সূত্র, , নিয়ন্ত্রণ করে কীভাবে স্প্যাশিয়াল ডাইমেনশন নেটওয়ার্কের গভীরে সংকুচিত হয় — এটি শুধু মুখস্থ নয়, নিজে হাতে প্রতিপাদন করতে পারার মতো ভালোভাবে জানা উচিত। ৪. ReLU হলো ডিফল্ট হিডেন-লেয়ার অ্যাক্টিভেশন কারণ এটি গ্রেডিয়েন্ট স্যাচুরেশন এড়ায়; Softmax ও Sigmoid যথাক্রমে মাল্টি-ক্লাস এবং বাইনারি/মাল্টি-লেবেল সমস্যার জন্য আউটপুট-লেয়ার অ্যাক্টিভেশন। ৫. Softmax ও Cross-Entropy একসাথে জোড় বাঁধলে সহজ গ্রেডিয়েন্ট তৈরি হয়, এই কারণেই এই সমন্বয়টি ক্লাসিফিকেশনের জন্য স্ট্যান্ডার্ড। ৬. Max Pooling-এর ব্যাকওয়ার্ড পাস শুধুমাত্র প্রতিটি উইন্ডোর সর্বোচ্চ মান-বিশিষ্ট এলিমেন্টে গ্রেডিয়েন্ট পাঠায়; Average Pooling সেটিকে পুরো উইন্ডো জুড়ে সমানভাবে বন্টন করে। ৭. Adam মোমেন্টাম, প্রতি-প্যারামিটার অ্যাডাপ্টিভ স্কেলিং এবং বায়াস কারেকশনকে একত্রিত করে — বেশিরভাগ ট্রেনিং রানের জন্য এটি একটি শক্তিশালী ডিফল্ট অপ্টিমাইজার। ৮. রেগুলারাইজেশন — Dropout, L2 weight decay, Batch Normalization, data augmentation এবং early stopping — এটিই নিশ্চিত করে যাতে CNN স্রেফ তার ট্রেনিং সেট মুখস্থ না করে ফেলে। ৯. ResNet-এর স্কিপ কানেকশন গ্রেডিয়েন্টকে পেছনের দিকে একটি সরাসরি সংযোজনমূলক পথ দিয়ে অত্যন্ত গভীর নেটওয়ার্কের ভ্যানিশিং গ্রেডিয়েন্ট সমস্যা সমাধান করেছিল। ১০. CNN-এর মধ্যে ছবি-নির্দিষ্ট একটি শক্তিশালী ইনডাক্টিভ বায়াস (locality, translation invariance) থাকে; Vision Transformer সেই বায়াসকে নমনীয়তার বিনিময়ে ত্যাগ করে, যার জন্য অনেক বেশি ডেটা প্রয়োজন হয়।
"See locally, share weights, stack hierarchically, pool smartly, classify globally." (লোকাল প্রতিবেশ দেখুন, ওজন শেয়ার করুন, হায়ারার্কিকাল স্তুপ করুন, বুদ্ধিদীপ্ত পুলিং করুন এবং বৈশ্বিক ক্লাসিফিকেশন করুন)। আপনি যদি এই লাইনের প্রতিটি শব্দের গভীর কারিগরি অর্থ — কেন locality, কেন weight sharing, কেন hierarchical stacking, কেন pooling, এবং কেন চূড়ান্ত ক্লাসিফায়ারটি বৈশ্বিক — ভাইভা বা ইন্টারভিউতে গুছিয়ে বলতে পারেন, তবে বুঝতে হবে আপনি CNN-এর মূল সারবস্তু নিখুঁতভাবে বুঝে গেছেন।
এই কোর্সটি একদম প্রাথমিক নীতি থেকে শুরু করে আধুনিক আর্কিটেকচারগুলোর মাঝে তাদের অবস্থান পর্যন্ত — কনভোলিউশনাল নিউরাল নেটওয়ার্ককে সংজ্ঞায়িত করা ধারণাগুলো কভার করেছে। এরপরের পদক্ষেপগুলো ঠিক সেগুলোই যা References অধ্যায়ে নির্দেশ করা হয়েছে: যেসব আর্কিটেকচার আপনি নাম ধরে পড়েছেন তার পেছনের মূল গবেষণাপত্রগুলো পড়া, এবং নিজে হাতে ছোট ছোট CNN তৈরি করা, যতক্ষণ না এই কোর্সের সূত্রগুলো নিছক সূত্র মনে না হয়ে সহজাত বোধশক্তির মতো অনুভূত হয়।