Learning Rate – নিউরাল নেটওয়ার্ক
Learning Rate হলো অপটিমাইজার ফাংশনের একটি প্যারামিটার যার মাধ্যমে আপনি বলে দিতে পারবেন অপটিমাইজার কত বড় বড় লাফ দিয়ে weights কে অপটিমাইজ করতে থাকবে যেন লস কমে যায়। মাথার উপর দিয়ে গেল? আচ্ছা চলুন একটা উদাহরণের সাথে বোঝার চেষ্টা করি।
ধরুন আপনি বাজারে গিয়েছেন পেয়াজ কিনতে। পেয়াজের দাম বাড়ার জন্য সব দোকানদারই দোকানে পেয়াজ বিক্রি শুরু করেছে। রাস্তার শুধু একপাশ দিয়ে দোকানগুলো এবং আপনি এটাও জানেন যে এখানে ২০০টি দোকান আছে। আপনার টার্গেট হচ্ছে যে দোকানে পেয়াজের দাম সবথেকে কম, সেই দোকান দেখে পেয়াজ কেনা। আপনি এখন ভাবছেন যে ২০০টি দোকানে দাম জিজ্ঞেস করতে সারাদিন লেগে যাবে। তার চেয়ে বরং আপনি প্রত্যেক দশম দোকানটিতে গিয়ে দাম জিজ্ঞেস করবেন। তাহলে মাত্র ২০টি দোকান দেখলেই হচ্ছে। আইডিয়া অবশ্যই ভালো, কিন্তু একটা রিস্ক আছে। সবচেয়ে কম দামে যে দোকানটি বিক্রি করছে, সেই দোকানটি আপনার লিস্টের ২০টির মধ্যে নাও থাকতে পারে। এখন হিসেব করলেই দেখতে পাবেন আপনি প্রত্যেক দশম দোকানের বদলে যদি প্রত্যেক ৫ম দোকান দেখেন তাহলে কম দামে বিক্রি করার দোকানটি পেয়ে যাওয়ার সম্ভাবনা আরো বেশি। আর যদি প্রতিটা দোকান দেখেন, তাহলে তো কথাই নেই।
আপনি যে প্রতি ৫ম অথবা ১০ম সিলেক্ট করছেন, এটাই হলো আমাদের মডেলের লার্নিং রেট। এটাকে স্টেপ সাইজও বলতে পারেন। অপটিমাইজার কত বড় স্টেপ নিয়ে কমাবে সেটা নির্ভর করবে আপনার দেয়া লার্নিং রেট এর মাধ্যমে। উপরের উদাহরণ থেকে আপনি একবারেই বলে দিতে পারেন যে লার্নিং রেট কম মানে ভালো। অবশ্যই ভালো। তবে মাঝে মাঝে ডেটাসেট অনেক বেশি হিউজ হলে ভিন্ন কথা। ২০০ এর বদলে ২০০০০ দোকান থাকলে অবশ্যই আপনি চিন্তাও করবেন না সবগুলো দোকানে যাবার কথা।
চলুন এবার দেখে আসি আসলে কিভাবে লার্নিং রেট কাজ করে।


আমরা ইতিমধ্যে জানি যে প্রতিটা নিউরন যাবার পথেই weight দেয়া আছে। আর এগুলাই অপটিমাইজ করে অপটিমাইজার এবং গোল হলো লস কমানো। একদম শুরুতে এই weights গুলো র্যান্ডমলি নেয়া হয়। এবং একটা epoch এর পরেই আপনি বর্তমান weight এর জন্য লস ভ্যালু জানেন। এখন এই লস ভ্যালু এবং লার্নিং রেট এর উপর নির্ভর করে অপটিমাইজার নতুন weight ঠিক করবে। ইকুয়েশনটা নিম্নরূপঃ

প্রথমেই gradient ক্যালকুলেট করে নেয়া হয় লস এবং weight এর উপর নির্ভর করে। যেহেতু gradient সেহেতু derivative টার্ম আসবেই আর এটা সম্পর্কে সবাই জানি। তাই স্কিপ করে গেলাম। এবার গ্রেডিয়েন্ট এর সাথে লার্নিং রেট গুন করা হয় এবং সবশেষে বর্তমান weight থেকে গুনফলকে বিয়োগ করা হয়। লার্নিং রেট যত কম হবে, গুনফলও তত কম হবে। আর এর জন্য weight ভ্যালুগুলোও আস্তে আস্তে কমতে থাকবে।
চলুন এবার দেখি কিভাবে আমরা অপটিমাইজারের লার্নিং রেট সেট করে দিবঃ
from keras.models import * from keras.layers import * from keras.optimizers import * model = Sequential() model.add(Dense(5, input_shape=(3,), activation='relu')) model.add(Dense(2, activation='softmax')) sgd = SGD(lr=0.0001) model.compile(optimizer=sgd, loss='mean_squared_error', metrics=['accuracy'])
নিজে নিজেও কোড লিখে রান করে দেখবেন। আর কোন প্রশ্ন থাকলে অবশ্যই জানাবেন।
কম্পিউটার কিভাবে শেখে? – নিউরাল নেটওয়ার্ক

So,nice