PyTorch-এ বিভিন্ন ধরনের অপ্টিমাইজার রয়েছে, যেগুলি মডেল ট্রেনিং করার সময় গ্রেডিয়েন্টস আপডেট করার জন্য ব্যবহার করা হয়। প্রতিটি অপ্টিমাইজার বিভিন্ন উপায়ে লার্নিং রেট এবং গ্রেডিয়েন্টস ব্যবহার করে মডেলের ওজন (weights) আপডেট করে। নিচে সবচেয়ে প্রচলিত কয়েকটি অপ্টিমাইজার এবং তাদের ব্যবহার দেখানো হলো:
১. Stochastic Gradient Descent (SGD)
SGD হচ্ছে সবচেয়ে সাধারণ অপ্টিমাইজার, যা মডেলের গ্রেডিয়েন্ট আপডেট করে একটি ছোট লার্নিং রেটের মাধ্যমে।
import torch.optim as optim
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9)
SGD অপ্টিমাইজারে ব্যবহৃত কয়েকটি প্যারামিটার:
lr: লার্নিং রেট, যা প্রতিটি স্টেপে ওজন আপডেটের পরিমাণ নির্ধারণ করে।momentum: এটি অতীতের গ্রেডিয়েন্টসের দিকে কিছুটা গতি রাখে, যাতে মডেল দ্রুত এবং ভালভাবে কনভার্জ করতে পারে।
২. Adam (Adaptive Moment Estimation)
Adam অপ্টিমাইজারটি হচ্ছে একটি অত্যন্ত কার্যকর অপ্টিমাইজার, যা লার্নিং রেট স্বয়ংক্রিয়ভাবে সামঞ্জস্য করে এবং প্রথম ও দ্বিতীয় অর্ডার মোমেন্ট ব্যবহার করে।
optimizer = optim.Adam(model.parameters(), lr=0.001)
Adam অপ্টিমাইজারের প্যারামিটার:
lr: লার্নিং রেট, যা সাধারনত SGD এর তুলনায় কম ব্যবহার করা হয় (যেমন 0.001)।betas: দুটি হাইপারপ্যারামিটার (ডিফল্ট হলো(0.9, 0.999)), যা প্রথম এবং দ্বিতীয় মোমেন্ট অনুমানের জন্য ব্যবহৃত হয়।eps: ছোট একটি ভ্যালু, যা জিরো ডিভিশন সমস্যা এড়ানোর জন্য যোগ করা হয় (ডিফল্ট হলো1e-8)।
৩. RMSprop (Root Mean Square Propagation)
RMSprop অপ্টিমাইজারটি ডিপ লার্নিংয়ের জন্য বেশ উপযোগী, কারণ এটি গ্রেডিয়েন্টসের চলমান গড় ব্যবহার করে লার্নিং রেট আপডেট করে। এটি গ্রেডিয়েন্টসের স্কেল স্থিতিশীল রাখতে সাহায্য করে।
optimizer = optim.RMSprop(model.parameters(), lr=0.01)
RMSprop এর প্যারামিটার:
lr: লার্নিং রেট।alpha: গ্রেডিয়েন্টসের চলমান গড়ে আপডেট করার জন্য হাইপারপ্যারামিটার (ডিফল্ট হলো0.99)।eps: ছোট একটি ভ্যালু, যা জিরো ডিভিশন সমস্যা এড়ানোর জন্য যোগ করা হয় (ডিফল্ট হলো1e-8)।
৪. Adagrad (Adaptive Gradient Algorithm)
Adagrad একটি অপ্টিমাইজার যা বিভিন্ন প্যারামিটারের জন্য আলাদা লার্নিং রেট ব্যবহার করে, যেগুলি পূর্বের গ্রেডিয়েন্টগুলির উপর নির্ভর করে।
optimizer = optim.Adagrad(model.parameters(), lr=0.01)
Adagrad এর প্যারামিটার:
lr: লার্নিং রেট।lr_decay: লার্নিং রেটের জন্য ডেকে প্যারামিটার, যা সময়ের সাথে সাথে লার্নিং রেট কমায়।eps: জিরো ডিভিশন সমস্যা এড়ানোর জন্য ছোট একটি ভ্যালু।
৫. AdamW (Adam with Weight Decay)
AdamW হলো Adam অপ্টিমাইজারের একটি উন্নত সংস্করণ, যেখানে ওজন কমানোর (Weight Decay) কার্যকরী পদ্ধতি ব্যবহার করা হয়। এটি অত্যন্ত জনপ্রিয়, বিশেষ করে ট্রান্সফর্মার-ভিত্তিক মডেলের জন্য।
optimizer = optim.AdamW(model.parameters(), lr=0.001, weight_decay=0.01)
AdamW এর প্যারামিটার:
lr: লার্নিং রেট।weight_decay: এটি ওজনের জন্য একটি ডেকে প্যারামিটার, যা মডেল ওভারফিটিং এড়াতে সহায়ক।betas: Adam এর মতই প্রথম ও দ্বিতীয় মোমেন্ট অনুমানের জন্য।
৬. Adadelta
Adadelta হচ্ছে Adagrad এর একটি উন্নত সংস্করণ, যা লার্নিং রেট ডেকেকে সীমিত করে এবং মডেলের উন্নতির জন্য বর্তমান ও অতীতের গ্রেডিয়েন্টের উপর ভিত্তি করে কাজ করে।
optimizer = optim.Adadelta(model.parameters(), lr=1.0)
Adadelta এর প্যারামিটার:
lr: লার্নিং রেট (যদিও এটি সাধারণত বেশি রাখা হয়)।rho: গ্রেডিয়েন্টসের চলমান গড়ের জন্য প্যারামিটার।eps: জিরো ডিভিশন সমস্যা এড়ানোর জন্য ছোট একটি ভ্যালু।
অপ্টিমাইজার ব্যবহার করার পদ্ধতি
যে অপ্টিমাইজারই আপনি ব্যবহার করুন না কেন, PyTorch-এ প্রতিটি ট্রেনিং স্টেপে সাধারণত এই পদ্ধতি অনুসরণ করা হয়:
# ১. গ্রেডিয়েন্টস রিসেট করা
optimizer.zero_grad()
# ২. মডেলের মাধ্যমে আউটপুট বের করা
outputs = model(inputs)
# ৩. লস গণনা করা
loss = criterion(outputs, targets)
# ৪. ব্যাকপ্রোপাগেশন ব্যবহার করে গ্রেডিয়েন্ট আপডেট করা
loss.backward()
# ৫. অপ্টিমাইজারের মাধ্যমে ওজন আপডেট করা
optimizer.step()
কোন অপ্টিমাইজার ব্যবহার করবেন?
- SGD: যখন মডেলের সাধারণ গ্রেডিয়েন্টে কাজ করছেন এবং হাইপারপ্যারামিটার কন্ট্রোল করতে চান।
- Adam: ডিফল্ট এবং সাধারণভাবে সবচেয়ে কার্যকর অপ্টিমাইজার, বিশেষ করে ডিপ লার্নিং মডেলগুলোর জন্য।
- RMSprop: RNN বা ডিপ লার্নিংয়ে যেখানে গ্রেডিয়েন্ট স্থিতিশীল রাখতে হবে।
- AdamW: ট্রান্সফর্মার বা বৃহৎ মডেল ট্রেনিংয়ের জন্য।
এই অপ্টিমাইজারগুলির মধ্যে আপনার প্রয়োজন অনুসারে সঠিক অপ্টিমাইজারটি নির্বাচন করতে হবে।
Read more