تعرف على تأثير التدرجات المتفجرة على التعلم العميق واكتشف تقنيات التخفيف المثبتة فعاليتها مثل قص التدرج لضمان تدريب مستقر لـ Ultralytics .
تحدث التدرجات المتفجرة أثناء تدريب الشبكات العصبية الاصطناعية عندما تتراكم التدرجات — القيم المستخدمة
لتحديث أوزان الشبكة — وتصبح كبيرة بشكل مفرط. تحدث هذه الظاهرة عادةً أثناء
الانتشار الخلفي، وهي العملية التي تقوم فيها الشبكة
بحساب الأخطاء وتعديل نفسها لتحسين الدقة. عندما تتضاعف إشارات الخطأ هذه بشكل متكرر عبر
الطبقات العميقة، يمكن أن تنمو بشكل كبير، مما يؤدي إلى تحديثات ضخمة على
لا يتم تعيين أوزان النموذج يدويًا ولكن يتم "تعلمها" من البيانات. تبدأ العملية بتهيئة الأوزان بأرقام عشوائية صغيرة. أثناء التدريب، يقوم النموذج بعمل تنبؤات على بيانات التدريب، وتقوم دالة الخسارة بحساب مدى خطأ هذه التنبؤات. ثم يتم استخدام إشارة الخطأ هذه في عملية تسمى الانتشار الخلفي لحساب تدرج الخسارة بالنسبة لكل وزن. تقوم خوارزمية التحسين، مثل تدرج تنازلي عشوائي (SGD)، بعد ذلك بضبط الأوزان في الاتجاه المعاكس للتدرج لتقليل الخطأ. تتكرر هذه الدورة لعدة حقبات حتى يتوقف أداء النموذج على مجموعة بيانات التحقق منفصلة عن التحسن، وهي علامة على أنه تعلم الأنماط في البيانات.. هذا عدم الاستقرار يمنع النموذج
من التلاقي، مما يؤدي فعليًا إلى تعطيل عملية التعلم وغالبًا ما يتسبب في أن تؤدي دالة الخسارة إلى
NaN (ليست رقماً) القيم.
لفهم سبب انفجار التدرجات، من المفيد النظر إلى بنية معماريات التعلم العميق. في الشبكات العميقة، مثل الشبكات العصبية المتكررة (RNNs) أو الشبكات العصبية التلافيفية العميقة جدًا (CNNs)، فإن التدرج للطبقات المبكرة هو ناتج مصطلحات من جميع الطبقات اللاحقة. إذا كانت هذه المصطلحات أكبر من 1.0، فإن الضرب المتكرر يعمل مثل تأثير كرة الثلج.
يؤدي هذا إلى ظهور سيناريو حيث يتخذ المحسّن خطوات كبيرة للغاية ، متجاوزًا الحل الأمثل في بيئة الأخطاء. وهذا تحدٍ شائع عند التدريب على بيانات معقدة باستخدام خوارزميات قياسية مثل الانحدار العشوائي التدرجي (SGD).
يستخدم تطوير الذكاء الاصطناعي الحديث عدة تقنيات قياسية لمنع التدرجات من الخروج عن السيطرة، مما يضمن تدريبًا موثوقًا للنموذج.
غالبًا ما تتم مناقشة مشكلة التدرج المتفجر جنبًا إلى جنب مع نظيرتها، وهي التدرج المتلاشي. وكلاهما ينبع من قاعدة التفاضل والتكامل المستخدمة في الانتشار العكسي، ولكنهما يظهران بطرق متعاكسة.
يعد التعامل مع حجم التدرج أمرًا بالغ الأهمية لنشر حلول الذكاء الاصطناعي القوية في مختلف الصناعات.
في حين أن المكتبات عالية المستوى غالبًا ما تتعامل مع هذا الأمر تلقائيًا، يمكنك تطبيق قص التدرج بشكل صريح في PyTorch أثناء حلقة تدريب مخصصة. يوضح هذا المقتطف كيفية قص التدرجات قبل أن يقوم المحسن بتحديث الأوزان.
import torch
import torch.nn as nn
# Define a simple model and optimizer
model = nn.Linear(10, 1)
optimizer = torch.optim.SGD(model.parameters(), lr=0.1)
# Simulate a training step
loss = torch.tensor(100.0, requires_grad=True) # Simulated high loss
loss.backward()
# Clip gradients in place to a maximum norm of 1.0
# This prevents the weight update from being too drastic
torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
# Update weights using the safe, clipped gradients
optimizer.step()