سلام
علی آقا جواب شما رو کامل دادن اما من یکبار دیگه بصورت خلاصه توضیح میدم .
خود سیگموید که مشکل saturating gradient
داره. اگه اعداد بزرگ باشن گرادیان به سمت صفر میل میکنه اگر هم خیلی کوچیک باشن(منفی) باز هم میبینم که گرادیان صفر یا نزدیک به صفر میشه . سیگموید ورودی رو هرچی که باشه میبره بین بازه 0 و 1. اعدادی که خیلی بزرگ باشن 1 و خیلی کوچیک باشن به صفر تبدیل میشن .تصویر زیر شاید اینو بتونه بهتر بهتون نشون بده . بعنوان مثال ورودی 10 در شکل زیر میبینید که به 1 رسیده و اونجا شیب خط(گرادیان) صاف (صفر) هست . همینطور به -10 نگاه کنید که باز هم همین داستان رو داره . و تو شکل زیر مشخصه که ما هر عددی از X (ورودی) بدیم یک عددی بین 0 و 1 بدست میاد.
بگذریم . این از مشکل اشباع شدگی گرادیان یا همون saturating gradient .
(تنها بخش محدودی گرادیان درستو حسابی داره که باز هم در تصویر مشخصه)
بحث بعدی که سوال کردید در مورد اون قضیه زیگزاگی هست که در آموزش بهش اشاره شد. اونجا داره در مورد Zero center کردن داده صحبت میکنه . اگه داده رو zero center
کنید همگرایی شما خیلی سریعتر اتفاق می افته نسبت به زمانی که داده ورودی رو زیرو سنتر نکنید . حالا دلیلش چیه ؟
وقتی ورودی شما اعداد مثبت باشن نورونهای شبکه هم قائدتا خروجی مثبت تولید میکنن (سیگموید بین 0 و 1 تولید میکرد ) و در نتیجه گرادیان وزن(بهتر بگیم تغییرات وزن) یا همیشه مثبت میشه یا همیشه منفی. این یعنی چی ؟
ما وقتی بخواییم وزنها رو اپدیت کنیم یا بهتر تغییرات وزن رو برای هر نورون بدست بیاریم به چندتا چیز نیاز داریم.یکی خطا (یا همون گرادیان یا دلتای) اون نورون هست (که از حاصلضرب مشتق تابع تبدیلش در وزنهای این نورون به نورون(های) بعد خودش در گرادیان/خطای/ دلتای) نورون بعد بدست میاد). بعد برای بدست اوردن تغییرات وزنها حالصضرب ورودی اون نورون در خطای اون نورون در نرخ یادگیری محاسبه میشه.
حالا از اونجایی که همه ورودی ها به نورون ها مثبت هستن پس تغییرات w ما یا همیشه مثبت میشه یا همیشه منفی.(چون اگه گرادیانی که از مرحله قبل میاد منفی باشه ضرب در مثبت بشه میشه منفی. اگه مثبت باشه در مثبت ضرب بشه میشه مثبت.) برای همین اینطوری ما نمیتونیم شرایطی رو ایجاد کنیم که هم اعداد مثبت و هم منفی در w بدست بیان. بعنوان مثال شما فرض کن w ما به صورت زیر باشه :
w = (1 -1 1)
و وزن نهایی که مثلا جواب مورد نظر ماهست باید به اینصورت باشه (یعنی نهایتا بعد از اموزش وزن باید به این شکل در بیاد):
w = (-1 1 -1)
اگه ما بتونیم هم تغییرات وزن مثبت و هم منفی رو با هم داشته باشیم میتونیم تو یک مرحله محاسبات رو انجام بدیم مثلا مثل زیر :
w = (1 -1 1) + (-2 2 -2)
اما اگه این امکان برامون وجود نداشته باشه مجبوریم اینکار رو در 2 مرحله انجام بدیم :
w = (1 -1 1) + (-3 -3 -3) + (1 5 1)
یعنی بجای یک بار اپدیت ما دو مرحله اپدیت باید داشته باشیم.