اگر از واحد Feature Crosses به خاطر بیاورید، مشکل طبقه بندی زیر غیرخطی است:
شکل 1. مسئله طبقه بندی غیرخطی.
"غیرخطی" به این معنی است که شما نمی توانید یک برچسب را با مدلی از فرم \(b + w_1x_1 + w_2x_2\) به طور دقیق پیش بینی کنید به عبارت دیگر، "سطح تصمیم" یک خط نیست. پیش از این، ما به تلاقی ویژگیها به عنوان یکی از روشهای ممکن برای مدلسازی مسائل غیرخطی نگاه کردیم.
حال مجموعه داده های زیر را در نظر بگیرید:
شکل 2. یک مسئله طبقه بندی غیرخطی دشوارتر.
مجموعه داده های نشان داده شده در شکل 2 را نمی توان با یک مدل خطی حل کرد.
برای اینکه ببینیم چگونه شبکههای عصبی ممکن است به مشکلات غیرخطی کمک کنند، بیایید با ارائه یک مدل خطی به عنوان یک نمودار شروع کنیم:
شکل 3. مدل خطی به عنوان نمودار.
هر دایره آبی نشان دهنده یک ویژگی ورودی و دایره سبز نشان دهنده مجموع وزنی ورودی ها است.
چگونه میتوانیم این مدل را تغییر دهیم تا توانایی آن در مقابله با مسائل غیرخطی بهبود یابد؟
لایه های پنهان
در مدل نشان داده شده توسط نمودار زیر، یک "لایه پنهان" از مقادیر واسطه اضافه کرده ایم. هر گره زرد رنگ در لایه پنهان، مجموع وزنی مقادیر گره ورودی آبی است. خروجی حاصل جمع وزنی گره های زرد است.
شکل 4. نمودار مدل دو لایه.
آیا این مدل خطی است؟ بله، خروجی آن هنوز ترکیبی خطی از ورودی های آن است.
در مدلی که توسط نمودار زیر نشان داده شده است، ما یک لایه مخفی دوم از مجموع وزنی اضافه کرده ایم.
شکل 5. نمودار مدل سه لایه.
آیا این مدل هنوز خطی است؟ بله همینطور است. وقتی خروجی را به عنوان تابعی از ورودی بیان می کنید و آن را ساده می کنید، مجموع وزنی دیگری از ورودی ها را دریافت می کنید. این مجموع به طور موثر مسئله غیرخطی در شکل 2 را مدل نمی کند.
توابع فعال سازی
برای مدلسازی یک مسئله غیرخطی، میتوانیم مستقیماً یک غیرخطی معرفی کنیم. ما می توانیم هر گره لایه پنهان را از طریق یک تابع غیرخطی لوله کنیم.
در مدلی که توسط نمودار زیر نشان داده شده است، مقدار هر گره در لایه پنهان 1 قبل از اینکه به مجموع وزنی لایه بعدی منتقل شود، توسط یک تابع غیرخطی تبدیل می شود. این تابع غیرخطی را تابع فعال سازی می نامند.
شکل 6. نمودار مدل سه لایه با تابع فعال سازی.
اکنون که یک تابع فعال سازی اضافه کرده ایم، افزودن لایه ها تاثیر بیشتری دارد. انباشتن غیرخطی ها روی غیرخطی ها به ما اجازه می دهد تا روابط بسیار پیچیده ای را بین ورودی ها و خروجی های پیش بینی شده مدل کنیم. به طور خلاصه، هر لایه به طور موثر در حال یادگیری یک تابع پیچیده تر و سطح بالاتر از ورودی های خام است. اگر میخواهید شهود بیشتری در مورد نحوه کارکرد این کار ایجاد کنید، به پست وبلاگ عالی کریس اولاه مراجعه کنید.
توابع فعال سازی رایج
تابع فعال سازی سیگموئید زیر مجموع وزنی را به مقداری بین 0 و 1 تبدیل می کند.
در اینجا یک طرح است:
شکل 7. تابع فعال سازی سیگموئید.
تابع فعال سازی واحد خطی تصحیح شده زیر (یا به اختصار ReLU ) اغلب کمی بهتر از یک تابع صاف مانند سیگموئید عمل می کند، در حالی که محاسبه آن نیز بسیار آسان تر است.
برتری ReLU بر اساس یافتههای تجربی است، احتمالاً توسط ReLU که دارای طیف مفیدتری از پاسخگویی است. پاسخ دهی سیگموئید نسبتاً سریع در هر دو طرف کاهش می یابد.
شکل 8. تابع فعال سازی ReLU.
در واقع، هر تابع ریاضی می تواند به عنوان یک تابع فعال سازی عمل کند. فرض کنید \(\sigma\) تابع فعال سازی ما (Relu، Sigmoid یا هر چیز دیگری) را نشان می دهد. در نتیجه، مقدار یک گره در شبکه با فرمول زیر داده می شود:
TensorFlow پشتیبانی خارج از جعبه را برای بسیاری از عملکردهای فعال سازی فراهم می کند. میتوانید این توابع فعالسازی را در فهرست بستهبندیهای TensorFlow برای عملیات شبکه عصبی اولیه پیدا کنید. با این حال، ما همچنان توصیه می کنیم با ReLU شروع کنید.
خلاصه
اکنون مدل ما دارای تمام مؤلفههای استانداردی است که افراد معمولاً وقتی میگویند «شبکه عصبی» به آن اشاره میکنند:
- مجموعه ای از گره ها، مشابه نورون ها، که در لایه ها سازماندهی شده اند.
- مجموعه ای از وزن ها که نشان دهنده ارتباط بین هر لایه شبکه عصبی و لایه زیر آن است. لایه زیر ممکن است یک لایه شبکه عصبی دیگر یا نوع دیگری از لایه باشد.
- مجموعه ای از سوگیری ها، یکی برای هر گره.
- یک تابع فعال سازی که خروجی هر گره را در یک لایه تبدیل می کند. لایه های مختلف ممکن است عملکردهای فعال سازی متفاوتی داشته باشند.
یک هشدار: شبکههای عصبی لزوماً همیشه بهتر از تلاقی ویژگیها نیستند، اما شبکههای عصبی یک جایگزین انعطافپذیر ارائه میدهند که در بسیاری از موارد به خوبی کار میکند.