Chapter 2 of 16
Bias, variance, and why generalization is the whole game
আপনাকে বলা হলো একটা dataset দিয়ে model বানাতে। Algorithm বেছে নিলেন, কিছু hyperparameter দিলেন, train করলেন, validation score দেখলেন। কিন্তু এই score আসলে কী বলছে? Training-এ ৯৯% পাওয়া model নতুন data-তে কেন এত খারাপ করে? আর hyperparameter tuning-এর জন্য validation score আসলে কেন দরকার?
এই chapter-এ সেই প্রশ্নগুলোর উত্তর দেওয়ার ভিত্তি তৈরি হবে: bias, variance, overfitting, underfitting, আর generalization। এই course-এ যত hyperparameter দেখবেন, তাদের গুরুত্ব শেষ পর্যন্ত এই chapter-এর ধারণাগুলো থেকেই আসে।
কোনো model বানানোর আগে data ভাগ করতে হয়। কারণটা সহজ: train করার জন্য যে data ব্যবহার করলেন, সেই data-তেই যদি performance মাপেন — তাহলে প্রশ্ন করছেন "কতটা মুখস্থ করতে পারলে?" — শিখতে পারল কিনা তা নয়। এই দুটো প্রশ্ন সম্পূর্ণ আলাদা।
Machine learning-এ তিনটা আলাদা অংশে data ভাগ হয়:
Training Set
Model-এর parameter (weight, coefficient) এই data-তে fit হয়। Inner optimization loop বারবার এটা consume করে।
Validation Set
Hyperparameter configuration evaluate করার জন্য আলাদা রাখা data। HPO outer loop বারবার এটা use করে।
Test Set
সব modeling আর tuning সিদ্ধান্ত চূড়ান্ত হওয়ার পরে মাত্র একবার ছোঁয়া হয়, সত্যিকারের performance estimate জানতে।
Test set-এর performance দেখে কোনো সিদ্ধান্ত নিলে test set আর test set থাকে না — সেটা দ্বিতীয় validation set হয়ে যায়, আর ফলাফল অতিরিক্ত আশাবাদী হয়। নিয়মটা সহজ কিন্তু ভাঙা সহজ: test set মাত্র একবার ছোঁয়া হয়।
চারজন তীরন্দাজকে লক্ষ্যে তীর ছুড়তে বলুন। প্রথমজনের তীর ঘনভাবে একত্রিত, কিন্তু সবসময় বাম-উপরে: low variance, high bias। দ্বিতীয়জনের তীর ছড়িয়ে পড়ে, কিন্তু গড়ে লক্ষ্যে লাগে: high variance, low bias। তৃতীয়জনের তীর ঘনভাবে লক্ষ্যেই: low bias, low variance — এটাই লক্ষ্য। চতুর্থজনের তীর ছড়িয়ে পড়ে আর গড়েও লক্ষ্য মেলে না: high bias, high variance — সবচেয়ে খারাপ।
Machine learning-এ:
ধরুন সত্যিকারের function আছে, noise সহ: , যেখানে -এর গড় শূন্য আর variance । আমাদের model-এর prediction । Expected squared error ভেঙে পড়ে এভাবে:
যেখানে:
Derivation মুখস্থ করতে হবে না। গুরুত্বপূর্ণ উপসংহার হলো: মোট error-এর তিনটি উৎস, তার মধ্যে শুধু দুটো (bias আর variance) modeling choice দিয়ে প্রভাবিত করা যায়, আর এই দুটো সাধারণত একে অপরের বিপরীত দিকে যায় যখন model complexity বাড়ানো হয়।
Model complexity বাড়ালে bias কমে, variance বাড়ে — এটাই tradeoff।
অনেক সরল model (nonlinear data-তে linear regression, বা depth-1 decision tree) যতই data দেখুক আসল pattern ধরতে পারে না: high bias, low variance। অনেক জটিল model (গভীর decision tree, উচ্চ-degree polynomial) training data প্রায় নিখুঁতভাবে fit করে, noise-সহ: low bias, high variance।
এই course-এর অনেক hyperparameter — max_depth, regularization strength, number of layers, dropout rate — মূলত এই curve-এ model-কে কোথায় রাখবে তা নিয়ন্ত্রণের dial। HPO-র লক্ষ্য হলো সেই sweet spot খুঁজে বের করা।
Bias-variance tradeoff-এর দুটো concrete failure mode আছে:
Underfitting হয় যখন model অনেক সরল — training data-তেও ভালো করে না, নতুন data-তেও না। Model আসল pattern-ই represent করতে পারছে না।
Overfitting হয় যখন model noise বা dataset-specific quirk শিখে ফেলে — training-এ দুর্দান্ত, নতুন data-তে ফেল। কারণ যা মুখস্থ করেছে তা generalize করে না।
সবচেয়ে clear diagnostic হলো learning curve — model complexity বাড়ার সাথে training আর validation error-এর plot:
Underfitting region
Training আর validation error দুটোই বেশি এবং কাছাকাছি। সমাধান: model capacity বাড়ান।
Optimal region
Training error কম; validation error-ও কম, প্রায় minimum-এ। দুটোর ব্যবধান ছোট।
Overfitting region
Training error খুব কম কিন্তু validation error বাড়ছে। এই ব্যবধানটাই overfitting-এর চিহ্ন।
Model diagnose করতে training আর validation performance একসাথে plot করুন, আলাদা নয়। শুধু validation error দেখে কিছু বোঝা যায় না; training error-এর সাথে ব্যবধান বলে দেয় সমাধান কোন দিকে।
Generalization হলো trained model-এর সেই property যা আমরা সবচেয়ে বেশি চাই: কখনো না দেখা data-তেও ভালো performance — কিন্তু একই distribution থেকে আসা। এই chapter-এর সব কিছু — train/val/test split, bias-variance decomposition, underfitting vs overfitting — একটাই প্রশ্নের সেবায়: এই model কি generalize করবে?
এটাই hyperparameter optimization-এর উদ্দেশ্যকে নিখুঁতভাবে reframe করে। HPO training data সবচেয়ে ভালো fit করার configuration খোঁজে না (সেটা সাধারণত degenerate)। HPO খোঁজে সবচেয়ে ভালো generalize করার configuration — আর validation set সেই generalization-এর proxy measurement।
Validation set finite হওয়ায়, "সেরা validation score" আর "সেরা generalization" এক নয় — বিশেষত অনেক configuration try করলে। যথেষ্ট বড় search validation set-এর noise-কেও fit করে ফেলতে পারে। Nested cross-validation আর held-out test set এই সমস্যার বিরুদ্ধে standard defense।
Test performance দেখে সেরা model বেছে নেওয়া মানে lucky draw থেকে বেছে নেওয়া — honest generalization estimate নয়। Test set শুধু চূড়ান্ত report-এর জন্য।
Training error ০ মানে model perfect, অথবা dataset-এর noise মুখস্থ করে ফেলেছে। Validation gap সবসময় দেখতে হবে।
যতবারই Kaggle competition-এ দেখা যায় public আর private test set-এ score-এ বিশাল ফারাক — সেটা সাধারণত এটাই: competitors public validation data-র বিপরীতে অতিরিক্ত tune করেছিল। Bias-variance tradeoff কোনো theoretical কৌতূহল নয় — এটা applied ML-এ সবচেয়ে consistently রিপোর্ট করা failure mode, আর এই course-এর প্রতিটা concept-এর অস্তিত্বের কারণ এটাই।