|
|
||
|---|---|---|
| .. | ||
| lab | ||
| OwnFramework.ipynb | ||
| README.md | ||
README.md
مقدمهای بر شبکههای عصبی: پرسپترون چندلایه
در بخش قبلی، با سادهترین مدل شبکه عصبی آشنا شدید - پرسپترون تکلایه، که یک مدل خطی برای طبقهبندی دوکلاسه است.
در این بخش، این مدل را به یک چارچوب انعطافپذیرتر گسترش میدهیم که به ما امکان میدهد:
- علاوه بر طبقهبندی دوکلاسه، طبقهبندی چندکلاسه انجام دهیم
- علاوه بر طبقهبندی، مسائل رگرسیون را حل کنیم
- کلاسهایی را که به صورت خطی قابل جداسازی نیستند، جدا کنیم
همچنین چارچوب ماژولاری در پایتون توسعه خواهیم داد که به ما امکان میدهد معماریهای مختلف شبکه عصبی را بسازیم.
پیشآزمون
فرمالیزه کردن یادگیری ماشین
بیایید با فرمالیزه کردن مسئله یادگیری ماشین شروع کنیم. فرض کنید یک مجموعه داده آموزشی X با برچسبهای Y داریم و باید مدلی f بسازیم که پیشبینیهای دقیقی انجام دهد. کیفیت پیشبینیها با تابع خطا ℒ اندازهگیری میشود. توابع خطای زیر معمولاً استفاده میشوند:
- برای مسائل رگرسیون، زمانی که باید یک عدد پیشبینی کنیم، میتوانیم از خطای مطلق ∑i|f(x(i))-y(i)| یا خطای مربعی ∑i(f(x(i))-y(i))2 استفاده کنیم.
- برای طبقهبندی، از خطای ۰-۱ (که اساساً همان دقت مدل است) یا خطای لجستیک استفاده میکنیم.
برای پرسپترون تکلایه، تابع f به صورت یک تابع خطی تعریف میشد: f(x)=wx+b (در اینجا w ماتریس وزن، x بردار ویژگیهای ورودی، و b بردار بایاس است). برای معماریهای مختلف شبکه عصبی، این تابع میتواند شکل پیچیدهتری به خود بگیرد.
در مسائل طبقهبندی، اغلب مطلوب است که خروجی شبکه به صورت احتمالات کلاسهای مربوطه باشد. برای تبدیل اعداد دلخواه به احتمالات (مثلاً برای نرمالسازی خروجی)، اغلب از تابع softmax σ استفاده میکنیم و تابع f به صورت f(x)=σ(wx+b) در میآید.
در تعریف f بالا، w و b به عنوان پارامترها θ=⟨w,b⟩ شناخته میشوند. با داشتن مجموعه داده ⟨X,Y⟩، میتوانیم خطای کلی روی کل مجموعه داده را به عنوان تابعی از پارامترهای θ محاسبه کنیم.
✅ هدف از آموزش شبکه عصبی، کمینه کردن خطا با تغییر پارامترهای θ است.
بهینهسازی با گرادیان نزولی
یک روش شناختهشده برای بهینهسازی توابع، گرادیان نزولی است. ایده این است که میتوان مشتق (در حالت چندبعدی به آن گرادیان میگویند) تابع خطا را نسبت به پارامترها محاسبه کرد و پارامترها را به گونهای تغییر داد که خطا کاهش یابد. این روش به صورت زیر فرمالیزه میشود:
- پارامترها را با مقادیر تصادفی اولیهسازی کنید: w(0), b(0)
- مراحل زیر را چندین بار تکرار کنید:
- w(i+1) = w(i)-η∂ℒ/∂w
- b(i+1) = b(i)-η∂ℒ/∂b
در طول آموزش، مراحل بهینهسازی باید با در نظر گرفتن کل مجموعه داده محاسبه شوند (به یاد داشته باشید که خطا به صورت مجموعی از تمام نمونههای آموزشی محاسبه میشود). اما در عمل، ما از بخشهای کوچکی از مجموعه داده به نام مینیبچها استفاده میکنیم و گرادیانها را بر اساس زیرمجموعهای از دادهها محاسبه میکنیم. از آنجا که هر بار زیرمجموعه به صورت تصادفی انتخاب میشود، این روش گرادیان نزولی تصادفی (SGD) نامیده میشود.
پرسپترون چندلایه و پسانتشار
شبکه تکلایه، همانطور که دیدیم، قادر به طبقهبندی کلاسهای خطی قابل جداسازی است. برای ساخت مدلی غنیتر، میتوانیم چندین لایه از شبکه را ترکیب کنیم. به صورت ریاضی، این به معنای آن است که تابع f شکل پیچیدهتری به خود میگیرد و در چندین مرحله محاسبه میشود:
- z1=w1x+b1
- z2=w2α(z1)+b2
- f = σ(z2)
در اینجا، α یک تابع فعالسازی غیرخطی است، σ تابع softmax است، و پارامترها θ=<w1,b1,w2,b2> هستند.
الگوریتم گرادیان نزولی همانطور باقی میماند، اما محاسبه گرادیانها دشوارتر میشود. با استفاده از قانون زنجیرهای مشتقگیری، میتوان مشتقات را به صورت زیر محاسبه کرد:
- ∂ℒ/∂w2 = (∂ℒ/∂σ)(∂σ/∂z2)(∂z2/∂w2)
- ∂ℒ/∂w1 = (∂ℒ/∂σ)(∂σ/∂z2)(∂z2/∂α)(∂α/∂z1)(∂z1/∂w1)
✅ قانون زنجیرهای مشتقگیری برای محاسبه مشتقات تابع خطا نسبت به پارامترها استفاده میشود.
توجه داشته باشید که بخش سمت چپ تمام این عبارات یکسان است، بنابراین میتوان مشتقات را به طور مؤثر از تابع خطا شروع کرده و به صورت "معکوس" از طریق گراف محاسباتی محاسبه کرد. به همین دلیل، روش آموزش پرسپترون چندلایه پسانتشار یا 'backprop' نامیده میشود.
TODO: ذکر منبع تصویر
✅ ما در مثال نوتبوک خود، پسانتشار را با جزئیات بیشتری پوشش خواهیم داد.
نتیجهگیری
در این درس، کتابخانه شبکه عصبی خود را ساختیم و از آن برای یک مسئله طبقهبندی دوبعدی ساده استفاده کردیم.
🚀 چالش
در نوتبوک همراه این درس، چارچوب خود را برای ساخت و آموزش پرسپترونهای چندلایه پیادهسازی خواهید کرد. شما میتوانید به طور دقیق ببینید که شبکههای عصبی مدرن چگونه کار میکنند.
به نوتبوک OwnFramework بروید و آن را بررسی کنید.
پسآزمون
مرور و مطالعه شخصی
پسانتشار یک الگوریتم رایج در هوش مصنوعی و یادگیری ماشین است که ارزش مطالعه بیشتر را دارد.
تکلیف
در این آزمایشگاه، از چارچوبی که در این درس ساختید برای حل مسئله طبقهبندی ارقام دستنویس MNIST استفاده خواهید کرد.
سلب مسئولیت:
این سند با استفاده از سرویس ترجمه هوش مصنوعی Co-op Translator ترجمه شده است. در حالی که ما تلاش میکنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است حاوی خطاها یا نادقتیهایی باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، ترجمه حرفهای انسانی توصیه میشود. ما هیچ مسئولیتی در قبال سوءتفاهمها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم.