Neural Networksপড়তে ৭ মিনিট লাগবে

অ্যাক্টিভেশন ফাংশন (Activation Functions)

ReLU, সিগময়েড (sigmoid), ট্যানএইচ (tanh) — অর্থাৎ নিউরনগুলোর অন/অফ (on/off) সুইচ
computation:প্রতিটি নিউরনের জন্য O(1) — খুবই সাধারণ গাণিতিক হিসাবimportance:অত্যন্ত গুরুত্বপূর্ণ (Critical) — এগুলো ছাড়া নেটওয়ার্কগুলো কেবল সোজা লিনিয়ার বা সোজা প্যাটার্নগুলো শিখতে পারেmost popular:হিডেন লেয়ারের (hidden layers) জন্য রিলু (ReLU) এবং ক্লাসিফিকেশন (classification) আউপুটের জন্য সফটম্যাক্স (softmax)

বাড়ির লাইটের সুইচগুলোর (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)

import numpy as np
def step(x): return np.where(x >= 0, 1, 0)
def sigmoid(x): return 1 / (1 + np.exp(-x))
def tanh(x): return np.tanh(x)
def relu(x): return np.maximum(0, x)
# বিভিন্ন মান বা ভ্যালু দিয়ে টেস্ট করা
values = np.array([-3.0, -1.0, 0.0, 1.0, 3.0])
print("ইনপুট (Input): ", values)
print("স্টেপ (Step): ", step(values))
print("সিগময়েড (Sigmoid):", np.round(sigmoid(values), 3))
print("ট্যানএইচ (Tanh): ", np.round(tanh(values), 3))
print("রিলু (ReLU): ", relu(values))
print("\nx=1.0-এ ডেরিভেটিভগুলো (Derivatives):")
x = 1.0
print(f" সিগময়েড (Sigmoid): {sigmoid(x) * (1 - sigmoid(x)):.4f}")
print(f" ট্যানএইচ (Tanh): {1 - tanh(x)**2:.4f}")
print(f" রিলু (ReLU): 1 (x > 0 এর জন্য সব সময় 1)")
Output
ইনপুট (Input):   [-3. -1.  0.  1.  3.]
স্টেপ (Step):    [0 0 1 1 1]
সিগময়েড (Sigmoid): [0.047 0.269 0.5   0.731 0.953]
ট্যানএইচ (Tanh):    [-0.995 -0.762  0.     0.762  0.995]
রিলু (ReLU):    [0. 0. 0. 1. 3.]

x=1.0-এ ডেরিভেটিভগুলো (Derivatives):
  সিগময়েড (Sigmoid): 0.1966
  ট্যানএইচ (Tanh):    0.4200
  রিলু (ReLU):    1 (x > 0 এর জন্য সব সময় 1)
Note: রিলু (ReLU)-এর একটি মূল দুর্বলতা বা উইকনেস হলো: 'ডেড নিউরন (dying neurons)'। একটি নিউরনের ইনপুট যদি সবসময় নেগেটিভ বা ঋণাত্মক হয়, তবে এর আউটপুটটি সবসময় 0 হবে এবং এর গ্রেডিয়েন্টও সবসময় 0 হবে — যার মানে এটি কখনোই আর রিকভার (recover) বা ঠিক হতে পারবে না। এই সমস্যার সমাধানের জন্য 'লিকি রিলু (Leaky ReLU)'-এর মতো কিছু ভার্সন বা ভ্যারিয়েন্ট ব্যবহার করা হয় (যা নেগেটিভ ইনপুটের জন্য 0-এর বদলে 0.01x আউটপুট দেয়), যা মূলত একটি ছোট গ্রেডিয়েন্টকে সবসময় প্রবাহিত (flowing) হতে বা কাজ করতে সাহায্য করে।

Key Metrics

রিলু (ReLU)
এটি কেবল একটি তুলনামূলক কাজ বা কম্পারিজন (comparison) করে — হিডেন লেয়ারের (hidden layers) ক্ষেত্রে এটি ডিফল্ট বা প্রধান প্রথম পছন্দ
সবচেয়ে দ্রুত max(0, x)
সিগময়েড (Sigmoid)
আউটপুটের সম্ভাবনার ক্ষেত্রে এটি বেশ ভালো কাজ করে, কিন্তু হিডেন লেয়ারের (hidden layers) ক্ষেত্রে এটি খুব খারাপ একটি পদ্ধতি (কারণ এখানে ভ্যানিশিং গ্রেডিয়েন্ট তৈরি হয়)
মাঝারি 1/(1+e^-x)
ট্যানএইচ (Tanh)
শূন্য-কেন্দ্রিক (zero-centered), সিগময়েডের তুলনায় এটি হিডেন লেয়ারে ভালো কাজ করে
মাঝারি (e^x-e^-x)/(e^x+e^-x)
লিকি রিলু (Leaky ReLU)
এটি ডেড বা ডাইং নিউরন (dying neuron) সমস্যার সমাধান করে — নেগেটিভ মানগুলোর জন্য এতে ছোট একটি স্লোপ বা ঢাল রাখা হয়
দ্রুতগতিসম্পন্ন (Fast) max(0.01x, x)

ছোট কুইজ

কোনো অ্যাক্টিভেশন ফাংশন ছাড়া একটি নিউরাল নেটওয়ার্ক কেন জটিল কাজগুলোর ক্ষেত্রে একেবারেই অকেজো হবে?
Challenge

পড়া চালিয়ে যান

পারসেপ্ট্রন (Perceptron)
একটিমাত্র নিউরন — গুণ করা, যোগ করা আর সিদ্ধান্ত নেওয়া
নিউরাল নেটওয়ার্ক বেসিকস (Neural Network Basics)
লজিকের মতো নিউরনগুলো একে অপরের সাথে স্তরে স্তরে যুক্ত থাকে
ব্যাকপ্রোপাগেশন (Backpropagation)
এরর বা ভুলগুলো পেছনের দিকে প্রবাহিত হয় যাতে নেটওয়ার্কটি শিখতে পারে
গ্রেডিয়েন্ট ডিসেন্ট (Gradient Descent)
সবচেয়ে নিচু পয়েন্ট বা বিন্দুটি খুঁজে পেতে পাহাড়ের ঢাল বেয়ে নিচে নামুন