Leaky ReLU
تمرر دالة Leaky ReLU المُدخلات السلبية بميل صغير، غالبًا 0.01، كي تستمر التدرجات في التدفق وتتجنب العصبونات مشكلة موت ReLU.
Leaky ReLU (وحدة خطية مصححة تسربّية) هي دالة تنشيط تعيد المُدخل كما هو عندما يكون موجبًا، وتضربه في ميل ثابت صغير، مثل 0.01، عندما يكون سالبًا. وهي تعديل لدالة ReLU القياسية، التي تعطي صفرًا لكل مُدخل سالب، بحيث تنتج القيم السالبة خرجًا صغيرًا، والأهم من ذلك، تدرجًا غير صفري أثناء الانتشار العكسي. وصف أندرو ماس وأوني حنّون وأندرو إنغ هذه الدالة في دراسة عام 2013 لتنشيطات المقوِّم في نماذج الصوتيات للتعرّف على الكلام، مستخدمين ميلًا قدره 0.01. وتُستخدم في نماذج التعلّم العميق التي يهم فيها تدفق التدرج، بدءًا من مميّزات الشبكات التوليدية التنافسية ووصولًا إلى كواشف الكائنات الأقدم في YOLO ووحدات المعالجة العصبية التي تشغّل نماذج مكمّمة ذات تنشيطات خطية مقطعية.
آلية عمل Leaky ReLU#
تحسب Leaky ReLU f(x) = x عندما يكون x > 0، وf(x) = αx عندما يكون x ≤ 0، حيث يكون الميل السالب α معلمة فائقة ثابتة بين 0 و1. ومشتقتها تساوي 1 للمُدخلات الموجبة وα للمُدخلات السالبة، لذا يمرّر كل مُدخل جزءًا من التدرج إلى الأوزان التي أنتجته. ويختلف الميل المعتاد بحسب المصدر وإطار العمل: القيمة الافتراضية في PyTorch nn.LeakyReLU هي 0.01، وفي tf.nn.leaky_relu في TensorFlow هي 0.2، وفي طبقة LeakyReLU في Keras هي 0.3. تمرّر هذه الشيفرة المُدخلات السالبة عبر ReLU وLeaky ReLU، وتحسب تدرج كل منهما:
import torch
from torch import nn
# Negative pre-activations, the inputs a ReLU unit turns into zeros
x = torch.tensor([-3.0, -1.0, -0.5], requires_grad=True)
for activation in (nn.ReLU(), nn.LeakyReLU(negative_slope=0.01)):
y = activation(x)
y.sum().backward() # gradient that flows back toward the weights
print(f"{activation}: output {y.detach().numpy()}, gradient {x.grad.numpy()}")
x.grad = Noneتطبع الشيفرة ReLU(): output [0. 0. 0.], gradient [0. 0. 0.] وLeakyReLU(negative_slope=0.01): output [-0.03 -0.01 -0.005], gradient [0.01 0.01 0.01]. لا تمرّر ReLU أي تدرج عائد من هذه المُدخلات، لذا لا يستطيع الانحدار المتدرج تغيير الأوزان التي أنتجتها، بينما تمرّر Leaky ReLU نسبة 1% من التدرج الوارد.
مشكلة موت ReLU#
تموت عصبونة ReLU عندما تتحول أوزانها وانحيازها إلى حدّ يجعل التنشيط المسبق سالبًا لكل مُدخل في بيانات التدريب. عندئذٍ يكون خرجها صفرًا دائمًا، ويكون تدرجها صفرًا دائمًا، ولا تُحدّث أوزانها الداخلة مجددًا، فتُفقد العصبونة نهائيًا من الشبكة العصبية. ويزيد معدل التعلّم المرتفع أو تحديث الانحياز السالب الكبير من احتمال حدوث ذلك. وتُبقي Leaky ReLU تدرجًا صغيرًا في الجانب السالب، لذا يمكن إعادة العصبونة التي تنحرف إلى المنطقة السالبة:
تختلف مشكلة موت ReLU عن مشكلة تلاشي التدرج، التي تتناقص فيها التدرجات تدريجيًا أثناء مرورها عبر طبقات كثيرة من الدوال المشبعة مثل sigmoid أو tanh.
Leaky ReLU مقارنةً بدوال التنشيط ذات الصلة#
- ReLU: تنتج أصفارًا تامة للمُدخلات السالبة، ما يجعل التنشيطات متناثرة والحوسبة زهيدة، لكنه يسمح بموت العصبونات. وتتنازل Leaky ReLU عن التناثر التام مقابل وجود تدرج في كل المواضع.
- ReLU البارامترية (PReLU): تتعلم الميل السالب أثناء التدريب، عادةً قيمة واحدة لكل قناة، بدلًا من تثبيته. وبدأ كايمينغ هي وزملاؤه الميل عند 0.25، وهي أيضًا القيمة الافتراضية في
nn.PReLUفي PyTorch. - SiLU وGELU: منحنيان سلسان ينخفضان قليلًا تحت الصفر للمُدخلات السالبة، ولا يتضمنان زاوية حادة عند الصفر. تُعد SiLU الدالة الافتراضية في نماذج YOLO الحديثة، وتشيع GELU في المحوّلات. وتتطلب كل منهما عملية أُسّية لكل قيمة، بينما لا تحتاج Leaky ReLU إلا إلى مقارنة وضرب.
مواضع استخدام Leaky ReLU#
- مميّزات DCGAN: استخدمت بنية DCGAN دالة Leaky ReLU بميل 0.2 في كل طبقة من طبقات المميّز، كي يتلقى المولّد تدرجات مفيدة حتى للصور التي يرفضها المميّز، وأبقت شبكات GAN اللاحقة الكثيرة على هذا الخيار.
- كواشف YOLO المبكرة: استخدم YOLO الأصلي دالة Leaky ReLU بميل 0.1 في كل طبقة عدا الأخيرة، وكذلك YOLOv2 وYOLOv3. واستخدمها YOLOv5 حتى إصدار v4.0 في يناير 2021، حين استُبدلت بـSiLU.
- شبكات الانتباه الرسومي: تطبّق هذه الشبكات العصبية البيانية Leaky ReLU بميل 0.2 عند تقييم مقدار انتباه كل عقدة إلى جيرانها.
- مسرّعات الذكاء الاصطناعي الطرفي: يمكن لوحدات المعالجة العصبية الصحيحة التي تشغّل نماذج مكمّمة دمج التنشيط الخطي المقطعي في الالتفاف السابق. وتنفّذ DPU من Xilinx التابعة لـAMD ذلك مع ReLU وLeaky ReLU، لكنها تشغّل sigmoid، وبالتالي SiLU، على وحدة المعالجة المركزية المضيفة.
تقبل ملفات YAML لنماذج Ultralytics YOLO مفتاح activation يستبدل SiLU الافتراضية في كل كتلة التفاف قياسية، لذا يمكن تدريب YOLO26 باستخدام activation: nn.LeakyReLU(0.1015625) لمطابقة الميل الثابت في DPU البالغ 26/256.










