ReLU (Rectified Linear Unit)
تُخرج ReLU (الوحدة الخطية المصححة) القيمة max(0, x)، فتمرّر المدخلات الموجبة وتحوّل السالبة إلى صفر. وتغطي تدرجها ومشكلة ReLU الميتة ومتغيراتها، مع أمثلة برمجية باستخدام PyTorch.
دالة الوحدة الخطية المصححة (ReLU) هي دالة التنشيط f(x) = max(0, x): تمرر المدخلات الموجبة دون تغيير، وتُخرج صفرًا لكل ما عداها. وتمنح هذه المقارنة البسيطة الشبكة العصبية (NN) اللاخطية اللازمة لتعلّم الأنماط المنحنية، بتكلفة حسابية شبه معدومة. أصبحت ReLU دالة التنشيط الافتراضية للطبقات الخفية في التعلّم العميق بعد أن استخدمها فينود ناير وجيفري هينتون عام 2010، وفاز AlexNet، وهو شبكة عصبية التفافية (CNN) مبنية على ReLU، بتحدي ImageNet لعام 2012. وما زالت المعيار الذي تقاس به دوال التنشيط الأحدث مثل SiLU وGELU.
آلية عمل ReLU#
مشتقة ReLU تساوي 1 للمدخلات الموجبة و0 للمدخلات السالبة. وتكون المشتقة غير معرّفة عند الصفر تمامًا، وتستخدم أطر العمل مثل PyTorch القيمة 0. وتفسّر هاتان القيمتان الخصائص الأساسية لـ ReLU:
- منخفضة التكلفة حسابيًا: تمريرة التمرير الأمامي مقارنة بالصفر، وتمرير الانتشار الخلفي قناع، من دون دوال أسية كما في sigmoid أو tanh.
- لا تشبّع للمدخلات الموجبة: يمر تدرّج قيمته 1 تمامًا عبر كل وحدة نشطة دون تغيير، فلا تتضاءل إشارات الخطأ أثناء انتقالها عكسيًا عبر طبقات كثيرة، ما يحدّ من مشكلة تلاشي التدرّج التي تسببها الدوال المشبعة.
- تنشيطات متناثرة: يتحول كل مدخل سالب إلى صفر تمامًا، لذا لا ينشط في أي لحظة سوى جزء من الطبقة. ومع الأوزان المهيأة عشوائيًا، تُخرج نحو نصف وحدات الطبقة صفرًا لمدخل معين.
- خطية مقطعية: تحسب الشبكة المبنية من ReLU دالة خطية مقطعية لمدخلاتها، تضم مناطق خطية عديدة تتصل عند نقاط تشغيل الوحدات أو إيقافها.
يطبّق المثال التالي باستخدام PyTorch الدالة nn.ReLU، ويستخدم autograd لحساب التدرّج عند النقاط نفسها:
import torch
from torch import nn
relu = nn.ReLU()
# Inputs on both sides of zero, tracked so PyTorch can compute gradients
x = torch.tensor([-2.0, -0.5, 0.0, 0.5, 2.0], requires_grad=True)
y = relu(x)
# Backpropagate a gradient of 1 from each output to its input
y.sum().backward()
print(f"Output: {y.tolist()}")
print(f"Gradient: {x.grad.tolist()}")يطبع المخرجات [0.0, 0.0, 0.0, 0.5, 2.0] والتدرّجات [0.0, 0.0, 0.0, 1.0, 1.0]. تمر المدخلات الموجبة مع بقاء تدرّجها سليمًا، ولا تتلقى المدخلات السالبة والصفر أي تدرّج، وهذا مصدر كل من التناثر في ReLU وأبرز أنماط إخفاقها.
مشكلة موت ReLU#
تُخرج وحدة ReLU التي يكون مدخلها سالبًا لكل أمثلة بيانات التدريب صفرًا ولا تتلقى أي تدرّج، لذا لا تتغير أوزانها مجددًا وتصبح الوحدة معطّلة عمليًا. وعادةً ما تتعطل الوحدات عندما يدفع تحديث كبير للأوزان، غالبًا بسبب معدل تعلّم مرتفع، انحيازها إلى قيم سالبة بعيدة. لا تكلّف بضع وحدات معطّلة الكثير، لكن التدريب المضبوط على نحو سيئ قد يعطّل نسبة كبيرة من طبقة كاملة. وتُبقي تهيئة He، التي تضبط مقاييس الأوزان الأولية لطبقات ReLU، إلى جانب معدلات التعلّم المعتدلة وتطبيع الدفعات، معظم الوحدات نشطة؛ كما تزيل المتغيرات المتسربة هذه المشكلة لأنها لا تسمح للتدرّج بالوصول إلى الصفر.
متغيرات ReLU#
- Leaky ReLU: تضرب المدخلات السالبة في ميل ثابت صغير، عادةً 0.01، كي تستمر الوحدات غير النشطة في تلقي التدرّج.
- PReLU: تتعلّم الميل السالب أثناء التدريب. قدّم كايمينغ هي وزملاؤه هذه الدالة عام 2015 في الورقة نفسها التي اقترحت تهيئة He.
- ReLU6: تحدّ المخرجات عند 6، وفق min(max(0, x), 6)، ما يبقي التنشيطات ضمن نطاق تمثّله الحسابات منخفضة الدقة جيدًا. وتستخدمها MobileNetV1 وMobileNetV2.
- ELU: تستبدل الجانب السالب بمنحنى أسي أملس يتشبّع عند −1، ما يدفع متوسط التنشيطات إلى الاقتراب من الصفر.
- SiLU وGELU: منحنيان أملسان، x · σ(x) وx · Φ(x)، يتصرفان مثل ReLU عند المدخلات الكبيرة، لكنهما يمرران القيم السالبة الصغيرة ولا يتضمنان زاوية حادة عند الصفر. وتكلفتهما لكل عنصر أعلى، وقد أفادت ورقة GELU بتحقيق مكاسب على ReLU في كل مهام الرؤية واللغة والكلام التي اختبرتها.
ReLU مقابل Sigmoid وTanh#
قبل ظهور ReLU، كانت الطبقات الخفية تستخدم sigmoid أو tanh. تتشبّع الدالتان: إذ تنبسط منحنياتهما عند المدخلات الموجبة أو السالبة الكبيرة، وتقترب مشتقاتهما من الصفر، كما أن مشتقة sigmoid لا تتجاوز 0.25 حتى عند أشد نقاطها انحدارًا. ويؤدي ضرب هذه المشتقات عبر طبقات كثيرة إلى حرمان الطبقات المبكرة من التدرّج. في ورقة AlexNet، حققت شبكة CNN من أربع طبقات تستخدم ReLU خطأ تدريب قدره 25% على CIFAR-10، أسرع بست مرات من الشبكة نفسها التي تستخدم وحدات tanh. وما زال استخدام sigmoid وtanh قائمًا عندما تكون نطاقاتهما المحدودة مطلوبة: تُستخدم sigmoid في طبقات المخرجات لتمثيل الاحتمالات وفي بوابات الخلايا المتكررة، وتُستخدم tanh في الحالات الخفية المتكررة.
ReLU في النماذج الحديثة#
تستخدم ResNet ومعظم شبكات CNN في عصرها ReLU في كل موضع، كما استخدم المحوّل الأصلي لعام 2017 هذه الدالة في طبقاته المغذية للأمام. انتقلت نماذج أحدث كثيرة إلى دوال أكثر سلاسة، مثل GELU في BERT ومحوّلات الرؤية، وSwiGLU في كثير من النماذج اللغوية الكبيرة الحالية، بينما تظل ReLU شائعة عندما تكون السرعة ودعم العتاد أهم الاعتبارات. يستخدم YOLO26 افتراضيًا SiLU في كتل Conv، ويستبدل سطر activation: nn.ReLU() في ملف YAML للنموذج دالة ReLU بكل كتلة Conv قبل التدريب، ما يناسب مسرّعات مثل AMD Zynq UltraScale+ DPU التي تنفذ ReLU مباشرةً ولا تدعم SiLU. وفي PyTorch، تستبدل nn.ReLU(inplace=True) موتر الإدخال بنتيجة العملية، موفّرةً الذاكرة التي كان سيستهلكها موتر إخراج منفصل.










