تعرف على كيفية قيام طريقة التدرج العشوائي (SGD) بتحسين نماذج التعلم الآلي. اكتشف كيف SGD Ultralytics من أجل تدريب أسرع وأكثر كفاءة للذكاء الاصطناعي.
الانحدار العشوائي التدرجي (SGD) هو خوارزمية تحسين قوية تستخدم على نطاق واسع في التعلم الآلي لتدريب النماذج بكفاءة، لا سيما عند العمل مع مجموعات بيانات كبيرة. في جوهره، SGD نوع مختلف من طريقة الانحدار التدرجي القياسية ، مصمم لتسريع عملية التعلم عن طريق تحديث معلمات النموذج بشكل أكثر تكرارًا. بدلاً من حساب الخطأ لمجموعة البيانات بأكملها قبل إجراء تحديث واحد — كما هو الحال في الانحدار التدرجي الدفعي التقليدي —SGD أوزان النموذج باستخدام مثال تدريب واحد فقط يتم اختياره عشوائيًا في كل مرة. هذه الطبيعة "العشوائية" أو العشوائية تضيف ضوضاء إلى مسار التحسين، مما يساعد النموذج على تجنب الحلول غير المثلى والتقارب بشكل أسرع في مجموعات البيانات الضخمة حيث يكون معالجة جميع البيانات دفعة واحدة أمرًا مستحيلًا من الناحية الحسابية.
الهدف الأساسي لأي عملية تدريب هو تقليل وظيفة الخسارة، التي تقيس الفرق بين تنبؤات النموذج والقيم المستهدفة الفعلية. SGD ذلك من خلال دورة تكرارية. أولاً، تختار الخوارزمية نقطة بيانات عشوائية من بيانات التدريب. ثم تقوم بإجراء تمرير أمامي لإنشاء تنبؤ وتحسب الخطأ. باستخدام الانتشار العكسي، تحسب الخوارزمية التدرج — وهو في الأساس منحدر منحنى الخطأ — استنادًا إلى هذا المثال الوحيد. وأخيرًا، تقوم بتحديث أوزان النموذج في الاتجاه المعاكس للتدرج لتقليل الخطأ.
تتكرر هذه العملية لعدة مرات، وغالبًا ما يتم تجميعها في فترات زمنية، حتى يستقر أداء النموذج. يتم التحكم في حجم هذه التحديثات بواسطة معلمة فائقة تُعرف باسم معدل التعلم. نظرًا لأن كل خطوة تستند إلى عينة واحدة فقط ، فإن المسار إلى الحد الأدنى غالبًا ما يكون متعرجًا أو صاخبًا مقارنة بالمسار السلس للانحدار التدريجي للدفعة . ومع ذلك، غالبًا ما يكون هذا التشويش مفيدًا في التعلم العميق، حيث يمكن أن يمنع النموذج من أن يعلق في الحد الأدنى المحلي، مما قد يؤدي إلى حل شامل أفضل.
فهم الفروق بين SGD وخوارزميات التحسين ذات الصلة أمر بالغ الأهمية لاختيار استراتيجية التدريب المناسبة.
SGD هي المحركات وراء العديد من تقنيات الذكاء الاصطناعي التحويلية المستخدمة اليوم.
في حين أن المكتبات عالية المستوى مثل ultralytics تحسين المعالجة داخليًا أثناء
train() ، يمكنك أن ترى كيف يتم تهيئة SGD واستخدامه في مستوى أدنى
PyTorch سير العمل. يوضح هذا المقتطف تعريف SGD بسيط tensor
.
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.