توابع فعالیت در شبکهی عصبی: پله، سیگموید، tanh و ReLU
در پرسپترون تابع فعالیت یک کار ساده داشت: بگوید نورون فعال شود یا نه. وقتی نورونها را لایهلایه کنار هم میگذاریم، نقش تابع فعالیت عوض میشود و خیلی مهمتر میشود.
مشکل تابع پله
Section titled “مشکل تابع پله”تابع پله میگوید: اگر مثبت بود ۱، وگرنه ۰. دو ایراد دارد:
- تغییرهای کوچک دیده نمیشوند. اگر وزنها کمی تغییر کنند و از ۳ به ۲٫۹ برسد، خروجی همان ۱ است. شبکه نمیفهمد تغییر وزنها اوضاع را بهتر کرده یا بدتر.
- مشتق به درد نمیخورد. در همهجا شیب تابع صفر است و درست در نقطهی صفر، مشتق تعریف نشده. روشهای آموزش شبکه بر پایهی مشتقاند و مشتقها در طول شبکه در هم ضرب میشوند؛ یک صفر کافی است تا همهچیز صفر شود.
اگر تابع فعالیت را کلاً حذف کنیم؟
Section titled “اگر تابع فعالیت را کلاً حذف کنیم؟”ایدهی وسوسهانگیزی است: تابعی که مشتقش مشکل دارد را برداریم و نورونهای لایههای پنهان فقط را حساب کنند. ولی نتیجهاش این است که کل شبکه به یک خط تبدیل میشود.
دلیلش ریاضی است: ترکیب خطی چند تابع خطی، باز هم خطی است. اگر سه خط
را با هر ضریبی جمع کنید، مثلاً ، باز به یک خط میرسید. نورونی که ورودیاش از پنج نورون خطی دیگر میآید، معادل یک نورون است. اگر یک خط میخواستیم، یک نورون کافی بود؛ این همه لایه را برای چه گذاشتیم؟
حالا اگر به هر خط یک شکستگی بدهیم، مثلاً منفیها را صفر کنیم، ترکیب آنها دیگر خط نیست:
هر نورون یک شکستگی میسازد و با ترکیب چند نورون میشود چندضلعی و مرزهای پیچیده ساخت. پس تابع فعالیت در لایههای پنهان رسالت تازهای دارد: غیرخطی کردن. در لایهی آخر همچنان میگوید کدام خروجی فعال است، ولی در لایههای میانی کارش ساختن غیرخطی بودن است. شاید اسم بهتری برایش «تابع غیرخطیساز» بود.
توابع فعالیت رایج
Section titled “توابع فعالیت رایج”سیگموید (Sigmoid)
Section titled “سیگموید (Sigmoid)”اولین راهحل این بود که خود تابع پله را نرم کنیم تا مشتقپذیر شود. سیگموید همین است: شکلی شبیه پله دارد ولی بدون پرش.
خروجیاش بین ۰ و ۱ است، تغییرهای کوچک را منعکس میکند و مشتقش هم ساده است: . سالها تابع فعالیت اصلی شبکههای عصبی بود.
تانژانت هذلولوی (tanh)
Section titled “تانژانت هذلولوی (tanh)”گروهی گفتند بهتر است خروجی نورونها حول صفر باشد، نه همیشه مثبت؛ این برای محاسبات شبکه ویژگی خوبی است. تابع tanh شکل سیگموید را دارد ولی خروجیاش بین ۱- و ۱ است:
سیگموید و tanh هنوز به شکل پله وفادار بودند. ولی هدف در لایههای میانی ساختن پله نبود، فقط غیرخطی بودن بود. جفری هینتون، که به خاطر نقش بزرگش در شبکههای عصبی از او با لقب «پدرخواندهی یادگیری عمیق» یاد میشود، و همکارانش تابعی خیلی ساده را رایج کردند: واحد یکسوساز خطی (Rectified Linear Unit):
مثبتها همانطور میمانند و منفیها صفر میشوند. ساده است، سریع حساب میشود و در عمل بهتر از سیگموید کار میکند. مشتقش هم ساده است: در بخش مثبت ۱ و در بخش منفی ۰. مشتق ۱ یعنی ضرب شدن پشت سر هم در لایههای زیاد سیگنال را کوچک نمیکند، و این برای آموزش شبکههای عمیق خیلی مهم است. صفر بودن در بخش منفی یعنی نورون فقط به بودن یک ویژگی حساس است، نه نبودنش.
امروز ReLU (و نسخههای مشابهش) انتخاب پیشفرض لایههای پنهان است.
- تابع فعالیت در لایهی آخر تعیین میکند کدام خروجی فعال است؛ در لایههای پنهان کارش غیرخطی کردن شبکه است.
- بدون تابع فعالیت، هر شبکهای با هر تعداد لایه معادل یک خط است.
- تابع پله مشتق مفیدی ندارد؛ سیگموید نسخهی نرم آن است، tanh خروجی حول صفر دارد و ReLU سادهترین و پرکاربردترین است.
- مشتق ReLU در بخش مثبت ۱ است و همین آموزش شبکههای عمیق را ممکن کرد.
مقدمهای بر یادگیری عمیق، آموزش رایگان و فارسی یادگیری عمیق.