رفتن به محتوا

شبکه‌ی عصبی چندلایه: لایه‌ی ورودی، پنهان و خروجی

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

لایه‌ی ورودیلایه‌ی پنهان ۱لایه‌ی پنهان ۲لایه‌ی خروجیپنهان: نه ورودی است نه خروجی
یک شبکه با سه ورودی، دو لایه‌ی پنهان چهارنورونی و سه نورون خروجی. هر نورون به همه‌ی نورون‌های لایه‌ی بعد وصل است.

لایه‌ی ورودی. در واقع نورون نیست؛ خود عددهای ویژگی‌هاست. اگر قد و وزن داریم، دو ورودی؛ اگر قد و وزن و فشار خون، سه ورودی؛ اگر تصویر ۵×۵ از دیتاست هدی، ۲۵ ورودی.

لایه‌های پنهان. لایه‌هایی که بین ورودی و خروجی هستند. «پنهان» چون نه ورودی‌اند و نه خروجی؛ عددهایشان فقط برای خود شبکه معنی دارد. تعداد لایه‌های پنهان و تعداد نورون‌های هر لایه ابرپارامتر است و ما انتخابش می‌کنیم. اگر لایه‌ی پنهان نگذاریم، شبکه یک مرز خطی است؛ هرچه بیشتر بگذاریم، شبکه می‌تواند مرزهای پیچیده‌تر و غیرخطی‌تر بسازد.

لایه‌ی خروجی. تخمین نهایی شبکه. معمولاً به تعداد کلاس‌ها نورون خروجی می‌گذاریم. برای سه کلاس خرگوش، گربه و سگ، سه نورون:

خروجی ۱خروجی ۲خروجی ۳معنی
۱۰۰خرگوش
۰۱۰گربه
۰۰۱سگ

برای مسئله‌ی دوحالته (آری یا نه) یک نورون خروجی هم کافی است. برای ارقام دست‌نویس ده نورون خروجی می‌گذاریم، یکی برای هر رقم.

لایه‌ی ورودی را معمولاً نمی‌شمارند. شبکه‌ی شکل بالا سه‌لایه است: دو لایه‌ی پنهان و یک لایه‌ی خروجی. به شبکه‌ای که سه لایه‌ی پنهان یا بیشتر دارد، معمولاً شبکه‌ی عمیق می‌گویند.

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

این همان سلسله‌مراتبی است که در بینایی مغز دیدیم: لایه‌های اول چیزهای ساده را تشخیص می‌دهند و لایه‌های بعد آن‌ها را به مفهوم‌های پیچیده‌تر تبدیل می‌کنند.

هر اتصال یک وزن دارد و هر نورون یک بایاس. شبکه‌ای را در نظر بگیرید که تصویر ۵×۵ (۲۵ ورودی) را می‌گیرد، یک لایه‌ی پنهان با ۶۴ نورون دارد و ۱۰ خروجی:

25×64+64⏟لایه‌ی پنهان+64×10+10⏟لایه‌ی خروجی=1664+650=2314\underbrace{25 \times 64 + 64}_{\text{لایه‌ی پنهان}} + \underbrace{64 \times 10 + 10}_{\text{لایه‌ی خروجی}} = 1664 + 650 = 2314

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

چه کسی این پارامترها را تنظیم می‌کند؟

Section titled “چه کسی این پارامترها را تنظیم می‌کند؟”

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

پس تنظیم وزن‌ها باید خودکار باشد. برای این کار از بهینه‌سازی ریاضی استفاده می‌کنیم که پایه‌اش مشتق است. دو چیز لازم داریم:

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

چون این روش‌ها مشتق را در طول شبکه در هم ضرب می‌کنند، مشتق تابع فعالیت هم مهم می‌شود؛ اگر صفر باشد، همه‌چیز صفر می‌شود.

  • شبکه‌ی عصبی از لایه‌ی ورودی (خود ویژگی‌ها)، یک یا چند لایه‌ی پنهان و یک لایه‌ی خروجی ساخته می‌شود.
  • معمولاً به تعداد کلاس‌ها نورون خروجی می‌گذاریم. لایه‌ی ورودی در شمارش لایه‌ها حساب نمی‌شود.
  • تعداد لایه‌ها و نورون‌ها ابرپارامتر است؛ لایه‌ی بیشتر یعنی مرزهای پیچیده‌تر.
  • پارامترها (وزن‌ها و بایاس‌ها) آن‌قدر زیادند که فقط با بهینه‌سازی خودکار مبتنی بر مشتق می‌شود تنظیمشان کرد.

مقدمه‌ای بر یادگیری عمیق، آموزش رایگان و فارسی یادگیری عمیق.