Chapter 3 of 25
What makes 'deep' learning different
ধরে নিন, আপনি স্ক্যান করা ছবি থেকে হাতে লেখা সংখ্যা (digits) চেনার জন্য একটি মডেল তৈরি করছেন। ক্লাসিক্যাল Machine Learning-এ প্রথম ধাপে আপনাকে অর্থাৎ একজন মানুষকে ঠিক করতে হয় যে আপনি কী কী পরিমাপ করবেন: হয়তো আকৃতির ভেতরে কতগুলো বদ্ধ লুপ (closed loops) আছে, উচ্চতা ও প্রস্থের অনুপাত, কিংবা ওপরের অর্ধেক আর নিচের অর্ধেকের মধ্যে পিক্সেলের অন্ধকারের গড় পার্থক্য। আপনি এমন ডজনখানেক পরিমাপ বা ফিচার নিজে হাতে তৈরি করবেন এই আশায় যে, "3" আর "8"-এর মধ্যে আসলে যে পার্থক্যটা থাকে সেটা আপনি ক্যাপচার করতে পেরেছেন। এরপর অপেক্ষাকৃত একটি সাধারণ মডেল সেই ফিচারগুলোর গুরুত্ব (weight) পরিমাপ করতে শেখে।
এবার একই কাজটা একটি সাধারণ ছবির মধ্যে মানুষের মুখ চেনার ক্ষেত্রে করার চেষ্টা করুন—যেখানে আলো, পোজ বা মুখের অভিব্যক্তি যেকোনো রকম হতে পারে। এখানে আপনি নিজে হাতে কী কী "ফিচার" ডিজাইন করবেন? এজের (Edge) দিক? স্কিন-টোনের হিস্টোগ্রাম? মানুষের মুখ বাস্তবে যত রকমভাবে আলাদা হতে পারে, তার অনেক আগেই আপনার ভালো আইডিয়ার ঝুলি খালি হয়ে যাবে। জটিল এবং হাই-ডাইমেনশনাল ডেটার ক্ষেত্রে ক্লাসিক্যাল Machine Learning ঠিক এই দেয়ালটাতেই ধাক্কা খায় — আর Deep Learning তৈরিই হয়েছে এই দেয়ালটা ভেঙে ফেলার জন্য।
একই সমস্যা দেখা যায় স্পিচ রিকগনিশনেও। অডিও সিগন্যাল থেকে হাতে ফিচার ডিজাইন করা (যেমন নির্দিষ্ট ফ্রিকোয়েন্সি ব্যান্ডের এনার্জি) কয়েক দশক ধরে চেষ্টা করা হয়েছে, কিন্তু বক্তার উচ্চারণ, গতি, আশেপাশের শব্দ — এসব ভেরিয়েবলের সংমিশ্রণ এতটাই বিশাল যে হাতে-ডিজাইন করা ফিচার কখনোই যথেষ্ট রোবাস্ট হতে পারেনি। Deep Learning আসার পর এই পুরো সমস্যাটাই বদলে যায়: মডেলকে raw অডিও ওয়েভফর্ম বা তার সরল স্পেকট্রোগ্রাম দিলেই সে নিজে থেকে দরকারি প্যাটার্ন আবিষ্কার করে নিতে পারে।
একটু ভেবে দেখুন একজন রেডিওলজিস্ট আসলে কীভাবে টিউমার চিনতে শেখেন — তারা কোনো সুনির্দিষ্ট চেকলিস্ট মুখস্থ করেন না, বরং বছরের পর বছর ট্রেনিংয়ের সময় হাজার হাজার স্ক্যান দেখতে দেখতে তাদের ভেতরে ধীরে ধীরে "অস্বাভাবিক" কিছু চেনার একটি সেন্স বা বোধ তৈরি হয়। এই বোধটা শুরু হয় সাধারণ কিছু ভিজ্যুয়াল ক্লু (যেমন- এজ, টেক্সচার) থেকে, আর শেষ হয় একটি পূর্ণাঙ্গ ডায়াগনস্টিক সিদ্ধান্তে। কেউ তাদেরকে এই কনসেপ্টগুলোর স্তর বা হায়ারার্কি (hierarchy) স্পষ্টভাবে শিখিয়ে দেয়নি; বরং প্রচুর উদাহরণ দেখতে দেখতে, স্তরের পর স্তর বোঝার মাধ্যমে এটি এমনিতেই তাদের মধ্যে তৈরি হয়েছে।
মেডিকেল ইমেজের ওপর ট্রেন করা একটি Deep Neural Network-ও ঠিক একই রকম কিছু একটা করে। এর প্রথম লেয়ারগুলো (layers) খুব সাধারণ জিনিসগুলো ডিটেক্ট করতে শেখে — যেমন এজ (edges), ব্লব (blobs), ব্রাইটনেসের গ্রেডিয়েন্ট (gradients)। এর পরের লেয়ারগুলো সেই সাধারণ জিনিসগুলোকে জোড়া লাগিয়ে তুলনামূলক একটু জটিল আকৃতি তৈরি করে। তার পরের লেয়ারগুলো সেই আকৃতিগুলোকে জোড়া লাগিয়ে চেনা যায় এমন কিছু স্ট্রাকচার তৈরি করে, এবং একদম শেষের লেয়ারগুলো আসল ডায়াগনস্টিক সিদ্ধান্তটি নেয়। কেউ তাকে প্রোগ্রাম করে বলে দেয়নি যে "অনিয়মিত বর্ডার খুঁজো" — এই কনসেপ্টটি সম্পূর্ণভাবে নেটওয়ার্কের নিজের তৈরি, যা সে লক্ষ লক্ষ উদাহরণ থেকে নিজের ভুল কমানোর চেষ্টা করতে গিয়ে আবিষ্কার করেছে।
Deep Learning হলো Machine Learning-এর একটি সাবফিল্ড যা আর্টিফিশিয়াল Neural Network-এর ওপর ভিত্তি করে তৈরি, যেখানে ইনপুট এবং আউটপুটের মধ্যে একাধিক লেয়ার থাকে — আর একারণেই এর নামে "Deep" শব্দটি রয়েছে। এই লেয়ারগুলো স্বয়ংক্রিয়ভাবে ডেটার হায়ারার্কিক্যাল রিপ্রেজেন্টেশন (hierarchical representations) শেখে, যা raw বা সামান্য প্রসেস করা ইনপুটকে ধাপে ধাপে ক্রমশ আরও অ্যাবস্ট্রাক্ট (abstract) ফিচারে রূপান্তর করে।
এখানে "deep" শব্দটি আক্ষরিক অর্থেই ব্যবহৃত হচ্ছে — এটি মূলত ডেটা যে কতগুলো লেয়ারের ভেতর দিয়ে যায় তাকেই বোঝায়, এর সাথে বুদ্ধিমত্তা বা গভীর চিন্তার কোনো সম্পর্ক নেই। টেকনিক্যালি, একটি মাত্র হিডেন লেয়ার (hidden layer) থাকলেই তাকে Neural Network বলা যায়, কিন্তু "deep learning" বলতে নির্দিষ্টভাবে একাধিক হিডেন লেয়ার একটার পর একটা সাজানোকে বোঝায়। Multi-Layer Perceptron — যেখানে অন্তত একটি হিডেন লেয়ার থাকে — হলো এই ধারণার সবচেয়ে সহজ ও সরাসরি উদাহরণ, আর একে পুরোপুরি বুঝতে পারলেই আপনি এর পরের যেকোনো জটিল আর্কিটেকচার খুব দ্রুত বুঝতে পারবেন।
Deep Learning মূলত representation learning নিয়ে কাজ করে: অর্থাৎ মানুষ নিজে হাতে ফিচার বানানোর বদলে মডেল সরাসরি ডেটা থেকে দরকারী ফিচারগুলো স্বয়ংক্রিয়ভাবে আবিষ্কার করে। এই চ্যাপ্টার থেকে যদি আপনি শুধু একটি বাক্য মনে রাখতে চান, তবে এটিই মনে রাখুন — এটিই Deep Learning-কে এর আগের সবকিছু থেকে আলাদা করে।
ধরা যাক, ছবি থেকে মানুষের মুখ চেনার জন্য একটি নেটওয়ার্ককে ট্রেন করা হয়েছে। লেয়ারের পর লেয়ার, এটি সাধারণত নিচের মতো কিছু একটা তৈরি করে:
| লেয়ার (Layer) | সাধারণত শেখা ফিচার |
|---|---|
| লেয়ার ১ (ইনপুটের সবচেয়ে কাছের) | সাধারণ এজ (edges), রঙের গ্রেডিয়েন্ট এবং ব্লব |
| লেয়ার ২ | এজগুলোকে মিলিয়ে কার্ভ (curves) এবং কর্নার (corners) তৈরি করা |
| লেয়ার ৩ | অবজেক্টের অংশ — চোখ, নাক, মুখ |
| লেয়ার ৪ (আউটপুটের সবচেয়ে কাছের) | সম্পূর্ণ অবজেক্টের কনসেপ্ট — আস্ত একটি মুখমণ্ডল |
কেউ নেটওয়ার্কটিকে "একটি চোখ" খুঁজতে প্রোগ্রাম করে দেয়নি। লক্ষ লক্ষ উদাহরণের মধ্য দিয়ে নিজের এরর (error) কমানোর জন্য নেটওয়ার্কটি যখন নিজেকে অ্যাডজাস্ট করছিল, তখন এই কনসেপ্টটি স্বয়ংক্রিয়ভাবে তৈরি হয়েছে। ডেপথ (Depth) থাকার আসল লাভ এটাই: আগের লেয়ারটি যা আবিষ্কার করেছে, প্রতিটি নতুন লেয়ার তার ওপর ভিত্তি করে ক্রমান্বয়ে আরও বেশি অ্যাবস্ট্রাক্ট কনসেপ্ট তৈরি করতে পারে — এটি এমন এক ধরনের স্বয়ংক্রিয় কনসেপ্ট-তৈরির প্রক্রিয়া, যা নিজে হাতে কোড করে বানানো প্রায় অসম্ভব।

একটি স্বাভাবিক প্রশ্ন উঠতে পারে: যদি একটিমাত্র হিডেন লেয়ার দিয়েই (Universal Approximation Theorem অনুযায়ী) যেকোনো ফাংশন অ্যাপ্রক্সিমেট করা যায়, তবে একাধিক লেয়ার স্ট্যাক করার দরকার কী? উত্তরটা হলো এফিশিয়েন্সি। থিওরি বলে এটা সম্ভব, কিন্তু কার্যকর করার জন্য একটি অগভীর (shallow) কিন্তু অত্যন্ত চওড়া (wide) নেটওয়ার্কে এমন সূচকীয় (exponential) সংখ্যক হিডেন ইউনিট লাগতে পারে যা বাস্তবে অসম্ভব। বিপরীতে, একটি ডিপ নেটওয়ার্ক একই কাজ অনেক কম মোট প্যারামিটার দিয়ে করতে পারে, কারণ প্রতিটি লেয়ার আগের লেয়ারের শেখা রিপ্রেজেন্টেশনের ওপর ভিত্তি করে কাজ করে — ফলে জটিল প্যাটার্নগুলো ছোট ছোট পুনঃব্যবহারযোগ্য (reusable) টুকরায় ভেঙে শেখা যায়। ঠিক যেমন একটি জটিল প্রোগ্রাম লেখার সময় ছোট ছোট ফাংশন ব্যবহার করলে কোড অনেক বেশি সংক্ষিপ্ত ও কার্যকর হয়, একই যুক্তিতে ডেপথ নেটওয়ার্ককে অনেক বেশি প্যারামিটার-এফিশিয়েন্ট করে তোলে।
| বিষয় | Classical Machine Learning | Deep Learning |
|---|---|---|
| ফিচার ইঞ্জিনিয়ারিং (Feature engineering) | ম্যানুয়াল, যার জন্য ডোমেইন এক্সপার্টিজ লাগে | স্বয়ংক্রিয়, ডেটা থেকে নিজেই শেখে |
| ডেটার প্রয়োজনীয়তা | ছোট ডেটাসেটেও মোটামুটি ভালো কাজ করে | সাধারণত ভালো পারফর্ম করার জন্য বিশাল ডেটাসেট লাগে |
| কম্পিউটেশনাল খরচ | সাধারণত কম | সাধারণত বেশি; জিপিইউ (GPUs) থেকে দারুণ সুবিধা পায় |
| ইন্টারপ্রেটেবিলিটি (Interpretability) | সাধারণত বেশি বোধগম্য (যেমন, decision trees) | সাধারণত কম বোধগম্য ("ব্ল্যাক বক্স") |
| আনস্ট্রাকচার্ড ডেটা (ছবি, অডিও, টেক্সট) | ভারী ফিচার ইঞ্জিনিয়ারিং ছাড়া বেশ সীমিত | স্টেট অফ দ্য আর্ট (State of the art) |
| ছোট, স্ট্রাকচার্ড (ট্যাবুলার) ডেটা | প্রায়ই বেশি ভালো বা সমান পারফর্ম করে | সতর্কতা ছাড়া ট্রি-বেসড (tree-based) মেথডের চেয়ে খারাপ পারফর্ম করতে পারে |
অনেকেই ধরে নেন যে Deep Learning সবসময়ই জেতে। কিন্তু বাস্তবে, ছোট ট্যাবুলার ডেটাসেটের জন্য, ভালোভাবে টিউন করা ট্রি-বেসড মেথড (যেমন gradient boosted trees) প্রায়ই একটি MLP-এর সমান বা তার চেয়ে ভালো পারফর্ম করে। Deep Learning-এর আসল সুবিধা দেখা যায় বিশাল ডেটাসেট এবং আনস্ট্রাকচার্ড ডেটার (যেমন ছবি, অডিও, টেক্সট) ক্ষেত্রে — এমন না যে সব জায়গায় এটি নিজে থেকেই সবচেয়ে ভালো কাজ করবে।
যে তাত্ত্বিক ভিত্তির ওপর ভর করে Neural Network-এর এই আশ্চর্য ক্ষমতার প্রমাণ দেওয়া হয়, তার নাম হলো Universal Approximation Theorem — আপনি নিজেই এই MLP-এর মূল বিষয়গুলো শেখার পর পরের একটি চ্যাপ্টারে এর প্রমাণ ও বিস্তারিত আলোচনা দেখতে পাবেন। সহজ কথায় এটি বলে: এমনকী একটি মাত্র হিডেন লেয়ার থাকা একটি ফিডফরোয়ার্ড (feedforward) নেটওয়ার্কও, যদি তাকে পর্যাপ্ত হিডেন ইউনিট (hidden units) দেওয়া হয়, তবে সে একটি নির্দিষ্ট ইনপুট ডোমেইনের যেকোনো কন্টিনিউয়াস ফাংশনকে (continuous function) আপনার কাঙ্ক্ষিত যেকোনো পরিমাণ নির্ভুলতার সাথে অ্যাপ্রক্সিমেট (approximate) করতে পারবে।
MLP-কে কেন "universal function approximator" বলা হয়, এটিই হলো তার গাণিতিক প্রমাণ বা যৌক্তিকতা। খুব সাধারণ একটি আর্কিটেকচার — ওয়েটেড সাম (weighted sums) এবং নন-লিনিয়ারিটির (nonlinearities) কয়েক স্তরের মিশ্রণ — কেন সম্পূর্ণ সম্পর্কহীন অসংখ্য প্রবলেম সলভ করার ক্ষেত্রে এত কাজের হয়ে ওঠে, তার পেছনের একটা বড় কারণ হলো এটি।
Universal Approximation Theorem শুধু বলে যে একটি উপযুক্ত নেটওয়ার্ক অস্তিত্ব রাখে — এটি বলে না কীভাবে সেই নেটওয়ার্ক খুঁজে পাওয়া যাবে, তার জন্য কতগুলো হিডেন ইউনিট লাগবে, বা কতটা ডেটা প্রয়োজন হবে। বাস্তবে, ঠিক এই তিনটি প্রশ্নের ব্যবহারিক উত্তর খুঁজে বের করার জন্যই ট্রেনিং অ্যালগরিদম (Gradient Descent, Backpropagation), রেগুলারাইজেশন এবং আর্কিটেকচার ডিজাইনের মতো বিষয়গুলো নিয়ে এত গবেষণা হয়েছে। থিওরেমটি সম্ভাবনার প্রমাণ দেয়, বাস্তবায়নের গ্যারান্টি নয়।
Neural Network-এর পেছনের গাণিতিক ধারণাগুলো দশকের পর দশক পুরনো হলেও, Deep Learning প্র্যাকটিক্যালি আধিপত্য বিস্তার করতে শুরু করে ২০০৬ থেকে ২০১২ সালের মধ্যে, যখন তিনটি মূল উপাদান একসাথে পূর্ণতা লাভ করে:
ডেটা (Data)
ইন্টারনেটের প্রসারের ফলে বিশাল আকারের লেবেল করা ডেটাসেট (যেমন ImageNet) তৈরি হয়, যা ওভারফিটিং ছাড়াই ডিপ মডেলগুলোকে ট্রেন করার জন্য খুব প্রয়োজনীয় ছিল।
কম্পিউট (Compute)
GPUs, যা মূলত ভিডিও গেমের গ্রাফিক্সের জন্য তৈরি হয়েছিল, তা আশ্চর্যজনকভাবে Neural Network-এর অসংখ্য ম্যাট্রিক্স মাল্টিপ্লিকেশনের কাজের জন্য দারুণ উপযোগী বলে প্রমাণিত হয়।
অ্যালগরিদম (Algorithms)
উন্নত weight initialization, উন্নত activation functions (যেমন ReLU), এবং উন্নত optimizers (যেমন Adam) মিলে অনেক বেশি ডিপ নেটওয়ার্কগুলোকে নির্ভরযোগ্যভাবে ট্রেন করা সম্ভব করে তোলে।
যখন কোনো Deep Learning মডেল খুব খারাপ পারফর্ম করে, তখন এর সমাধান সাধারণত এই তিনটি বালতির কোনো একটির মধ্যে লুকিয়ে থাকে: ডেটা (পর্যাপ্ত ডেটা নেই বা বেশি নয়েজি), অ্যালগরিদম (কাজের জন্য ভুল আর্কিটেকচার বা ভুল অপ্টিমাইজার নির্বাচন করা), অথবা কম্পিউট (পর্যাপ্ত ট্রেনিংয়ের সময় বা ক্যাপাসিটি নেই)। এই তিন ভাগের কথা মাথায় রাখলে কী ভুল হচ্ছে তা খুব দ্রুত বের করা যায়।
"Deep" শব্দটি কঠোরভাবে ডেটা কতগুলো লেয়ারের ভেতর দিয়ে যায় শুধু তাকেই নির্দেশ করে; বুদ্ধিমত্তার পরিমাণ বা চিন্তার জটিলতার সাথে এর কোনো সম্পর্ক নেই।
যেকোনো প্রবলেমের জন্যই ডিপ নেটওয়ার্ক বেছে নেওয়া, এমনকি এমন ছোট ট্যাবুলার ডেটাসেটেও যেখানে একটি সাধারণ মডেল সমান বা তার চেয়ে বেশি ভালো কাজ করতে পারতো — তা মূলত শুধু কম্পিউট পাওয়ার নষ্ট করে এবং মডেলের ইন্টারপ্রেটেবিলিটি বা বোধগম্যতা কমিয়ে দেয়, যা আসলে কোনো উপকারে আসে না।
থিওরেমটি শুধু বলে একটি উপযুক্ত নেটওয়ার্ক তাত্ত্বিকভাবে অস্তিত্ব রাখে, এটি বলে না যে Gradient Descent দিয়ে সেই নেটওয়ার্ক আদৌ খুঁজে পাওয়া যাবে, বা তার জন্য কতটা ডেটা ও কম্পিউট প্রয়োজন হবে। অস্তিত্ব থাকা আর প্র্যাকটিক্যালি ট্রেনযোগ্য হওয়া — এই দুটো এক জিনিস নয়।
লেয়ার সংখ্যা বাড়ানো মডেলের ক্যাপাসিটি বাড়ায় ঠিকই, কিন্তু তা ভ্যানিশিং গ্রেডিয়েন্টের মতো ট্রেনিং সমস্যাও নিয়ে আসতে পারে, এবং পর্যাপ্ত ডেটা বা রেগুলারাইজেশন ছাড়া ওভারফিটিংয়ের ঝুঁকিও বাড়িয়ে দেয়। ডেপথ একটি হাইপারপ্যারামিটার, যা টাস্ক ও ডেটার পরিমাণ অনুযায়ী সাবধানে বেছে নিতে হয় — এটি এমন কোনো ডায়াল নয় যা শুধু সবসময় বাড়িয়েই যাওয়া উচিত।
গত এক দশকের প্রায় প্রতিটি সাড়াজাগানো AI সিস্টেম — যেমন ইমেজ রেকগনিশন, স্পিচ ট্রান্সক্রিপশন, মেশিন ট্রান্সলেশন, লার্জ ল্যাঙ্গুয়েজ মডেল (LLMs) — সবই হলো Deep Learning সিস্টেম, যা এই স্বয়ংক্রিয়ভাবে শেখা, হায়ারার্কিক্যাল রিপ্রেজেন্টেশনের ধারণার ওপরই তৈরি হয়েছে। Multi-Layer Perceptron হলো সেই জায়গা যেখানে আপনি এই ধারণাটির সবচেয়ে নিখুঁত ও সহজতম রূপ দেখতে পাবেন, আর একারণেই এর চেয়ে বেশি স্পেশালাইজড আর্কিটেকচারে যাওয়ার আগে এখান থেকেই শুরু করাটা সবচেয়ে সঠিক সিদ্ধান্ত।