Vanishing Gradient
تحدث مشكلة تلاشي التدرج عندما تتقلص التدرجات طبقةً بعد أخرى أثناء الانتشار العكسي، فتتوقف الطبقات الأولى عن التعلم. يتناول هذا النص الأسباب والحلول.
تحدث مشكلة تلاشي التدرج عندما تتضاءل التدرجات التي يرسلها الانتشار العكسي من الخسارة باتجاه الطبقات الأولى في شبكة عصبية عميقة على نحو هندسي مع العمق، بحيث تتلقى الطبقات الأسبق تحديثات أصغر من أن تتعلم أي شيء. ولأن التدرج عند طبقة ما حاصل ضرب المشتقات المحلية لكل طبقة تعلوها، فإن شبكة تضرب كل طبقة فيها التدرج في قيمة أقل من 1 قد تفقد مقادير كثيرة من الرتبة بين المخرج والمدخل. حلّل Sepp Hochreiter هذا التأثير في أطروحته الجامعية عام 1991، وأبقى الشبكات العميقة ذات التغذية الأمامية والشبكات العصبية المتكررة (RNNs) صعبة التدريب إلى أن ظهرت دوال تنشيط وتهيئات وبنى معمارية أفضل.
لماذا تتلاشى التدرجات#
يطبق الانتشار العكسي قاعدة السلسلة، لذا يكون التدرج الذي يصل إلى طبقة ما حاصل ضرب التدرج الوارد في مصفوفة الأوزان ومشتقة دالة التنشيط لكل طبقة لاحقة. ولا تتجاوز مشتقة سيغمويد أبدًا 0.25، وهي قيمتها عند مدخل مقداره 0، كما تقترب من 0 عندما تتشبع الوحدة عند مدخلات موجبة أو سالبة كبيرة. وتبلغ مشتقة tanh ذروتها عند 1، ثم تقترب أيضًا من 0 عند التشبع. لذلك تضرب عشرون طبقة من سيغمويد التدرج بعامل لا يتجاوز 0.25²⁰، أي أقل من 10⁻¹²، قبل احتساب الأوزان حتى. ويوازي تأثير مقياس الأوزان تأثير دالة التنشيط: فقد عزا Glorot وBengio جانبًا كبيرًا من الصعوبة إلى التهيئة، واقترحا تباينات للأوزان تتناسب مع عدد المدخلات والمخرجات في كل طبقة، بحيث تظل تباينات التنشيط والتدرج ثابتة تقريبًا عبر الطبقات.
يسهل قياس هذا التأثير بمقارنة مقادير تدرجات الأوزان عند أعلى شبكة سيغمويد مؤلفة من 20 طبقة وأسفلها، مع الوصلات المتبقية المختصرة ومن دونها:
import torch
torch.manual_seed(0)
x = torch.randn(64, 32)
# The same 20-layer sigmoid network, without and with residual shortcuts
for residual in (False, True):
layers = [torch.nn.Linear(32, 32) for _ in range(20)]
h = x
for layer in layers:
out = torch.sigmoid(layer(h))
h = h + out if residual else out
h.sum().backward()
# Compare the weight-gradient size at the last layer and the first layer
last, first = layers[-1].weight.grad.norm(), layers[0].weight.grad.norm()
print(f"residual={residual}: layer 20 gradient {last:.1e}, layer 1 gradient {first:.1e}")من دون الوصلات المختصرة، يكون معيار تدرج الطبقة الأخيرة 2.5e+02 والأولى 4.2e-15، أي أصغر بنحو 17 رتبة عشرية، لذا لا تتغير أوزان الطبقة الأولى فعليًا أبدًا. ومع الوصلات المتبقية المختصرة، يبلغ تدرج الطبقة الأولى 5.6e+01، أي أصغر بنحو 38 مرة من تدرج الطبقة الأخيرة البالغ 2.1e+03.
تلاشي التدرجات وانفجارها#
تنشأ كلتا المشكلتين عن الضرب المتكرر نفسه. ويعطّل تلاشي التدرجات التعلّم بصمت: تظل الخسارة تنخفض بفعل الطبقات الأخيرة، بينما تبقى الطبقات المبكرة قريبة من تهيئتها العشوائية. أما التدرجات المتفجرة فتتزايد هندسيًا بدلًا من ذلك، وتظهر بوضوح في صورة ارتفاعات مفاجئة للخسارة وقيم NaN. ويحدّ قص التدرج من معيار التدرج المتفجر قبل كل تحديث، ولا يؤثر في التدرج الذي تلاشى بالفعل. وترتبط بذلك مشكلة موت ReLU، إذ يظل مدخل وحدة ReLU سالبًا، فيصبح تدرجها صفرًا تمامًا وتتوقف الوحدة عن التعلم.
كيفية منع تلاشي التدرجات#
أشيع حل مفيد هو الوصلة المتبقية، وهي اختصار الهوية في صميم الشبكات المتبقية (ResNets). تنتج الكتلة المتبقية x + F(x)، لذا يكون تدرجها بالنسبة إلى x مساويًا لـ1 مضافًا إليه مشتق F، ويمر مسار الاختصار بالتدرج الوارد دون تغيير.
تتيح الوصلات المتبقية المختصرة تدريب ResNets بأكثر من 100 طبقة، وتظهر في معظم البنى المعمارية العميقة الحديثة تقريبًا، من المحوّلات إلى YOLO26، إذ تغلّف كتل C3k2 اختناقات متبقية، وتجمع كتل الالتفاف القياسية بين تطبيع الدفعات وتنشيطات SiLU.
تعمل حلول أخرى إلى جانب الوصلات المتبقية:
- دوال التنشيط غير المشبعة: مشتقة ReLU تساوي 1 تمامًا للمدخلات الموجبة، بينما تحافظ Leaky ReLU وSiLU على تدرج غير صفري للمدخلات السالبة أيضًا.
- التهيئة المُقاسة: تناسب تهيئة Xavier (Glorot) طبقات tanh وسيغمويد، بينما تضاعف تهيئة He تباين الأوزان للتعويض عن تصفير ReLU لنصف مدخلاتها.
- طبقات التطبيع: يحافظ تطبيع الدفعات وتطبيع الطبقات على متوسطات التنشيط السابقة للصفر وتبايناتها الواحدية، بعيدًا عن المناطق المسطحة لدوال التنشيط المشبعة.
- البنى المتكررة ذات البوابات: تنقل شبكات الذاكرة طويلة قصيرة الأمد (LSTM) والوحدات المتكررة ذات البوابات (GRUs) حالتها إلى الأمام عبر تحديثات جمعيّة ذات بوابات بدلًا من الضرب المتكرر، وقد مكّنت هذه الخاصية LSTM الأصلية من تجاوز فواصل زمنية تتخطى 1,000 خطوة.










