Chapter 18 of 28
One image, traced by hand through every layer
এখন পর্যন্ত আমরা CNN থিওরির প্রতিটি অংশ — কনভোলিউশন, অ্যাক্টিভেশন, পুলিং, ফ্ল্যাটেন, fully connected লেয়ার, সফটম্যাক্স — আলাদা আলাদাভাবে শিখেছি। এই চ্যাপ্টারটি সেগুলোকে একটি নির্দিষ্ট পাতায় সাজিয়ে একটি একক, অত্যন্ত ছোট ছবির ওপর নিজে হাতে গাণিতিকভাবে রান করে দেখাবে, যার প্রতি পদেই বাস্তব সংখ্যা ব্যবহৃত হবে। আপনি যদি কোনো হেল্প বা সাহায্য ছাড়া নিজে খাতায় এই ট্রেস বা হিসাবটি সম্পন্ন করতে পারেন, তবে বুঝতে হবে আপনি CNN-এর সম্পূর্ণ ফরওয়ার্ড পাস প্রক্রিয়াটি নিখুঁতভাবে বুঝে গেছেন — পরীক্ষার খাতায় সামান্য আলাদা সংখ্যা দিয়ে এই প্রশ্নটি জিজ্ঞেস করা অন্যতম কমন একটি বিষয়।
এখানে আমাদের একটি ওজনের বা অতি ক্ষুদ্র গ্রে-স্কেল ছবি দেওয়া আছে, যার প্রতিটি মান মূলত এক একটি পিক্সেলের তীব্রতা (pixel intensity):
I =
[1 0 1 2 1]
[0 2 1 0 1]
[1 1 0 2 0]
[2 0 1 1 0]
[0 1 2 0 1]আমরা ছবির ওপর দিয়ে ১ স্ট্রাইড ও কোনো প্যাডিং ছাড়াই একটি সাইজের খাঁড়া কিনারা সনাক্তকারী (vertical-edge-detecting) কার্নেল স্লাইড করব:
K =
[ 1 0 -1]
[ 1 0 -1]
[ 1 0 -1]সহজ কথা: ১ স্ট্রাইড ও কোনো প্যাডিং ছাড়া একটি ছবির ওপর দিয়ে কার্নেল স্লাইড করা হলে প্রতি অক্ষ বরাবর ঠিক ৩টি সম্ভাব্য পজিশন পাওয়া যায়, যা একটি আউটপুট ফিচার ম্যাপ তৈরি করে।
উপরে-বামে থাকা প্রথম আউটপুট মানটি ক্যালকুলেট করা। ছবির উপরে-বামে থাকা প্রথম প্যাচের (প্রথম ৩টি সারি, প্রথম ৩টি কলাম) ওপর কার্নেলটি বসান:
Patch = Kernel =
[1 0 1] [ 1 0 -1]
[0 2 1] [ 1 0 -1]
[1 1 0] [ 1 0 -1]প্রতিটি উপাদান আলাদাভাবে গুণ করে সবকিছু যোগ করা হলো:
কার্নেলটিকে সব ৯টি পজিশনে স্লাইড করে (সুবিধার জন্য বায়াস ০ ধরে নিয়ে) বাকি ফিচার ম্যাপটি পূরণ করলে পাওয়া যায়:
Z =
[ 0 -2 2]
[ 1 -1 3]
[ 0 -1 1]প্রতিটি উপাদানে প্রয়োগ করা হলো — প্রতিটি ঋণাত্মক মান শূন্যে ক্ল্যাম্প হয়ে যায়, পজিটিভগুলো অপরিবর্তিত থাকে:
A =
[0 0 2]
[1 0 3]
[0 0 1]প্রতিটি আউটপুট সেল -এর একটি উইন্ডোর মধ্যে সবচেয়ে বড় মানটি নেয়:
P =
[1 3]
[1 3]সহজ কথা: Max pooling প্রতিটি লোকাল উইন্ডো থেকে শুধুমাত্র সবচেয়ে শক্তিশালী বা সক্রিয় মানটি রাখে, এবং সেই উইন্ডোর ঠিক কোন জায়গায় সংকেতটি ছিল তা বর্জন করে। এটিই মূলত স্থানিক নমনীয়তা (translation tolerance) তৈরি করে — ছবির গুরুত্বপূর্ণ ফিচারটি সামান্য নড়াচড়া করলেও পুলিংয়ের আউটপুট একই থাকে।
এই সাইজের পুলড ম্যাপটিকে সারি বরাবর সোজা করে একটি একক ভেক্টরে রূপান্তর করা হয় যাতে সেটিকে ডেন্স বা fully connected লেয়ারে পাঠানো যায়:
ধরা যাক ক্লাসিফায়ার হেড-এ ২টি আউটপুট নিউরন আছে (২টি ক্লাস), এবং নিচের ওজন ম্যাট্রিক্স ও বায়াস ০ ধরা হলো:
সহজ কথা: এটি পারসেপ্ট্রন সমীকরণের মতোই হুবহু এক ধরণের ওজনের বা ওয়েটেড সাম বা গুণের সমষ্টি, যা raw পিক্সেলে প্রয়োগ না করে ফ্ল্যাটেন করা এক্সট্র্যাক্ট ফিচারের ওপর প্রয়োগ করা হচ্ছে। "ছবির কোন অংশে কোন প্যাটার্ন আছে" তা চেনার জটিল কাজটি কনভোলিউশন ও পুলিং আগেই শেষ করে দেওয়ায় এই ধাপে ইনপুট ভেক্টরের সাইজ অত্যন্ত ছোট ও পরিমিত থাকে।
সহজ কথা: সফটম্যাক্স এই দুটি raw স্কোরকে একটি প্রোবাবিলিটি বা সম্ভাবনার বিন্যাসে রূপান্তর করে — যার উভয় মান পজিটিভ এবং যোগফল হুবহু ১। বড় raw স্কোরটি (০.৯ বনাম ০.৪) শুধু বিজয়ীই হয় না, বরং এক্সপোনেনশিয়াল স্পেসে বিজয়ী হওয়ায় এটি প্রায় ৬২.২% সম্ভাবনা দখল করে, সরল অর্ধেকের কাছাকাছি থাকার বদলে।
চূড়ান্ত প্রেডিকশন: ক্লাস ১-এর সম্ভাবনা ≈ ৬২.২%, এবং ক্লাস ২-এর সম্ভাবনা ≈ ৩৭.৮%। অর্থাৎ মডেলটি Class 1 প্রেডিক্ট করেছে।
Softmax-এর আউটপুটগুলোর যোগফল সর্বদা ১ হতে হবে। এখানে, ০.৬২২৪ + ০. ৩৭৭৬ = ১.০০০০ — একদম সঠিক। পরীক্ষার হলে উত্তর জমা দেওয়ার আগে এই ২ সেকেন্ডের চেকটি রান করলে অনেক অনাকাঙ্ক্ষিত হিসাবের ভুল এড়ানো যায়।
যদি ছবির আসল সঠিক লেবেল ক্লাস ১ হয় (ওয়ান-হট ), তবে ক্রস-এন্ট্রপি লস শুধুমাত্র সঠিক ক্লাসের জন্য মডেল কত প্রোবাবিলিটি প্রেডিক্ট করেছিল তা দেখে:
সহজ কথা: যখন মডেল সঠিক ক্লাসকে উচ্চ সম্ভাবনা প্রদান করে (একটি আত্মবিশ্বাসী, সঠিক প্রেডিকশন), তখন cross-entropy loss ছোট হয়, আর সেই সম্ভাবনা ০-এর দিকে কমতে থাকলে লস দ্রুত বাড়তে থাকে। একটি সম্পূর্ণ আত্মবিশ্বাসী সঠিক প্রেডিকশন () হলে হবে; একটি আত্মবিশ্বাসী কিন্তু ভুল প্রেডিকশন লসকে অসীমের দিকে ঠেলে দেয়।

এই একই সিকোয়েন্স — Conv → ReLU → Pool → Flatten → FC → Softmax → Loss — ভিন্ন ভিন্ন কার্নেল ও ইনপুট ম্যাট্রিক্স দিয়ে CNN পরীক্ষায় সবচেয়ে বেশি জিজ্ঞাসিত সংখ্যাভিত্তিক সমস্যাগুলোর একটি। ধাপ এড়িয়ে যাওয়ার চেষ্টা না করে প্রতিটি মধ্যবর্তী ম্যাট্রিক্স স্পষ্টভাবে লিখে ফেলার অভ্যাস গড়ে তুলুন।
এই ছয়-ধাপের ট্রেস — কনভোলিউশন, অ্যাক্টিভেশন, পুলিং, ফ্ল্যাটেন, fully connected, সফটম্যাক্স — আসলে আপনি এ পর্যন্ত ব্যবহার করা প্রতিটি ইমেজ ক্লাসিফায়ারের ফরওয়ার্ড পাসেরই হুবহু প্রতিরূপ, শুধু অনেক বড় ম্যাট্রিক্স, অনেক বেশি লেয়ার এবং প্রতি লেয়ারে অনেক বেশি ফিল্টার নিয়ে। PyTorch ও TensorFlow-এর মতো ফ্রেমওয়ার্কগুলো ঠিক এই একই অপারেশন সিকোয়েন্স রান করে; প্রোডাকশন স্কেলে শুধু সংখ্যাগুলোর আকার পরিবর্তিত হয়, আপনি নিজে হাতে যে মূল মেকানিক্স ট্রেস করেছেন তা নয়।