0
09922334435

راهنمای جامع Activation Functions کاملا رایگان [۲۰۲۲]

فهرست مطالب

Activation Function چیست؟

یک تابع فعال سازی یک ویژگی بسیار مهم یک شبکه عصبی مصنوعی است، آنها اساسا تصمیم می گیرند که آیا نورون باید فعال شود یا خیر.

در شبکه های عصبی مصنوعی، تابع خروجی فعال سازی آن گره را با یک ورودی یا مجموعه ای از ورودی ها تعریف می کند.

دلیل استفاده از تابع فعال سازی، معرفی ویژگی های غیر خطی به شبکه ما است.

ایده اصلی نحوه عملکرد یک شبکه عصبی

آیا ReLU بهترین تابع فعال سازی است؟

شبکه های عصبی الگوهای پردازش اطلاعات هستند که از سیستم های عصبی بیولوژیکی الهام گرفته شده اند.

این شامل لایه هایی از گره ها یا نورون های به هم پیوسته است که در لایه های به هم پیوسته چیده شده اند.

 

اطلاعات از لایه ورودی به لایه های پنهان حرکت می کند. در یک حالت ساده از هر لایه، فقط ورودی ها را در وزن ضرب می کنیم، یک bias اضافه می کنیم و یک تابع فعال سازی را به نتیجه اعمال می کنیم و خروجی را به لایه بعدی منتقل می کنیم.

 

این کار را تا رسیدن به لایه آخر تکرار می کنیم.

 

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

 

تابع فعال سازی یک “gate” ریاضی بین ورودی نورون فعلی و خروجی آن است. آنها اساسا تصمیم می گیرند که آیا نورون باید فعال شود یا نه.

یک نورون را در نظر بگیرید!!

چرا بیشتر از ReLU استفاده می شود؟

چرا از یک تابع فعال سازی استفاده می کنیم؟

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

 

یک شبکه عصبی بدون تابع فعال سازی فقط یک مدل رگرسیون خطی است.

 

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

چرا از یک تابع فعال سازی غیر خطی استفاده می کنیم؟

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

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

انواع تابع فعال سازی

به طور کلی توابع فعال ساز را می توان به ۲ نوع تقسیم کرد:

۱- تابع فعال ساز خطی

۲- توابع فعال ساز غیرخطی

 

تابع فعال سازی خطی

ورودی ها را در وزن هر نورون ضرب می کند و سیگنال خروجی متناسب با ورودی ایجاد می کند.

از softmax برای چه کاری استفاده می‌شود

معادله: f(x) = x

مشتق: f’(x) = 1

دامنه: (∞+, ∞-)

 

دو مشکل عمده:

۱- انتشار به عقب امکان پذیر نیست – مشتق تابع یک عدد ثابت است و هیچ ارتباطی با ورودی X ندارد. بنابراین نمی توان به عقب برگشت داد و فهمید که کدام وزن ها در نورون های ورودی می توانند پیش بینی بهتری ارائه دهند.

۲- با توابع فعال‌سازی خطی، مهم نیست که چند لایه در شبکه عصبی وجود دارد، آخرین لایه تابعی خطی از لایه اول خواهد بود.

تابع فعال سازی غیر خطی

برخی مدل های شبکه عصبی از توابع فعال سازی غیر خطی استفاده می کنند.

 

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

 

تقریباً هر فرآیند قابل تصور را می توان به عنوان یک محاسبات عملکردی در یک شبکه عصبی نشان داد، مشروط بر اینکه تابع فعال سازی غیر خطی باشد.

 

توابع غیر خطی مشکلات یک تابع فعال سازی خطی را حل می کنند:

آنها اجازه انتشار به عقب را می دهند زیرا دارای یک تابع مشتق هستند که به ورودی ها مرتبط است.

آنها به “انباشته شدن” چندین لایه نورون برای ایجاد یک شبکه عصبی عمیق اجازه می دهند. چندین لایه پنهان از نورون ها برای یادگیری مجموعه داده های پیچیده با سطوح بالایی از دقت مورد نیاز است.

 

برخی از توابع فعال‌سازی غیرخطی رایج عبارتند از:

Sigmoid / Logistic

تابع سیگموئید یک منحنی S شکل را تشکیل می دهد. برای نگاشت مقادیر پیش بینی شده به احتمالات، از تابع سیگموئید استفاده می کنیم. تابع هر مقدار واقعی را به مقدار دیگری بین ۰ و ۱ نگاشت می کند.

چرا ReLU در لایه مخفی استفاده می شود؟

معادله: f(x) = s= 1/(1+e⁻ˣ)

مشتق: f(x) = s= 1/(1+e⁻ˣ)

دامنه: (۰,۱)

مزایا:

۱- تابع تمایزپذیر است. یعنی می‌توانیم شیب منحنی سیگموئید را در هر دو نقطه پیدا کنیم.

۲- مقادیر خروجی بین ۰ و ۱ محدود می شود و خروجی هر نورون را نرمال سازی می کند.

معایب:

۱- محو گرادیان – برای مقادیر بسیار زیاد یا بسیار کم X، تقریباً هیچ تغییری در پیش‌بینی وجود ندارد و باعث ایجاد مشکل محو گرادیان می‌شود (به سمت صفر میل می‎کند).

۲- به دلیل مشکل محو شیب، سیگموئیدها همگرایی کندی دارند.

۳- خروجی ها در مرکز صفر نیستند.

۴- از نظر محاسباتی هزینه زیادی دارد.

Tan-h / Hyperbolic tangent

آیا Leaky Relu همیشه بهتر از Relu است؟

معادله: f(x) = a =tanh(x) =(eˣ – e⁻ˣ)/(eˣ +e⁻ˣ)

مشتق: (a²-۱)

دامنه: (۱, ۱-)

 

مزایا:

۱- مرکز صفر – مدل‌سازی ورودی‌هایی که دارای مقادیر منفی خیلی کوچک، خنثی و بسیار مثبت هستند را آسان‌تر می‌کند.

۲- تابع و مشتق آن هر دو یکنواخت هستند.

۳- بهتر از عملکرد سیگموئید کار می کند.

معایب:

۱- همچنین مشکل محو گرادیان دارد و در نتیجه باعث همگرایی کند می‌شود.

ReLU (Rectified Linear Unit)

آیا Relu از OverFitting جلوگیری میکند؟

معادله: f(x) = a =max(0,x)

مشتق: f’(x) = { 1 ; if z>0, 0; if z<0 and undefined if z=0 }

دامنه: (∞۰ ,+)

 

مزایا:

۱- کارآمد بودن از نظر محاسباتی – به شبکه اجازه می دهد تا خیلی سریع همگرا شود.

۲- غیر خطی بودن – اگرچه مانند یک تابع خطی به نظر می رسد، ReLU تابع مشتق دارد و امکان پس انتشار را فراهم می کند.

معایب:

۱- مشکل Dying ReLU – وقتی ورودی‌ها به صفر نزدیک می‌شوند، یا منفی هستند، گرادیان تابع صفر می‌شود، شبکه نمی‌تواند پس انتشار را انجام دهد و نمی‌تواند یاد بگیرد.

Leaky ReLU

ReLU چگونه از محو گرادیان جلوگیری می کند؟

معادله: f(x)= a = max(0.01x, x)

مشتق: f’(x) = {0.01 ; if z<0, 1 ; otherwise}

دامنه: (∞۰٫۰۱ ,+)

 

مزایا:

۱- از مشکل dying ReLU جلوگیری می کند – این تغییر ReLU دارای شیب مثبت کوچکی در ناحیه منفی است.

 

معایب:

۱- نتایج سازگار نیستند – leaky ReLU پیش‌بینی ثابتی برای مقادیر ورودی منفی ارائه نمی‌کند.

۲- در طول انتشار از جلو، اگر نرخ یادگیری بسیار زیاد تنظیم شود، باعث overshoot شدن نورون می‌شود.

 

ایده leaky ReLU را می توان حتی بیشتر گسترش داد. به جای ضرب x با یک جمله ثابت، می‌توانیم آن را با یک پارامتر ضرب کنیم. این روش leaky ReLU به نام Parametric ReLU شناخته می‌شود.

Softmax

تابع Softmax توزیع احتمالات را بر روی رویدادهای مختلف محاسبه می کند.

رفع مشکل محو گرادیان با Activation function

معادله: f(x) = eˣᵢ / (Σⱼ₌₀ eˣᵢ)

تفسیر احتمالاتی: Sⱼ = P(y=j|x)

دامنه: (۰, ۱)

 

مزایا:

۱- قادر به مدیریت چند کلاس – خروجی های هر کلاس را بین ۰ و ۱ عادی می کند و بر مجموع آنها تقسیم می کند و احتمال اینکه مقدار ورودی در یک کلاس خاص باشد را می دهد.

۲- برای لایه fully connected استفاده می‌شود – معمولاً Softmax فقط برای لایه خروجی، برای شبکه‌های عصبی که نیاز به طبقه‌بندی ورودی‌ها به چند دسته دارند، استفاده می‌شود.

از کدام تابع فعال ساز استفاده کنیم؟

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

 

توصیه کردن یک تابع فعال‌ساز که برای همه موارد کاربردی کار می‌کند، بسیار دشوار است.

ملاحظات زیادی وجود دارد – محاسبه مشتق چقدر دشوار است (اگر اصلاً قابل تمایز باشد!)، چقدر سریع یک شبکه با AF انتخابی شما همگرا می شود و… .

 

توابع سیگموئید و ترکیبات آنها به طور کلی در مورد مسائل طبقه بندی بهتر عمل می کنند.

 

گاهی اوقات از استفاده توابع سیگموئید و tanh به دلیل مشکل محو گرادیان اجتناب می شود.

 

از Tanh اغلب به دلیل مشکل dead neuron اجتناب می شود.

 

تابع فعال ساز ReLU به طور گسترده استفاده می شود و انتخاب پیش فرض است زیرا نتایج بهتری را به همراه دارد.

 

اگر در شبکه‌های خود با dead neuron مواجه شدیم، تابع leaky ReLU بهترین انتخاب است.

 

تابع ReLU فقط باید در لایه های مخفی استفاده شود.

 

یک لایه خروجی می تواند تابع فعال ساز خطی را در مسائل رگرسیون داشته باشد.

نتیجه گیری

امیدواریم این مقاله به منظور دریافت ایده در مورد عملکرد فعال سازها و نحوه استفاده و… برای شما مفید بوده باشد. نظرات خود را در مورد مقاله کامنت کنید.

ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد.