فصل هفتم: گرادیان و مقداردهی اولیه

black-swan-theory

مقدمه

در این فصل، به دو مفهوم اساسی در آموزش شبکه‌های عصبی عمیق پرداخته می‌شود: محاسبه گرادیان‌ها و مقداردهی اولیه پارامترها. این دو عامل، نقشی حیاتی در موفقیت فرآیند آموزش دارند. الگوریتم‌های بهینه‌سازی مانند نزول گرادیان تصادفی (SGD) برای به‌روزرسانی مؤثر پارامترها، به گرادیان‌های دقیق و مقداردهی اولیه مناسب نیاز دارند تا از بروز مشکلاتی نظیر ناپدید شدن یا انفجار گرادیان‌ها جلوگیری شود.

 

1. تعریف مسئله

شبکه‌های عصبی عمیق از چندین لایه تشکیل شده‌اند که هر لایه دارای وزن‌ها (Ω)(\Omega) و بایاس‌ها (β)(\beta) است. هدف اصلی، یافتن مجموعه‌ای از پارامترهاست که تابع تلفات ()(\ell) را کمینه کنند. برای این منظور، باید مشتق تابع تلفات نسبت به پارامترها محاسبه شود. این کار، خصوصاً در شبکه‌هایی با میلیون‌ها پارامتر، چالش‌برانگیز است.

2. محاسبه مشتقات با الگوریتم پس‌انتشار

2.1. ایده اصلی پس‌انتشار

الگوریتم پس‌انتشار (Backpropagation) یک روش مؤثر برای محاسبه گرادیان‌ها در شبکه‌های عصبی است. این الگوریتم شامل دو مرحله اصلی است:

  • پاس رو به جلو (Forward Pass): محاسبه خروجی شبکه و ذخیره مقادیر میانی مانند فعال‌سازی‌ها.

  • پاس رو به عقب (Backward Pass): محاسبه گرادیان‌ها با استفاده از قاعده زنجیره‌ای و داده‌های ذخیره‌شده در مرحله‌ی قبل.

2.2. مثال ساده برای درک شهودی

برای فهم بهتر، فرض کنید یک مدل ساده شامل توابعی مانند sin\sin، exp\exp و cos\cos داریم. محاسبه دستی گرادیان‌ها در چنین مدلی بسیار پیچیده است، اما الگوریتم پس‌انتشار با استفاده مرحله‌ای از نتایج میانی، محاسبات را ساده و کارآمد می‌سازد.

2.3. تعمیم به شبکه‌های عصبی عمیق

در شبکه‌های عمیق، وزن‌ها و بایاس‌ها به‌صورت ماتریس و بردار هستند و گرادیان‌ها باید به‌صورت ماتریسی محاسبه شوند. برای مثال:

مشتق تابع تلفات نسبت به وزن‌ها

Ω=ga\frac{\partial \ell}{\partial \Omega} = g \cdot a

که در آن:

  • gg: گرادیان لایه بعدی نسبت به ورودی این لایه (یا مشتق تابع تلفات نسبت به خروجی لایه)

  • aa: فعال‌سازی لایه قبلی

مشتق تابع تلفات نسبت به بایاس‌ها

β=g\frac{\partial \ell}{\partial \beta} = g

در این حالت، چون بایاس به‌صورت افزایشی عمل می‌کند، مشتق آن فقط شامل گرادیان است.

2.4. چالش‌های پیاده‌سازی

  • مصرف حافظه: ذخیره مقادیر میانی در پاس رو به جلو، حافظه زیادی مصرف می‌کند.

  • بهینه‌سازی محاسبات: استفاده از کتابخانه‌هایی مانند PyTorch و TensorFlow که از تمایز خودکار (Automatic Differentiation) پشتیبانی می‌کنند، این چالش‌ها را به‌طور مؤثری حل می‌کند.

3. مقداردهی اولیه پارامترها

3.1. اهمیت مقداردهی اولیه

مقداردهی اولیه نادرست ممکن است منجر به دو مشکل رایج شود:

  • ناپدید شدن گرادیان‌ها (Vanishing Gradients): گرادیان‌ها بسیار کوچک می‌شوند و پارامترها به‌درستی به‌روزرسانی نمی‌شوند.

  • انفجار گرادیان‌ها (Exploding Gradients): گرادیان‌ها بسیار بزرگ شده و فرآیند آموزش بی‌ثبات می‌شود.

3.2. مقداردهی اولیه هوشمند

برای پیش‌گیری از این مشکلات، از روش‌هایی مانند مقداردهی اولیه He استفاده می‌شود. در این روش، واریانس اولیه وزن‌ها به‌صورت زیر تنظیم می‌شود:

σ2=2Dh\sigma^2 = \frac{2}{D_h}

که در آن DhD_h تعداد نرون‌های لایه قبلی است.

این مقداردهی اولیه تضمین می‌کند که واریانس فعال‌سازی‌ها در پاس رو به جلو و واریانس گرادیان‌ها در پاس رو به عقب پایدار باقی بماند.

3.3. مقداردهی اولیه برای لایه‌های غیرمربع

در صورتی که ابعاد لایه‌های ورودی و خروجی با یکدیگر متفاوت باشند، می‌توان از فرمول زیر استفاده کرد:

σ2=4Dh+Dh\sigma^2 = \frac{4}{D_h + D_h’}

که در آن:

  • DhD_h: تعداد نرون‌های لایه قبلی

  • DhD_h’: تعداد نرون‌های لایه بعدی

4. پیاده‌سازی عملی

4.1. نمونه کد آموزشی

با استفاده از چارچوب‌هایی مانند PyTorch، پیاده‌سازی مراحل آموزش بسیار ساده است. مراحل کلی شامل:

  1. تعریف مدل و مقداردهی اولیه پارامترها

  2. محاسبه تابع تلفات و اجرای loss.backward() برای محاسبه گرادیان‌ها

  3. به‌روزرسانی پارامترها با استفاده از بهینه‌سازی مانند SGD

4.2. نکات کلیدی

  • نرخ یادگیری: انتخاب نرخ یادگیری مناسب، و در صورت نیاز، کاهش آن در طول آموزش

  • توابع فعال‌سازی: انتخاب مناسب مانند ReLU همراه با مقداردهی اولیه صحیح، تأثیر مستقیمی بر عملکرد مدل دارد.

5. نتیجه‌گیری

محاسبه مؤثر گرادیان‌ها با استفاده از الگوریتم پس‌انتشار و مقداردهی اولیه هوشمند، دو رکن اساسی در آموزش موفق شبکه‌های عصبی عمیق هستند. درک دقیق این مفاهیم نه‌تنها به طراحی بهتر مدل‌ها کمک می‌کند، بلکه از بروز مشکلات متداولی مانند ناپدید شدن یا انفجار گرادیان‌ها نیز جلوگیری می‌کند. با بهره‌گیری از ابزارهای مدرنی چون PyTorch و TensorFlow، می‌توان این مفاهیم را به‌شکل عملی و مؤثر پیاده‌سازی کرد.