পাঠ ৩১ · ৩৫-এর মধ্যে · মডিউল ৭
Home / AI Courses / Math for AI & ML / বায়াস-ভেরিয়েন্স ট্রেডঅফ

বায়াস-ভেরিয়েন্স ট্রেডঅফ

Bias-variance tradeoff
১৩ মিনিট পড়া মধ্যম · Intermediate NumPy কোডসহ সম্পূর্ণ বাংলায়

এই পাঠে যা শিখবেন

  • প্রত্যাশিত টেস্ট এরর কীভাবে বায়াস, ভেরিয়েন্স ও নয়েজে বিভক্ত হয় — সূত্রসহ
  • বায়াস ও ভেরিয়েন্সের সঠিক গাণিতিক সংজ্ঞা এবং তাদের স্বজ্ঞাগত ব্যাখ্যা
  • কেন মডেল জটিলতার সাথে বায়াস ও ভেরিয়েন্স বিপরীত দিকে চলে
  • NumPy দিয়ে বিভিন্ন জটিলতার পলিনমিয়াল মডেল ফিট করে U-কার্ভ নিজের চোখে দেখা

১ · সমস্যাটি প্রথমে বুঝি

ধরা যাক একটি সত্যিকারের (কিন্তু অজানা) ফাংশন $f(x)$ থেকে আমাদের ডেটা তৈরি হয়েছে, সাথে কিছুটা এলোমেলো নয়েজ — $y = f(x) + \epsilon$, যেখানে $\mathbb{E}[\epsilon]=0$ এবং $\text{Var}(\epsilon)=\sigma^2$ (L26-L27)। আমরা ট্রেনিং ডেটা থেকে একটি মডেল $\hat f(x)$ শিখি। প্রশ্ন — নতুন, অদেখা $x$-এর জন্য $\hat f(x)$ কতটা ভালো পারফর্ম করবে?

এখানে একটি সূক্ষ্ম বিষয় আছে — $\hat f$ নিজেই একটি র‍্যান্ডম ভ্যারিয়েবল, কারণ এটি একটি নির্দিষ্ট (এলোমেলোভাবে নেওয়া) ট্রেনিং স্যাম্পলের উপর নির্ভর করে (L29-এর স্যাম্পলিং ধারণা মনে করুন)। ভিন্ন ট্রেনিং সেট নিলে ভিন্ন $\hat f$ পাওয়া যেত। তাই আমরা প্রত্যাশিত (expected) টেস্ট এরর নিয়ে কথা বলি — সব সম্ভাব্য ট্রেনিং সেটের উপর গড় করে।

২ · এরর ডিকম্পোজিশন — সূত্র

একটি নির্দিষ্ট টেস্ট পয়েন্ট $x$-এ, স্কোয়ারড এরর লসের প্রত্যাশিত মান নিম্নরূপে ভাঙা যায় —

$$\mathbb{E}\big[(y-\hat f(x))^2\big] = \underbrace{\big(\mathbb{E}[\hat f(x)] - f(x)\big)^2}_{\text{Bias}^2} + \underbrace{\text{Var}(\hat f(x))}_{\text{Variance}} + \underbrace{\sigma^2}_{\text{Irreducible noise}}$$

এখানে প্রত্যাশা ($\mathbb{E}$) নেওয়া হয় সব সম্ভাব্য ট্রেনিং সেটের উপর (এবং নয়েজের উপরও) — $x$ ও $f(x)$ স্থির ধরে। প্রতিটি পদ আলাদাভাবে বুঝি —

বায়াস (Bias)

$\text{Bias}(\hat f(x)) = \mathbb{E}[\hat f(x)] - f(x)$। এটি পরিমাপ করে — গড়ে (অনেক ট্রেনিং সেটের উপর), আমাদের মডেলের পূর্বাভাস প্রকৃত ফাংশন থেকে কতটা দূরে থাকে। উচ্চ বায়াস মানে মডেল খুব সরল — যেমন একটি নন-লিনিয়ার সম্পর্ককে সরলরেখা দিয়ে ফিট করার চেষ্টা করলে, গড়ে সবসময় একটি সিস্টেম্যাটিক ভুল থেকে যাবে, যতই বেশি ডেটা দেওয়া হোক না কেন। এটাই আন্ডারফিটিং।

ভেরিয়েন্স (Variance)

$\text{Var}(\hat f(x)) = \mathbb{E}\big[(\hat f(x) - \mathbb{E}[\hat f(x)])^2\big]$। এটি পরিমাপ করে — ভিন্ন ভিন্ন ট্রেনিং সেট নিলে $\hat f(x)$ কতটা ওঠানামা করে। উচ্চ ভেরিয়েন্স মানে মডেল অত্যধিক জটিল — এটি ট্রেনিং ডেটার প্রতিটি এলোমেলো ওঠানামা (নয়েজ পর্যন্ত) মুখস্থ করে ফেলে, ফলে ভিন্ন ট্রেনিং সেটে সম্পূর্ণ ভিন্ন মডেল তৈরি হয়। এটাই ওভারফিটিং।

অপরিহার্য নয়েজ (Irreducible noise)

$\sigma^2$ — ডেটাতেই থাকা এলোমেলোতা, যা কোনো মডেল দিয়েই দূর করা সম্ভব নয়। এটি একটি কঠিন সীমা (floor) — এমনকি "নিখুঁত" মডেল $\hat f=f$ হলেও এই পদটি টেস্ট এরর থেকে বিয়োগ করা যাবে না।

৩ · কেন এই দুটি বিপরীত দিকে চলে

মডেলের জটিলতা (যেমন পলিনমিয়াল ডিগ্রি, নিউরাল নেটওয়ার্কের প্যারামিটার সংখ্যা, ট্রি-এর গভীরতা) বাড়ালে —

  • বায়াস কমে — মডেল বেশি নমনীয় হয়ে ওঠে, তাই এটি সত্যিকারের ফাংশন $f$-এর কাছাকাছি যেতে পারে।
  • ভেরিয়েন্স বাড়ে — একই ফ্লেক্সিবিলিটি মডেলকে ট্রেনিং ডেটার সুনির্দিষ্ট নয়েজের প্রতিও সংবেদনশীল করে তোলে।

মোট প্রত্যাশিত এরর ($\text{Bias}^2+\text{Variance}+\sigma^2$) তাই সাধারণত একটি U-আকৃতির কার্ভ অনুসরণ করে — খুব সরল মডেলে বায়াসজনিত এরর প্রাধান্য পায়, খুব জটিল মডেলে ভেরিয়েন্সজনিত এরর প্রাধান্য পায়, এবং মাঝখানে কোথাও মোট এরর সর্বনিম্ন হয়।

মডেল জটিলতা → এরর → Bias² Variance মোট টেস্ট এরর সুইট স্পট
মডেল জটিলতা বাড়ার সাথে বায়াস কমে, ভেরিয়েন্স বাড়ে — মোট এরর U-আকৃতির।

৪ · কোড দিয়ে U-কার্ভ দেখুন

নিচে আমরা একটি সাধারণ non-linear ফাংশন থেকে নয়েজি ডেটা তৈরি করব, তারপর বিভিন্ন ডিগ্রির পলিনমিয়াল ফিট করে দেখব কীভাবে টেস্ট এরর একটি U-আকৃতি অনুসরণ করে।

Python · NumPy
import numpy as np

rng = np.random.default_rng(0)

def true_function(x):
    return np.sin(2 * np.pi * x)

# ট্রেনিং ও টেস্ট ডেটা তৈরি
n_train = 15
x_train = rng.uniform(0, 1, n_train)
y_train = true_function(x_train) + rng.normal(0, 0.3, n_train)

x_test = rng.uniform(0, 1, 200)
y_test = true_function(x_test) + rng.normal(0, 0.3, 200)

degrees = [1, 3, 9, 15]

for d in degrees:
    # d-ডিগ্রি পলিনমিয়াল ফিট (least squares, np.polyfit)
    coeffs = np.polyfit(x_train, y_train, d)
    y_pred = np.polyval(coeffs, x_test)

    test_mse = np.mean((y_test - y_pred) ** 2)
    print(f"ডিগ্রি {d:>2} → টেস্ট MSE: {test_mse:.4f}")

    
ডিগ্রি ১ (সরলরেখা) সাধারণত উচ্চ বায়াসের কারণে খারাপ ফিট করবে — sine কার্ভ ধরতে পারবে না। ডিগ্রি ৯ বা ১৫ (মাত্র ১৫টি ট্রেনিং পয়েন্টের জন্য অতিরিক্ত জটিল) প্রায়ই ট্রেনিং ডেটার নয়েজ পর্যন্ত মুখস্থ করে ফেলবে, ফলে টেস্ট MSE বেড়ে যাবে — এটাই উচ্চ ভেরিয়েন্স/ওভারফিটিং। মাঝামাঝি ডিগ্রি (৩-এর কাছাকাছি) সাধারণত সবচেয়ে কম টেস্ট এরর দেবে।

৫ · সমাধানের দিকে — পরবর্তী পাঠের ভূমিকা

স্বাভাবিক প্রশ্ন — মডেলের জটিলতা ঠিক রেখে ভেরিয়েন্স কমানো যায় কি? উত্তর হ্যাঁ — regularization নামের একটি কৌশল দিয়ে, যেখানে আমরা ইচ্ছাকৃতভাবে মডেলকে সামান্য বায়াস যোগ করতে দিই, বিনিময়ে ভেরিয়েন্সে অনেক বড় হ্রাস পাই — ফলে নেট টেস্ট এরর কমে। পরবর্তী পাঠ (L32) দেখাবে কীভাবে এই কৌশলটি Bayes থিওরেম (L28) ও MLE (L30) থেকে সরাসরি গাণিতিকভাবে বেরিয়ে আসে।

মূল কথা · Key takeaway

বায়াস-ভেরিয়েন্স ট্রেডঅফ কোনো আলগা স্বজ্ঞা নয় — এটি একটি সঠিক গাণিতিক পরিচয় (identity)। "আরও জটিল মডেল সবসময় ভালো" এই ধারণাটি ভুল প্রমাণ করার গাণিতিক ভিত্তি এখানেই।

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।

প্র ০১ আমরা কি বায়াস ও ভেরিয়েন্স দুটোই একসাথে শূন্যে নামাতে পারি না?

সাধারণত নয়, একই ডেটাসেটের আকার ও মডেল ক্লাস স্থির থাকলে। এটি একটি মৌলিক ট্রেডঅফ — একটি কমাতে গেলে অন্যটি বাড়ে, কারণ দুটোই মডেলের "ফ্লেক্সিবিলিটি"র সাথে বিপরীতভাবে সম্পর্কিত। তবে বেশি ডেটা দিয়ে একই সাথে দুটোই কিছুটা কমানো সম্ভব (L29-এর CLT অনুযায়ী, বেশি ডেটা মানে এস্টিমেটের ভেরিয়েন্স কমে যাওয়া — জটিলতা একই রেখেও)। এই কারণেই "আরও ডেটা" প্রায়ই "আরও ভালো regularization"-এর চেয়েও কার্যকর সমাধান।

প্র ০২ একটি মডেলের ট্রেনিং এরর কম কিন্তু টেস্ট এরর বেশি — এটি বায়াস না ভেরিয়েন্স সমস্যা?

এটি সাধারণত উচ্চ ভেরিয়েন্সের ক্লাসিক লক্ষণ (ওভারফিটিং)। মডেলটি ট্রেনিং ডেটা (এমনকি তার নয়েজ) এত ভালোভাবে মুখস্থ করে ফেলেছে যে ট্রেনিং এরর কৃত্রিমভাবে কম দেখাচ্ছে, কিন্তু এই "শেখা" নতুন ডেটাতে সাধারণীকরণ (generalize) করে না। বিপরীতে, যদি ট্রেনিং এরর এবং টেস্ট এরর দুটোই বেশি হতো, সেটি উচ্চ বায়াসের (আন্ডারফিটিং) লক্ষণ হতো।

প্র ০৩ আধুনিক অতি-বড় (over-parameterized) ডিপ নিউরাল নেটওয়ার্ক, যাদের প্যারামিটার সংখ্যা ডেটার চেয়েও বেশি, তারা প্রায়ই ভালো generalize করে — এটি কি এই ট্রেডঅফের বিরোধী?

এটি একটি সক্রিয় গবেষণা ক্ষেত্র ("double descent" নামে পরিচিত একটি ঘটনা), এবং ক্লাসিক U-কার্ভ ছবিটি সম্পূর্ণ গল্প বলে না। তবে মূল নীতিটি এখনও দাঁড়িয়ে আছে — মডেলের "কার্যকর জটিলতা" (effective capacity, যা regularization, architecture ও optimization দ্বারা প্রভাবিত হয়) নিয়ন্ত্রণ করাটাই আসল বিষয়, শুধু প্যারামিটার সংখ্যা গোনা নয়। এই কোর্সের ভিত্তি (বায়াস, ভেরিয়েন্স, regularization) এই আরও জটিল ঘটনাগুলো বোঝারও প্রয়োজনীয় প্রথম ধাপ।

অনুশীলন

  1. পরীক্ষা করুন: উপরের কোডে n_train ১৫ থেকে ৬০ করে চালান। কোন ডিগ্রির পলিনমিয়াল এখন সবচেয়ে ভালো (সর্বনিম্ন টেস্ট MSE) করে, এবং কেন?

    বেশি ট্রেনিং ডেটা দিয়ে উচ্চ-ডিগ্রি পলিনমিয়ালগুলোর (৯, ১৫) ভেরিয়েন্স কমে যাবে, কারণ তাদের এখন নয়েজে ওভারফিট করার সুযোগ কম (বেশি ডেটাপয়েন্ট প্রকৃত প্যাটার্নকে বেশি জোর দেয়)। ফলে বেশি ডেটাতে তুলনামূলক জটিল ডিগ্রিগুলোও ভালো পারফর্ম করা শুরু করে — এটি সরাসরি দেখায় কেন "বেশি ডেটা" ভেরিয়েন্স কমায়।

  2. ব্যাখ্যা করুন: $\text{Bias}(\hat f(x)) = \mathbb{E}[\hat f(x)] - f(x)$ সূত্রে, যদি একটি মডেল প্রতিটি ভিন্ন ট্রেনিং সেটে একই ভুল উত্তর দেয় (ধারাবাহিকভাবে), এর বায়াস বেশি না কম হবে?

    বায়াস বেশি হবে। "ধারাবাহিকভাবে একই ভুল উত্তর" মানে $\mathbb{E}[\hat f(x)]$ (গড় পূর্বাভাস) $f(x)$ থেকে সিস্টেম্যাটিকভাবে দূরে — এটাই বায়াসের সংজ্ঞা। লক্ষ করুন, এই মডেলের ভেরিয়েন্স আসলে কম হতে পারে (কারণ এটি প্রতিটি ট্রেনিং সেটে প্রায় একই উত্তর দেয়, যদিও ভুল উত্তর) — এটি বায়াস ও ভেরিয়েন্স স্বাধীন ধারণা তা স্পষ্ট করে।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

পূর্ববর্তী পাঠ
পাঠ ৩০ · ম্যাক্সিমাম লাইকলিহুড এস্টিমেশন (MLE)