You are currently viewing همه چیز درباره‌ی توابع فعال‌سازی (Activation Function) در شبکه‌ی عصبی

همه چیز درباره‌ی توابع فعال‌سازی (Activation Function) در شبکه‌ی عصبی

  • Post published:نوامبر 18, 2022

جهان یک مسئله‌ی بیگ دیتا است. با گذر زمان معلوم شد این جمله‌ی معروف هم درباره‌ی مغز انسان‌ها و هم در پروژه‌های ماشین لرنینگ صدق می‌کند. هر لحظه مغز ما سعی می‌کند اطلاعات دریافتی خود را به دو دسته‌ي «مفید» و «نه چندان مفید» تفکیک کند.

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

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

مطالب پیش‌رو

تابع فعال‌سازی شبکه‌ی عصبی چیست؟

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

انواع تابع فعال سازی و کاربردهای آن‌ها

چگونه تابع فعال‌سازی مناسب را انتخاب کنیم؟

تابع فعال‌سازی شبکه‌ی عصبی چیست؟

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

تابع فعال سازی در درجه اول برای اصلاح داده ها به روش غیر خطی استفاده می شود. این غیرخطی بودن امکان تغییر فضایی نمایش داده ها را فراهم می کند. به عبارت ساده، تابع فعال سازی به ما اجازه می دهد تا نحوه مشاهده یک داده را تغییر دهیم. به عنوان مثال، اگر به عنوان داده داشته باشیم: هر هفته 50٪ از مشتریان یک فروشگاه شکلات تخته ای می خرند. عملکرد فعال سازی اجازه می دهد تا داده ها را به 50٪ از مشتریان مانند شکلات یا 50٪ از مشتریانی که قصد خرید هر هفته شکلات دارند، تغییر دهید. در مثال ما، تغییر در نمایندگی می تواند به ما اجازه دهد استراتژی بازاریابی یا موجودی موجودی فروشگاه خود را تنظیم کنیم. از آنجایی که یک مدل از چندین لایه و در نتیجه توابع فعال سازی چندگانه تشکیل شده است، تغییرات پی در پی و پیچیده نمایش رخ می دهد. این به ما امکان می دهد دیدگاه جدیدی در مورد داده های خود داشته باشیم که انسان ها در مدت زمان کوتاهی قادر به داشتن آن نیستند.

نکته‌ای در باب تابع فعال‌سازی:

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

این ویژگی تابع غیرفعال‌سازی مدیون غیر خطی بودن آن است. غیر خطی بودن تابع فعا‌ل‌سازی اجازه می‌دهد تا شما بتوانید نمایش داده‌ها را تغییر دهید تا رویکرد جدیدی در هر لایه از داده‌ها داشته باشید. این تغییر بازنمایی با توابع فعال‌سازی خطی امکان پذیر نخواهد بود.

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

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

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

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

انواع توابع فعال‌سازی شبکه‌ها‌ی عصبی

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

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

۱ـ توابع فعال‌سازی باینری: تابع گام دودویی به مقدار آستانه ای بستگی دارد که تصمیم می گیرد نورون باید فعال شود یا نه. ورودی تغذیه شده به تابع فعال سازی با یک آستانه خاص مقایسه می‌شود. اگر ورودی بزرگ‌تر از آن باشد، نورون فعال می‌شود، در غیر این صورت غیرفعال می‌شود، به این معنی که خروجی آن به لایه پنهان بعدی منتقل نمی‌شود.

محدودیت‌های تابع فعال‌سازی باینری یا دودویی:

۱ـ نمی‌تواند خروجی‌های چند ارزشی را ارائه دهد. برای مثال، نمی‌تواند برای مسائل طبقه‌بندی چند طبقه استفاده شود.

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

۲ـ تابع فعال‌سازی خطی:

تابع فعال‌سازی خطی که با نام «بدون فعال‌سازی» یا تابع هویت  نیز شناخته می‌شود جایی است که فعال‌سازی متناسب با ورودی است. با این حال، یک تابع فعال سازی خطی دو مشکل عمده دارد:

۱ـ استفاده از پس انتشار ممکن نیست زیرا مشتق تابع یک ثابت است و هیچ ارتباطی با ورودی مجهول ندارد.

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

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

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

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

چگونه تابع فعال‌سازی مناسب را انتخاب کنیم؟

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

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

۲ـ توابع سیگموئید و هایپربولیک به دلیل اینکه به همراه خود مشکلاتی در گرادیان به همراه می‌آورند لزوماً در همه جا کاربردی نیستند.

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

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

سخن آخر

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