Chapter 1 of 28
Why images need a different kind of network
কারো হাতে একটি গোল্ডেন রিট্রিভারের ছবি দিয়ে যদি জিজ্ঞেস করা হয়, "এটি কী?" — তবে সচেতনভাবে কিছু ভাবার আগেই তার মুখ থেকে উত্তর চলে আসে। আপনার ভিজ্যুয়াল কর্টেক্স (visual cortex) সারা জীবন ধরে প্রথমে ছবির কিনারা বা এজ (edge), তারপর পশমের গঠন বা টেক্সচার, তারপর কানের আকৃতি এবং শেষমেশ পুরো কুকুরটিকে সনাক্ত করতে শিখেছে — আর এই পুরো কাজটি ঘটে সেকেন্ডের একটি ভগ্নাংশে, যেখানে আপনাকে কখনোই এমন কোনো নিয়ম মুখস্থ করতে হয়নি যে, "যদি থুতনির দুই পাশে ত্রিভুজাকৃতির কান ঝুলে থাকে, তবে সেটি সম্ভবত একটি কুকুর।" কম্পিউটারের কিন্তু এমন কোনো সুবিধা বা পূর্ব অভিজ্ঞতা থাকে না। একটি মেশিনের কাছে ওই একই ছবি সংখ্যা বা পিক্সেল ভ্যালুর একটি বিশাল গ্রিড ছাড়া আর কিছুই নয়, এবং কাওকে না কাওকে একদম স্ক্র্যাচ থেকে মেশিনটিকে শেখাতে হবে যে কীভাবে ওই সংখ্যাগুলোকে "কুকুর" শব্দে রূপান্তর করা যায়।
ঠিক এই কাজটিই হলো কম্পিউটার ভিশন (Computer Vision)-এর — যা এআই (AI)-এর এমন একটি শাখা যা মেশিনকে ছবি এবং ভিডিও থেকে অর্থ বের করতে সাহায্য করে — আর এই কাজটি করার জন্য সবচেয়ে গুরুত্বপূর্ণ টুলটি হলো কনভোলিউশনাল নিউরাল নেটওয়ার্ক (Convolutional Neural Network) বা সংক্ষেপে CNN। এই চ্যাপ্টারটি মূলত একটি CNN আসলে কী, কেন ছবির জন্য এই বিশেষ নেটওয়ার্কেরই প্রয়োজন হয় এবং সামগ্রিক AI-এর মানচিত্রে CNN-এর অবস্থান ঠিক কোথায়, তা নিয়ে আলোচনা করে।
ধরুন, আপনি এমন একটি mobile app বানাচ্ছেন যা ব্যবহারকারীর গ্যালারির ছবিগুলোকে নিজে থেকেই আলাদা আলাদা ফোল্ডারে সাজিয়ে রাখবে: যেমন "খাবার," "পোষা প্রাণী," "রসিদ" বা "স্ক্রিনশট।" আপনি তো আর প্রতিটি ছবি দেখার জন্য আলাদা কোনো মানুষ নিয়োগ করতে পারবেন না, আর প্রতিটি সম্ভাব্য পোষা প্রাণীর ছবির জন্য নিজে হাতে কোনো if-statement-ও লিখতে পারবেন না — কারণ পৃথিবীতে হাজার হাজার জাতের কুকুর আছে, সাথে আছে আলোর ভিন্নতা, বিভিন্ন অ্যাঙ্গেল এবং ব্যাকগ্রাউন্ড। আপনার আসলে এমন একটি সিস্টেম প্রয়োজন যা নিজে থেকেই প্রচুর লেবেলযুক্ত ছবি দেখে বা বিশ্লেষণ করে শিখে নিয়েছে যে কোন ভিজ্যুয়াল প্যাটার্নগুলো "পোষা প্রাণী" থেকে "রসিদ"-কে আলাদা করে। সেই সিস্টেমের এমন ক্ষমতা থাকা দরকার যাতে ছবিটি যেকোনো জুম লেভেলে, দিনের যেকোনো সময়ে এবং ফ্রেমের যেকোনো জায়গায় তোলা হলেও সে সঠিকভাবে সনাক্ত করতে পারে। ঠিক এই সমস্যাটি সমাধান করার জন্যই CNN তৈরি করা হয়েছে, এবং এই কোর্সের শেষে আপনি নিখুঁতভাবে বুঝতে পারবেন যে তারা কীভাবে এই কাজটি করে।
কম্পিউটার ভিশন হলো এমন একটি বিজ্ঞান যা মেশিনকে ডিজিটাল ছবি বা ভিডিও থেকে অর্থপূর্ণ তথ্য সংগ্রহ করতে এবং সেই তথ্যের ওপর ভিত্তি করে সিদ্ধান্ত নিতে বা অ্যাকশন নিতে সক্ষম করে তোলে।
বাস্তবে, "কম্পিউটার ভিশন" হলো বেশ কয়েকটি ভিন্ন ভিন্ন কাজের একটি ছাতা বা সাধারণ নাম, যার প্রতিটি ওই একই পিক্সেলগুলোর কাছে কিছুটা আলাদা প্রশ্ন জিজ্ঞেস করে:
এই কাজগুলো শুনতে যতটাই আলাদা মনে হোক না কেন, এদের প্রতিটিই তৈরি হয়েছে ঠিক একই পেছনের মেকানিজম বা যন্ত্রপাতির ওপর যা আপনি শিখতে যাচ্ছেন।
একটি গ্রে-স্কেল (grayscale) ছবি হলো মূলত ব্রাইটনেস ভ্যালুর একটি 2D ম্যাট্রিক্স; আর একটি রঙিন ছবি হলো একটি 3D গ্রিড — যার থাকে উচ্চতা, প্রস্থ এবং তিনটি কালার চ্যানেল (RGB)। এটি শুনতে বেশ সহজ মনে হতে পারে, কিন্তু তাহলে এটি এত বড় একটি কঠিন সমস্যা কেন? পিক্সেলের বেশ কয়েকটি বৈশিষ্ট্য সাধারণ অ্যালগরিদমগুলোর জন্য ছবি নিয়ে কাজ করাকে একটি দুঃস্বপ্নে পরিণত করে:
High Dimensionality (উচ্চ মাত্রা), Viewpoint (অ্যাঙ্গেল), Scale (স্কেল), Illumination (আলো), Occlusion (আড়াল হওয়া), Background clutter (ব্যাকগ্রাউন্ডের জটিলতা) — এই ছয়টি ক্লাসিক্যাল কারণ ছবির ডেটার ওপর সাধারণ অ্যালগরিদমগুলোকে ব্যর্থ করে দেয়। পরীক্ষায় যদি জিজ্ঞেস করা হয় "ভিশন কেন এত কঠিন," তবে এই ছয়টি পয়েন্ট আপনার উত্তরের চেকলিস্ট।
কনভোলিউশনাল নিউরাল নেটওয়ার্ক (CNN বা ConvNet) হলো ডিপ নিউরাল নেটওয়ার্কের এমন একটি ক্লাস বা শ্রেণী যা ছবির মতো গ্রিড-আকৃতির ডেটা প্রসেস করার জন্য বিশেষভাবে তৈরি করা হয়েছে। এটি কনভোলিউশন নামক একটি গাণিতিক অপারেশনের সাহায্যে সরাসরি raw পিক্সেল থেকে ফিচারের স্থানিক ক্রমানুসার বা স্পেশাল হায়ারার্কি (spatial hierarchies) — অর্থাৎ সাধারণ কিনারা থেকে শুরু করে জটিল অবজেক্ট পর্যন্ত — স্বয়ংক্রিয়ভাবে ও মানানসইভাবে শিখে নেয়।
সহজ কথা: প্রতিটি পিক্সেলকে আলাদাভাবে দেখার বদলে (যা একটি সাধারণ ফুললি-কানেক্টেড নেটওয়ার্ক করে থাকে), একটি CNN একটি স্লাইডিং ফিল্টারের মাধ্যমে ছোট ছোট স্থানীয় অঞ্চল বা লোকাল প্যাচগুলোকে পর্যবেক্ষণ করে এবং ছবিটির যেকোনো জায়গায় সেই নির্দিষ্ট প্যাটার্নটি — যেমন কিনারা, কোণ বা টেক্সচার — উপস্থিত থাকলেও তাকে সনাক্ত করতে শিখে নেয়।
এটাই হলো মূল আইডিয়া: একটি CNN হলো এমন একটি নেটওয়ার্ক যা প্রথমে ছোট ছোট লোকাল ভিজ্যুয়াল প্যাটার্ন চিনতে শেখে এবং তারপর ধীরে ধীরে সেই ছোট ছোট প্যাটার্নগুলোকে একত্রিত করে বড় আকৃতিতে নিয়ে যায় — যেমন কিনারাগুলো মিলে টেক্সচার তৈরি করে, টেক্সচার মিলে বিভিন্ন অংশ তৈরি করে এবং অংশগুলো মিলে একটি আস্ত অবজেক্ট তৈরি করে।
একটা জিগস পাজল সাজানোর কথা ভাবুন। আপনি প্রথমে পুরো ছবিটা একবারে দেখেন না — বরং প্রতিটা টুকরার আকৃতি আর রং আলাদা আলাদাভাবে খেয়াল করেন, তারপর কাছাকাছি টুকরাগুলো জোড়া লাগিয়ে ছোট ছোট অংশ তৈরি করেন (হয়তো একটা কোণে আকাশ, আরেক কোণে গাছ), আর শেষে সেই অংশগুলো মিলিয়ে পুরো ছবিটা ফুটিয়ে তোলেন। CNN-ও ঠিক এভাবেই কাজ করে — প্রথম layer-গুলো ছোট ছোট টুকরা (কিনারা, রং) চেনে, মাঝের layer-গুলো সেগুলো জোড়া দিয়ে অংশ (চোখ, কান) তৈরি করে, আর শেষের layer পুরো ছবিটাকে (একটা কুকুর) চিনে ফেলে।

ওপরের হায়ারার্কিটি ওপর থেকে নিচে দেখলে যা দাঁড়ায়:
রাশিয়ান matryoshka পুতুলের কথা ভাবুন — একটার ভেতর আরেকটা, তার ভেতর আরেকটা। AI → ML → Deep Learning → CNN হায়ারার্কিও ঠিক তেমন — প্রতিটা পরের স্তর আগেরটার একটা ছোট, বেশি নির্দিষ্ট অংশ।
"একটি CNN-কে কেন আলাদা কোনো শাখা না বলে ডিপ লার্নিংয়ের একটি অংশ হিসেবে বিবেচনা করা হয়?" কারণ এর বিশেষায়িত লেয়ারগুলোর নিচেও একটি CNN মূলত একটি গভীর, মাল্টি-লেয়ার নিউরাল নেটওয়ার্ক — এটি শুধুমাত্র সাধারণ ফুললি-কানেক্টেড লেয়ারের বদলে (বা তার পাশাপাশি) কনভোলিউশনাল লেয়ার যুক্ত করে। এটি ডিপ লার্নিংয়ের সমস্ত মেকানিজম — ব্যাকপ্রোপাগেশন, গ্রেডিয়েন্ট ডিসেন্ট, অ্যাক্টিভেশন ফাংশন — উত্তরাধিকার সূত্রে পায় এবং এর ওপরে একটি গুরুত্বপূর্ণ আর্কিটেকচারাল আইডিয়া যুক্ত করে।
যেখানে: "ফিচার এক্সট্র্যাকশন" বা ফিচার বের করে নেওয়ার অংশটি ছবি থেকে কী কী জিনিস দেখতে হবে (কিনারা, টেক্সচার, আকৃতি) তা শেখে, এবং "ক্লাসিফিকেশন" অংশটি সেই শিখে নেওয়া ফিচারগুলোকে কাজে লাগিয়ে সিদ্ধান্ত নেয় যে ছবিটিতে আসলে কোন অবজেক্টটি আছে।
সহজ কথা: শেষ কয়েকটি লেয়ারের আগের সমস্ত অংশ মূলত নেটওয়ার্কের নিজেকে নিজে ছবি চেনার ক্ষমতা বাড়ানোর প্রক্রিয়া; আর পরের অংশটি হলো সাধারণ সিদ্ধান্ত নেওয়ার ধাপ। এবং সবচেয়ে বড় কথা হলো, এই দুটি অংশই ব্যাকপ্রোপাগেশন ব্যবহার করে শুরু থেকে শেষ পর্যন্ত একসাথে ট্রেন করা হয় — ফিচারগুলোকে ক্লাসিফায়ার থেকে আলাদাভাবে কোনো মানুষ নিজে হাতে ডিজাইন করে না।
CNN আপনার চেনা নিউরাল নেটওয়ার্কের বাইরে কোনো ভিন্ন প্রযুক্তি নয় — এটি মূলত সাধারণ ডিপ নেটওয়ার্কেরই একটি রূপ যেখানে একটি স্পেশাল লেয়ারের ব্যবহার যোগ করা হয়েছে। ব্যাকপ্রোপাগেশন থেকে শুরু করে গ্রেডিয়েন্ট ডিসেন্টের প্রতিটি কনসেপ্ট এখানে হুবহু একইভাবে প্রযোজ্য।
CNN ইমেজ ক্লাসিফিকেশনের জন্য বিখ্যাত হওয়ার কারণে আমরা সহজেই ভুলে যাই যে এটি যেকোনো গ্রিড-আকৃতির ডেটার ওপরেই চলতে পারে — যেমন ভিডিও ফ্রেম (সময়ের সাপেক্ষে একটি 4D গ্রিড), অডিও স্পেকট্রোগ্রাম, এমনকি graph-গঠিত বা নির্দিষ্ট কিছু 1D সিকোয়েন্সিয়াল সমস্যা যেখানে লোকালিটি এবং ট্রান্সলেশন ইনভ্যারিয়েন্স (translation invariance) কাজ করে।
প্রতিটি যখন আপনার ফোনটি আপনার মুখ দেখে আনলক হয়, ফটো অ্যাপ নিজে থেকেই বন্ধুদের ছবি ট্যাগ করে দেয়, অথবা একটি সেল্ফ-ড্রাইভিং গাড়ি রাস্তার পথচারীকে চিহ্নিত করে, তার পেছনের সমস্ত কঠিন কাজটি করে একটি CNN (অথবা এর কাছাকাছি কোনো উন্নত রূপ)। আমরা এই কোর্সের বাকি অংশে ধাপে ধাপে শিখব যে কীভাবে এটি সম্ভব হয় — এবং এর শুরুতেই জানব যে কেন সাধারণ নিউরাল নেটওয়ার্কগুলো raw পিক্সেল ইনপুটের মুখোমুখি হলেই ভেঙে পড়ে।