شبکهی عصبی چندلایه: لایهی ورودی، پنهان و خروجی
یک پرسپترون فقط یک مرز خطی میسازد. برای مسئلههای پیچیدهتر چند پرسپترون را شبکه میکنیم: خروجی چند نورون، ورودی نورونهای بعدی میشود. این کار ساده به نظر میرسد، ولی از معرفی پرسپترون تا آموزش موفق اولین شبکههای چندلایه بیش از دو دهه طول کشید.
لایهها
Section titled “لایهها”لایهی ورودی. در واقع نورون نیست؛ خود عددهای ویژگیهاست. اگر قد و وزن داریم، دو ورودی؛ اگر قد و وزن و فشار خون، سه ورودی؛ اگر تصویر ۵×۵ از دیتاست هدی، ۲۵ ورودی.
لایههای پنهان. لایههایی که بین ورودی و خروجی هستند. «پنهان» چون نه ورودیاند و نه خروجی؛ عددهایشان فقط برای خود شبکه معنی دارد. تعداد لایههای پنهان و تعداد نورونهای هر لایه ابرپارامتر است و ما انتخابش میکنیم. اگر لایهی پنهان نگذاریم، شبکه یک مرز خطی است؛ هرچه بیشتر بگذاریم، شبکه میتواند مرزهای پیچیدهتر و غیرخطیتر بسازد.
لایهی خروجی. تخمین نهایی شبکه. معمولاً به تعداد کلاسها نورون خروجی میگذاریم. برای سه کلاس خرگوش، گربه و سگ، سه نورون:
| خروجی ۱ | خروجی ۲ | خروجی ۳ | معنی |
|---|---|---|---|
| ۱ | ۰ | ۰ | خرگوش |
| ۰ | ۱ | ۰ | گربه |
| ۰ | ۰ | ۱ | سگ |
برای مسئلهی دوحالته (آری یا نه) یک نورون خروجی هم کافی است. برای ارقام دستنویس ده نورون خروجی میگذاریم، یکی برای هر رقم.
شمردن لایهها
Section titled “شمردن لایهها”لایهی ورودی را معمولاً نمیشمارند. شبکهی شکل بالا سهلایه است: دو لایهی پنهان و یک لایهی خروجی. به شبکهای که سه لایهی پنهان یا بیشتر دارد، معمولاً شبکهی عمیق میگویند.
چرا این همه لایه؟
Section titled “چرا این همه لایه؟”فرض کنید میخواهیم دو دسته را جدا کنیم که یکی وسط و دیگری دورش است. یک خط کافی نیست، ولی اگر چند خط داشته باشیم، میتوانیم ناحیهای چندضلعی بسازیم که دستهی وسط داخلش باشد. هر نورون لایهی پنهان اول یکی از این خطهاست و نورون لایهی بعد آنها را ترکیب میکند. لایههای بیشتر یعنی ترکیب ترکیبها، و مرزهای پیچیدهتر.
این همان سلسلهمراتبی است که در بینایی مغز دیدیم: لایههای اول چیزهای ساده را تشخیص میدهند و لایههای بعد آنها را به مفهومهای پیچیدهتر تبدیل میکنند.
تعداد پارامترها
Section titled “تعداد پارامترها”هر اتصال یک وزن دارد و هر نورون یک بایاس. شبکهای را در نظر بگیرید که تصویر ۵×۵ (۲۵ ورودی) را میگیرد، یک لایهی پنهان با ۶۴ نورون دارد و ۱۰ خروجی:
همین شبکهی کوچک بیش از دو هزار پارامتر دارد. شبکههای واقعی میلیونها و مدلهای زبانی بزرگ صدها میلیارد پارامتر دارند.
چه کسی این پارامترها را تنظیم میکند؟
Section titled “چه کسی این پارامترها را تنظیم میکند؟”یک رادیو قدیمی را تصور کنید که دو پیچ دارد و باید با چرخاندنشان یک ایستگاه را پیدا کنید. با دو پیچ هم کار سادهای نیست، چه برسد به میلیونها پیچ. تازه پیچها باید طوری تنظیم شوند که برای همهی دادهها جواب درست بدهند، نه فقط یکی؛ اگر صد ایمیل اسپم و عادی داریم، با هر تغییر باید همه را دوباره امتحان کنیم.
پس تنظیم وزنها باید خودکار باشد. برای این کار از بهینهسازی ریاضی استفاده میکنیم که پایهاش مشتق است. دو چیز لازم داریم:
- عددی که بگوید شبکه الان چقدر بد کار میکند: تابع هزینه.
- روشی که با کمک مشتق، وزنها را کمی در جهتی تغییر دهد که این عدد کم شود: گرادیان کاهشی و پسانتشار خطا، موضوع جلسهی بعد.
چون این روشها مشتق را در طول شبکه در هم ضرب میکنند، مشتق تابع فعالیت هم مهم میشود؛ اگر صفر باشد، همهچیز صفر میشود.
- شبکهی عصبی از لایهی ورودی (خود ویژگیها)، یک یا چند لایهی پنهان و یک لایهی خروجی ساخته میشود.
- معمولاً به تعداد کلاسها نورون خروجی میگذاریم. لایهی ورودی در شمارش لایهها حساب نمیشود.
- تعداد لایهها و نورونها ابرپارامتر است؛ لایهی بیشتر یعنی مرزهای پیچیدهتر.
- پارامترها (وزنها و بایاسها) آنقدر زیادند که فقط با بهینهسازی خودکار مبتنی بر مشتق میشود تنظیمشان کرد.
مقدمهای بر یادگیری عمیق، آموزش رایگان و فارسی یادگیری عمیق.