CS ۲۳۰ - یادگیری عمیق

راهنمای کوتاه نکات و ترفندهای یادگیری عمیق
Star

متن اصلی از افشین عمیدی و شروین عمیدی
ترجمه شده توسط الیستر. بازبینی شده توسط عرفان نوری.

پردازش داده

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

تصویر اصلی قرینه چرخش برش تصادفی
• تصویر (آغازین) بدون هیچ‌گونه تغییری • قرینه‌شده نسبت به محوری که معنای (محتوای) تصویر را حفظ می‌کند • چرخش با زاویه‌ی اندک
• خط افق نادرست را شبیه‌سازی می‌کند
• روی ناحیه‌ای تصادفی از تصویر متمرکز می‌شود
• چندین برش تصادفی را میتوان پشت‌سرهم انجام داد
تغییر رنگ اضافه‌کردن نویز هدررفت اطلاعات تغییر تباین(کُنتراست)
• عناصر RGB کمی تغییر کرده است
• نویزی که در هنگام مواجه شدن با نور رخ می‌دهد را شبیه‌سازی می‌کند
• افزودگی نویز
• مقاومت بیشتر نسبت به تغییر کیفیت تصاویر ورودی
• بخش‌هایی از تصویر نادیده گرفته می‌شوند
• تقلید (شبیه سازی) هدررفت بالقوه بخش‌هایی از تصویر
• تغییر درخشندگی
• با توجه به زمان روز تفاوت نمایش (تصویر) را کنترل می‌کند

نکته: داده‌ها معمولا در فرآیند آموزش (به صورت درجا) افزایش پیدا می‌کنند.


نرمال‌سازی دسته‌ای یک مرحله از فراسنج‌های $\gamma, \beta$ که دسته‌ی $\{x_i\}$ را نرمال می‌کند. نماد $\mu_B, \sigma_B^2$ به میانگین و وردایی دسته‌ای که می‌خواهیم آن را اصلاح کنیم اشاره دارد که به صورت زیر است:

\[\boxed{x_i\longleftarrow\gamma\frac{x_i-\mu_B}{\sqrt{\sigma_B^2+\epsilon}}+\beta}\]
معمولا بعد از یک لایه‌ی تمام‌متصل یا لایه‌ی کانولوشنی و قبل از یک لایه‌ی غیرخطی اعمال می‌شود و امکان استفاده از نرخ یادگیری بالاتر را می‌دهد و همچنین باعث می‌شود که وابستگی شدید مدل به مقداردهی اولیه کاهش یابد.


آموزش یک شبکه‌ی عصبی

تعاریف

تکرار (epoch) در مضمون آموزش یک مدل، تکرار اصطلاحی است که مدل در یک دوره تکرار تمامی نمونه‌های آموزشی را برای به‌روزرسانی وزن‌ها می‌بیند.


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


تابع خطا به منظور سنجش کارایی یک مدل مفروض، معمولا از تابع خطای $L$ برای ارزیابی اینکه تا چه حد خروجی حقیقی $y$ به شکل صحیح توسط خروجی $z$ مدل پیش‌بینی شده‌اند، استفاده می‌شود.


خطای آنتروپی متقاطع در مضمون دسته‌بندی دودویی در شبکه‌های عصبی، عموما از تابع خطای آنتروپی متقاطع $L(z,y)$ استفاده و به صورت زیر تعریف میشود:

\[\boxed{L(z,y)=-\Big[y\log(z)+(1-y)\log(1-z)\Big]}\]

یافتن وزن‌های بهینه

انتشار معکوس انتشار معکوس روشی برای به‌روزرسانی وزن‌ها با توجه به خروجی واقعی و خروجی مورد انتظار در شبکه‌ی عصبی است. مشتق نسبت به هر وزن $w$ توسط قاعده‌ی زنجیری محاسبه می‌شود.


با استفاده از این روش، هر وزن با قانون زیر به‌روزرسانی می‌شود:

\[\boxed{w\longleftarrow w-\alpha\frac{\partial L(z,y)}{\partial w}}\]

به‌روزرسانی وزن‌ها در یک شبکه‌ی عصبی، وزن‌ها به شکل زیر به‌روزرسانی می‌شوند:

• گام 1: یک دسته از داده‌های آموزشی گرفته شده و با استفاده از انتشار مستقیم خطا محاسبه می‌شود
• گام 2: با استفاده از انتشار معکوس مشتق خطا نسبت به هر وزن محاسبه می‌شود
• گام 3: با استفاده از مشتقات، وزن‌های شبکه به‌روزرسانی می‌شوند


تنظیم فراسنج

مقداردهی اولیه‌ی وزن‌ها

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


یادگیری انتقالی آموزش یک مدل یادگیری عمیق به داده‌های زیاد و مهم‌تر از آن به زمان زیادی احتیاج دارد. اغلب بهتر است که از وزن‌های پیش‌آموخته روی پایگاه داده‌های عظیم که آموزش بر روی آن‌ها روزها یا هفته‌ها طول می‌کشند استفاده کرد، و آن‌ها را برای موارد استفاده‌ی خود به کار برد. بسته به میزان داده‌هایی که در اختیار داریم، در زیر روش‌های مختلفی که می‌توان از آنها بهره جست آورده شده‌اند:

تعداد داده‌های آموزش نگاره توضیح
کوچک منجمد کردن تمامی لایه‌ها، آموزش وزن‌ها در بیشینه‌ی هموار
متوسط منجمد کردن اکثر لایه‌ها، آموزش وزن‌ها در لایه‌های آخر و بیشینه‌ی هموار
بزرگ آموزش وزن‌ها در (تمامی) لایه‌ها و بیشینه‌ی هموار با مقداردهی‌اولیه‌ی وزن‌ها بر طبق مقادیر پیش‌آموخته

بهینه‌سازی همگرایی

نرخ یادگیری نرخ یادگیری اغلب با نماد $\alpha$ و گاهی اوقات با نماد $\eta$ نمایش داده می‌شود و بیانگر سرعت (گام) به‌روزرسانی وزن‌ها است که می‌تواند مقداری ثابت داشته باشد یا به صورت سازگارشونده تغییر کند. محبوب‌ترین روش حال حاضر Adam نام دارد، روشی است که نرخ یادگیری را در حین فرآیند آموزش تنظیم می‌کند.


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

روش توضیح به‌روزرسانی $w$ به‌روزرسانی $b$
تکانه • نوسانات را تعدیل می‌دهد
• بهبود SGD
• دو فراسنج که نیاز به تنظیم دارند
$\displaystyle w-\alpha v_{dw}$ $\displaystyle b-\alpha v_{db}$
RMSprop • انتشار جذر میانگین مربعات
• سرعت بخشیدن به الگوریتم یادگیری با کنترل نوسانات
$\displaystyle w-\alpha\frac{dw}{\sqrt{s_{dw}}}$ $\displaystyle b\longleftarrow b-\alpha\frac{db}{\sqrt{s_{db}}}$
Adam • تخمین سازگارشونده ممان
• محبوب‌ترین روش
• چهار فراسنج که نیاز به تنظیم دارند
$\displaystyle w-\alpha\frac{v_{dw}}{\sqrt{s_{dw}}+\epsilon}$ $\displaystyle b\longleftarrow b-\alpha\frac{v_{db}}{\sqrt{s_{db}}+\epsilon}$

نکته: سایر متدها شامل Adadelta، Adagrad و SGD هستند.


نظام‌بخشی

برون‌اندازی برون‌اندازی روشی است که در شبکه‌های عصبی برای جلوگیری از بیش‌برارزش بر روی داده‌های آموزشی با حذف تصادفی نورون‌ها با احتمال $p >0$ استفاده می‌شود. این روش مدل را مجبور می‌کند تا از تکیه کردن بیش‌از‌حد بر روی مجموعه خاصی از ویژگی‌ها خودداری کند.

نکته: بیشتر کتابخانه‌های یادگیری عمیق برون‌اندازی را با استفاده از فراسنج 'نگه‌داشتن' $1-p$ کنترل می‌کنند.


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

LASSO Ridge Elastic Net
• ضرایب را تا صفر کاهش می‌دهد
• برای انتخاب متغیر مناسب است
ضرایب را کوچکتر می‌کند بین انتخاب متغیر و ضرایب کوچک مصالحه می‌کند
Lasso Ridge Elastic Net
$...+\lambda||\theta||_1$
$\lambda\in\mathbb{R}$
$...+\lambda||\theta||_2^2$
$\lambda\in\mathbb{R}$
$...+\lambda\Big[(1-\alpha)||\theta||_1+\alpha||\theta||_2^2\Big]$
$\lambda\in\mathbb{R},\alpha\in[0,1]$

توقف زودهنگام این روش نظام‌بخشی، فرآیند آموزش را به محض اینکه خطای اعتبارسنجی ثابت می‌شود یا شروع به افزایش پیدا کند، متوقف می‌کند.


عادت‌های خوب

بیش‌برارزش روی دسته‌ی ‌کوچک هنگام اشکال‌زدایی یک مدل، اغلب مفید است که یک سری آزمایش‌های سریع برای اطمینان از اینکه هیچ مشکل عمده‌ای در معماری مدل وجود ندارد، انجام شود. به طورخاص، برای اطمینان از اینکه مدل می‌تواند به شکل صحیح آموزش ببیند، یک دسته‌ی‌ کوچک (از داده‌ها) به شبکه داده می‌شود تا دریابیم که مدل می‌تواند به آنها بیش‌برارزش کند. اگر نتواند، بدین معناست که مدل از پیچیدگی بالایی برخوردار است یا پیچیدگی کافی برای بیش‌برارزش شدن روی دسته‌ی‌ کوچک ندارد، چه برسد به یک مجموعه آموزشی با اندازه عادی.


وارسی گرادیان وارسی گرادیان روشی است که در طول پیاده‌سازی گذر روبه‌عقبِ یک شبکه‌ی عصبی استفاده می‌شود. این روش مقدار گرادیان تحلیلی را با گرادیان عددی در نقطه‌های مفروض مقایسه می‌کند و نقش بررسی درستی را ایفا میکند.

نوع گرادیان عددی گرادیان تحلیلی
فرمول $\displaystyle\frac{df}{dx}(x) \approx \frac{f(x+h) - f(x-h)}{2h}$ $\displaystyle\frac{df}{dx}(x) = f'(x)$
توضیحات • پرهزینه (از نظر محاسباتی)، خطا باید دو بار برای هر بُعد محاسبه شود
• برای تایید صحت پیاده‌سازی تحلیلی استفاده می‌شود
• مصالحه در انتخاب $h$: نه بسیار کوچک (ناپایداری عددی) و نه خیلی بزرگ (تخمین گرادیان ضعیف) باشد
• نتیجه 'عینی'
• محاسبه مستقیم
• در پیاده‌سازی نهایی استفاده می‌شود