Stochastic Gradient Descent (SGD)
تعرف على كيفية تحسين خوارزمية الانحدار المتدرج العشوائي (SGD) لنماذج تعلم الآلة. اكتشف كيف تدعم SGD نموذج Ultralytics YOLO26 لتدريب أسرع وأكثر كفاءة للذكاء الاصطناعي.
يُعد الانحدار الاشتقاقي العشوائي (SGD) خوارزمية تحسين قوية تُستخدم على نطاق واسع في التعلم الآلي لتدريب النماذج بكفاءة، خاصة عند العمل مع مجموعات بيانات ضخمة. في جوهره، يُعتبر SGD تنويعاً لطريقة الانحدار الاشتقاقي القياسية، وهو مصمم لتسريع عملية التعلم من خلال تحديث معاملات النموذج بشكل متكرر. بدلاً من حساب الخطأ لمجموعة البيانات بأكملها قبل إجراء تحديث واحد—كما يتم في انحدار الدفعة التقليدي—يقوم SGD بتحديث أوزان النموذج باستخدام عينة تدريب واحدة فقط يتم اختيارها عشوائياً في كل مرة. تُدخل هذه الطبيعة "العشوائية" ضوضاء في مسار التحسين، مما يساعد النموذج على الهروب من الحلول دون المثالية والتقارب بشكل أسرع في مجموعات البيانات الضخمة حيث تكون معالجة جميع البيانات دفعة واحدة أمراً مكلفاً حسابياً.
كيف يعمل الانحدار الاشتقاقي العشوائي#
الهدف الأساسي لأي عملية تدريب هو تقليل loss function، والتي تقيس الفرق بين توقعات النموذج وقيم الهدف الفعلية. يحقق SGD ذلك من خلال دورة تكرارية. أولاً، تختار الخوارزمية نقطة بيانات عشوائية من training data. ثم تقم بإجراء مرور أمامي لتوليد توقع وحساب الخطأ. باستخدام backpropagation، تحسب الخوارزمية التدرج - وهو أساساً ميل مشهد الخطأ - بناءً على ذلك المثال الفردي. وأخيراً، تقوم بتحديث model weights في الاتجاه المعاكس للتدرج لتقليل الخطأ.
تتكرر هذه العملية لعدة تكرارات، والتي غالباً ما يتم تجميعها في epochs، حتى يستقر أداء النموذج. يتم التحكم في حجم هذه التحديثات بواسطة معلمة فائقة تُعرف باسم learning rate. نظراً لأن كل خطوة تعتمد على عينة واحدة فقط، فإن المسار المؤدي إلى الحد الأدنى غالباً ما يكون متعرجاً أو صاخباً مقارنة بالمسار السلس لـ batch gradient descent. ومع ذلك، غالباً ما يكون هذا التشويش مفيداً في التعلم العميق، حيث يمكن أن يمنع النموذج من الوقوع في الحد الأدنى المحلي، مما قد يؤدي إلى حل عالمي أفضل.
مقارنة SGD بخوارزميات التحسين الأخرى#
يعد فهم الاختلافات بين SGD وخوارزميات optimization algorithms ذات الصلة أمراً بالغ الأهمية لتحديد استراتيجية التدريب المناسبة.
- Batch Gradient Descent: تحسب هذه الطريقة التقليدية التدرج باستخدام مجموعة البيانات بأكملها لكل تحديث فردي. وفي حين أنها توفر مساراً مستقراً ومباشراً إلى الحد الأدنى، إلا أنها بطيئة للغاية وتستهلك ذاكرة مكثفة لمهام machine learning (ML) واسعة النطاق.
- Mini-Batch Gradient Descent: في الممارسة العملية، تنفذ معظم أطر التعلم العميق الحديثة، بما في ذلك PyTorch، نهجاً هجيناً غالباً ما يشار إليه باسم SGD ولكن تقنياً بصرامة "Mini-Batch SGD". تحدث هذه الطريقة المعلمات باستخدام مجموعة صغيرة من العينات (دفعة) بدلاً من عينة واحدة فقط. وهي توازن بين الكفاءة الحسابية لـ SGD النقي واستقرار batch gradient descent، مما يجعلها المعيار لتدريب نماذج مثل YOLO26.
- Adam Optimizer: آدم هو خوارزمية تحسين معدل التعلم التكيفي التي تعتمد على SGD. وهي تضبط معدل التعلم لكل معلمة على حدة بناءً على تقديرات العزم. وفي حين أن آدم غالباً ما يتقارب بشكل أسرع، إلا أن SGD مع الزخم لا يزال يستخدم بشكل متكرر في computer vision (CV) لقدرته على العثور على حلول أكثر قابلية للتعميم في سيناريوهات معينة.
تطبيقات العالم الحقيقي#
تُعد SGD ومشتقاتها المحركات خلف العديد من تقنيات الذكاء الاصطناعي التحويلية المستخدمة اليوم.
-
المركبات ذاتية القيادة: في تطوير autonomous vehicles، يجب على النماذج معالجة تدفقات هائلة من البيانات المرئية لتحديد المشاة، وإشارات المرور، والعقبات. يتطلب تدريب شبكات object detection المعقدة هذه تحسينًا فعالًا للتعامل مع ملايين صور الطرق. يتيح SGD للمهندسين تحسين دقة النموذج بشكل تكراري، مما يضمن قدرة الأنظمة الحرجة للسلامة في AI in automotive على اتخاذ قرارات موثوقة في الوقت الفعلي.
-
التشخيص الطبي: يعتمد مجال medical image analysis بشكل كبير على التعلم العميق للكشف عن الحالات الشاذة مثل الأورام في صور الرنين المغناطيسي أو الأشعة السينية. ونظراً لأن مجموعات البيانات الطبية يمكن أن تكون هائلة وعالية الدقة، فإن SGD يتيح تدريب شبكات convolutional neural networks (CNNs) المعقدة دون إرهاق موارد الذاكرة. ويسهل هذا إنشاء أدوات تشخيص عالية الدقة تساعد الأطباء في AI in healthcare.
مثال كود Python#
في حين أن المكتبات عالية المستوى مثل ultralytics تتعامل مع التحسين داخلياً أثناء أمر train()، يمكنك أن ترى كيف تتم تهيئة واستخدام محسن SGD داخل سير عمل PyTorch منخفض المستوى. يوضح هذا المقتطف تحديد محسن SGD بسيط لموتر.
import torch
import torch.nn as nn
import torch.optim as optim
# Define a simple linear model
model = nn.Linear(10, 1)
# Initialize Stochastic Gradient Descent (SGD) optimizer
# 'lr' is the learning rate, and 'momentum' helps accelerate gradients in the right direction
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9)
# Create a dummy input and target
data = torch.randn(1, 10)
target = torch.randn(1, 1)
# Forward pass
output = model(data)
loss = nn.MSELoss()(output, target)
# Backward pass and optimization step
optimizer.zero_grad() # Clear previous gradients
loss.backward() # Calculate gradients
optimizer.step() # Update model parameters
print("Model parameters updated using SGD.")التحديات والحلول#
على الرغم من شعببيته، يأتي SGD مصحوباً بتحديات. المشكلة الأساسية هي التشويش في خطوات التدرج، مما قد يتسبب في تقلب الخسارة بشكل كبير بدلاً من التقارب بسلاسة. للتخفيف من ذلك، غالباً ما يستخدم الممارسون الزخم، وهي تقنية تساعد في تسريع SGD في الاتجاه المناسب وتخفيف التذبذبات، على غرار كرة ثقيلة تدحرج إلى أسفل التل. بالإضافة إلى ذلك، يعد العثور على معدل التعلم الصحيح أمراً بالغ الأهمية؛ وإذا كان مرتفعاً للغاية، فقد يتجاوز النموذج الحد الأدنى (تدرج متفجر)، وإذا كان منخفضاً للغاية، فسيكون التدريب بطيئاً بشكل مؤلم. تساعد أدوات مثل Ultralytics Platform في أتمتة هذه العملية من خلال إدارة hyperparameter tuning وتوفير التصور لمقاييس التدريب. إن التطورات مثل Adam optimizer تعمل أساساً على أتمتة تعديل معدل التعلم، معالجة بعض صعوبات SGD المتأصلة.






