Chapter 2 of 25
Teaching computers by example instead of by rule
চলুন একটি মজার পরীক্ষার কথা কল্পনা করা যাক: শুধুমাত্র if/else স্টেটমেন্ট ব্যবহার করে এমন একটি প্রোগ্রাম লেখার চেষ্টা করুন, যা আসল ইমেইল থেকে স্প্যাম (spam) ইমেইলগুলোকে নিখুঁতভাবে আলাদা করতে পারে। আপনার প্রথম ভার্সন হয়তো "lottery" বা "free money" এর মতো শব্দগুলো চেক করবে। এটা দারুণ কাজ করবে — বড়জোর এক সপ্তাহের জন্য। তারপর স্প্যামাররা তাদের ভাষা পাল্টাবে, ইচ্ছে করে শব্দ ভুল লিখবে, অথবা ইমেজের ভেতরে টেক্সট লুকিয়ে রাখবে, আর আপনার লেখা রুলবুক বা নিয়মকানুন একদম অকেজো হয়ে যাবে। আপনি সেটা আবার ঠিক করবেন। তারা আবার নতুন পথ খুঁজবে। আপনি এমন এক অসম প্রতিযোগিতায় (arms race) জড়িয়ে পড়বেন যেখানে শুধু আরও বেশি রুল লিখে জেতা সম্ভব নয়। কারণ আপনি যে প্যাটার্নটা খুঁজছেন, তা আসলে কোনো নির্দিষ্ট নিয়ম নয় — এটি একটি অস্পষ্ট, পরিবর্তনশীল স্ট্যাটিস্টিক্যাল সিগনেচার, যাকে কাছাকাছি নিয়ে আসতে হলেও হাজার হাজার হাতে-লেখা নিয়মের ব্যতিক্রম (exceptions) যোগ করতে হবে, এবং তার পরেও এটি কখনোই সম্পূর্ণ হবে না।
Machine Learning-এর অস্তিত্বই হলো আপনাকে এই অন্তহীন প্রতিযোগিতা থেকে পুরোপুরি মুক্তি দেওয়া। নিজে হাতে নিয়মগুলো লেখার বদলে, আপনি কম্পিউটারকে হাজার হাজার লেবেল করা উদাহরণ দেখান — "এই ইমেইলটি স্প্যাম, এটি স্প্যাম নয়" — এবং একটি অ্যালগরিদমকে নিজে থেকেই প্যাটার্নটা আবিষ্কার করতে দিন। যখন স্প্যামের ধরন বদলাবে, আপনাকে আর নতুন করে প্রোগ্রাম লিখতে হবে পণ্ডিতদের মতো; আপনি শুধু তাকে নতুন কিছু উদাহরণ বা ডেটা খাইয়ে দেবেন।
কল্পনা করুন এমন একটি হাসপাতালের কথা, যারা প্রেডিক্ট (predict) বা ভবিষ্যদ্বাণী করতে চায় যে কোন রোগীরা হাসপাতাল থেকে রিলিজ হওয়ার ৩০ দিনের মধ্যে পুনরায় ভর্তি হওয়ার উচ্চ ঝুঁকিতে আছেন। এখানে "যদি বয়স > ৬৫ হয় এবং রোগ = X হয়, তবে পুনরায় ভর্তি করো" — এমন কোনো পরিষ্কার নিয়ম নেই যা দিয়ে বাস্তবতাকে মাপা যায়। পুনরায় ভর্তির ঝুঁকি ডজন ডজন একে অপরের সাথে সম্পর্কিত বিষয়ের ওপর নির্ভর করে: ওষুধের ইতিহাস, ল্যাব রেজাল্ট, সামাজিক অবস্থা, আগে কতবার ভর্তি হয়েছেন ইত্যাদি। এসব বিষয়ের এমন সব মিশ্রণ থাকে যা কোনো মানুষের পক্ষে সুস্পষ্ট নিয়ম হিসেবে লিখে রাখা সম্ভব নয়।
কিন্তু হাসপাতালের কাছে যেটা আছে তা হলো বছরের পর বছর ধরে জমিয়ে রাখা পুরোনো রেকর্ড: হাজার হাজার রোগীর ডেটা, যাদের প্রত্যেকের ভর্তির তথ্য এবং তারা পুনরায় ভর্তি হয়েছিলেন কি না (জানা আউটপুট) তার রেকর্ড রয়েছে। একটি Machine Learning মডেল এই রেকর্ডগুলো তন্নতন্ন করে খুঁজতে পারে, আবিষ্কার করতে পারে ফিচারগুলোর (features) কোন কম্বিনেশন আসলেই পুনরায় ভর্তির ঝুঁকি প্রেডিক্ট করতে পারে, এবং সেই আবিষ্কৃত প্যাটার্নটি হাসপাতালে আসা প্রতিটি নতুন রোগীর ওপর প্রয়োগ করতে পারে — কাউকে কোনো রুল বা নিয়ম লিখতে হয়নি, ডেটাই মূলত নিয়মটি তৈরি করে দিয়েছে।
একই ধরনের চিত্র দেখা যায় ই-কমার্সেও। একটি অনলাইন স্টোর চাইতে পারে জানতে কোন গ্রাহক আগামী মাসে কেনাকাটা বন্ধ করে দিতে পারেন (churn prediction)। কোনো একজন মানুষ কি হাতে হাতে এমন একটি নিয়ম লিখতে পারবেন যা নির্ভুলভাবে ব্রাউজিং হিস্ট্রি, কেনাকাটার ফ্রিকোয়েন্সি, কাস্টমার সার্ভিসের সাথে যোগাযোগের রেকর্ড এবং আরও ডজনখানেক সিগন্যাল একত্র করে সঠিক সিদ্ধান্ত দেবে? বাস্তবে না — কিন্তু একটি Machine Learning মডেল হাজার হাজার অতীত গ্রাহকের রেকর্ড দেখে ঠিক এই কাজটাই করতে পারে, এবং সময়ের সাথে সাথে নতুন ডেটা আসলে নিজে থেকেই তার প্যাটার্ন আপডেট করে নিতে পারে।
এখানে নতুন কী হচ্ছে, তা বোঝার সবচেয়ে সহজ উপায় হলো এটিকে সাধারণ প্রোগ্রামিং কীভাবে কাজ করে তার সাথে তুলনা করা।
ঐতিহ্যবাহী প্রোগ্রামিং (Traditional programming)
আপনি রুলস (Rules) + ডেটা (Data) দেন, কম্পিউটার আউটপুট (Output) তৈরি করে। একজন মানুষ নিজে হাতে লজিক লেখেন।
মেশিন লার্নিং (Machine learning)
আপনি ডেটা (Data) + আউটপুট (Output বা সঠিক উত্তর) দেন, এবং কম্পিউটার রুলস (Rules) তৈরি করে। অ্যালগরিদম নিজে থেকেই লজিক আবিষ্কার করে।
এই যে পাল্টে যাওয়া — কম্পিউটারকে লজিক ধরিয়ে দেওয়ার বদলে সঠিক উত্তরের উদাহরণগুলো ধরিয়ে দেওয়া — এটাই হলো পুরো বিষয়ের মূল ধারণা। Machine Learning-এর বাকি সবকিছু আসলে এই পরিবর্তনটাকে কীভাবে নিখুঁতভাবে কাজ করানো যায়, সেই বিষয়ক বিস্তারিত আলোচনা ছাড়া আর কিছুই নয়।
একটি কম্পিউটার প্রোগ্রামকে কোনো টাস্ক এবং পারফরম্যান্স পরিমাপ -এর সাপেক্ষে অভিজ্ঞতা থেকে শিখছে (learn) বলা যায়, যদি টাস্কে তার পারফরম্যান্স, যা দিয়ে পরিমাপ করা হয়, অভিজ্ঞতা -এর সাথে সাথে উন্নত হয়।
এই সংজ্ঞাটি দেখতে একটু অ্যাবস্ট্রাক্ট বা তাত্ত্বিক মনে হতে পারে, কিন্তু এটি সত্যিই খুব কাজের। কারণ এটি কোনো কিছু তৈরি করার আগে আপনাকে তিনটি বিষয় পরিষ্কার করতে বাধ্য করে: টাস্কটি আসলে কী ( — এটি কি স্প্যাম ডিটেকশন? নাকি রি-অ্যাডমিশন প্রেডিকশন?), সিস্টেমটি কোন ডেটা থেকে শিখবে ( — এক দশকের হাসপাতালের রেকর্ড? নাকি এক বছরের লেবেল করা ইমেইল?), এবং এটি আসলেই কাজ করছে কি না তা আপনি কীভাবে পরিমাপ করবেন ( — অ্যাকুরেসি? নাকি আরও সূক্ষ্ম কিছু?)। এই তিনটি প্রশ্নের যেকোনো একটি বাদ দেওয়া মানেই হলো ML প্রজেক্ট শুরু হওয়ার আগেই ব্যর্থ হওয়ার একটি সাধারণ পথ তৈরি করা।
উদাহরণস্বরূপ, স্প্যাম ডিটেকশনের ক্ষেত্রে: হলো "একটি ইমেইলকে স্প্যাম বা স্প্যাম-নয় হিসেবে ক্লাসিফাই করা", হলো "হাজার হাজার লেবেল করা পুরনো ইমেইল", এবং হলো "লেবেল না-দেখা নতুন ইমেইলে সঠিক ক্লাসিফিকেশনের শতাংশ (accuracy)"। এই তিনটি জিনিস একবার স্পষ্টভাবে লিখে ফেললে, বাকি পুরো প্রজেক্টটাই মূলত হয়ে দাঁড়ায় -কে সর্বোচ্চ করার একটি ইঞ্জিনিয়ারিং সমস্যা — আর এই কোর্সের বাকি সবকিছুই মূলত এই একটি অপ্টিমাইজেশন সমস্যাকেই বিভিন্নভাবে সমাধান করার চেষ্টা।
সব লার্নিং প্রবলেম দেখতে এক রকম হয় না। এদেরকে সাধারণত তিনটি বড় পরিবারে ভাগ করা যায়।
| প্রকারভেদ (Type) | বিবরণ | উদাহরণ |
|---|---|---|
| Supervised Learning | ইনপুট থেকে জানা ও লেবেল করা আউটপুটের মধ্যে একটি ম্যাপিং (mapping) শেখে। | বাড়ির দাম প্রেডিক্ট করা (regression); ইমেইলকে স্প্যাম বা স্প্যাম নয় হিসেবে ক্লাসিফাই করা (classification)। |
| Unsupervised Learning | এমন ডেটার ভেতরে লুকিয়ে থাকা স্ট্রাকচার বা গঠন খুঁজে বের করে যার কোনো লেবেল নেই। | কেনার অভ্যাসের ওপর ভিত্তি করে কাস্টমারদের বিভিন্ন সেগমেন্টে ভাগ করা; ডেটার ডাইমেনশনালিটি বা মাত্রা কমানো। |
| Reinforcement Learning | একটি এজেন্ট কোনো পরিবেশ (environment) থেকে রিওয়ার্ড (পুরস্কার) বা পেনাল্টি (শাস্তি) পাওয়ার মাধ্যমে ক্রমান্বয়ে সিদ্ধান্ত নেওয়া শেখে। | কোনো গেম খেলার জন্য বা কোনো রোবটকে নিয়ন্ত্রণ করার জন্য একটি এজেন্টকে ট্রেন করানো। |
Multi-Layer Perceptron (MLP), যা আপনি এই পুরো কোর্স জুড়ে তৈরি করবেন, মূলত একটি সাধারণ-উদ্দেশ্যে ব্যবহৃত ফাংশন অ্যাপ্রক্সিমেটর (function approximator), এবং এটি সবচেয়ে বেশি দেখা যায় Supervised Learning ফ্রেমওয়ার্কের ভেতরে — রিগ্রেশন এবং ক্লাসিফিকেশন উভয়ের জন্যই। তবে এটিকে "শুধুমাত্র Supervised Learning-এর জন্য" ভেবে সরিয়ে রাখবেন না: MLP-এর মতো কম্পোনেন্টগুলো Unsupervised আর্কিটেকচারের (যেমন autoencoders) ভেতরে এবং Reinforcement Learning সিস্টেমের (ভ্যালু ফাংশন বা পলিসি অ্যাপ্রক্সিমেট করতে) ভেতরেও দেখা যায়। আপনি যে গণিত শিখতে যাচ্ছেন তা যেকোনো নির্দিষ্ট ক্যাটাগরির চেয়েও বেশি জায়গায় ব্যবহার করা যায়।
Supervised Learning-এ, আপনাকে সংখ্যক ইনপুট-আউটপুট জোড়ার একটি ট্রেনিং ডেটাসেট দেওয়া হয়:
যেখানে হলো নম্বর উদাহরণের জন্য ফিচার ভেক্টর (feature vector), এবং হলো তার জানা লেবেল (label)। লক্ষ্য হলো এমন একটি ফাংশন শেখা — একটি MLP-এর জন্য, হলো এর সমস্ত weights এবং biases-এর শর্টহ্যান্ড, যেগুলোর সাথে আপনি পরের কয়েকটি চ্যাপ্টারে ভালোভাবে পরিচিত হবেন — যাতে প্রতিটি ট্রেনিং উদাহরণের জন্য হয়, এবং, সবচেয়ে গুরুত্বপূর্ণ বিষয় হলো, যেন এমন সম্পূর্ণ নতুন ইনপুটেও ভালোভাবে কাজ করে যা সে ট্রেনিংয়ের সময় কখনোই দেখেনি। প্রথম অংশটি ঠিক করা বেশ সহজ। দ্বিতীয় অংশটি ঠিক করাই হলো এই কোর্সের মূল আলোচ্য বিষয়।
বাস্তব দুনিয়ায় প্রায়ই এমন হয় যে প্রচুর raw ডেটা হাতে আছে কিন্তু লেবেল করা ডেটা খুবই সীমিত — লেবেলিং প্রায়ই ব্যয়বহুল এবং সময়সাপেক্ষ (যেমন একজন ডাক্তারকে দিয়ে হাজার হাজার এক্স-রে লেবেল করানো)। Semi-supervised learning অল্প কিছু লেবেল করা ডেটা এবং প্রচুর লেবেল-না-করা ডেটা একসাথে ব্যবহার করে। আরও সাম্প্রতিক একটি ধারণা হলো self-supervised learning, যেখানে ডেটার ভেতর থেকেই কৃত্রিমভাবে লেবেল তৈরি করা হয় — যেমন একটি বাক্যের কিছু শব্দ লুকিয়ে রেখে মডেলকে সেগুলো অনুমান করতে বলা। বড় বড় Language Model মূলত এই self-supervised পদ্ধতিতেই প্রাথমিকভাবে ট্রেন হয়। এই কোর্সে আমরা মূলত সরাসরি supervised learning-এর ওপর ফোকাস করব, কারণ MLP-এর মূল গাণিতিক কাঠামো বোঝার জন্য এটিই সবচেয়ে পরিষ্কার পথ, তবে এই সম্পর্কিত ধারণাগুলো জানা থাকা ভালো, কারণ একই MLP বিল্ডিং ব্লক এই সব পদ্ধতিতেই ব্যবহৃত হয়।
একটি feature বা ফিচার হলো পরিমাপযোগ্য ইনপুট প্রপার্টি (যেমন- একটি বাড়ির স্কয়ার ফুটেজ, একটি ইমেইলে বিস্ময়বোধক চিহ্নের সংখ্যা)। একটি label বা লেবেল হলো সেই জিনিস যা আপনি প্রেডিক্ট বা অনুমান করার চেষ্টা করছেন (যেমন- বিক্রয় মূল্য, স্প্যাম কি না)। ঐতিহাসিকভাবে, মডেলকে কোন ফিচারগুলো দেওয়া হবে তা নির্ধারণ করা — যাকে বলা হয় feature engineering — Machine Learning-এর অন্যতম পরিশ্রমের কাজ ছিল, যার জন্য গভীরভাবে ডোমেইন এক্সপার্টিজ বা বিষয়ভিত্তিক জ্ঞানের প্রয়োজন হতো। Deep Learning-এর অন্যতম বড় সুবিধা হলো (যা পরের চ্যাপ্টারে বিস্তারিত আলোচনা করা হয়েছে) এটি সরাসরি raw ডেটা থেকে দরকারি ফিচারগুলো শিখে নিতে পারে, যা মানুষের ওই ম্যানুয়াল কাজ অনেক কমিয়ে দেয়।
একটি উদাহরণ দিয়ে স্পষ্ট করা যাক: ধরুন আপনি একটি বাড়ির দাম প্রেডিক্ট করতে চান। এখানে ফিচার হতে পারে বাড়ির স্কয়ার ফুটেজ, বেডরুমের সংখ্যা, এলাকার গড় আয়, স্কুল থেকে দূরত্ব — এই প্রতিটি সংখ্যা মিলে তৈরি হয় একটি ফিচার ভেক্টর , আর লেবেল হলো বাড়ির আসল বিক্রয়মূল্য। ভালো ফিচার নির্বাচন একটি মডেলের সাফল্যে বিশাল ভূমিকা রাখে: যদি আপনি এমন কোনো ফিচার বাদ দেন যা আসলে দামের সাথে সম্পর্কিত (যেমন এলাকার ক্রাইম রেট), তবে মডেল যতই জটিল হোক না কেন, সে কখনোই সেই তথ্য ছাড়া নির্ভুল প্রেডিকশন দিতে পারবে না — এই সীমাবদ্ধতাকে বলা হয় information bottleneck। উল্টোদিকে, অপ্রাসঙ্গিক ফিচার যোগ করলে তা মডেলে অতিরিক্ত নয়েজ যোগ করে এবং ওভারফিটিংয়ের ঝুঁকি বাড়িয়ে দেয়।
একটি ডেটাসেটকে সাধারণত তিনটি আলাদা উপসেটে (subsets) ভাগ করা হয়: training set (মডেলের প্যারামিটারগুলো ফিট করার জন্য ব্যবহৃত হয়), validation set (হাইপারপ্যারামিটার টিউন করার জন্য এবং ডেভেলপমেন্টের সময় জেনারেলাইজেশন মনিটর করার জন্য ব্যবহৃত হয়), এবং test set (একেবারে শেষে, শুধুমাত্র একবার ব্যবহৃত হয়, নতুন ডেটায় মডেলটির পারফরম্যান্সের একটি সৎ ও নিরপেক্ষ অনুমান পাওয়ার জন্য)।
সহজ ভাষায়: ট্রেনিং সেটকে এমন একটি পাঠ্যবই হিসেবে ভাবুন যা থেকে আপনি পড়াশোনা করেন, ভ্যালিডেশন সেটকে প্র্যাকটিস এক্সাম বা মক টেস্ট হিসেবে ভাবুন যা দিয়ে আপনি বোঝেন আপনার আরও কী পড়া উচিত, আর টেস্ট সেটকে একদম আসল ফাইনাল পরীক্ষা হিসেবে ভাবুন — যে পরীক্ষা আপনি মাত্র একবারই দিতে পারবেন, এবং আগে থেকে এর প্রশ্ন কখনোই দেখতে পাবেন না।
বিগিনারদের একটি খুব সাধারণ ভুল হলো টেস্ট-সেটের পারফরম্যান্স দেখে হাইপারপ্যারামিটার পরিবর্তন করা। এটি করলে টেস্ট সেট থেকে তথ্য চুপিসারে আপনার মডেল-সিলেকশন প্রক্রিয়ায় ঢুকে যায় (leak), এবং আপনি যে "চূড়ান্ত" অ্যাকুরেসি রিপোর্ট করেন তা বাস্তবে অতিরিক্ত আশাবাদী (optimistic) হয়ে যায় — এটি আর প্রকৃত অর্থে অদেখা ডেটার ওপর মডেলটি কেমন কাজ করবে তার পরিমাপ থাকে না। টেস্ট সেটটিকে একেবারে শেষ ধাপের জন্য সরিয়ে রাখুন, এবং এটি মাত্র একবারই ব্যবহার করুন।
যদি ডেটাসেট ছোট হয়, তবে একটিমাত্র ফিক্সড ভ্যালিডেশন সেট আলাদা করে রাখা বিলাসিতা হয়ে দাঁড়াতে পারে — কারণ তাতে ট্রেনিংয়ের জন্য কম ডেটা থাকে, আবার ভ্যালিডেশন স্কোরও একটিমাত্র ছোট সাবসেটের ওপর নির্ভর করে অস্থির হয়ে যেতে পারে। K-fold cross-validation-এ ডেটাকে সংখ্যক সমান ভাগে (folds) ভাগ করা হয়; প্রতিবার একটি ভাগকে ভ্যালিডেশন হিসেবে রেখে বাকি ভাগে মডেল ট্রেন করা হয়, এবং এই প্রক্রিয়া বার পুনরাবৃত্তি করা হয় যতক্ষণ না প্রতিটি ভাগ একবার করে ভ্যালিডেশন সেট হিসেবে ব্যবহৃত হয়। এরপর টি স্কোরের গড় নেওয়া হয়, যা একটি অনেক বেশি স্থিতিশীল ও নির্ভরযোগ্য পারফরম্যান্স অনুমান দেয়। বড় বড় Neural Network-এর ক্ষেত্রে (যেমন এই কোর্সে আপনি যা তৈরি করবেন), ট্রেনিং খরচ বেশি হওয়ায় একটিমাত্র ভ্যালিডেশন স্প্লিট ব্যবহার করাই বেশি প্রচলিত, কিন্তু ছোট ডেটাসেট বা ক্লাসিক্যাল মডেলের ক্ষেত্রে K-fold cross-validation একটি অত্যন্ত গুরুত্বপূর্ণ টুল।
এই দুটি ফেইলিউর মোড (failure modes) পুরো কোর্স জুড়েই আপনাকে তাড়া করে বেড়াবে, তাই এখনই এদের সম্পর্কে পরিষ্কার ধারণা নিয়ে রাখাটা খুব জরুরি।
Underfitting তখন ঘটে যখন একটি মডেল ডেটার আসল প্যাটার্নটি ধরার জন্য বড্ড বেশি সাধারণ বা সরল হয় — এটি ট্রেনিং সেট এবং নতুন ডেটা উভয় ক্ষেত্রেই খারাপ পারফর্ম করে। Overfitting তখন ঘটে যখন ট্রেনিং ডেটার পরিমাণের তুলনায় একটি মডেল অনেক বেশি জটিল হয়ে যায় — এটি ট্রেনিং সেটের নির্দিষ্ট নয়েজ বা ছোটখাটো অদ্ভুত বিষয়গুলোও মুখস্থ করতে শুরু করে, যার ফলে ট্রেনিং পারফরম্যান্স চমৎকার হলেও নতুন যেকোনো ডেটায় এটি খুব খারাপ পারফর্ম করে।

যেখানে: Bias পরিমাপ করে মডেলের গড় প্রেডিকশন আসল ভ্যালু থেকে কতটা দূরে আছে — এটি খুব সাধারণ অনুমান থেকে আসা সিস্টেম্যাটিক এরর (systematic error)। Variance পরিমাপ করে আপনি যদি মডেলটিকে ডেটার একটি ভিন্ন স্যাম্পলের ওপর ট্রেন করতেন তবে মডেলের প্রেডিকশন কতটা এদিক-ওদিক হতো — অর্থাৎ আপনি যে নির্দিষ্ট ট্রেনিং সেটটি পেয়েছেন তার প্রতি মডেলের সেনসিটিভিটি বা সংবেদনশীলতা। হলো ডেটার নিজের ভেতরের এমন নয়েজ যা কমানো সম্ভব নয়, এবং কোনো মডেল যতই ভালো হোক না কেন, সে এটি দূর করতে পারবে না।
সহজ ভাষায়: Underfitting হলো হাই-বায়াস (high-bias) এবং লো-ভ্যারিয়েন্স (low-variance) অবস্থা — মডেলটি এতটা নমনীয় নয় যে কিছু ঠিকমতো ফিট করবে, তবে অন্তত সে ব্যাপারে সে ধারাবাহিক। Overfitting হলো লো-বায়াস (low-bias) এবং হাই-ভ্যারিয়েন্স (high-variance) অবস্থা — মডেলটি এতটা নমনীয় যে সে তার ট্রেনিং সেট নিখুঁতভাবে ফিট করে ফেলে, কিন্তু আলাদা আলাদা ট্রেনিং সেটে গেলে মারাত্মক অস্থিতিশীল হয়ে পড়ে। গুড জেনারেলাইজেশন (Good generalization) বা ভালো পারফরম্যান্স এই দুটোর মাঝখানের উপত্যকায় থাকে, এবং এই কোর্সের পরের দিকে আপনি যত রেগুলারাইজেশন টেকনিক শিখবেন, তার সবই মূলত মডেলকে সেই উপত্যকার দিকে ঠেলে দেওয়ার একেকটি টুল বা হাতিয়ার।
ডেটা কালেকশন (Data Collection)
টাস্কের সাথে প্রাসঙ্গিক raw ডেটা সংগ্রহ করা।
ডেটা প্রিপ্রসেসিং (Data Preprocessing)
raw ডেটাকে ক্লিন করা, নরমালাইজ করা এবং ব্যবহারযোগ্য ফর্মে রূপান্তর করা।
Train / Val / Test ভাগ করা
ডেটাকে এমনভাবে ভাগ করা যাতে ট্রেনিং, টিউনিং এবং চূড়ান্ত মূল্যায়ন (evaluation) কখনোই একে অপরের সাথে মিশে না যায়।
মডেল ট্রেনিং (Model Training)
ট্রেনিং সেটের ওপর মডেলের প্যারামিটারগুলো ফিট করা।
মূল্যায়ন (Evaluation)
ভ্যালিডেশন সেটের ওপর মডেলের পারফরম্যান্স মাপা।
হাইপারপ্যারামিটার টিউনিং (Hyperparameter Tuning)
ভ্যালিডেশন পারফরম্যান্সের ওপর ভিত্তি করে সেটিংস অ্যাডজাস্ট করা, এবং তারপর আবার ট্রেন করা।
ডিপ্লয়মেন্ট এবং মনিটরিং (Deployment / Monitoring)
মডেলটি রিলিজ করা এবং সময়ের সাথে সাথে বাস্তব দুনিয়ায় এর পারফরম্যান্স খেয়াল রাখা।
Multi-Layer Perceptron ট্রেন করার ক্ষেত্রেও ঠিক এই পাইপলাইনটিই সরাসরি প্রযোজ্য — আপনি যখন আসলেই একটি মডেল তৈরি করা শুরু করবেন, তখন এই প্রতিটি ধাপই আরও গাণিতিক বিস্তারিত রূপ নিয়ে ফিরে আসবে।
ভুল বা বাজেভাবে নির্বাচিত ফিচার দিয়ে শুধুমাত্র মডেলের পেছনেই সমস্ত চেষ্টা ব্যয় করা বিগিনারদের একটি ক্লাসিক ট্র্যাপ বা ফাঁদ। দুটোই গুরুত্বপূর্ণ — যদিও আপনি পরের চ্যাপ্টারে দেখতে পাবেন যে, Deep Learning এই কাজগুলোর অনেকটাই মডেলের নিজের কাঁধে তুলে দেয়।
যে মডেলের ট্রেনিং অ্যাকুরেসি ৯৯% কিন্তু টেস্ট অ্যাকুরেসি ৬০%, সে আসলে টাস্কটি শিখতে পারেনি — সে শুধু ট্রেনিং সেট মুখস্থ করেছে। সবসময় সেই ডেটার ওপর পারফরম্যান্স রিপোর্ট করুন যে ডেটায় মডেলটি ট্রেন হয়নি।
ছোট ডেটাসেটে একটিমাত্র ট্রেন/ভ্যালিডেশন স্প্লিট বিভ্রান্তিকর হতে পারে — নেহাত কাকতালীয়ভাবে একটি "সহজ" ভ্যালিডেশন সেট পড়ে গেলে মডেলকে বাস্তবের চেয়ে ভালো মনে হতে পারে। K-fold cross-validation ব্যবহার করলে এই এলোমেলো ওঠানামা অনেকটাই কমে যায়, বিশেষ করে যখন ডেটার পরিমাণ সীমিত।
প্রিপ্রসেসিং ধাপ (যেমন normalization) যদি পুরো ডেটাসেটের ওপর একসাথে করা হয়, ট্রেন/টেস্ট স্প্লিট করার আগে, তবে টেস্ট সেটের তথ্য চুপিসারে ট্রেনিং প্রক্রিয়ায় ঢুকে যায় — একে বলা হয় data leakage। সবসময় প্রথমে ডেটা স্প্লিট করুন, তারপর শুধুমাত্র ট্রেনিং সেটের ওপর ভিত্তি করে normalization-এর মতো পরিসংখ্যান হিসাব করুন, আর সেই একই হিসাব ভ্যালিডেশন ও টেস্ট সেটে প্রয়োগ করুন।
ভবিষ্যতে আপনি যতগুলো supervised মডেল ডিপ্লয় করবেন — একটি সাধারণ লিনিয়ার রিগ্রেসর (linear regressor) থেকে শুরু করে সবচেয়ে গভীর Neural Network পর্যন্ত — তার সবই এই চ্যাপ্টারের কনসেপ্টগুলোর ওপর বেঁচে থাকে বা মারা যায়: একটি সঠিকভাবে মাপা টাস্ক, একটি পরিষ্কার ডেটা স্প্লিট (data split), এবং bias-variance স্পেকট্রামে একটি স্বাস্থ্যকর অবস্থান। Multi-Layer Perceptron এর কোনোটি থেকেই ছাড় পায় না; বরং এর নমনীয়তা overfitting-এর ঝুঁকি আরও বাড়িয়ে দেয়, আর ঠিক এই কারণেই রেগুলারাইজেশন (regularization) নিয়ে পরের দিকের চ্যাপ্টারগুলো রয়েছে। এখনই এই মৌলিক বিষয়গুলোর সাথে ভালোভাবে পরিচিত হয়ে নিন — কারণ পরের প্রতিটি চ্যাপ্টারেই আপনাকে এর ওপর ভরসা করতে হবে।