Filter by دسته‌ها
chatGTP
ابزارهای هوش مصنوعی
اخبار
گزارش
تیتر یک
چندرسانه ای
آموزش علوم داده
اینفوگرافیک
پادکست
ویدیو
دانش روز
آموزش‌های پایه‌ای هوش مصنوعی
اصول هوش مصنوعی
یادگیری بدون نظارت
یادگیری تقویتی
یادگیری عمیق
یادگیری نیمه نظارتی
آموزش‌های پیشرفته هوش مصنوعی
بینایی ماشین
پردازش زبان طبیعی
پردازش گفتار
چالش‌های عملیاتی
داده کاوی و بیگ دیتا
رایانش ابری و HPC
سیستم‌‌های امبدد
علوم شناختی
دیتاست
رویدادها
جیتکس
کاربردهای هوش مصنوعی
کتابخانه
اشخاص
شرکت‌های هوش مصنوعی
محصولات و مدل‌های هوش مصنوعی
مفاهیم
کسب‌و‌کار
تحلیل بازارهای هوش مصنوعی
کارآفرینی
هوش مصنوعی در ایران
هوش مصنوعی در جهان
مقاله
 توابع فعال سازی: سیگموید، ReLU ،Leaky ReLU و Softmax در شبکه‌های عصبی

توابع فعال سازی: سیگموید، ReLU ،Leaky ReLU و Softmax در شبکه‌های عصبی

زمان مطالعه: 4 دقیقه

در این نوشتار به بررسی و مطالعه مبانی نورون‌ها، شبکه های عصبی و توابع فعال سازی می‌پردازیم. شبکه‌های عصبی مصنوعی از نورون‌ها تشکیل می‌شوند. هر نورون را می‌توان یک تابع در نظر گرفت که عددی در خود جای داده است. نورون‌ها این جریان/ورودی را از انشعابات انتهایی (سیناپس‌ها) دریافت می‌کنند. در هر یک از لایه‌های شبکه عصبی، ورودی نورون را در وزن سیناپس ضرب می‌کنیم و مجموع آن را به دست می‌آوریم.

نمونه کد برای انجام عملیات پیش‌انتشار در نورون

class Neuron(object):
  # ... 
  def forward(self, inputs):
    """ assume inputs and weights are 1-D numpy arrays and bias is a number """
    cell_body_sum = np.sum(inputs * self.weights) + self.bias
    firing_rate = 1.0 / (1.0 + math.exp(-cell_body_sum)) # sigmoid activation function
    return firing_rate
نمونه کد برای انجام عملیات پیش‌انتشار در نورون
سیناپس‌ها و نورون‌های تشکیل‌دهنده شبکه‌های عصبی زیستی و محاسباتی

برای مثال، (به D در شکل فوق نگاه کنید) با فرض اینکه وزن‌ها برابر با  w1, w2, w3, … wN و ورودی‌ها برابر با i1, i2, i3, … iN باشند، مجموع آن‌ها برابر با w1*i1 + w2*i2 + w3*i3 … wN*iN خواهد بود.

در شبکه‌های عصبی، مقادیر wX و iX از لایه‌ای به لایه‌ دیگر و از اتصالی به اتصال دیگر متفاوت است و مجموع s بسته به فعال‌ بودن و غیرفعال بودن نورون متغیر است. در شبکه‌های عصبی برای نرمال‌سازی مقادیر از توابع فعال سازی استفاده می‌کنیم؛ این تابع مقادیر را به گونه‌ای تبدیل می‌کند تا در مقیاس 0 و 1 و یا 1- و 1 قرار گیرند.

ورودی، وزن‌ها و خروجی
ورودی، وزن‌ها و خروجی

از جمله ویژگی‌های توابع فعال سازی می‌توان به موارد زیر اشاره کرد:

  • غیرخطی بودن: غیرخطی بودن تابع فعال‌سازی به این معنی است که یک شبکه عصبی دو لایه را می‌توان نوعی تابع عمومی تقریب Universal function approximator در نظر گرفت. تابع فعال‌سازی identity خطی است. به عبارت دیگر، اگر چندین لایه به صورت همزمان از این تابع فعال‌سازی استفاده کنند، شبکه عصبی به مثابه یک مدل یک لایه عمل خواهد کرد.
  • بازه: در صورتی‌که بازه‌ی (Range) تابع فعال‌سازی محدود باشد، متدهای آموزشی مبتنی بر گردایان پایدارتر خواهند بود، چراکه الگوها فقط تعداد کمی از وزن‌ها را تحت تأثیر می‌گذارند. از سوی دیگر، اگر بازه‌ی تابع فعال‌سازی غیرمحدود و نامتناهی باشد، فرایند آموزش کاراتر و اثربخش‌تر خواهد بود، زیرا الگوها بر بیشتر وزن‌ها اثر می‌گذارند. در مورد آخر، به نرخ‌های یادگیری کوچک‌تر نیاز است.
  • مشتق‌پذیر پیوسته: در توابع فعال سازی، این ویژگی از آن‌ جهت مطلوب است که در متدهای بهینه‌سازی مبتنی بر گرادیان کاربرد دارد (تابع ReLU مشتق‌پذیر پیوسته نیست و به همین دلیل در بهینه‌سازی مبتنی بر گرادیان به مشکل می‌خورد). تابع پله‌ای دودیی Binary step function در 0 مشتق‌پذیر نیست و برای تمامی مقادیر در 0 مشتق می‌شود، به همین دلیل آن دسته از متدهای مبتنی بر گرادیان که از این تابع استفاده می‌کنند، پیشرفتی نخواهند داشت.
  • مشتق، مشتق‌پذیری یا شیب: زمانی‌که در محور y تغییر کنند، در محور x هم تغییر می‌کنند.
  • یکنوا Monotonic: در صورتی‌که تابع فعال‌سازی یکنوا باشد، متغیر خطای مدل یک لایه محدب خواهد بود.
  • تابع یکنوا: به تابعی گفته می‌شود که یا صعودی است یا نزولی.
  • توابع هموار با مشتق یکنوا: این نوع توابع در برخی موارد عملکرد بهتری در امر تعمیم‌دهی دارند.
  • موجودیت را نزدیک به ریشه یک تابع (صفرها) تقریب می‌زند: چنانچه تابع این ویژگی را داشته باشد و وزن‌های شبکه عصبی با مقادیر تصادفی مقداردهی شوند، یادگیری شبکه کارا خواهد بود. اگر تابع فعال‌سازی موجودیت را نزدیک به ریشه تقریب نزند، باید در مقداردهی وزن‌های توجه بیشتری به خرج دهیم.

جدول توابع فعال سازی

جدول توابع فعال سازی

مقدمه‌ای بر توابع فعال سازی

1-تابع سیگموید

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

تابع سیگموید
تابع سیگموید

تابع سیگموید و مشتق آن ساده هستند و مدت زمان ساخت مدل را کاهش می‌دهند، اما از آنجایی که بازه مشتق آن کوتاه است، در این تابع با مشکل info loss مواجه هستیم:

سیگموید و تابع مشتق آن
سیگموید و تابع مشتق آن

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

تابع سیگموید علاوه بر تابع لجستیک، تابع معکوس مثلثاتی Arctangent، تانژانت هذلولوی Hyperbolic tangent، تابع Gudermannian، تابع خطا، تابع لجستیک تعمیم‌یافته و توابع جبری را در بر می‌گیرد.  (برگرفته از ویکی‌پدیا)

2- تابع ReLU

ReLU، از سال 2018 تا به امروز، به عنوان محبوب‎ترین تابع فعال‌سازی در شبکه های عصبی عمیق شناخته می‌شود.

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

تابع ReLU انواع گوناگونی دارد: Softplus (SmoothReLU)، Noisy ReLU، Leaky ReLU،  Parametric ReLU و ExponentialReLU (ELU).

تابع ReLU
تابع فعال‌سازی ReLU

تابع فعال‌سازی ReLU: در صورتی‌که ورودی کمتر از 0 باشد، تابع فعال‌سازی ReLU  صفر (0) و در غیر اینصورت مقدار خام را خروجی می‌دهد. به عبارت دیگر، اگر مقدار ورودی بیشتر از 0 باشد، تابع ReLU همان مقدار ورودی را خروجی می‌دهد. عملکرد تابع فعال‌سازی ReLU از جهات بسیاری مشابه عملکرد نورون‌های زیستی ما است:

ReLU f(x)
ReLU f(x)

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

  • باورپذیری بیولوژیکی: این تابع برخلاف تابع پادتقارن Antisymmetry tanh ، یک جانبه است.
  • فعال‌سازی پراکنده Sparse activation: برای مثال، در شبکه‌ای که به صورت تصادفی مقداردهی شده است، حدود 50 درصد از واحدهای پنهان، فعال می‌شوند ( و خروجی آن‌ها غیرصفر خواهد بود).
  • انتشار بهتر گرادیان: در این تابع برخلاف توابع فعال سازی سیگموید کمتر با مشکل محوشدگی گرادیان gradient vanishing مواجه می‌شویم.
  • محاسبات اساسی: در این تابع فقط از مقایسه، جمع و ضرب استفاده می‌شود.
  • مقیاس‌پذیر: max ( 0, a x ) = a max ( 0 , x ) for a ≥ 0

توابع ReLU هم کاستی‌هایی دارند. برای مثال، میانگین این تابع صفر نیست و در صفر مشتق نمی‌شود، اما در هر جای دیگری مشتق می‌شود.

مقایسه سیگموید و ReLU
مقایسه سیگموید و ReLU

مشکل دیگری که در تابع ReLU با آن مواجه هستیم، مشکل مرگ ReLU است. منظور از مرگ ReLU این است که برخی از نورون‌های ReLU می‌میرند و غیرفعال می‌شوند و برای تمامی ورودی‌ها،  صفر (0) را خروجی می‌دهند. در این حالت، هیچ گرادیانی جریان نمیابد و در صورتی‌که تعداد نورون‌های غیرفعال در شبکه عصبی زیاد باشد، عملکرد مدل تحت تأثیر قرار می‌گیرد. برای حل این مشکل می‌توانیم از تابع Leaky ReLU استفاده کنیم؛ Leaky ReLU در نمودار بالا همان قسمتی است که شیب در سمت چپ x=0 تغییر کرده است و  در نتیجه باعث گسترش یا به اصطلاح نشتی بازه تابع ReLU می‌شود.

توابع فعال سازی
Leaky ReLU

3- تابع فعال‌سازی Softmax

تابع فعال‌سازی softmax بسیار جالب است، به این دلیل که این تابع علاوه بر نگاشت مقیاس/ بازه خروجی به [0، 1]، هر خروجی  را به نحوی نگاشت می‌کند که مجموع آن برابر با 1 باشد. خروجی تابع فعال‌سازی softmax یک توزیع احتمالی است.

از تابع softmax اغلب در لایه آخر کلاسیفایر شبکه عصبی استفاده می‌شود. اینگونه شبکه‌ها معمولاً بر روی log loss
 آموزش می‌بینند. در این شبکه‌ها از یکی از انواع غیرخطی رگرسیون لجستیک چندجمله‌ی، استفاده می‌شود. برگرفته از ویکی‌پدیا
تابع فعال‌سازی Softmax
نمودار تابع Softmax

معادله ریاضی تابع Softmax به شکل زیر است؛ در این معادله z بُردار ورودی‌ها به لایه خروجی است و j واحدهای خروجی را  1, 2, 3 … k تعدیل می‌کند:

تابع softmax
تابع softmax

در مدل رگرسیون لجستیک  از تابع softmax برای طبقه‌بندی چندگانه و از تابع سیگموید برای طبقه‌بندی دودویی استفاده می‌شود. مجموع احتمالات برای تابع softmax صفر (0) است.

برای درک بهتر این توابع  به شما توصیه می‌کنم نمودار و مشتقات‌شان را در پایتون/ متلب و R ترسیم کنید و به مقادیر مینیمم، ماکسیمم و بازه‌های آن‌ها نیز توجه کنید و تغییراتی که در نتیجه ضرب اعداد در این مقادیر حاصل می‌شود را بررسی کنید.

میانگین امتیاز / 5. تعداد ارا :

مطالب پیشنهادی مرتبط

اشتراک در
اطلاع از
0 نظرات
بازخورد (Feedback) های اینلاین
مشاهده همه دیدگاه ها
[wpforms id="48325"]