অ্যাক্টিভেশন ফাংশন (Activation Functions)
বাড়ির লাইটের সুইচগুলোর (light switches) কথা একটু চিন্তা করে দেখুন। সেখানে আপনি বিভিন্ন ধরনের সুইচ দেখতে পাবেন:
- একটি ক্লাসিক বা সাধারণ সুইচ: যা হয় লাইটকে পুরোপুরি অন করে অথবা পুরোপুরি অফ করে। এর মাঝামাঝি কিছু নেই।
- একটি ডিমার (dimmer) সুইচ: যা খুব ধীরে ধীরে লাইটটাকে অফ থেকে অনের দিকে নিয়ে যায়। আপনি চাইলে এটিকে ৩০%, ৫০% বা ৮০%-এর মতো একটি লেভেলে রাখতে পারেন।
- একটি ফুল-রেঞ্জ ডিমার (full-range dimmer): যা মূলত নেগেটিভ বা উল্টো দিক থেকে পজিটিভ বা উজ্জ্বলতার দিকে যায়, যার ঠিক মাঝামাঝি অংশে লাইটটি অফ থাকে।
- একটি ওয়ান-ওয়ে ডিমার (one-way dimmer): যা মূলত শূন্যের নিচে পুশ (push) করা হলে তা অফ হয়ে যায়, এরপর আপনি তা যত ধীরে ধীরে ওপরে তুলবেন তা তত উজ্জ্বল হতে থাকবে।
নিউরাল নেটওয়ার্কের ক্ষেত্রেও প্রধানত এই চারটি অ্যাক্টিভেশন ফাংশনের (activation functions) ব্যবহার সবচেয়ে বেশি দেখা যায়: স্টেপ (step), সিগময়েড (sigmoid), ট্যানএইচ (tanh), এবং রিলু (ReLU)। এরা প্রত্যেকেই একেকটি নিউরনের কাঁচা বা মূল আউটপুটকে (raw output) ভিন্ন ভিন্ন উপায়ে পরিবর্তন করে বা ট্রান্সফর্ম (transforms) করে থাকে।
আমাদের আদৌ অ্যাক্টিভেশন ফাংশনের প্রয়োজন কেন?
এখানকার সবচেয়ে গুরুত্বপূর্ণ বিষয়টি হলো: একটি অ্যাক্টিভেশন ফাংশন ছাড়া নেটওয়ার্কের প্রতিটি লেয়ার কেবল একটি লিনিয়ার ট্রান্সফর্মেশন বা সোজা কিছু হিসেবে কাজ করে (যেমন: ওয়েট (weights) দিয়ে গুণ করা, এবং বায়াস (bias) যোগ করা)। কিন্তু কয়েকটি লিনিয়ার লাইনের একটি চেইন মূলত একটি সোজা লাইনই তৈরি করে。
এ কারণে আপনি ১০০টি লেয়ার একটার ওপর একটা বসালেও তাতে কিছু যায় আসে না — কারণ কোনো অ্যাক্টিভেশন ফাংশন ছাড়া পুরো নেটওয়ার্কটি মূলত একটি সিঙ্গেল লেয়ার বা একটি লেয়ারেই পরিণত হবে। এবং এর ফলে এটি শুধুমাত্র সোজা লাইনের বা লিনিয়ার প্যাটার্নগুলোই শিখতে পারবে।
তাই অ্যাক্টিভেশন ফাংশনগুলো মূলত নেটওয়ার্কে নন-লিনিয়ার (non-linearity) বা বাঁকানো কিছু নিয়ে আসে। এদের সাহায্যেই নিউরাল নেটওয়ার্কগুলো বাঁকানো বা জটিল প্যাটার্নগুলো শিখতে পারে, যেমন "এটি একটি বিড়ালের ছবি (this region is a cat)" এই পুরো প্যাটার্নটি শেখার বদলে, তারা কেবল "বেশি পিক্সেল = বেশি বিড়াল (more pixels = more cat)"-এর মতো সরল বা সোজা জিনিসগুলোই শিখতে পারে।
প্রধান চারটি অ্যাক্টিভেশন ফাংশন (The four key activation functions)
১. স্টেপ ফাংশন (Step Function) (একেবারে শুরুর দিকের)
যদি ইনপুটের মান ০-এর কম হয় তবে এর আউটপুট হবে ০, নয়তো এর আউটপুট হবে ১। এটি মূলত বাইনারি বা 0 এবং 1-এর ওপর ভিত্তি করে কাজ করে (অর্থাৎ অন বা অফ)। এটি মূলত প্রথম দিকের বা আসল পারসেপ্ট্রন (perceptron)-এ ব্যবহার করা হতো। এর সমস্যা হলো: এর গ্রেডিয়েন্ট সব জায়গায় শূন্য বা ফ্ল্যাট (flat) থাকে, তাই ব্যাকপ্রোপাগেশন (backpropagation) এর মাধ্যমে কিছুই শিখতে পারে না।
২. সিগময়েড (Sigmoid): এস-কার্ভ (the S-curve)
sigmoid(x) = 1 / (1 + e^(-x))
এটি যেকোনো সংখ্যাকে খুব সুন্দর ও ধীরগতিতে (0, 1) এই রেঞ্জ বা সীমার মধ্যে নিয়ে আসে। কোনো কিছুর প্রবাবিলিটি বা সম্ভাবনা জানার আউটপুটের ক্ষেত্রে এটি সবচেয়ে ভালো কাজ করে। এর সমস্যা হলো: অত্যন্ত বড় বা অত্যন্ত ছোট ইনপুটের ক্ষেত্রে এর গ্রেডিয়েন্টগুলো প্রায় হারিয়ে যায় — যাকে বলা হয় ভ্যানিশিং গ্রেডিয়েন্ট সমস্যা (vanishing gradient problem)।
৩. ট্যানএইচ (Tanh): সেন্টার্ড এস-কার্ভ (centered S-curve)
tanh(x) = (e^x - e^(-x)) / (e^x + e^(-x))
এটিও পুরোপুরি সিগময়েডের মতোই কাজ করে, তবে এটি -১ থেকে +১ সীমার মধ্যে আউটপুট দেয়। এর শূন্য-কেন্দ্রিক (zero-centered) আউটপুটের জন্য এটি অপটিমাইজেশনের (optimization) ক্ষেত্রে বেশ সুবিধাজনক। তবে এর প্রান্তগুলোর বা শেষদিকের মানগুলোতেও ভ্যানিশিং গ্রেডিয়েন্টের সমস্যা দেখা যায়।
৪. রিলু (ReLU): আধুনিক ওয়ার্কহর্স (modern workhorse)
ReLU(x) = max(0, x)
এটি একদমই সহজ: যদি এর মান নেগেটিভ হয়, তবে এটি 0 আউটপুট দেয়। আর যদি এর মান পজিটিভ হয়, তবে এটি যেমন আছে ঠিক তেমনই পাস করে দেয় বা পাঠিয়ে দেয়। এটি অনেক দ্রুত কাজ করে, পজিটিভ মানগুলোর জন্য কখনো থেমে যায় না (saturate করে না), এবং এটি মূলত ভ্যানিশিং গ্রেডিয়েন্ট সমস্যার অনেকটাই সমাধান করে দিয়েছে। আর ঠিক এ কারণেই ডিপ লার্নিং (deep learning) এতটাই জনপ্রিয় হয়ে উঠেছে।
চারটি প্রধান অ্যাক্টিভেশন ফাংশন (All Four Activation Functions)
Key Metrics
ছোট কুইজ
পড়া চালিয়ে যান