Stochastic Gradient Descent (SGD)
تعرّف على كيفية تحسين الانحدار المتدرج العشوائي (SGD) لنماذج التعلم الآلي. اكتشف كيف يشغّل SGD Ultralytics YOLO26 لتدريب ذكاء اصطناعي أسرع وأكثر كفاءة.
يُعدّ الانحدار المتدرج العشوائي (SGD) خوارزمية تحسين قوية تُستخدم على نطاق واسع في تعلّم الآلة لتدريب النماذج بكفاءة، ولا سيما عند العمل مع مجموعات بيانات كبيرة. في جوهره، يُمثل SGD نسخةً من طريقة الانحدار المتدرج القياسية، وقد صُمم لتسريع عملية التعلّم من خلال تحديث معلمات النموذج بوتيرة أكثر تكرارًا. وبدلًا من حساب الخطأ لمجموعة البيانات بأكملها قبل إجراء تحديث واحد—كما يحدث في الانحدار المتدرج التقليدي على دفعات—يُحدّث SGD أوزان النموذج باستخدام مثال تدريب واحد مختار عشوائيًا في كل مرة. وتُدخل هذه الطبيعة «العشوائية» ضوضاءً في مسار التحسين، ما قد يساعد النموذج على الإفلات من الحلول دون المثلى والتقارب بسرعة أكبر على مجموعات البيانات الضخمة التي تكون فيها معالجة جميع البيانات دفعة واحدة مكلفة حسابيًا إلى حدّ يحول دون جدواها.
كيفية عمل الانحدار المتدرج العشوائي#
الهدف الأساسي من أي عملية تدريب هو تقليل دالة الخسارة، التي تقيس الفرق بين تنبؤات النموذج وقيم الهدف الفعلية. يحقق SGD ذلك من خلال دورة تكرارية. أولًا، تختار الخوارزمية نقطة بيانات عشوائية من بيانات التدريب. ثم تُجري مرورًا أماميًا لإنشاء تنبؤ وتحسب الخطأ. وباستخدام الانتشار العكسي، تحسب الخوارزمية التدرج—أي ميل سطح الخطأ أساسًا—استنادًا إلى ذلك المثال الواحد. وأخيرًا، تُحدّث أوزان النموذج في الاتجاه المعاكس للتدرج لتقليل الخطأ.
تتكرر هذه العملية لعدد كبير من التكرارات، وغالبًا ما تُجمع في عصور، إلى أن يستقر أداء النموذج. ويتحكم في مقدار هذه التحديثات معامل فائق يُعرف باسم معدل التعلّم. ونظرًا إلى أن كل خطوة تستند إلى عينة واحدة فقط، فإن المسار إلى الحد الأدنى يكون غالبًا متعرجًا أو مشوشًا مقارنةً بالمسار السلس للانحدار المتدرج على دفعات. ومع ذلك، تكون هذه الضوضاء مفيدة غالبًا في التعلّم العميق، إذ يمكنها منع النموذج من التعلق بحد أدنى محلي، ما قد يؤدي إلى حل عالمي أفضل.
مقارنة SGD بخوارزميات التحسين الأخرى#
يُعد فهم الفروق بين SGD وخوارزميات التحسين ذات الصلة أمرًا بالغ الأهمية لاختيار استراتيجية التدريب المناسبة.
- الانحدار المتدرج على دفعات: تحسب هذه الطريقة التقليدية التدرج باستخدام مجموعة البيانات بأكملها في كل تحديث. وعلى الرغم من أنها توفر مسارًا مستقرًا ومباشرًا إلى الحد الأدنى، فإنها بطيئة للغاية وتستهلك قدرًا كبيرًا من الذاكرة في مهام تعلّم الآلة (ML) واسعة النطاق.
- الانحدار المتدرج بالدفعات المصغرة: عمليًا، تطبق معظم أطر التعلّم العميق الحديثة، بما في ذلك PyTorch، نهجًا هجينًا يُشار إليه غالبًا باسم SGD، لكنه يُسمى تقنيًا وبشكل دقيق «SGD بالدفعات المصغرة». تُحدّث هذه الطريقة المعلمات باستخدام مجموعة صغيرة من العينات (دفعة) بدلًا من عينة واحدة فقط. وهي توازن بين الكفاءة الحسابية لـ SGD الخالص واستقرار الانحدار المتدرج على دفعات، ما يجعلها المعيار لتدريب نماذج مثل YOLO26.
- مُحسِّن Adam: Adam هو خوارزمية تحسين تكيفية لمعدل التعلّم، مبنية على SGD. وتضبط معدل التعلّم لكل معلمة على حدة استنادًا إلى تقديرات العزوم. وعلى الرغم من أن Adam يتقارب غالبًا بسرعة أكبر، فلا يزال SGD مع الزخم يُستخدم كثيرًا في الرؤية الحاسوبية (CV) لقدرتِه على إيجاد حلول أكثر قابلية للتعميم في سيناريوهات معينة.
التطبيقات الواقعية#
يمثل SGD وتنوعاته المحركات التي تقف وراء العديد من تقنيات الذكاء الاصطناعي التحويلية المستخدمة اليوم.
-
المركبات ذاتية القيادة: في تطوير المركبات ذاتية القيادة، يجب على النماذج معالجة تدفقات هائلة من البيانات المرئية للتعرف على المشاة وإشارات المرور والعوائق. ويتطلب تدريب شبكات كشف الأجسام المتقدمة هذه تحسينًا فعالًا للتعامل مع ملايين الصور للطرق. ويتيح SGD للمهندسين تحسين دقة النموذج تكراريًا، بما يضمن قدرة الأنظمة الحيوية للسلامة في الذكاء الاصطناعي في قطاع السيارات على اتخاذ قرارات موثوقة في الوقت الفعلي.
-
التشخيص الطبي: يعتمد مجال تحليل الصور الطبية اعتمادًا كبيرًا على التعلّم العميق لاكتشاف الحالات الشاذة، مثل الأورام في صور الرنين المغناطيسي أو الأشعة السينية. ونظرًا إلى أن مجموعات البيانات الطبية قد تكون ضخمة وعالية الدقة، يتيح SGD تدريب الشبكات العصبية الالتفافية (CNNs) المعقدة من دون استنزاف موارد الذاكرة. ويسهّل ذلك إنشاء أدوات تشخيصية عالية الدقة تساعد الأطباء في الذكاء الاصطناعي في الرعاية الصحية.
مثال على شفرة 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 على أتمتة هذه العملية من خلال إدارة ضبط المعاملات الفائقة وتوفير تصورات لمقاييس التدريب. وتعمل التطورات مثل مُحسِّن Adam على أتمتة ضبط معدل التعلّم أساسًا، ومعالجة بعض الصعوبات المتأصلة في SGD.









