A CNN, start to finish


Draw, or pick

1–3. Convolution, ReLU, pooling 4 filters · 28×28 → 26×26 → 13×13

4–5. Scores and softmax 4 numbers → 5 scores → 5 probabilities

মূল ধারণা।
একটি convolutional network pixel-এর একটি গ্রিডকে কয়েকটি class-এর সম্ভাবনায় পরিণত করে, এক এক ধাপে। এই পাতার প্রতিটি ধাপ আপনি আলাদাভাবে আগেই দেখেছেন:
• Convolution: একটি 3×3 kernel ছবির ওপর দিয়ে সরে, যেমন edge detection পাতায়। এখানে চারটি আছে, প্রত্যেকটি এক দিকে একটি ছোট সোজা দাগ খোঁজে। kernel-এর নিজের দিকে টানা তিনটি কালি-ভরা pixel পায় 6, আর kernel-এর bias −3 সেটিকে নামিয়ে আনে 3-এ। দাগের শেষ মাথা, টানা দুটি, পায় 1; একটি একা বিচ্ছিন্ন pixel শেষে দাঁড়ায় −1-এ।
• ReLU: প্রতিটি ঋণাত্মক 0 হয়ে যায়, যেমন activation পাতায়, তাই শুধু আসল দাগগুলো টিকে থাকে।
• Max pooling: প্রতিটি 2×2 window তার সবচেয়ে বড় মানটি রাখে, যেমন pooling পাতায়, আর map 26×26 থেকে 13×13-এ ছোট হয়।
• Global max: প্রতিটি map একটি সংখ্যা হয়ে যায়, যেকোনো জায়গায় তার সবচেয়ে বড় মান: “এই দিকে কোথাও কি একটি দাগ আছে?” পুরো ছবিটি এখন চারটি সংখ্যা।
• Scores: প্রতিটি class নিজের weight দিয়ে ওই চারটি সংখ্যা যোগ করে, সঙ্গে একটি bias। একটি + চায় খাড়া আর আনুভূমিক, কোনো কর্ণ নয়; তার bias −3 মানে শুধু একটি দিক যথেষ্ট নয়।
• Softmax: score-গুলো সম্ভাবনা হয়ে যায়, যেমন softmax পাতায়।
এখানে প্রতিটি weight হাতে বসানো, তাই প্রতিটি সংখ্যা ব্যাখ্যা করা যায়। একটি আসল নেটওয়ার্ক এলোমেলো weight দিয়ে শুরু করে আর একটি optimizer দিয়ে সেগুলো শেখে।

যা চেষ্টা করে দেখার মতো:
1. | বেছে নিন। শুধু খাড়া filter জ্বলে ওঠে, তাই চারটি সংখ্যা 3, 0, 0, 0 আর নেটওয়ার্ক বলে |, 95.0%। এবার এর ওপর দিয়ে একটি আনুভূমিক দাগ টানুন: আনুভূমিক map জ্বলে ওঠে আর + এগিয়ে যায় 90.7%-এ।

2. একটি map-এর যেকোনো pixel-এ ক্লিক করে তার হিসাব দেখুন: আঁকার 3×3 টুকরো, kernel দিয়ে গুণ, সঙ্গে bias, তারপর ReLU, তারপর যে 2×2 pooling window-তে সেটি পড়ে। ডানের চারটি সংখ্যার একটিতে ক্লিক করলে সেই সর্বোচ্চ মানটি যেখানে পাওয়া গেছে সেখানে চলে যাবেন।

3. * বেছে নিন, একটি যোগচিহ্ন আর একটি গুণচিহ্ন একটির ওপর আরেকটি। চারটি filter-ই জ্বলে ওঠে, ঠিক বৃত্তের মতো: দুটোই দেয় 3, 3, 3, 3, আর নেটওয়ার্ক তারাটিকে বলে ○, 99.5%। global max রাখে প্রতিটি দিক আছে কি না, আর ফেলে দেয় কোথায়, আর এই নেটওয়ার্ক শুধু এটুকুই জানে। আসল CNN অনেকগুলো convolution layer একটির ওপর আরেকটি বসায়, যাতে দ্বিতীয় layer দাগগুলো মিলিয়ে কোণ আর বাঁক বানাতে পারে, তৃতীয়টি অংশ, এভাবে চলে। প্রতিটি সংখ্যা ব্যাখ্যাযোগ্য রাখতে এই পাতায় একটিই আছে।

4. ছোট করে আঁকুন। প্রায় 5 pixel-এর কম ব্যাসার্ধের একটি বৃত্ত তার একটি দিক হারাতে পারে, কারণ তার বাঁকে সেই দিকে টানা তিনটি সোজা pixel নেই, আর সেটি + হয়ে বেরোতে পারে। একটি 3×3 kernel একবারে কেবল 3×3 pixel-ই দেখে।

5. এত ছোট নেটওয়ার্কে pooling উত্তর বদলায় না: global max 26×26 map-এও একই চূড়া খুঁজে পেত। এটি এখানে আছে কারণ গভীর নেটওয়ার্কে পরের convolution ছোট map-এর ওপর কাজ করে, যা সস্তা আর তার প্রতিটি kernel-কে ছবির আরও চওড়া অংশ দেখতে দেয়।