ব্যাগিং এবং বুস্টিংয়ের মতো, গ্রেডিয়েন্ট বুস্টিং হল অন্য মেশিন লার্নিং অ্যালগরিদমের উপরে প্রয়োগ করা একটি পদ্ধতি। অনানুষ্ঠানিকভাবে, গ্রেডিয়েন্ট বুস্টিং দুই ধরনের মডেল জড়িত:
- একটি "দুর্বল" মেশিন লার্নিং মডেল, যা সাধারণত একটি সিদ্ধান্ত গাছ।
- একটি "শক্তিশালী" মেশিন লার্নিং মডেল, যা একাধিক দুর্বল মডেলের সমন্বয়ে গঠিত।
গ্রেডিয়েন্ট বুস্টিং-এ, প্রতিটি ধাপে, একটি নতুন দুর্বল মডেলকে বর্তমান শক্তিশালী মডেলের (যাকে ছদ্ম প্রতিক্রিয়া বলা হয়) এর "ত্রুটি" ভবিষ্যদ্বাণী করতে প্রশিক্ষণ দেওয়া হয়। আমরা পরে বিস্তারিত "ত্রুটি" করব। আপাতত, অনুমান করুন "ত্রুটি" হল ভবিষ্যদ্বাণী এবং একটি রিগ্রেসিভ লেবেলের মধ্যে পার্থক্য৷ দুর্বল মডেল (অর্থাৎ, "ত্রুটি") তারপর শক্তিশালী মডেলের ত্রুটি কমাতে একটি নেতিবাচক চিহ্ন সহ শক্তিশালী মডেলে যোগ করা হয়।
গ্রেডিয়েন্ট বুস্টিং পুনরাবৃত্তিমূলক। প্রতিটি পুনরাবৃত্তি নিম্নলিখিত সূত্র আহ্বান করে:
\[ F_{i+1} = F_i - f_i \]
কোথায়:
- $F_i$ হল $i$ ধাপে শক্তিশালী মডেল।
- $f_i$ হল $i$ ধাপে দুর্বল মডেল।
একটি স্টপিং মাপদণ্ড পূরণ না হওয়া পর্যন্ত এই ক্রিয়াকলাপটি পুনরাবৃত্তি হয়, যেমন সর্বাধিক সংখ্যক পুনরাবৃত্তি বা (শক্তিশালী) মডেলটি একটি পৃথক বৈধতা ডেটাসেটে পরিমাপ করা হিসাবে ওভারফিট হতে শুরু করে।
আসুন একটি সাধারণ রিগ্রেশন ডেটাসেটে গ্রেডিয়েন্ট বুস্টিং চিত্রিত করি যেখানে:
- উদ্দেশ্য হল $x$ থেকে $y$ ভবিষ্যদ্বাণী করা।
- শক্তিশালী মডেলটিকে একটি শূন্য ধ্রুবক হিসাবে আরম্ভ করা হয়েছে: $F_0(x) = 0$।
# Simplified example of regressive gradient boosting.
y = ... # the labels
x = ... # the features
strong_model = []
strong_predictions = np.zeros_like(y) # Initially, the strong model is empty.
for i in range(num_iters):
# Error of the strong model
error = strong_predictions - y
# The weak model is a decision tree (see CART chapter)
# without pruning and a maximum depth of 3.
weak_model = tfdf.keras.CartModel(
task=tfdf.keras.Task.REGRESSION,
validation_ratio=0.0,
max_depth=3)
weak_model.fit(x=x, y=error)
strong_model.append(weak_model)
weak_predictions = weak_model.predict(x)[:,0]
strong_predictions -= weak_predictions
আসুন নিম্নলিখিত ডেটাসেটে এই কোডটি প্রয়োগ করি:
চিত্র 25. একটি সংখ্যাসূচক বৈশিষ্ট্য সহ একটি সিন্থেটিক রিগ্রেসিভ ডেটাসেট।
গ্রেডিয়েন্ট বুস্টিং অ্যালগরিদমের প্রথম পুনরাবৃত্তির পরে এখানে তিনটি প্লট রয়েছে:
চিত্র 26. প্রথম পুনরাবৃত্তির পর তিনটি প্লট।
চিত্র 26 এ প্লট সম্পর্কে নিম্নলিখিত নোট করুন:
- প্রথম প্লটটি শক্তিশালী মডেলের ভবিষ্যদ্বাণী দেখায়, যা বর্তমানে সর্বদা 0।
- দ্বিতীয় প্লট ত্রুটি দেখায়, যা দুর্বল মডেলের লেবেল।
- তৃতীয় প্লট দুর্বল মডেল দেখায়.
প্রথম দুর্বল মডেলটি লেবেলের একটি মোটা উপস্থাপনা শিখছে এবং বেশিরভাগই বৈশিষ্ট্য স্থানের বাম অংশে ফোকাস করে (সবচেয়ে ভিন্নতা সহ অংশ, এবং সেইজন্য ধ্রুবক ভুল মডেলের জন্য সবচেয়ে ত্রুটি)।
নিম্নলিখিত অ্যালগরিদমের অন্য পুনরাবৃত্তির জন্য একই প্লট রয়েছে:
চিত্র 27. দ্বিতীয় পুনরাবৃত্তির পর তিনটি প্লট।
চিত্র 27 এ প্লট সম্পর্কে নিম্নলিখিত নোট করুন:
- শক্তিশালী মডেলে এখন আগের পুনরাবৃত্তির দুর্বল মডেলের পূর্বাভাস রয়েছে।
- শক্তিশালী মডেলের নতুন ত্রুটিটি একটু ছোট।
- দুর্বল মডেলের নতুন ভবিষ্যদ্বাণীটি এখন বৈশিষ্ট্য স্থানের ডান অংশে ফোকাস করে।
আমরা আরও 8টি পুনরাবৃত্তির জন্য অ্যালগরিদম চালাই:
চিত্র 28. তৃতীয় পুনরাবৃত্তি এবং দশম পুনরাবৃত্তির পর তিনটি প্লট।
চিত্র 28-এ, লক্ষ্য করুন যে শক্তিশালী মডেলের ভবিষ্যদ্বাণী ডেটাসেটের প্লটের অনুরূপ হতে শুরু করে।
এই পরিসংখ্যানগুলি দুর্বল শিক্ষার্থী হিসাবে সিদ্ধান্ত গাছ ব্যবহার করে গ্রেডিয়েন্ট বুস্টিং অ্যালগরিদমকে চিত্রিত করে। এই সংমিশ্রণকে গ্রেডিয়েন্ট বুস্টেড (সিদ্ধান্ত) গাছ বলা হয়।
পূর্ববর্তী প্লটগুলি গ্রেডিয়েন্ট বুস্টিং এর সারমর্ম নির্দেশ করে। যাইহোক, এই উদাহরণে নিম্নলিখিত দুটি বাস্তব-বিশ্বের অপারেশনের অভাব রয়েছে:
- সংকোচন
- নিউটনের পদ্ধতির এক ধাপে পাতার মানগুলির অপ্টিমাইজেশন
সংকোচন
দুর্বল মডেল $f_i$ একটি ছোট মানের $\nu$ (উদাহরণস্বরূপ, $\nu = 0.1$) দ্বারা গুণিত হয় শক্তিশালী মডেল $F_i$ এ যোগ করার আগে। এই ছোট মানটিকে সংকোচন বলা হয়। অন্য কথায়, নিম্নলিখিত সূত্র ব্যবহার করে প্রতিটি পুনরাবৃত্তির পরিবর্তে:
\[ F_{i+1} = F_i - f_i \]
প্রতিটি পুনরাবৃত্তি নিম্নলিখিত সূত্র ব্যবহার করে:
\[ F_{i+1} = F_i - \nu f_i \]
গ্রেডিয়েন্ট বুস্টিংয়ে সংকোচন নিউরাল নেটওয়ার্কে শেখার হারের অনুরূপ। সংকোচন নিয়ন্ত্রণ করে যে শক্তিশালী মডেলটি কত দ্রুত শিখছে, যা অতিরিক্ত ফিটিং সীমিত করতে সহায়তা করে। অর্থাৎ, 0.0 এর কাছাকাছি একটি সংকোচন মান 1.0 এর কাছাকাছি একটি সংকোচন মানের চেয়ে ওভারফিটিং কমিয়ে দেয়।
আমাদের উপরের কোডে, সংকোচনটি নিম্নরূপ প্রয়োগ করা হবে:
shrinkage = 0.1 # 0.1 is a common shrinkage value.
strong_predictions -= shrinkage * weak_predictions