ওভারফিটিং এবং আন্ডারফিটিং (Overfitting & Underfitting)
আপনার কি গোল্ডিলকস (Goldilocks)-এর সেই গল্পের কথা মনে আছে? যেখানে একটি পোরিজ বা জাউ খুব গরম ছিল, একটি খুব ঠান্ডা ছিল, এবং শেষেরটি একদম ঠিকঠাক বা পারফেক্ট ছিল। মেশিন লার্নিংয়ে মডেলগুলোর ক্ষেত্রেও ঠিক একই রকম সমস্যা দেখা যায়।
ধরা যাক, আপনি একটি ইতিহাসের পরীক্ষার জন্য পড়াশোনা করছেন:
- শিক্ষার্থী A শুধু বইয়ের অধ্যায়গুলোর বা চ্যাপ্টারের নাম পড়েই তার পড়া শেষ করল। "১৯৭১ সালে কিছু একটা হয়েছিল... বাংলাদেশ, তাই না?" এটি খুব বেশি ভাসা ভাসা বা সাধারণ একটি পড়া — এই শিক্ষার্থীটি মূলত পড়ায় আন্ডারফিট (underfitted) করেছে।
- শিক্ষার্থী B বইয়ের প্রতিটি শব্দ বা লাইন একেবারে অন্ধের মতো মুখস্থ করেছে, এমনকি সে বইয়ের পৃষ্ঠার নম্বর এবং ভুল বানানগুলোও মুখস্থ করে ফেলেছে। এখন পরীক্ষায় যদি একটু ঘুরিয়ে প্রশ্ন করা হয়, তবে সে আর কিছুই লিখতে পারবে না। সে মূলত পড়ায় ওভারফিট (overfitted) করেছে — অর্থাৎ সে বিষয়টি বোঝার বদলে কেবল মুখস্থ করেছে।
- শিক্ষার্থী C বইয়ের মূল থিমগুলো, এর পেছনের কারণ এবং ফলাফলগুলো খুব ভালোভাবে বুঝেছে এবং সে যেকোনো নতুন প্রশ্নে এই লার্নিংগুলো প্রয়োগ করতে পারবে। তার এই পড়াটি একদম পারফেক্ট (Just right)।
ঠিক একইভাবে আপনার মেশিন লার্নিং মডেলটিকেও এই শিক্ষার্থী C-এর মতো হতে হবে।
আন্ডারফিটিং (Underfitting): "আমি তেমন একটা চেষ্টাই করিনি"
একটি আন্ডারফিটিং (underfitting) মডেল খুবই সাধারণ বা সিম্পল (simple) হয়, যার কারণে এটি ডেটার ভেতরের প্যাটার্নগুলো ঠিকমতো ধরতে পারে না। এটি ট্রেইনিং ডেটা এবং টেস্ট ডেটা উভয় ক্ষেত্রেই খুব খারাপ পারফর্ম বা কাজ করে।
একটি ডেটাসেট যার ডেটাগুলো স্পষ্টতই বাঁকানো (curves), তার মধ্যে একটি সোজা লাইন টানা বা ফিট করার কথা চিন্তা করুন। ওই সোজা লাইনটি যেমন ট্রেইনিং পয়েন্টগুলোর সাথে মিলবে না, ঠিক তেমনি এটি নতুন কোনো পয়েন্ট বা ডেটার সাথেও মিলবে না।
আন্ডারফিটিংয়ের কিছু লক্ষণ:
- ট্রেইনিং অ্যাকুরেসি বা সঠিক হওয়ার হার অনেক কম থাকা
- টেস্ট অ্যাকুরেসি বা সঠিক হওয়ার হারও অনেক কম থাকা
- সমস্যা সমাধানের জন্য মডেলটি "খুবই বোকা (too dumb)" বা অনুপযুক্ত হওয়া
এর সাধারণ কারণগুলো:
- মডেলটি অনেক বেশি সাধারণ হওয়া (যেমন কোনো নন-লিনিয়ার বা আঁকাবাঁকা সমস্যার জন্য লিনিয়ার বা সোজা লাইন মডেল ব্যবহার করা)
- মডেলে পর্যাপ্ত পরিমাণে ফিচার (features) না থাকা
- খুব বেশি রেগুলারাইজেশন (regularization) থাকা (আমরা এটি সম্পর্কে পরে জানব)
- মডেলটিকে পর্যাপ্ত সময় ধরে ট্রেইন করানো বা শেখানো না হওয়া
ওভারফিটিং (Overfitting): "আমি পুরো বই মুখস্থ করেছি"
একটি ওভারফিটিং (overfitting) মডেল অনেক বেশি জটিল বা কমপ্লেক্স (complex) হয়। এটি ট্রেইনিং ডেটাগুলোকে পারফেক্টভাবে বা নিখুঁতভাবে শিখে বা মুখস্থ করে ফেলে — এমনকি এটি এর ভেতরের বিভিন্ন নয়েজ বা রেন্ডম জিনিসগুলোকেও শিখে ফেলে, যেগুলো মূলত কোনো কাজের প্যাটার্ন নয়। এরপর যখন মডেলটিকে নতুন কোনো ডেটা দেওয়া হয়, তখন এটি মারাত্মকভাবে ব্যর্থ হয়, কারণ ট্রেইনিংয়ের ওই রেন্ডম জিনিসগুলো নতুন ডেটায় কোনোভাবেই কাজ করে বা মেলে না।
ট্রেইনিংয়ের প্রতিটি পয়েন্টকে ছোঁয়ার জন্য একটি এলোমেলো বা আঁকাবাঁকা রেখা ফিট করার কথা চিন্তা করুন। এটি কাগজে দেখতে একদম নিখুঁত মনে হলেও, এটি মূলত আসল প্যাটার্ন (signal) খোঁজার বদলে এর চারপাশের অপ্রয়োজনীয় জিনিসগুলোকে (noise) ধরে রেখেছে।
ওভারফিটিংয়ের কিছু লক্ষণ:
- ট্রেইনিং অ্যাকুরেসি বা সঠিক হওয়ার হার অনেক বেশি থাকা (অনেক সময় প্রায় নিখুঁত বা ১০০% থাকে)
- টেস্ট অ্যাকুরেসি এর তুলনায় অনেক কম থাকা
- ট্রেইন এবং টেস্ট স্কোরের মধ্যে বিশাল পার্থক্য থাকা
এর সাধারণ কারণগুলো:
- মডেলটি অনেক বেশি জটিল হওয়া (মডেলে খুব বেশি প্যারামিটার (parameters) থাকা)
- মডেলটিকে শেখানোর জন্য পর্যাপ্ত ট্রেনিং ডেটা (training data) না থাকা
- মডেলটিকে অনেক বেশি সময় ধরে ট্রেইন করা
- কোনো রেগুলারাইজেশন (regularization) না থাকা
ওভারফিট এবং আন্ডারফিটকে কাজ করতে দেখা (Seeing Overfit vs. Underfit in Action)
Key Metrics
কীভাবে আন্ডারফিটিং (underfitting) ঠিক করবেন
- আরও জটিল বা কমপ্লেক্স মডেল ব্যবহার করুন — লিনিয়ার বা সোজা মডেল থেকে পলিনোমিয়ালে (polynomial) বদলান, অথবা শ্যালো ট্রি (shallow tree) থেকে আরও ডিপার বা গভীর ট্রি (deeper tree)-তে যান
- আরও নতুন ফিচার (features) যোগ করুন — মডেলকে কাজ করার জন্য আরও বেশি তথ্য দিন
- রেগুলারাইজেশন (regularization) কমান — মডেলটিকে আরও বেশি ফ্লেক্সিবল (flexible) বা পরিবর্তনের সুযোগ দিন
- বেশি সময় ধরে ট্রেইন করুন — কারণ মডেলটি হয়তো এখনও পুরোপুরি শেখার সময় পায়নি
কীভাবে ওভারফিটিং (overfitting) ঠিক করবেন
- আরও বেশি ট্রেইনিং ডেটা (training data) যোগাড় করুন — ১০০টি উদাহরণের চেয়ে ১,০০,০০০টি উদাহরণ মুখস্থ করা অনেক বেশি কঠিন
- আরও সাধারণ বা সিম্পল (simpler) মডেল ব্যবহার করুন — প্যারামিটার (parameters) কম থাকার মানে হলো মুখস্থ করার সুযোগও কমে যাওয়া
- রেগুলারাইজেশন (regularization) ব্যবহার করুন — খুব বেশি জটিল মডেলগুলোকে আটকাতে বা পেনাল্টি (penalize) দিতে L1, L2, বা ড্রপআউট (dropout)-এর মতো পদ্ধতিগুলো ব্যবহার করুন
- আর্লি স্টপিং (Early stopping) বা দ্রুত থামানো — মডেলটি ডেটা মুখস্থ করা শুরু করার আগেই এর ট্রেইনিং থামিয়ে দিন
- ক্রস-ভ্যালিডেশন (Cross-validation) — মডেলের পারফরম্যান্স সম্পর্কে আরও ভালোভাবে জানতে, ডেটাকে একাধিকবার ট্রেইন/টেস্ট ভাগে স্প্লিট করে এর মূল্যায়ন করুন
বায়াস-ভ্যারিয়েন্স ট্রেডঅফ (The bias-variance tradeoff)
এই সমস্যাটির একটি সুন্দর গালভরা নাম রয়েছে: বায়াস-ভ্যারিয়েন্স ট্রেডঅফ (bias-variance tradeoff)।
- বায়াস (Bias) = আপনার মডেলের নিয়ম বা বাধ্যবাধকতাগুলোর কারণে এটি কতগুলো প্যাটার্ন ধরতে ব্যর্থ হচ্ছে (অর্থাৎ আন্ডারফিটিং)
- ভ্যারিয়েন্স (Variance) = বিভিন্ন ডেটায় ট্রেইন হওয়ার কারণে মডেলের প্রেডিকশনগুলো বা কাজগুলো কতটা পরিবর্তন হচ্ছে (অর্থাৎ ওভারফিটিং)
মূলত মডেলের ভালো ফলাফলের জন্য এই দুটিই কম হওয়া প্রয়োজন, কিন্তু এক্ষেত্রে একটি কমাতে গেলে অন্যটি বেড়ে যেতে পারে। তাই এই দুটির মাঝামাঝি একটি ভালো ব্যালেন্স বা অবস্থাই হলো আমাদের আসল লক্ষ্য.
ছোট কুইজ
পড়া চালিয়ে যান