পাঠ ৩৩ · ৫৭-এর মধ্যে · মডিউল ৮
Home / Courses / Ethics in Computing & AI Safety / ML সিদ্ধান্ত

মেশিন লার্নিং মডেল কীভাবে সিদ্ধান্ত নেয়

How machine learning models make decisions
৮ মিনিট পড়া শুরু · Beginner Python কোডসহ সম্পূর্ণ বাংলায়

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

  • মেশিন লার্নিং মডেল হাতে-লেখা নিয়মের বদলে উদাহরণ থেকে কীভাবে শেখে
  • "পরিসংখ্যানগত প্যাটার্ন" ও "জেনারেলাইজেশন" ধারণা দুটির সহজ ব্যাখ্যা
  • Python দিয়ে একটি সত্যিকারের, ছোট্ট "উদাহরণ থেকে শেখা" হিসাব — কয়েকটি প্রার্থী থ্রেশহোল্ডের মধ্যে সবচেয়ে কম ভুলের থ্রেশহোল্ড খুঁজে বের করা
  • এই ধারণাটি কেন এথিক্সের জন্য গুরুত্বপূর্ণ — একটি মডেল তার ট্রেনিং ডেটার প্যাটার্নই শেখে, ভালো বা মন্দ যা-ই থাকুক না কেন (M4-এর বায়াস আলোচনার ভিত্তি)

১ · হাতে-লেখা নিয়ম বনাম শেখা প্যাটার্ন

একটি ঐতিহ্যবাহী প্রোগ্রামে, একজন ডেভেলপার সরাসরি নিয়ম লেখেন: "যদি বয়স ১৮-এর কম হয়, তাহলে প্রত্যাখ্যান করো।" একটি মেশিন লার্নিং মডেলMachine Learning Modelট্রেনিং উদাহরণ থেকে একটি পরিসংখ্যানগত প্যাটার্ন শিখে নেওয়া একটি সিস্টেম, যা হাতে-লেখা নিয়মের বদলে ডেটা থেকে নিজের সিদ্ধান্তের নিয়ম বের করে।-এ এর উল্টো ঘটে — কেউ নিয়ম লেখেন না। বরং ডেভেলপার অনেক উদাহরণ দেন (ইনপুট + সঠিক আউটপুট), আর একটি প্রশিক্ষণ অ্যালগরিদম সেই উদাহরণগুলো বিশ্লেষণ করে এমন একটি নিয়ম (মডেল) বের করে যা ওই উদাহরণগুলোতে যতটা সম্ভব সঠিক ফলাফল দেয়।

ঐতিহ্যবাহী প্রোগ্রামিং ডেটা হাতে-লেখা নিয়ম আউটপুট মেশিন লার্নিং ডেটা + সঠিক আউটপুট ট্রেনিং (প্যাটার্ন খোঁজা) শেখা নিয়ম (মডেল)
ঐতিহ্যবাহী প্রোগ্রামিংয়ে নিয়ম আসে মানুষের কাছ থেকে; মেশিন লার্নিংয়ে নিয়ম বের করা হয় ডেটা থেকে, একটি প্রশিক্ষণ প্রক্রিয়ার মাধ্যমে।

২ · ট্রেনিং, প্যাটার্ন ও জেনারেলাইজেশন

ট্রেনিং প্রক্রিয়াটি মূলত একটি অনুসন্ধান: মডেলের ভেতরের সংখ্যাগত মান (প্যারামিটার) এমনভাবে সমন্বয় করা হয় যাতে ট্রেনিং উদাহরণগুলোতে মডেলের ভবিষ্যদ্বাণী ও প্রকৃত উত্তরের মধ্যে পার্থক্য (ভুল) যতটা সম্ভব কমে। একবার এই প্যাটার্ন শেখা হয়ে গেলে, আশা করা হয় মডেলটি নতুন, আগে না-দেখা ইনপুটেও যুক্তিসঙ্গতভাবে কাজ করবে — একেই বলে জেনারেলাইজেশনGeneralizationট্রেনিং ডেটায় শেখা প্যাটার্ন নতুন, আগে না-দেখা ডেটাতেও কার্যকরভাবে কাজ করার ক্ষমতা।। পরের পাঠ (L34) দেখাবে জেনারেলাইজেশন সবসময় নিশ্চিত নয় — এটি ব্যর্থও হতে পারে।

ট্রেনিং ডেটা
উদাহরণের একটি সেট, প্রতিটির সাথে একটি "সঠিক উত্তর" (লেবেল) যুক্ত থাকে।
পরিসংখ্যানগত প্যাটার্ন
মডেল যা শেখে তা একটি প্রবণতা বা সহ-সম্পর্ক — নিশ্চিত সত্য নয়, বরং সম্ভাব্যতাভিত্তিক অনুমান।
জেনারেলাইজেশন
নতুন ইনপুটে শেখা প্যাটার্ন প্রয়োগ করার ক্ষমতা — মূল লক্ষ্য, শুধু ট্রেনিং ডেটা মুখস্থ করা নয় (L34)।
AI Foundations কোর্সের সাথে সম্পর্ক

AI Foundations-এর "AI বনাম ML বনাম Deep Learning" পাঠে এই স্থাপত্যগত পার্থক্যগুলো এবং গাণিতিক ভিত্তি (ভেক্টর, গ্রেডিয়েন্ট ডিসেন্ট ইত্যাদি) বিস্তারিতভাবে কভার করা হয়েছে। এই পাঠ সেই টেকনিক্যাল ভিত্তির উপর নির্ভর করে না — বরং এথিক্যাল আলোচনার জন্য প্রয়োজনীয় ন্যূনতম ধারণাগত ভিত্তিটুকু দেয়।

৩ · একটি সত্যিকারের "উদাহরণ থেকে শেখা" হিসাব

নিচের কোড সেলে সবচেয়ে সহজ সম্ভব মেশিন লার্নিং মডেল তৈরি করা হয়েছে — একটি থ্রেশহোল্ড রুল (সীমারেখা নিয়ম)। ধরা যাক একজন শিক্ষার্থী কত ঘণ্টা পড়াশোনা করেছে তার উপর ভিত্তি করে সে পরীক্ষায় পাস করবে কিনা অনুমান করতে হবে। মডেলটিকে কোনো নির্দিষ্ট থ্রেশহোল্ড দেওয়া হয়নি — বরং কয়েকটি সম্ভাব্য থ্রেশহোল্ড (১ থেকে ১০ ঘণ্টা) নিজে চেষ্টা করে দেখতে হবে, এবং ট্রেনিং উদাহরণগুলোতে যেটি সবচেয়ে কম ভুল করে সেটিকেই "শেখা নিয়ম" হিসেবে বেছে নিতে হবে — এটিই "উদাহরণ থেকে শেখা"র মূল কথা।

Python
# একটি সিন্থেটিক, ইলাস্ট্রেটিভ ডেটাসেট -- বাস্তব কোনো শিক্ষার্থী বা পরীক্ষার তথ্য নয়
# প্রতিটি এন্ট্রি: (পড়াশোনার ঘণ্টা, পাস করেছে কিনা -- 1 = পাস, 0 = ফেল)
training_data = [
    (1, 0), (2, 0), (3, 0), (4, 0), (5, 0), (5, 1),
    (6, 1), (7, 0), (8, 1), (9, 1), (10, 1),
]

def predict(hours, threshold):
    # শেখা নিয়ম: থ্রেশহোল্ডের সমান বা বেশি হলে "পাস" অনুমান
    return 1 if hours >= threshold else 0

def total_errors(data, threshold):
    return sum(1 for hours, label in data if predict(hours, threshold) != label)

# --- "ট্রেনিং": কয়েকটি প্রার্থী থ্রেশহোল্ড চেষ্টা করে সবচেয়ে কম ভুলেরটি খোঁজা ---
candidate_thresholds = list(range(1, 11))

best_threshold = None
best_errors = None
print("থ্রেশহোল্ড  ভুলের সংখ্যা")
for t in candidate_thresholds:
    errors = total_errors(training_data, t)
    print(f"   {t:>2}         {errors}")
    if best_errors is None or errors < best_errors:
        best_errors = errors
        best_threshold = t

error_rate = best_errors / len(training_data)

print(f"\nমডেল যা শিখলো -- সবচেয়ে কম ভুলের থ্রেশহোল্ড: {best_threshold} ঘণ্টা")
print(f"এই থ্রেশহোল্ডে ভুলের হার: {best_errors}/{len(training_data)} = {error_rate:.1%}")

    
লক্ষ্য করুন কোথাও সরাসরি threshold = 5 লিখে দেওয়া হয়নি। কোডটি ১০টি ভিন্ন সম্ভাব্য থ্রেশহোল্ড সত্যিকারভাবে চেষ্টা করেছে, প্রতিটির ভুলের সংখ্যা গণনা করেছে, এবং সবচেয়ে কম ভুলেরটি (৫ ঘণ্টা, ২টি ভুল) বেছে নিয়েছে। এটিই একটি প্রকৃত, ছোট আকারের "লার্নিং" প্রক্রিয়া — জটিল নিউরাল নেটওয়ার্কও মূলত এই একই ধারণার একটি বিশাল-স্কেল সংস্করণ, লক্ষ লক্ষ প্যারামিটার নিয়ে।
মূল কথা · Key takeaway

একটি মেশিন লার্নিং মডেল "চিন্তা" করে না বা "বোঝে" না — এটি ট্রেনিং ডেটায় ভুল কমানোর একটি গাণিতিক অনুসন্ধান চালায় এবং যে প্যারামিটার সবচেয়ে ভালো ফল দেয় তা বেছে নেয়। এই সরল সত্যটি এথিক্যাল আলোচনার জন্য গুরুত্বপূর্ণ: মডেল যা শিখবে তা সম্পূর্ণভাবে নির্ভর করে তাকে কোন উদাহরণ দেখানো হয়েছে তার উপর — ট্রেনিং ডেটায় পক্ষপাত থাকলে মডেলও সেই পক্ষপাত শিখবে (M4-এ বিস্তারিত আলোচনা)।

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

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

প্র ০১ একটি মেশিন লার্নিং মডেল কি কখনো ১০০% নির্ভুল একটি থ্রেশহোল্ড খুঁজে পাবে?

শুধুমাত্র যদি ডেটা "নিখুঁতভাবে বিভাজনযোগ্য" (perfectly separable) হয় — অর্থাৎ এমন একটি থ্রেশহোল্ড থাকে যার এক পাশে সব পাস আর অন্য পাশে সব ফেল। উপরের কোড সেলের ডেটায় এমনটি নেই — (5, 0) ও (5, 1) একই ঘণ্টায় দুই ভিন্ন ফলাফল দেখাচ্ছে, আর (7, 0) বাকি প্যাটার্নের সাথে মেলে না। বাস্তব ডেটায় এমন "নয়েজ" বা ব্যতিক্রম প্রায় সবসময় থাকে, তাই একটি বাস্তবসম্মত মডেল শূন্য ভুলের আশা করে না — বরং যতটা সম্ভব কম ভুলের সেরা নিয়ম খোঁজে।

প্র ০২ এই সহজ থ্রেশহোল্ড মডেল আর একটি জটিল নিউরাল নেটওয়ার্কের মধ্যে মৌলিক পার্থক্য কী?

মৌলিক প্রক্রিয়া একই — উদাহরণ দেখে ভুল-কমানো প্যারামিটার খোঁজা। পার্থক্যটি স্কেল ও জটিলতায়: একটি নিউরাল নেটওয়ার্কে একটি থ্রেশহোল্ডের বদলে লক্ষ লক্ষ (বা বিলিয়ন) প্যারামিটার একসাথে সমন্বয় করা হয়, এবং ইনপুট ও আউটপুটের মধ্যে সম্পর্কটি অনেক বেশি জটিল ও অ-রৈখিক (non-linear) হতে পারে। এই জটিলতাই L35-এ আলোচিত "ব্ল্যাক-বক্স" সমস্যার মূল কারণ।

প্র ০৩ যদি training_data-তে শুধু ধনী পরিবারের শিক্ষার্থীদের তথ্য থাকতো, তাহলে মডেলটি কী শিখতো?

মডেলটি তখনও একই প্রক্রিয়ায় "সবচেয়ে কম ভুলের থ্রেশহোল্ড" খুঁজে বের করতো — কিন্তু সেই থ্রেশহোল্ডটি শুধু ধনী পরিবারের শিক্ষার্থীদের প্যাটার্নের জন্যই সঠিক হতো। অন্য প্রেক্ষাপটের শিক্ষার্থীদের উপর প্রয়োগ করলে এটি খারাপ ফল দিতে পারে — এটিই পরবর্তী পাঠ (L34)-এর "ডিস্ট্রিবিউশন শিফট" ধারণার মূল কথা।

অনুশীলন

  1. চিন্তা করুন: আপনার পরিচিত একটি অ্যাপ বা সার্ভিসের কথা ভাবুন যা "সিদ্ধান্ত" নেয় (যেমন কোন ভিডিও সুপারিশ করবে, কোন ইমেইল স্প্যাম চিহ্নিত করবে)। সেই সিদ্ধান্তটি সম্ভবত হাতে-লেখা নিয়মের বদলে কোন ধরনের "উদাহরণ" থেকে শেখা হতে পারে?

    যেমন — একটি স্প্যাম-ফিল্টার মডেল লক্ষ লক্ষ পূর্ববর্তী ইমেইল দেখে শেখে, যেগুলো ব্যবহারকারীরা আগে "স্প্যাম" বা "স্প্যাম নয়" বলে চিহ্নিত করেছেন। মডেল কোনো নির্দিষ্ট শব্দের তালিকা হাতে দেওয়া হয় না — বরং কোন শব্দ-প্যাটার্ন স্প্যামের সাথে সহ-সম্পর্কিত তা ডেটা থেকে নিজে বের করে।

  2. পরীক্ষা করুন: উপরের কোড সেলে training_data-তে (7, 0) এন্ট্রিটি সরিয়ে (7, 1) করে দিন এবং Run চাপুন — সবচেয়ে কম ভুলের থ্রেশহোল্ড ও ভুলের হার কীভাবে বদলায় লক্ষ করুন।

    এই পরিবর্তনের পর ডেটাটি থ্রেশহোল্ড ৫ বা ৬-এ প্রায় নিখুঁতভাবে বিভাজনযোগ্য হয়ে যায় (শুধু (5, 0)/(5, 1)-এর দ্বন্দ্ব থেকে যাবে), তাই সবচেয়ে কম ভুলের সংখ্যা ২ থেকে কমে ১-এ নেমে আসবে, আর ভুলের হার প্রায় ১৮.২% থেকে কমে প্রায় ৯.১%-এ দাঁড়াবে — কারণ ডেটার একটি "ব্যতিক্রম" (আউটলায়ার) দূর হওয়ায় প্যাটার্নটি আরও পরিষ্কার হয়েছে।

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

আগের পাঠ
র‍্যানসামওয়্যার, এক্সটরশন ও মুক্তিপণ দেওয়ার এথিক্স