এখন পর্যন্ত আমরা CNN থিওরির প্রতিটি অংশ — কনভোলিউশন, অ্যাক্টিভেশন, পুলিং, ফ্ল্যাটেন, fully connected লেয়ার, সফটম্যাক্স — আলাদা আলাদাভাবে শিখেছি। এই চ্যাপ্টারটি সেগুলোকে একটি নির্দিষ্ট পাতায় সাজিয়ে একটি একক, অত্যন্ত ছোট ছবির ওপর নিজে হাতে গাণিতিকভাবে রান করে দেখাবে, যার প্রতি পদেই বাস্তব সংখ্যা ব্যবহৃত হবে। আপনি যদি কোনো হেল্প বা সাহায্য ছাড়া নিজে খাতায় এই ট্রেস বা হিসাবটি সম্পন্ন করতে পারেন, তবে বুঝতে হবে আপনি CNN-এর সম্পূর্ণ ফরওয়ার্ড পাস প্রক্রিয়াটি নিখুঁতভাবে বুঝে গেছেন — পরীক্ষার খাতায় সামান্য আলাদা সংখ্যা দিয়ে এই প্রশ্নটি জিজ্ঞেস করা অন্যতম কমন একটি বিষয়।
ইনপুট ইমেজ (The Input Image)
এখানে আমাদের একটি ওজনের বা অতি ক্ষুদ্র 5×5 গ্রে-স্কেল ছবি দেওয়া আছে, যার প্রতিটি মান মূলত এক একটি পিক্সেলের তীব্রতা (pixel intensity):
text
ধাপ ১: কনভোলিউশন (Convolution)
আমরা ছবির ওপর দিয়ে ১ স্ট্রাইড ও কোনো প্যাডিং ছাড়াই একটি 3×3 সাইজের খাঁড়া কিনারা সনাক্তকারী (vertical-edge-detecting) কার্নেল স্লাইড করব:
text
আউটপুটের স্থানিক আকার
O=⌊15−3+0⌋+1=3
সহজ কথা: ১ স্ট্রাইড ও কোনো প্যাডিং ছাড়া একটি 5×5 ছবির ওপর দিয়ে 3×3 কার্নেল স্লাইড করা হলে প্রতি অক্ষ বরাবর ঠিক ৩টি সম্ভাব্য পজিশন পাওয়া যায়, যা একটি 3×3 আউটপুট ফিচার ম্যাপ তৈরি করে।
উপরে-বামে থাকা প্রথম আউটপুট মানটি ক্যালকুলেট করা। ছবির উপরে-বামে থাকা প্রথম 3×3 প্যাচের (প্রথম ৩টি সারি, প্রথম ৩টি কলাম) ওপর কার্নেলটি বসান:
text
প্রতিটি উপাদান আলাদাভাবে গুণ করে সবকিছু যোগ করা হলো:
সহজ কথা: Max pooling প্রতিটি লোকাল উইন্ডো থেকে শুধুমাত্র সবচেয়ে শক্তিশালী বা সক্রিয় মানটি রাখে, এবং সেই উইন্ডোর ঠিক কোন জায়গায় সংকেতটি ছিল তা বর্জন করে। এটিই মূলত স্থানিক নমনীয়তা (translation tolerance) তৈরি করে — ছবির গুরুত্বপূর্ণ ফিচারটি সামান্য নড়াচড়া করলেও পুলিংয়ের আউটপুট একই থাকে।
ধাপ ৪: ফ্ল্যাটেন (Flatten)
এই 2×2 সাইজের পুলড ম্যাপটিকে সারি বরাবর সোজা করে একটি একক ভেক্টরে রূপান্তর করা হয় যাতে সেটিকে ডেন্স বা fully connected লেয়ারে পাঠানো যায়:
সহজ কথা: এটি পারসেপ্ট্রন সমীকরণের মতোই হুবহু এক ধরণের ওজনের বা ওয়েটেড সাম বা গুণের সমষ্টি, যা raw পিক্সেলে প্রয়োগ না করে ফ্ল্যাটেন করা এক্সট্র্যাক্ট ফিচারের ওপর প্রয়োগ করা হচ্ছে। "ছবির কোন অংশে কোন প্যাটার্ন আছে" তা চেনার জটিল কাজটি কনভোলিউশন ও পুলিং আগেই শেষ করে দেওয়ায় এই ধাপে ইনপুট ভেক্টরের সাইজ অত্যন্ত ছোট ও পরিমিত থাকে।
সহজ কথা: সফটম্যাক্স এই দুটি raw স্কোরকে একটি প্রোবাবিলিটি বা সম্ভাবনার বিন্যাসে রূপান্তর করে — যার উভয় মান পজিটিভ এবং যোগফল হুবহু ১। বড় raw স্কোরটি (০.৯ বনাম ০.৪) শুধু বিজয়ীই হয় না, বরং এক্সপোনেনশিয়াল স্পেসে বিজয়ী হওয়ায় এটি প্রায় ৬২.২% সম্ভাবনা দখল করে, সরল অর্ধেকের কাছাকাছি থাকার বদলে।
চূড়ান্ত প্রেডিকশন: ক্লাস ১-এর সম্ভাবনা ≈ ৬২.২%, এবং ক্লাস ২-এর সম্ভাবনা ≈ ৩৭.৮%। অর্থাৎ মডেলটি Class 1 প্রেডিক্ট করেছে।
সহজ সেল্ফ-চেক
Softmax-এর আউটপুটগুলোর যোগফল সর্বদা ১ হতে হবে। এখানে, ০.৬২২৪ + ০. ৩৭৭৬ = ১.০০০০ — একদম সঠিক। পরীক্ষার হলে উত্তর জমা দেওয়ার আগে এই ২ সেকেন্ডের চেকটি রান করলে অনেক অনাকাঙ্ক্ষিত হিসাবের ভুল এড়ানো যায়।
ধাপ ৭: লস হিসাব করা (Computing the Loss)
যদি ছবির আসল সঠিক লেবেল ক্লাস ১ হয় (ওয়ান-হট y=[1,0]), তবে ক্রস-এন্ট্রপি লস শুধুমাত্র সঠিক ক্লাসের জন্য মডেল কত প্রোবাবিলিটি প্রেডিক্ট করেছিল তা দেখে:
এই উদাহরণের জন্য ক্রস-এন্ট্রপি লস
L=−log(0.6224)≈0.474
সহজ কথা: যখন মডেল সঠিক ক্লাসকে উচ্চ সম্ভাবনা প্রদান করে (একটি আত্মবিশ্বাসী, সঠিক প্রেডিকশন), তখন cross-entropy loss ছোট হয়, আর সেই সম্ভাবনা ০-এর দিকে কমতে থাকলে লস দ্রুত বাড়তে থাকে। একটি সম্পূর্ণ আত্মবিশ্বাসী সঠিক প্রেডিকশন (y^1=1) হলে L=0 হবে; একটি আত্মবিশ্বাসী কিন্তু ভুল প্রেডিকশন লসকে অসীমের দিকে ঠেলে দেয়।
একই ৫x৫ ছবি প্রথম থেকে শেষ পর্যন্ত ট্রেস করা হয়েছে: কনভোলিউশন একটি ৩x৩ ফিচার ম্যাপ দেয়, ReLU নেগেটিভগুলো শূন্য করে, max pooling এটিকে ২x২ আকারে সংকুচিত করে, ফ্ল্যাটেন ৪ দৈর্ঘ্যের ভেক্টর দেয়, এবং FC + সফটম্যাক্স ক্লাস ১-এর জন্য ৬২.২% চূড়ান্ত সম্ভাবনা তৈরি করে।
খাতায় লিখে প্র্যাকটিস করুন
এই একই সিকোয়েন্স — Conv → ReLU → Pool → Flatten → FC → Softmax → Loss — ভিন্ন ভিন্ন কার্নেল ও ইনপুট ম্যাট্রিক্স দিয়ে CNN পরীক্ষায় সবচেয়ে বেশি জিজ্ঞাসিত সংখ্যাভিত্তিক সমস্যাগুলোর একটি। ধাপ এড়িয়ে যাওয়ার চেষ্টা না করে প্রতিটি মধ্যবর্তী ম্যাট্রিক্স স্পষ্টভাবে লিখে ফেলার অভ্যাস গড়ে তুলুন।
মূল বিষয়গুলো (Key Takeaways)
Key Takeaways
কনভোলিউশন ইনপুটের ওপর দিয়ে একটি কার্নেল স্লাইড করায়, প্রতিটি আউটপুট পজিশনের জন্য একটি ওয়েটেড সাম হিসাব করে: ৩×৩ কার্নেল, ১ স্ট্রাইড ও কোনো প্যাডিং ছাড়া একটি ৫×৫ ইনপুট একটি ৩×৩ ফিচার ম্যাপ তৈরি করে।
ReLU প্রতিটি ঋণাত্মক অ্যাক্টিভেশনকে শূন্যে ক্ল্যাম্প করে দেয় এবং পজিটিভ মানগুলোকে অপরিবর্তিত পাস করে দেয়।
Max pooling প্রতিটি লোকাল উইন্ডোতে শুধুমাত্র সবচেয়ে শক্তিশালী মানটি রাখে, স্থানিক আকার সংকুচিত করে এবং সামান্য translation tolerance যোগ করে।
ফ্ল্যাটেনিং চূড়ান্ত পুলড ফিচার ম্যাপকে একটি একক ভেক্টরে রূপান্তর করে যাতে এটি একটি fully connected লেয়ারে প্রবেশ করতে পারে।
FC লেয়ার ফ্ল্যাটেন করা ফিচারগুলোর ওপর একটি স্ট্যান্ডার্ড ওয়েটেড-সাম-প্লাস-বায়াস প্রয়োগ করে, ঠিক একটি পারসেপ্ট্রনের মতোই।
সফটম্যাক্স raw আউটপুট স্কোরগুলোকে এমন একটি প্রোবাবিলিটি বিন্যাসে রূপান্তর করে যার যোগফল ১।
ক্রস-এন্ট্রপি লস সঠিক ক্লাসকে দেওয়া কম আত্মবিশ্বাসকে শাস্তি দেয়, এবং সফটম্যাক্সের আউটপুট জানা থাকলে হিসাব করা সহজ।
ইন্টারভিউ কর্নার
Quick Check
বাস্তবে এর ব্যবহার
এই ছয়-ধাপের ট্রেস — কনভোলিউশন, অ্যাক্টিভেশন, পুলিং, ফ্ল্যাটেন, fully connected, সফটম্যাক্স — আসলে আপনি এ পর্যন্ত ব্যবহার করা প্রতিটি ইমেজ ক্লাসিফায়ারের ফরওয়ার্ড পাসেরই হুবহু প্রতিরূপ, শুধু অনেক বড় ম্যাট্রিক্স, অনেক বেশি লেয়ার এবং প্রতি লেয়ারে অনেক বেশি ফিল্টার নিয়ে। PyTorch ও TensorFlow-এর মতো ফ্রেমওয়ার্কগুলো ঠিক এই একই অপারেশন সিকোয়েন্স রান করে; প্রোডাকশন স্কেলে শুধু সংখ্যাগুলোর আকার পরিবর্তিত হয়, আপনি নিজে হাতে যে মূল মেকানিক্স ট্রেস করেছেন তা নয়।