Practical MLপড়তে ৭ মিনিট লাগবে

রেগুলারাইজেশন (Regularization)

মডেলটি যাতে সৎ থাকে সেজন্য এর কমপ্লেক্সিটিতে (complexity) পেনাল্টি (penalty) দেওয়া
L1 (Lasso):কিছু কিছু ওয়েটকে (weights) কাটছাঁট করে একেবারে শূন্য (zero) করে দেয় · ফিচার সিলেকশন (feature selection)L2 (Ridge):সব ওয়েট বা ওজনগুলোকেই (weights) ছোট করে বা শ্রিন্ক (Shrinks) করে · কোনো একেকটি ফিচারকে ডমিনেট (dominating) করতে বা প্রভাব খাটাতে দেয় নাno regularization:ওভারফিটিংয়ের (overfitting) ঝুঁকি তৈরি করে · মডেলটি হয়তো নয়েজগুলোও (noise) মুখস্থ করে নিতে পারে

ধরা যাক, একজন শিক্ষক পরীক্ষার খাতা বা প্রশ্ন দেখছেন। দুইজন ছাত্রই হয়তো তার করা প্রশ্নের সঠিক উত্তর দিয়েছে, কিন্তু:

  • ছাত্র A (Student A) স্পষ্ট করে, সহজ ভাষায়, ৩ বাক্যের একটি উত্তর লিখেছে।
  • ছাত্র B (Student B) ৩ পাতা ভরে একটি এলোমেলো রচনা লিখেছে, যার মাঝের কোনো এক জায়গায় হয়তো আসল উত্তরটি লুকানো আছে।

একজন ভালো শিক্ষক অবশ্যই এই সহজ ও সাধারণ উত্তরের জন্য অতিরিক্ত নম্বর (bonus marks) দেবেন। এদের দুজনের উত্তরই সঠিক, কিন্তু এখানকার সবচেয়ে সাধারণ উত্তরটি বুঝতে অনেক বেশি সহজ। এটি অন্যান্য নতুন প্রশ্নগুলোর ক্ষেত্রেও আরও ভালোভাবে প্রয়োগ করা বা জেনারালাইজ (generalize) করা সম্ভব, এবং এতে লুকিয়ে থাকা ভুলগুলো থাকার সম্ভাবনাও অনেক কম।

মেশিন লার্নিংয়ের ভাষায় এই রেগুলারাইজেশন (Regularization) মডেলটি মূলত ঠিক এই সাধারণ বা সহজ (simplicity) উত্তরের ওই এক্সট্রা বা বাড়তি নম্বরের (bonus) মতোই কাজ করে। এটি মূলত মডেলের লস ফাংশনের (loss function) ওপর একটি পেনাল্টি (penalty) বসিয়ে মডেলটিকে বেশি জটিল বা কঠিন কাজ করা থেকে দূরে রাখে বা নিরুৎসাহিত করে। এর মাধ্যমে মডেলটিকে মূলত এই কথাই বলা হয়: "ঠিক আছে, তুমি চাইলে খুব কঠিন কোনো উত্তরও দিতে পারো, কিন্তু এর জন্য তোমাকে মাশুল (cost) গুনতে হবে।"

মডেলগুলো কেন ওভারফিট (overfit) করে

কোনো রেগুলারাইজেশন (regularization) ছাড়া, একটি মডেল তার ট্রেইনিং এররকে (training error) কমানোর জন্য যা যা করা সম্ভব তার সবকিছুই করবে — এমনকি এর জন্য যদি তাকে খুব জঘন্য, পাগলাটে (crazy), বা ভঙ্গুর কোনো প্যাটার্ন (patterns) শিখতে হয়, তবে সে সেটিও শিখবে। একটি বহুপদী বা পলিনোমিয়াল মডেলকে (polynomial) হয়তো এখানকার প্রতিটি ট্রেইনিং পয়েন্টে নিখুঁতভাবে হিট (hit) করার জন্য অনেক বড় আকারের কোএফিশিয়েন্ট (enormous coefficients) (+৫০,০০০x³ - ৪৯,৯৯৯x²-এর মতো) তৈরি করে নিতে পারে। এটি হয়তো খাতায়-কলমে দেখতে খুব দারুণ লাগতে পারে, কিন্তু এটিকে নতুন কোনো ডেটার ওপর টেস্ট করে দেখুন — দেখবেন এটি একেবারেই উল্টোপাল্টা (haywire) বা হাবিজাবি সব কাজ করতে শুরু করেছে।

রেগুলারাইজেশন (regularization) কীভাবে কাজ করে

মডেলটি সাধারণত এর লস (Loss) = ট্রেইনিং ডেটার ভুল বা এরর (Error) কমানোর চেষ্টা করে। কিন্তু রেগুলারাইজেশনের (regularization) সাহায্যে, এটি মূলত এই জিনিসটিই কমনোর বা মিনিমাইজ (minimizes) করার চেষ্টা করে:

লস (Loss) = ট্রেইনিং ডেটার ভুল বা এরর (Error on training data) + λ × কমপ্লেক্সিটি পেনাল্টি (Complexity penalty)

আর এই λ (ল্যামডা বা lambda) মূলত আপনি এর কমপ্লেক্সিটিটিকে (complexity) ঠিক কতটুকু পেনাল্টি (penalize) দিতে চান তা নিয়ন্ত্রণ করে। বেশি বা হাই λ (High λ) → আরও সহজ মডেল, বেশি বায়াস (bias)। কম বা লো λ (Low λ) → জটিল মডেল, বেশি ভ্যারিয়ান্স (variance)।

L1 বনাম L2 রেগুলারাইজেশন (L1 vs L2 Regularization)

  • L1 (ল্যাসো বা Lasso): পেনাল্টি (Penalty) = |ওয়েট বা weights|-এর যোগফল। এটি এখানকার বেশ কয়েকটি ওয়েটকে (weights) কেটে পুরোপুরি শূন্য বা জিরো (zero) করে দেয়, যা মূলত এর ফিচার বা বৈশিষ্ট্যগুলোকেই পুরোপুরি সরিয়ে ফেলার মতো কাজ করে। এটি ফিচার সিলেকশনের (feature selection) জন্য খুবই দারুণ।
  • L2 (রিজ বা Ridge): পেনাল্টি (Penalty) = ওয়েট বা weights²-এর যোগফল। এটি ওয়েটগুলোকে (weights) ছোট করে শূন্যের কাছাকাছি নিয়ে আসে কিন্তু পুরোপুরি গায়েব বা জিরো (zero) করে দেয় না। এটি এখানকার সবকটি ফিচারকেই বজায় রাখে, কিন্তু কোনোটিকেই একা ডমিনেট (dominating) করতে বা প্রভাব বিস্তার করতে দেয় না।
  • ইলাস্টিক নেট (Elastic Net): এটি মূলত L1 এবং L2 এর একটি মিক্স বা মিশ্রণ (Mix)। এটি হলো দুই পক্ষেরই সেরা রূপ (Best of both worlds)।

অ্যাকশনে রেগুলারাইজেশন: রিজ বনাম ল্যাসো (Regularization in Action: Ridge vs Lasso)

from sklearn.linear_model import LinearRegression, Ridge, Lasso
import numpy as np
# নয়েজযুক্ত ডেটা: আসল বা ট্রু রিলেশনশিপটি হলো y = 2x (Noisy data: true relationship is y = 2x)
np.random.seed(42)
X = np.random.randn(50, 5) # ৫টি ফিচার, এর মধ্যে শুধু ১টিই আসল (5 features, only 1 matters)
y = 2 * X[:, 0] + np.random.randn(50) * 0.5
# কোনো রেগুলারাইজেশন নেই — সব ওয়েট বা ওজনগুলোই বড় হতে পারে (No regularization — all weights might be large)
lr = LinearRegression().fit(X, y)
print("No reg weights:", np.round(lr.coef_, 3))
# L2 (রিজ বা Ridge) — সব ওয়েট বা ওজনগুলোকেই ছোট করে বা শ্রিন্ক (shrinks) করে
ridge = Ridge(alpha=1.0).fit(X, y)
print("Ridge weights: ", np.round(ridge.coef_, 3))
# L1 (ল্যাসো বা Lasso) — দরকারি নয় এমন ওয়েটগুলোকে শূন্যের দিকে ঠেলে দেয়
lasso = Lasso(alpha=0.3).fit(X, y)
print("Lasso weights: ", np.round(lasso.coef_, 3))
Output
No reg weights: [ 2.024 -0.031  0.095 -0.078  0.141]
Ridge weights:  [ 1.923 -0.024  0.085 -0.068  0.121]
Lasso weights:  [ 1.779  0.     0.     0.     0.   ]

সঠিক বা সেরা ল্যামডা বেছে নেওয়া (Choosing the right lambda)

ল্যামডা (Lambda) (বা রেগুলারাইজেশন স্ট্রেংথ বা strength) হলো মূলত একটি হাইপারপ্যারামিটার (hyperparameter) — আপনাকে এটি বেছে নিতে হয়, অ্যালগরিদমটি এটিকে নিজে থেকে বেছে নিতে পারে না। এটিকে অনেক বেশি ছোট রাখলে, আপনি হয়তো খুব সহজেই ওভারফিটিংয়ের (overfitting) কবলে পড়তে পারেন। আবার একইভাবে এটিকে অনক বেশি বড় রাখলে, আপনি আন্ডারফিটিংয়ের (underfitting) কবলে পড়তে পারেন (কারণ মডেলটিকে এত বেশি পেনাল্টি বা শাস্তি দেওয়া হবে যে, এটি নতুন কিছু শেখারও কোনো সুযোগ তৈরি করতে পারবে না)।

এ কাজের জন্য সবচেয়ে সাধারণ বা স্ট্যান্ডার্ড অ্যাপ্রোচটি হলো (standard approach): এখানকার বিভিন্ন ল্যামডার (lambda) মান পরীক্ষা করার জন্য ক্রস-ভ্যালিডেশন (cross-validation) ব্যবহার করা এবং সেখান থেকে সবচেয়ে ভালো টেস্ট পারফরম্যান্স (test performance) প্রদান করা মানটিকে বেছে নেওয়া।

সব জায়গায় রেগুলারাইজেশন (Regularization everywhere)

রেগুলারাইজেশন (Regularization) শুধু লিয়ার মডেলগুলোর (linear models) জন্যই নয়। বরং এটি প্রায় সব জায়গাতেই ব্যবহার করা হয়ে থাকে:

  • নিউরাল নেটওয়ার্কের (neural networks) ড্রপআউট (Dropout) — এটি মূলত ট্রেইনিং বা অভ্যাসের সময় এর নিউরনগুলোকে (neurons) রেন্ডমলি বা এলোমেলোভাবে বন্ধ বা অফ করে দেয়
  • ডিসিশন ট্রিয়ের (decision trees) সর্বোচ্চ গভীরতা বা ম্যাক্স-ডেপথ লিমিট (Max depth limits) — এটি এখানকার গাছ বা ট্রিগুলোকে (trees) অতিরিক্ত বড় বা ডিপ (deep) হওয়া থেকে বাধা দেয়
  • আর্লি স্টপিং (Early stopping) বা আগেভাগে বন্ধ করা — মডেলটি এখানকার ডেটাগুলোকে পুরোপুরি মুখস্থ করার আগেই মূলত এর ট্রেইনিংটিকে (training) থামিয়ে বা স্টপ (stop) করে দেয়
Note: একটু এই ল্যাসোর (Lasso) আউটপুটটির দিকে খেয়াল করুন: এটি মূলত এখানকার ৫টি ওয়েট বা ওজনের (weights) মধ্যে ৪টিকেই একেবারে পুরোপুরি শূন্য বা জিরো (exactly zero) করে দিয়েছে এবং শুধুমাত্র তা ওই একটি ফিচারকেই বজায় রেখেছে যা আসলে এখানকার জন্য দরকারি ছিল। এটি বেশ পাওয়ারফুল বা শক্তিশালী — কারণ এটি একই সাথে ল্যাসোকে (Lasso) ফিচার সিলেক্টর (feature selector) হিসেবেও কাজ করতে দেয় এবং এর মাধ্যমে এটি অটোমেটিক্যালি আমাদের জানিয়ে দেয় যে এখানকার ঠিক কোন ইনপুটগুলো আমাদের কাজে লাগতে পারে।

Key Metrics

📈 রেগুলারাইজেশন বা কোনো ছাঁটাই নেই (No Regularization)
বিশেষ করে অনেক বেশি ফিচারগুলোর (features) ক্ষেত্রে, এখানে ওভারফিটিংয়ের (overfitting) অনেক বড় একটি ঝুঁকি বা হাই রিস্ক (High risk) থাকে
সবচেয়ে দ্রুত বা ফাস্টেস্ট ট্রেইনিং (Fastest training) শুধুমাত্র ভুল বা এররগুলোকে কমানো (Minimize error only)
🔷 L2 (রিজ বা Ridge)
প্রতিটি ওয়েট বা ওজনকে ছোট করে ফেলে (Shrinks) — তবে এখানকার সব কটি ফিচারকেই এর মধ্যে বজায় রাখে
সামান্য বা একটু ধীরগতির (Slightly slower) এরর বা Error + λΣw²
🔶 L1 (ল্যাসো বা Lasso)
কিছু কিছু ওয়েট বা ওজনকে একেবারে শূন্যের দিকে ধাবিত করে — এগুলো একেকটি বিল্ট-ইন ফিচার সিলেকশন (built-in feature selection)
সামান্য বা একটু ধীরগতির (Slightly slower) এরর বা Error + λΣ|w|
💎 ইলাস্টিক নেট (Elastic Net)
এটি মূলত L1 এবং L2 এর মিশ্রণ — বা ভালো দুই পক্ষের সেরা রূপ (best of both worlds)
মধ্যম বা মডারেট (Moderate) এরর বা Error + λ₁Σ|w| + λ₂Σw²

ছোট কুইজ

রেগুলারাইজেশন (regularization) মূলত একটি মডেলের লস ফাংশনে (loss function) কী যুক্ত করে?
Challenge

পড়া চালিয়ে যান

বায়াস বনাম ভ্যারিয়েন্স (Bias vs Variance)
খুব সাধারণ নাকি বেশি অগোছালো — এর মাঝামাঝি একটি পারফেক্ট জায়গা (sweet spot) খুঁজে বের করুন
ক্রস-ভ্যালিডেশন (Cross-Validation)
প্রতিটি ফোল্ডে (fold) টেস্ট করুন, যাতে কোনো ডেটাই নষ্ট না হয়
ফিচার ইঞ্জিনিয়ারিং (Feature Engineering)
কাঁচা বা র (raw) ডেটাকে পরিবর্তন করে এমন ইনপুটে পরিণত করা যা কোনো মডেল আসলেই ব্যবহার করতে পারে