Chapter 2 of 18
The ladder from rule-based systems to deep networks
আর্টিফিশিয়াল ইন্টেলিজেন্স (Artificial Intelligence), মেশিন লার্নিং (Machine Learning) এবং ডিপ লার্নিং (Deep Learning) — সংবাদপত্রের শিরোনামে এই তিনটি শব্দকে প্রায়ই একে অপরের বিকল্প হিসেবে ব্যবহার করতে দেখা যায়। কিন্তু বাস্তবে এরা একটির ভেতরে আরেকটি গেঁথে থাকা কিছু চমৎকার আইডিয়া বা কনসেপ্ট প্রকাশ করে। এই তিনটি ধারণার মধ্যকার পার্থক্য শুরুতেই পরিষ্কার করে নিলে আপনার জন্য এই কোর্সের পরবর্তী অংশগুলো বোঝা অনেক সহজ হবে। আর LSTM আসার আগে নিউরাল নেটওয়ার্কের আর্কিটেকচারগুলো কেমন ছিল তা জানা হচ্ছে কেন LSTM-এর প্রয়োজন হয়েছিল তা সহজে বোঝার সবচেয়ে দ্রুততম উপায়।
এই তিনটি শব্দকে আপনি রাশিয়ান পুতুলের (Russian dolls/Matryoshka dolls) মতো ভাবতে পারেন, যেখানে একটি পুতুলের ভেতরে আরেকটি পুতুল থাকে। সবচেয়ে বড় পুতুলটি হলো AI: এমন মেশিন বা সিস্টেম তৈরি করার এক বিশাল স্বপ্ন যা মানুষের মতো বুদ্ধিমত্তার সাথে কাজ করতে পারে। এই স্বপ্নের পুতুলের ঠিক ভেতরে খাপ খেয়ে যায় Machine Learning — এটি হলো সেই লক্ষ্যে পৌঁছানোর একটি বিশেষ কৌশল। এখানে প্রতিটি নিয়ম কোড দিয়ে হাত লিখে দেওয়ার বদলে, আমরা মেশিনকে বিভিন্ন উদাহরণ বা ডেটা থেকে নিজে নিজে প্যাটার্ন বা নিয়ম শিখে নেওয়ার সুযোগ করে দিই। আর এই মেশিন লার্নিংয়ের পেটের ভেতরে থাকা সবচেয়ে ছোট পুতুলটি হলো Deep Learning — এটি মূলত এমন কিছু টেকনিকের পরিবার যা মানুষের মস্তিষ্কের নিউরনের আদলে তৈরি অনেকগুলো সাধারণ ও লেয়ারে সাজানো কম্পিউটেশনাল ইউনিটের নেটওয়ার্ক (যাকে আমরা বলি নিউরন) ব্যবহার করে প্যাটার্ন শেখে।
আর্টিফিশিয়াল ইন্টেলিজেন্স (AI)
চূড়ান্ত লক্ষ্য: এমন সিস্টেম তৈরি করা যা মানুষের মতো বুদ্ধিদীপ্ত কাজ করতে পারে — যেমন যুক্তি দেওয়া, উপলব্ধি করা, ভাষা বোঝা ও সিদ্ধান্ত নেওয়া।
মেশিন লার্নিং (ML)
মূল কৌশল: সরাসরি কোনো হার্ডকোড করা নিয়ম না লিখে, লেবেলযুক্ত উদাহরণ বা ডেটা থেকে সরাসরি প্যাটার্ন শেখা এবং সময়ের সাথে সাথে উন্নত হওয়া।
ডিপ লার্নিং (DL)
ব্যবহৃত টেকনিক: অনেকগুলো লেয়ার বিশিষ্ট নিউরাল নেটওয়ার্ক ব্যবহার করে ডেটা থেকে স্বয়ংক্রিয়ভাবে জটিল ও বিমূর্ত রিপ্রেজেন্টেশন বা বৈশিষ্ট্য শিখে নেওয়া।
প্রথাগত মেশিন লার্নিংয়ে (Traditional ML) কোনো মানুষের হাত দিয়ে ফিচার বা বৈশিষ্ট্য ডিজাইন করতে হতো — যেমন: "ছবির গড় পিক্সেল ব্রাইটনেস কত," কিংবা "ইমেইলের সাবজেক্ট লাইনে কয়টি বিস্ময়সূচক চিহ্ন (!) আছে।" কিন্তু ডিপ লার্নিংয়ের সবচেয়ে চমৎকার গুণ হলো, এটি raw ডেটা (raw data) থেকে নিজে নিজেই প্রয়োজনীয় ফিচার খুঁজে বের করতে পারে। আর এই পরিবর্তনের কারণেই টেক্সট, ছবি ও অডিওর মতো জটিল ডেটা নিয়ে কাজ করার জন্য LSTM-এর মতো আর্কিটেকচার তৈরি করা সম্ভব হয়েছে।
একটি নিউরাল নেটওয়ার্ক যত বড়ই হোক না কেন, তার ভিত্তি তৈরি হয় একটি খুব সাধারণ ও পুনরাবৃত্তিমূলক একক (unit) দিয়ে। এর সবচেয়ে আদিম রূপটি হলো পারসেপট্রন (perceptron), যা ১৯৫৮ সালে ফ্রাঙ্ক রোজেনব্ল্যাট (Frank Rosenblatt) প্রথম প্রবর্তন করেছিলেন।
বিষয়টি এভাবে চিন্তা করুন: একজন নিয়োগকারী ম্যানেজার কোনো প্রার্থীর দক্ষতা পরিমাপ করার জন্য কয়েকটি মানদণ্ড (যেমন: অভিজ্ঞতা, টেকনিক্যাল স্কিল, ইন্টারভিউ) দেখছেন। তিনি প্রতিটি মানদণ্ডকে একটি গুরুত্ব বা ওয়েট (weight) দিচ্ছেন, এরপর সেগুলোর ওয়েটেড সাম (weighted sum) বের করছেন এবং মোট যোগফল যদি একটি নির্দিষ্ট সীমার (threshold) চেয়ে বেশি হয় তবেই প্রার্থীকে চাকরি দেওয়ার অফার করছেন। পারসেপট্রন ঠিক এই কাজটিই করে।
এখানে: হলো -তম ইনপুট ফিচার, হলো লার্নড ওয়েট বা গুরুত্ব (ইনপুটটি কতটা গুরুত্বপূর্ণ), হলো বায়াস (bias - যা সিদ্ধান্তের থ্রেশহোল্ডকে এদিক-ওদিক সরাতে সাহায্য করে), হলো প্রি-অ্যাক্টিভেশন বা ওয়েটেড সাম, এবং হলো অ্যাক্টিভেশন ফাংশন (activation function) যা নেটওয়ার্কের ভেতর নন-লিনিয়ারিটি (non-linearity) নিয়ে আসে।
একটি ছোট গাণিতিক উদাহরণ: ধরা যাক ইনপুট , ; ওয়েট , ; বায়াস :
এবার যদি আমরা এর ওপর সিগময়েড অ্যাক্টিভেশন ফাংশন প্রয়োগ করি, তবে আউটপুট পাবো — অর্থাৎ পারসেপট্রনের ভোটটি "না"-এর দিকেই বেশি ঝুঁকছে।
একটি একক পারসেপট্রন কেবল একটি সরল সিদ্ধান্ত রেখা (decision boundary) আঁকতে পারে — দ্বিমাত্রিক বা 2D তলে একটি সরলরেখা, ত্রিমাত্রিক বা 3D তলে একটি সমতল (plane), কিংবা আরও উচ্চ মাত্রায় একটি হাইপারপ্লেন (hyperplane)। এর অর্থ হলো, এটি খুব সাধারণ কিছু প্যাটার্নও শিখতে পারে না — যার মধ্যে সবচেয়ে বিখ্যাত উদাহরণ হলো XOR লজিক গেট (যা কেবল তখনই সত্য বা ১ হয় যখন দুটি ইনপুটের মধ্যে ঠিক একটি ইনপুট সত্য বা ১ হয়)। কোনো একক সোজা রেখা টেনে XOR-এর ক্লাস দুটিকে আলাদা করা সম্ভব নয়। ১৯৬৯ সালে মারভিন মিনস্কি ও সেমুর পেপার্ট তাদের বইয়ে পারসেপট্রনের এই সীমাবদ্ধতা তুলে ধরেন, যার ফলে নিউরাল নেটওয়ার্কের গবেষণা প্রায় এক দশকের জন্য স্থবির হয়ে পড়েছিল।
একটিমাত্র পারসেপট্রন হয়তো XOR শিখতে পারে না, কিন্তু পর পর সাজানো অনেকগুলো পারসেপট্রন বা একটি Multi-Layer Perceptron (MLP) সহজেই এটি সমাধান করতে পারে। সমাধান কিন্তু একটি স্মার্ট সিঙ্গেল নিউরন নয়, সমাধান হলো লেয়ারের পর লেয়ার যুক্ত করা।
একটি MLP নিউরনগুলোকে লেয়ারে লেয়ারে সাজায়: একটি ইনপুট লেয়ার, এক বা একাধিক হিডেন লেয়ার (hidden layer) এবং একটি আউটপুট লেয়ার। এক লেয়ারের প্রতিটি নিউরন পরের লেয়ারের প্রতিটি নিউরনের সাথে সরাসরি যুক্ত থাকে — এই কারণে এই লেয়ারগুলোকে fully connected বা dense লেয়ার বলা হয়।
এখানে মূল ম্যাজিকটি হলো: যদি প্রতিটি লেয়ার কেবল সরল বা লিনিয়ার অ্যাক্টিভেশন ফাংশন ব্যবহার করতো, তবে একের পর এক লেয়ার সাজানো সম্পূর্ণ অর্থহীন হয়ে যেতো — কারণ লিনিয়ার ফাংশনের চেইন শেষ পর্যন্ত একটি মাত্র লিনিয়ার ফাংশনেই রূপ নেয়। প্রতিটি লেয়ারের পরে একটি নন-লিনিয়ার (nonlinear) অ্যাক্টিভেশন ফাংশন (যেমন: sigmoid, tanh, ReLU) থাকার কারণেই একটি MLP যেকোনো জটিল ও বাঁকানো সিদ্ধান্ত রেখা (curved decision boundaries) তৈরি করতে পারে।
পর্যাপ্ত চওড়া বা নিউরন বিশিষ্ট একটি মাত্র হিডেন লেয়ার সহ MLP নীতিগতভাবে যেকোনো কন্টিনিউয়াস ফাংশনকে যেকোনো নির্ভুলতার সাথে অ্যাপ্রক্সিমেট করতে পারে। তবে বাস্তবে, সেই "পর্যাপ্ত চওড়া" লেয়ারটি তৈরি করা অসম্ভব রকম বড় হতে পারে — আর একারণেই আমরা একটি বিশাল চওড়া লেয়ারের বদলে অনেকগুলো লেয়ার বিশিষ্ট গভীর বা ডিপ নেটওয়ার্ক (deep networks) ব্যবহার করতে বেশি পছন্দ করি। ডিপ নেটওয়ার্কগুলো অনেক বেশি দক্ষতার সাথে জটিল ফাংশন রিপ্রেজেন্ট করতে পারে।
একটি MLP-এর ইনপুট নিউরনের সংখ্যা নির্দিষ্ট বা ফিক্সড (fixed) থাকে। আপনি একে কোনো বাক্য দিলে আপনাকে আগে থেকেই ঠিক করতে হবে যে বাক্যটিতে ঠিক কয়টি শব্দ থাকবে — কিন্তু বাস্তব জীবনে বাক্যের দৈর্ঘ্য একেক সময় একেক রকম হয়। এর চেয়েও বড় সমস্যা হলো, MLP প্রতিটি ইনপুট পজিশনকে সম্পূর্ণ স্বাধীন বা আলাদা বলে মনে করে: এর মধ্যে এমন কোনো বিল্ট-ইন মেকানিজম বা ধারণা নেই যা বুঝবে যে ৫ নম্বর শব্দটি ৪ নম্বর শব্দটির পরে এসেছে। আপনি যদি একটি বাক্যের শব্দগুলোকে এলোমেলো করে দেন, তবে MLP-এর আর্কিটেকচারের কাছে মূল বাক্য ও এলোমেলো বাক্যের কোনো তফাত থাকবে না।
এই অমিল — ফিক্সড সাইজ এবং শব্দের ক্রম বা অর্ডারের ধারণা না থাকা — ঠিক এই অভাবগুলো পূরণ করার জন্যই প্রথমে RNN এবং পরবর্তীতে LSTM-এর জন্ম হয়েছিল।
একটি কনভোল্যুশনাল নিউরাল নেটওয়ার্ক (Convolutional Neural Network - CNN) মূলত গ্রিড-আকারের ডেটা, যেমন ছবির (images) জন্য ডিজাইন করা হয়েছে। ইনপুটের প্রতিটির সাথে প্রতিটি নিউরনকে যুক্ত করার বদলে, CNN ইনপুটের ওপর দিয়ে কিছু ছোট ছোট লার্নড ফিল্টার (learned filters) স্লাইড বা স্ক্রল করায়। এটি স্থানীয় প্যাটার্ন (যেমন: ছবির কিনারা, টেক্সচার) শনাক্ত করে, যা পরবর্তীতে গভীর লেয়ারগুলোতে গিয়ে জটিল প্যাটার্ন (যেমন: জ্যামিতিক আকৃতি, কোনো বস্তু বা অবজেক্ট) তৈরিতে সাহায্য করে।
CNN ফিল্টারকে একটি ছোট স্টেনসিল বা ছাঁচের মতো ভাবুন যা আপনি ছবির ওপর স্লাইড করছেন এবং প্রতিবার জিজ্ঞেস করছেন "এই অংশটি কি কোনো কিনারা বা এজ-এর মতো দেখতে?" এটি সব জায়গায় একই ছাঁচ বারবার ব্যবহার করে, যার কারণে একটি সমমানের ছবির জন্য CNN-এর প্যারামিটার সংখ্যা একটি fully connected নেটওয়ার্কের চেয়ে অনেক কম হয়।
১-মাত্রিক বা 1-D কনভোল্যুশন সিকোয়েন্সিয়াল ডেটার ওপরেও প্রয়োগ করা যায় এবং এটি বেশ দ্রুত কাজ করে। তবে সাধারণ একটি CNN ফিল্টার কেবল একটি নির্দিষ্ট সাইজের লোকাল উইন্ডো (fixed-size local window) দেখতে পারে। এর পক্ষে এমন কোনো প্যাটার্ন বা সম্পর্ক সহজে ধরা সম্ভব নয় যা ফিল্টারের চওড়ার চেয়ে অনেক দূরে অবস্থিত — উদাহরণস্বরূপ, একটি বিশাল অনুচ্ছেদের শেষে থাকা কোনো প্রোনাউনকে (যেমন: 'সে') একদম শুরুতে থাকা নাউনের (যেমন: 'রহিম') সাথে লিংক বা যুক্ত করার জন্য আমাদের সম্পূর্ণ ভিন্ন কিছু দরকার। RNN পরিবারের মডেলগুলো (যার মধ্যে LSTM অন্যতম) ঠিক এই কাজটিই করে — এরা যেকোনো দৈর্ঘ্যের সিকোয়েন্সের মধ্য দিয়ে তথ্যকে অনেক দূর পর্যন্ত বয়ে নিয়ে যেতে পারে।
| আর্কিটেকচার | মূল শক্তি | সিকোয়েন্স ডেটার জন্য দুর্বলতা |
|---|---|---|
| ফিডফরোয়ার্ড (MLP) | ফিক্সড সাইজের ইনপুটের জন্য ইউনিভার্সাল ফাংশন অ্যাপ্রক্সিমেটর | ইনপুট সাইজ নির্দিষ্ট হতে হয়, সিকোয়েন্সের ক্রম বা অর্ডারের ধারণা থাকে না |
| CNN | শেয়ার্ড ফিল্টারের মাধ্যমে স্থানীয় প্যাটার্ন দ্রুত ও দক্ষতার সাথে শনাক্ত করে | লোকাল উইন্ডো নির্দিষ্ট; অনেক দূরবর্তী তথ্যের মধ্যকার সম্পর্ক সহজে ধরতে পারে না |
| RNN / LSTM | ভিন্ন ভিন্ন দৈর্ঘ্যের ও ক্রমানুসারে সাজানো সিকোয়েন্স চমৎকারভাবে হ্যান্ডেল করতে পারে | এর নিজস্ব কিছু সীমাবদ্ধতা আছে যা আমরা LSTM চ্যাপ্টারে দেখব |
পারসেপট্রন থেকে শুরু করে MLP এবং এরপর CNN-এর বিবর্তন কেবল ইতিহাস নয় — এটি আমাদের স্পষ্টভাবে বুঝিয়ে দেয় যে কেন এর পরের প্রতিটি নতুন আর্কিটেকচার তৈরি করার প্রয়োজন হয়েছিল। আপনি যখন একটি LSTM মডেল দেখবেন, তখন আপনি নিজেই বুঝতে পারবেন এটি ঠিক কোন সমস্যাটির সমাধান করছে এবং এর পূর্ববর্তী বিকল্পগুলো কেন সেখানে অকার্যকর ছিল।