در درس قبلی از دورهی جاری در مورد محوشدگی گرادیان (gradient vanishing) صحبت کردیم. نقطهی مقابل محوشدگی گرادیان، مشکل انفجار گرادیان یا همان exploding gradients است که به جای اضمحلال و محوشدن گرادیان، ممکن است آن را بیش از اندازه بزرگ نماید و به خاطر همین الگوریتم نتواند به یک همگرایی (converge) در میان وزنها دست پیدا کند.
در شبکههای عصبی عمیق با زیاد شدن تعداد لایهها، بایستی هر کدام از وزنها در لایههای مختلف با دقت بیشتری آپدیت شوند. اگر این گونه نشد، ممکن است وزنها بیش از مقدار مورد انتظار، آپدیت شده و در اصطلاح الگوریتم به جای همگرایی به یک جواب بهینه (ترکیب وزنهای مناسب)، واگرا (diverge) شده و نتواند به جوابهای بهینه دست پیدا کند.
در دروس دروهی آشنایی با شبکههای عصبی آموختیم که وزنها در ترکیب با یکدیگر خطایی ایجاد میکنند و با بالا و پایین کردن این اوزان، میتوان خطا را تغییر داد. فضای خطا (error space) در یک شبکه با دو وزن به صورت زیر است:
در شکل بالا، الگوریتم دو وزن را انتخاب کرده و با توجه به این اوزانِ انتخاب شده در نقطهی A قرار گرفته است. حال الگوریتم در فرآیند یادگیری بایستی آرام آرام وزنها را تغییر دهد تا بتواند به یک بهینهی محلی که مقدار خطای کمتری نسبت به اطراف دارد برسد. ولی در برخی از مواقع به دلیل محاسبات ریاضی و به تبع آن انفجار گرادیان، این آپدیت بیش از حد انجام شده الگوریتم با تغییر وزنها به مقدار زیاد به نقطهی B (در شکل زیر) پرش میکند:
همانطور که در شکل بالا ملاحظه میشود، وزنها به میزان نامعقولی در هنگام آپدیت، تغییر کردهاند و این تغییرِ نامناسب منجر به عدم همگرایی الگوریتم شده است. الگوریتم با این واگراییها نمیتواند در یک فضای پیچیده که تعداد اوزان خیلی بیشتر از ۲ عدد است، به یک نقطهی بهینه (محلی یا سراسری) برسد و عملاً یادگیری انجام نمیشود.
تکنیکهای مختلفی مانند برش گرادیان (gradient clipping) برای مقابله با انفجار گرادیان موجود است. در روشِ بُرش گرادیان، اگر مقدار گرادیان از یک حدی بالاتر یا پایینتر برود، میتوان آن را به یک بازهی مشخص (مثلاً بین ۰/۵- تا ۰/۵+) محدود کرد تا گرادیان تغییر غیر منطقی و زیادی نکند. همچنین روش نرمالسازی (normalization) برای مقادیر گرادیان نیز میتواند در این مورد استفاده قرار گیرد. در نرمالسازی گرادیان کاری همانند روش نرمالسازی که در پیشپردازش دادهها انجام میدهیم. یعنی بعد از هر بار آپدیت وزنها میتوانیم مقادیر گرادیان را به یک بازهی کوچکتر نرمال یا در اصطلاح rescale کنیم.
- ۱ » یادگیری عمیق (Deep Learning) چیست؟
- ۲ » تفاوت یادگیری عمیق (Deep Learning) با یادگیری ماشین کلاسیک
- ۳ » تفاوت شبکههای عصبی (Neural Networks) با یادگیری عمیق (Deep Learning) چیست؟
- ۴ » مشکل محوشدگی گرادیان (Gradient Vanishing) در شبکههای عصبی عمیق
- ۵ » مشکل انفجار گرادیان (Exploding Gradients) در شبکههای عصبی عمیق
- ۶ » توابع فعالسازی (Activation Functions) در شبکههای عصبی عمیق
- ۷ » شبکه عصبی پیچشی (Convolutional Neural Network) در یادگیری عمیق
- ۸ » شبکه عصبی بازگشتی (Recurrent Neural Network)
- ۹ » انواع شبکههای عصبی بازگشتی (RNN) و کاربرد آنها
- ۱۰ » شبکه عصبی بازگشتی با حافظهی طولانی کوتاه مدت (LSTM)
- ۱۱ » شبکه عصبی واحد بازگشتی دروازهدار (GRU)
- ۱۲ » شبکههای عصبی عمیق توالی به توالی (Seq2Seq)