Activation Functions
دوال التنشيط (Activation Functions) Activation Functions
دوال التنشيط تضيف اللاخطية للشبكة العصبية — بدونها تكديس الطبقات الخطية يبقى خطيًا. ReLU الأكثر شيوعًا للطبقات المخفية، Softmax لمُخرج التصنيف المتعدد.
دالة التنشيط تطبّق على ناتج الطبقة (مجموع الأوزان × المُدخل + الانحياز) لإنتاج المُخرج الذي يدخل الطبقة التالية. بدونها، طبقات خطية مكدّسة = طبقة خطية واحدة — لا فائدة من العمق. دوال مثل ReLU (max(0,x))، Tanh، Sigmoid تضيف اللاخطية التي تجعل الشبكة قادرة على تمثيل أنماط معقّدة.
ReLU الأكثر استخدامًا للطبقات المخفية: بسيطة حسابيًا، تخفّف مشكلة vanishing gradient مقارنة بـ Sigmoid/Tanh. سلبيتها: ظاهرة Dying ReLU حين تخرج الخلية من التعلّم (تدرّج صفر لكل مُدخل سالب). Leaky ReLU و GELU و SiLU بدائل تعالج هذه الحالة.
لطبقة المُخرج، الاختيار يعتمد على المهمة: Sigmoid لتصنيف ثنائي (احتمال)، Softmax لتصنيف متعدد (احتمالات مجموعها 1)، Linear (بدون تنشيط) للانحدار، Tanh لمُخرج بين -1 و 1.
الصياغة
ReLU(x) = max(0, x) LeakyReLU(x) = x if x > 0 else α·x (α صغير) Sigmoid(x) = 1 / (1 + exp(−x)) Tanh(x) = (exp(x) − exp(−x)) / (exp(x) + exp(−x)) Softmax(xᵢ) = exp(xᵢ) / Σ exp(xⱼ)
📄 مثال
import torch.nn as nn
# طبقات مخفية ReLU (الأكثر شيوعًا)
hidden = nn.Sequential(
nn.Linear(64, 32),
nn.ReLU(), # تنشيط للطبقة المخفية
nn.Linear(32, 16),
nn.LeakyReLU(0.01), # بديل يحلّ مشكلة Dying ReLU
)
# مُخرج التصنيف الثنائي
binary_out = nn.Linear(16, 1)
activation = nn.Sigmoid() # يحول الرقم لاحتمال بين 0 و 1
# مُخرج التصنيف المتعدد
multi_out = nn.Linear(16, 10)
softmax = nn.Softmax(dim=1) # مجموع الاحتمالات = 1أهم النقاط
| النقطة | الوظيفة |
|---|---|
| ReLU | max(0, x) — الافتراضي للطبقات المخفية |
| LeakyReLU | يسمح بتدرّج صغير للقيم السالبة — يحلّ Dying ReLU |
| GELU / SiLU | بدائل حديثة — شائعة في Transformers |
| Softmax | لطبقة مُخرج التصنيف المتعدد — يحول logits لاحتمالات |
💡 نصائح عملية
- استخدم ReLU أو LeakyReLU للطبقات المخفية كقاعدة عامة — Sigmoid/Tanh للطبقات المخفية تسبب vanishing gradient
- لا تطبّق تنشيط على مُخرج الانحدار — استخدم Linear (أو nn.Identity) كآخر طبقة
⚠️ أخطاء شائعة
- تطبيق Softmax داخل خسارة CrossEntropyLoss في PyTorch — nn.CrossEntropyLoss تطبّقها داخليًا، التكرار يسبب خطأ
- اختيار Sigmoid لمُخرج تصنيف متعدد — يعطي احتمالات مستقلة قد لا مجموعها 1. استخدم Softmax
خصائص ذات صلة
🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار AI-ML الكامل بالعربي.
📚 للتعمق التقني الكامل بالإنجليزية: PyTorch Documentation