অ্যাক্টিভেশন ফাংশন ও তাদের ডেরিভেটিভ
এই পাঠে যা শিখবেন
- সিগময়েডের ডেরিভেটিভ ধাপে ধাপে ডেরাইভ করা
- ট্যানহ, ReLU ও সফটম্যাক্সের ডেরিভেটিভ জানা ও প্রয়োগ করা
- ভ্যানিশিং গ্রেডিয়েন্ট সমস্যা কী এবং কেন এটি ঐতিহাসিকভাবে গুরুত্বপূর্ণ ছিল
- NumPy দিয়ে প্রতিটি অ্যাক্টিভেশন ফাংশন ও তার ডেরিভেটিভ বাস্তবায়ন করা
১ · সিগময়েড ফাংশন ও তার ডেরিভেটিভ
সিগময়েডSigmoidএকটি S-আকৃতির ফাংশন যা যেকোনো বাস্তব সংখ্যাকে $(0,1)$ পরিসরে সংকুচিত করে — সম্ভাবনা মডেল করতে ব্যবহৃত হয়। ফাংশন যেকোনো বাস্তব সংখ্যাকে $(0,1)$ পরিসরে সংকুচিত করে, তাই এটি প্রায়ই সম্ভাবনা মডেল করতে ব্যবহৃত হয়:
$$ \sigma(x) = \frac{1}{1+e^{-x}} $$
এর ডেরিভেটিভ বের করতে কোশেন্ট রুল (পাঠ ১৩) ব্যবহার করি। $\sigma(x) = (1+e^{-x})^{-1}$ লিখে চেইন রুল প্রয়োগ করা যাক:
$$ \sigma'(x) = -1 \cdot (1+e^{-x})^{-2} \cdot \frac{d}{dx}(1+e^{-x}) = -(1+e^{-x})^{-2} \cdot (-e^{-x}) = \frac{e^{-x}}{(1+e^{-x})^2} $$
এখন একটি চমৎকার বীজগাণিতিক কৌশল — লব $e^{-x}$-কে $\big(1+e^{-x}\big) - 1$ হিসেবে লেখা যায়। তাহলে:
$$ \sigma'(x) = \frac{(1+e^{-x}) - 1}{(1+e^{-x})^2} = \frac{1}{1+e^{-x}} - \frac{1}{(1+e^{-x})^2} = \sigma(x) - \sigma(x)^2 $$
যা সরাসরি সরলীকৃত হয়:
$$ \sigma'(x) = \sigma(x)\big(1-\sigma(x)\big) $$
সিগময়েডের ডেরিভেটিভ ফাংশনের নিজের মান দিয়েই প্রকাশ করা যায় — একবার ফরওয়ার্ড পাসে $\sigma(x)$ হিসাব করা হয়ে গেলে, ডেরিভেটিভ পেতে আর নতুন করে $e^{-x}$ হিসাব করতে হয় না, শুধু $\sigma(x)(1-\sigma(x))$ গণনা করলেই হয়। এই ধরনের সরলীকরণ ব্যাকপ্রপাগেশনকে (মডিউল ৫) গণনাগতভাবে সস্তা করে তোলে।
২ · ট্যানহ ফাংশন ও তার ডেরিভেটিভ
ট্যানহTanhহাইপারবোলিক ট্যানজেন্ট ফাংশন — সিগময়েডের মতো S-আকৃতির, কিন্তু আউটপুট $(-1,1)$ পরিসরে, শূন্য-কেন্দ্রিক। ফাংশন সিগময়েডের একটি শূন্য-কেন্দ্রিক সংস্করণ, আউটপুট পরিসর $(-1,1)$:
$$ \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} $$
সিগময়েডের মতো একই পদ্ধতিতে (কোশেন্ট রুল ও বীজগাণিতিক সরলীকরণ প্রয়োগ করে) এর ডেরিভেটিভও একটি সুন্দর বন্ধ-রূপে (closed form) পাওয়া যায়:
$$ \frac{d}{dx}\tanh(x) = 1 - \tanh^2(x) $$
লক্ষ করুন এটি সিগময়েডের ডেরিভেটিভের মতোই — ফাংশনের নিজের মান দিয়ে প্রকাশযোগ্য, ফলে গণনাগতভাবে সুবিধাজনক। আসলে $\tanh(x) = 2\sigma(2x)-1$ সম্পর্কও আছে, যা প্রমাণ করে যে দুটি ফাংশন গভীরভাবে সম্পর্কিত।
৩ · ReLU ও তার ডেরিভেটিভ
ReLUReLU — Rectified Linear Unitসবচেয়ে জনপ্রিয় আধুনিক অ্যাক্টিভেশন ফাংশন — ঋণাত্মক ইনপুটকে শূন্য করে, ধনাত্মক ইনপুট অপরিবর্তিত রাখে। (Rectified Linear Unit) সম্ভবত সবচেয়ে সরল অ্যাক্টিভেশন ফাংশন:
$$ \text{ReLU}(x) = \max(0, x) $$
এর ডেরিভেটিভ প্রতিটি অংশে দ্ব্যর্থহীন (piecewise ধ্রুবক):
$$ \text{ReLU}'(x) = \begin{cases} 1 & x > 0 \\ 0 & x < 0 \end{cases} $$
$x=0$ বিন্দুতে ফাংশনটি "কোণা" তৈরি করে (একটি ধারালো বাঁক), তাই গাণিতিকভাবে সেখানে ডেরিভেটিভ ঠিক সংজ্ঞায়িত নয়। ব্যবহারিক ইমপ্লিমেন্টেশনে একটি প্রচলিত কনভেনশন ধরা হয় — $x=0$-এ ডেরিভেটিভকে $0$ বা $1$ (কোনো একটি, সাধারণত $0$) হিসেবে বেছে নেওয়া হয়, একে বলে subgradient কনভেনশন।
৪ · সফটম্যাক্স — যখন আউটপুট একটি সম্পূর্ণ বিতরণ
সফটম্যাক্সSoftmaxএকাধিক সংখ্যার একটি ভেক্টরকে একটি সম্ভাবনা বিতরণে (সব ধনাত্মক, যোগফল ১) রূপান্তরকারী ফাংশন — মাল্টি-ক্লাস classification-এর আউটপুট লেয়ারে ব্যবহৃত হয়। একাধিক সংখ্যাকে (যেমন $n$টি ক্লাসের স্কোর) একটি সম্ভাবনা বিতরণে রূপান্তর করে — প্রতিটি আউটপুট ধনাত্মক এবং সবগুলোর যোগফল $1$:
$$ \text{softmax}(x_i) = \frac{e^{x_i}}{\sum_j e^{x_j}} $$
যেহেতু সফটম্যাক্সের প্রতিটি আউটপুট নির্ভর করে সব ইনপুটের উপর (হর $\sum_j e^{x_j}$-এর মধ্য দিয়ে), এর ডেরিভেটিভ একটি একক সংখ্যা নয় — এটি একটি সম্পূর্ণ জ্যাকোবিয়ান ম্যাট্রিক্স (পাঠ ১৫)। এই কোর্সে সম্পূর্ণ ডেরিভেশন না করেই ফলাফলটি উল্লেখ করছি — $\mathbf{s}$ যদি সফটম্যাক্সের আউটপুট ভেক্টর হয়, তাহলে:
$$ \mathbf{J}_{\text{softmax}} = \text{diag}(\mathbf{s}) - \mathbf{s}\mathbf{s}^T $$
অর্থাৎ কর্ণ বরাবর ($i=j$) $s_i(1-s_i)$ (সিগময়েডের ডেরিভেটিভের সাথে গঠনগত মিল লক্ষ করুন), আর কর্ণের বাইরে ($i \neq j$) $-s_i s_j$। এই কাঠামো মডিউল ৭-এ cross-entropy loss-এর সাথে মিলিয়ে ব্যবহার করলে চমৎকারভাবে সরলীকৃত হয়ে যায়।
৫ · ভ্যানিশিং গ্রেডিয়েন্ট সমস্যা — একটি বাস্তব ঐতিহাসিক কারণ
সিগময়েডের ডেরিভেটিভ $\sigma(x)(1-\sigma(x))$-এর সর্বোচ্চ মান কত? এটি $\sigma(x)=0.5$-এ ম্যাক্সিমাইজ হয় (এই বিন্দুতে $\sigma'(x) = 0.5 \times 0.5 = 0.25$), এবং $x$ শূন্য থেকে দূরে গেলে দ্রুত ছোট হয়ে যায় ($\sigma(x)$ $0$ বা $1$-এর কাছাকাছি চলে গেলে $\sigma'(x) \to 0$)।
মডিউল ৫-এ আমরা দেখব ব্যাকপ্রপাগেশনে একটি গভীর নেটওয়ার্কের প্রথম লেয়ারের গ্রেডিয়েন্ট পেতে চেইন রুল (পাঠ ১৩) দিয়ে প্রতিটি পরবর্তী লেয়ারের স্থানীয় ডেরিভেটিভ একের পর এক গুণ হয়। যদি প্রতিটি লেয়ারে সিগময়েড ব্যবহৃত হয়, তাহলে প্রতিটি গুণের পদ সর্বোচ্চ $0.25$ — আর $L$টি লেয়ারের জন্য চূড়ান্ত গ্রেডিয়েন্টে একটি $(0.25)^L$ মাত্রার গুণক থাকে, যা $L$ বাড়ার সাথে সূচকীয়ভাবে (exponentially) শূন্যের দিকে চলে যায়।
৬ · কোড দিয়ে যাচাই
নিচে সিগময়েড ও তার ডেরিভেটিভ NumPy দিয়ে বাস্তবায়ন করে, ডেরাইভ করা সূত্র $\sigma'(x)=\sigma(x)(1-\sigma(x))$ সংখ্যাগত finite-difference-এর সাথে মিলিয়ে দেখা হলো, এবং ডেরিভেটিভের সর্বোচ্চ মান ($0.25$) যাচাই করা হলো।
import numpy as np
def sigmoid(x):
return 1 / (1 + np.exp(-x))
# ডেরাইভ করা সূত্র: σ'(x) = σ(x)(1 - σ(x))
def sigmoid_derivative(x):
s = sigmoid(x)
return s * (1 - s)
def relu(x):
return np.maximum(0, x)
def relu_derivative(x):
return (x > 0).astype(float)
x = np.array([-4.0, -1.0, 0.0, 1.0, 4.0])
print("সিগময়েড σ(x) :", np.round(sigmoid(x), 4))
print("সিগময়েড ডেরিভেটিভ :", np.round(sigmoid_derivative(x), 4))
print("সর্বোচ্চ ডেরিভেটিভ (x=0-এ):", sigmoid_derivative(np.array([0.0]))[0], "— যা 0.25-এর সাথে মেলে")
print("\nReLU(x) :", relu(x))
print("ReLU ডেরিভেটিভ :", relu_derivative(x))
# সংখ্যাগতভাবে যাচাই (finite difference), x=1.0 বিন্দুতে
step = 1e-6
x0 = 1.0
numerical = (sigmoid(x0 + step) - sigmoid(x0)) / step
print(f"\nx=1.0-এ অ্যানালিটিক্যাল: {sigmoid_derivative(np.array([x0]))[0]:.6f}, সংখ্যাগত: {numerical:.6f}")
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।
প্র ০১ ReLU কি সম্পূর্ণভাবে ভ্যানিশিং গ্রেডিয়েন্ট সমস্যা সমাধান করে?
মূল সমস্যাটা অনেকটাই কমায়, কিন্তু নতুন একটি ভিন্ন সমস্যা তৈরি করতে পারে — "dying ReLU": যদি কোনো নিউরনের ইনপুট বারবার ঋণাত্মক হয়ে যায়, তার ডেরিভেটিভ সবসময় $0$ থাকে এবং সেই নিউরন আর কখনো আপডেট হয় না ("মরে যায়")। তাই ReLU সম্পূর্ণ সমাধান নয় — Leaky ReLU-এর মতো ভ্যারিয়েন্টও এই কারণেই তৈরি হয়েছে, যদিও এই কোর্সের পরিসীমার বাইরে।
প্র ০২ সফটম্যাক্সের ডেরিভেটিভ একটি সম্পূর্ণ ম্যাট্রিক্স কেন, অথচ সিগময়েডের ডেরিভেটিভ একটি সংখ্যা মাত্র?
সিগময়েড $\mathbb{R} \to \mathbb{R}$ — একটি ইনপুট, একটি আউটপুট, তাই ডেরিভেটিভ একটি সংখ্যা। সফটম্যাক্স $\mathbb{R}^n \to \mathbb{R}^n$ — একাধিক ইনপুট নিয়ে একাধিক আউটপুট তৈরি করে, এবং প্রতিটি আউটপুট $s_i$ নির্ভর করে সব ইনপুটের উপর (হর-এ সবার যোগফল থাকার কারণে)। তাই প্রতিটি আউটপুটের প্রতিটি ইনপুটের সাপেক্ষে আলাদা পার্শিয়াল ডেরিভেটিভ থাকে — যা মিলে একটি সম্পূর্ণ জ্যাকোবিয়ান (পাঠ ১৫) তৈরি করে।
প্র ০৩ ReLU-এর $x=0$ বিন্দুতে ডেরিভেটিভ সংজ্ঞায়িত না হওয়া ব্যবহারিকভাবে কেন সমস্যা তৈরি করে না?
গাণিতিকভাবে $x=0$ ঠিক একটি বিন্দু — বাস্তব-সংখ্যা ইনপুটে (বিশেষত floating-point গণনায়) এই নির্দিষ্ট মানে পড়ার সম্ভাবনা কার্যত শূন্য। এমনকি যদি পড়েও, একটি নির্দিষ্ট কনভেনশন (যেমন $0$) বেছে নিলে অ্যালগরিদমের সামগ্রিক আচরণে কোনো লক্ষণীয় প্রভাব পড়ে না — এই কারণে ব্যবহারিক ফ্রেমওয়ার্কগুলো (PyTorch, TensorFlow) নির্দ্বিধায় একটি নির্দিষ্ট কনভেনশন ব্যবহার করে।
অনুশীলন
-
হাতে হিসাব করুন: $\sigma(0)$-এর মান কত, এবং তা থেকে $\sigma'(0)$ হিসাব করুন।
$\sigma(0) = \frac{1}{1+e^0} = \frac{1}{2} = 0.5$। তাই $\sigma'(0) = \sigma(0)(1-\sigma(0)) = 0.5 \times 0.5 = 0.25$ — যা সিগময়েড ডেরিভেটিভের সর্বোচ্চ সম্ভাব্য মান।
-
যুক্তি দিন: $\tanh(x) = 2\sigma(2x)-1$ সম্পর্ক ব্যবহার করে ব্যাখ্যা করুন কেন ট্যানহের
গ্রেডিয়েন্টও (সিগময়েডের মতো) ইনপুট বড় হলে ভ্যানিশ করে।
যেহেতু $\tanh$ সিগময়েডেরই একটি স্কেল ও শিফট করা সংস্করণ, $|x|$ বড় হলে $\sigma(2x)$ যেমন $0$ বা $1$-এর কাছাকাছি স্যাচুরেট করে, তেমনি $\tanh(x)$ও $-1$ বা $1$-এর কাছাকাছি স্যাচুরেট করে। এই স্যাচুরেশন অঞ্চলে $1-\tanh^2(x) \to 0$, ঠিক সিগময়েডের ক্ষেত্রে যেমন হয়েছিল একই কারণে।
-
কোড বাড়ান: উপরের code cell-এ একটি
tanh_derivative(x)ফাংশন যোগ করুন (সূত্র $1-\tanh^2(x)$ ব্যবহার করে,np.tanhদিয়ে) এবং $x=0$ ও $x=3$-এ এর মান প্রিন্ট করুন।def tanh_derivative(x): return 1 - np.tanh(x) ** 2। $x=0$-এ ফলাফল $1.0$ (সর্বোচ্চ মান, সিগময়েডের $0.25$-এর চেয়ে বড় — এটিই ট্যানহকে অনুশীলনে কখনো কখনো সিগময়েডের চেয়ে ভালো পছন্দ করে তোলে)। $x=3$-এ ফলাফল $0$-এর অত্যন্ত কাছাকাছি (প্রায় $0.01$)।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- পাঠ ১৯ — কম্পিউটেশনাল গ্রাফ ও ফরওয়ার্ড পাস পরবর্তী পাঠ মডিউল ৫ শুরু হচ্ছে — এই পাঠের ডেরিভেটিভগুলোই এখন একটি সম্পূর্ণ কম্পিউটেশনাল গ্রাফে ব্যবহৃত হবে ব্যাকপ্রপাগেশন ডেরাইভ করতে।
- সব AI Courses দেখুন ABCL TECH AI Foundations, Python for AI, Machine Learning, Deep Learning, Math for AI ও আরও অনেক কিছু — সব এক জায়গায়।
-
Deep Learning কোর্স প্রয়োগ দেখুন
PyTorch-এ
nn.ReLU(),nn.Sigmoid()ওnn.Softmax()বাস্তবে কীভাবে ব্যবহৃত হয় তা দেখতে।