کار با شبکه های عصبی: چک لیست برای اشکال زدایی

کار با شبکه های عصبی: چک لیست برای اشکال زدایی

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

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

Skillbox توصیه می کند: دوره عملی توسعه دهنده پایتون از ابتدا.

یادآوری می کنیم: برای همه خوانندگان "Habr" - تخفیف 10 روبل هنگام ثبت نام در هر دوره Skillbox با استفاده از کد تبلیغاتی "Habr".

الگوریتم شامل پنج مرحله است:

  • شروع آسان؛
  • تایید ضرر و زیان؛
  • بررسی نتایج و اتصالات میانی؛
  • تشخیص پارامتر؛
  • کنترل کار

اگر چیزی برای شما جالب تر از بقیه به نظر می رسد، می توانید بلافاصله به این بخش ها بروید.

شروع آسان

اشکال زدایی یک شبکه عصبی با معماری پیچیده، منظم سازی و زمانبندی نرخ یادگیری دشوارتر از یک شبکه معمولی است. ما در اینجا کمی مشکل داریم، زیرا این موضوع به طور غیرمستقیم به اشکال زدایی مربوط می شود، اما این هنوز یک توصیه مهم است.

یک شروع ساده، ایجاد یک مدل ساده شده و آموزش آن بر روی یک مجموعه (نقطه) داده است.

ابتدا یک مدل ساده شده ایجاد می کنیم

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

ما مدل را بر روی یک مجموعه (نقطه) از داده ها آموزش می دهیم

به عنوان یک بررسی سریع سلامت برای پروژه خود، می توانید از یک یا دو نقطه داده برای آموزش برای تأیید درست کارکردن سیستم استفاده کنید. شبکه عصبی باید در آموزش و آزمایش دقت 100% را نشان دهد. اگر اینطور نیست، یا مدل خیلی کوچک است یا از قبل باگ دارید.

حتی اگر همه چیز خوب است، قبل از حرکت، مدل را برای یک یا چند دوره آماده کنید.

ارزیابی ضرر

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

مهم است که به ضررهای اولیه توجه داشته باشید. اگر مدل با یک حدس تصادفی شروع شده باشد، بررسی کنید که نتیجه واقعی چقدر به نتیجه مورد انتظار نزدیک است. که در کار آندری کارپاتی موارد زیر را پیشنهاد می کند:: «مطمئن شوید که وقتی با تعداد کمی از پارامترها شروع می‌کنید، به نتیجه‌ای که انتظار دارید می‌رسید. بهتر است فوراً از دست دادن داده ها را بررسی کنید (با درجه تنظیم روی صفر). به عنوان مثال، برای CIFAR-10 با طبقه‌بندی‌کننده Softmax، انتظار داریم ضرر اولیه 2.302 باشد زیرا احتمال انتشار مورد انتظار برای هر کلاس 0,1 است (از آنجایی که 10 کلاس وجود دارد) و ضرر Softmax احتمال ورود منفی کلاس صحیح است. به عنوان - ln (0.1) = 2.302."

برای مثال باینری، یک محاسبه مشابه به سادگی برای هر یک از کلاس ها انجام می شود. به عنوان مثال، داده ها در اینجا هستند: 20% 0 و 80% 1. ضرر اولیه مورد انتظار تا -0,2ln (0,5) -0,8ln (0,5) = 0,693147 خواهد بود. اگر نتیجه بزرگتر از 1 باشد، ممکن است نشان دهد که وزن شبکه عصبی به درستی متعادل نشده است یا داده ها نرمال نیستند.

بررسی نتایج و اتصالات میانی

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

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

اگر مقادیر گرادیان صفر باشد، به این معنی است که سرعت یادگیری در بهینه ساز بسیار کند است یا با عبارت نادرستی برای به روز رسانی گرادیان مواجه می شوید.

علاوه بر این، نظارت بر مقادیر توابع فعال سازی، وزن ها و به روز رسانی هر یک از لایه ها ضروری است. به عنوان مثال، میزان به روز رسانی پارامترها (وزن ها و سوگیری ها) باید 1-e3 باشد.

پدیده ای به نام "Dying ReLU" یا "مسئله شیب ناپدید شدن"، زمانی که نورون های ReLU پس از یادگیری یک مقدار بایاس منفی بزرگ برای وزن های آن، صفر را تولید می کنند. این نورون‌ها هرگز در هیچ نقطه‌ای از داده‌ها شلیک نمی‌شوند.

شما می توانید با تقریب گرادیان با استفاده از روش عددی، از بررسی گرادیان برای شناسایی این خطاها استفاده کنید. اگر نزدیک به گرادیان های محاسبه شده باشد، پس انتشار به درستی اجرا شده است. برای ایجاد یک بررسی گرادیان، این منابع عالی از CS231 را بررسی کنید اینجا и اینجاهمچنین درس اندرو نگا در مورد این موضوع.

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

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

چندین ابزار مفید برای تجسم فعال سازی ها و اتصالات لایه های جداگانه وجود دارد، به عنوان مثال. ConX и تانسوربرد.

کار با شبکه های عصبی: چک لیست برای اشکال زدایی

تشخیص پارامتر

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

اندازه بسته بندی (اندازه دسته ای) - اگر می خواهید اندازه دسته به اندازه کافی بزرگ باشد تا برآوردهای گرادیان خطای دقیق را بدست آورید، اما به اندازه کافی کوچک باشد تا گرادیان نزولی تصادفی (SGD) شبکه شما را منظم کند. اندازه های کوچک دسته ای منجر به همگرایی سریع به دلیل نویز در طول فرآیند آموزش و متعاقباً مشکلات بهینه سازی می شود. این با جزئیات بیشتر توضیح داده شده است اینجا.

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

برش گرادیان  - برش شیب پارامتر در طول انتشار پس در حداکثر مقدار یا هنجار حاشیه ای. برای عیب یابی هر شیب انفجاری که ممکن است در نقطه سه با آن مواجه شوید مفید است.

نرمال سازی دسته ای - برای عادی سازی داده های ورودی هر لایه استفاده می شود که به ما امکان می دهد مشکل تغییر متغیر داخلی را حل کنیم. اگر از Dropout و Batch Norma با هم استفاده می کنید، این مقاله را بررسی کنید.

نزول گرادیان تصادفی (SGD) - انواع مختلفی از SGD وجود دارد که از حرکت، نرخ یادگیری تطبیقی ​​و روش نستروف استفاده می کنند. با این حال، هیچ یک از آنها مزیت واضحی از نظر کارایی یادگیری و تعمیم ندارند (جزئیات اینجا).

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

برای ارزیابی خود همه چیز، باید تنظیم را غیرفعال کنید و گرادیان از دست دادن داده را خودتان بررسی کنید.

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

مهم: اگر از نرمال‌سازی حذفی و دسته‌ای استفاده می‌کنید، مراقب ترتیب این عملیات یا حتی استفاده از آنها با هم باشید. همه اینها هنوز به طور فعال مورد بحث و تکمیل قرار می گیرد. در اینجا دو بحث مهم در این زمینه وجود دارد در Stackoverflow и آرکسیو.

کنترل کار

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

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

یک شبکه عصبی می تواند به تغییرات کوچک بسیار حساس باشد و این منجر به افت عملکرد مدل می شود. ردیابی و مستندسازی کار شما اولین قدمی است که می توانید برای استانداردسازی محیط و مدل سازی خود بردارید.

کار با شبکه های عصبی: چک لیست برای اشکال زدایی

امیدوارم این پست بتواند نقطه شروعی برای شروع اشکال زدایی شبکه عصبی شما باشد.

Skillbox توصیه می کند:

منبع: www.habr.com

اضافه کردن نظر