تابع سیگموید اغلب در یادگیری ماشین به کار گرفته میشود. اگر بخواهیم به طور خاص اشاره کنیم، اغلب به عنوان یک تابع فعال سازی در یادگیری عمیق و شبکههای عصبی مصنوعی استفاده میشود. از آنجایی که معمولاً در یادگیری ماشینی و یادگیری عمیق تابع فعال سازی سیگموید مورد استفادهتان قرار میگیرد، دانستن این که چگونه تابع فعال سازی سیگموید را در زبانهای برنامه نویسی رایج در یادگیری ماشین پیاده سازی کنید در این مسیر از ملزومات است. در این مطلب مروری بر مفهوم این که تابع فعالسازی چیست؟ و فرمول محاسبهی خروجی یک شبکه عصبی چیست؟ و سپس به روشهای پیادهسازی تایع سیگموید در پایتون همچنین مزایا و معایب آن میپردازیم.
فهرست مطالب نحوهی پیادهسازی سیگموید در پایتون
مروری بر تابع فعال سازی سیگموید
چرا از تابع سیگموید استفاده میشود؟
پیاده سازی تابع فعال سازی سیگموید در پایتون
رسم فعال سازی سیگموید با استفاده ازNumpy
تابع فعال سازی چیست؟
تابع فعال سازی یک تابع ریاضی است که خروجی یک شبکه عصبی را کنترل میکند. توابع فعال سازی به تعیین اینکه آیا نورون باید مورد هدف در انتقال اطلاعات قرار گیرد یا نه کمک میکنند. توابع فعال سازی در علوم کامپیوتر از پتانسیل عمل در علوم اعصاب الهام گرفته شده است. اگر پتانسیل الکتریکی بین داخل و خارج یک نورون از مقداری به نام پتانسیل عمل فراتر رود، نورون تحت یک واکنش زنجیرهای قرار میگیرد که به آن اجازه “Fire” میدهد و در نتیجه نورون سیگنالی را به نورونهای همسایه منتقل کند. توالی حاصل از فعالسازیها که «spike train» نامیده میشود، نورونهای حسی را قادر میسازد تا احساس را از انگشتان به مغز منتقل کنند و به نورونهای حرکتی اجازه میدهد دستورالعملها را از مغز به اندامها منتقل کنند. برخی از توابع فعال سازی محبوب عبارتند از:
- Linear
- Softmax
- Sigmoid
- Leaky ReLU
- Tanh
- ReLU
- Binary Step
تابع فعال سازی مسئول اضافه کردن غیر خطی بودن به خروجی یک مدل شبکه عصبی است. بدون تابع فعال سازی، یک شبکه عصبی به سادگی یک رگرسیون خطی است. معادله ریاضی برای محاسبه خروجی یک شبکه عصبی به صورت زیر است:
در این مطلب بر روی یادگیری تابع فعال سازی سیگموید تمرکز خواهیم کرد. جالب است که بدانید فرمول تابع فوق از تابع سیگموئی در ریاضیات می آید.
مروری بر تابع فعالسازی سیگموید
تابع Sigmoid پرکاربردترین تابع فعال سازی در شروع آموزش یادگیری عمیق است. این یک تابع هموارسازی است که استخراج و پیاده سازی آن نسبت به توابع دیگر آسان است. نام Sigmoidal از حرف یونانی Sigma گرفته شده است و هنگامی که تابع فعالسازی سیگموید رسم میشود، به صورت یک “S” شیب دار در سراسر محور Y ظاهر میشود. یک تابع سیگمویدی یک تابع لجستیک است که صرفاً به هر تابعی که شکل “S” را حفظ میکند، اشاره دارد. (برای مثال به tanh(x) اشاره دارد.) در جایی که یک تابع سیگمویدی بین 0 و 1 وجود دارد، tanh(x) از یک شکل مشابه پیروی میکند، اما بین 1 و -1 وجود دارد. به خودی خود، یک تابع سیگمویدی نیز قابل تمایز است، ما به راحتی میتوانیم شیب منحنی تابع فعال سازی سیگموید را در هر دو نقطه مشخص پیدا کنیم.
برخی از ویژگیهای تابع فعال سازی سیگموید به شرح زیر است:
۱ـ تابع سیگموید اعداد واقعی را در هر محدودهای دریافت میکند و خروجیای با ارزش واقعی را برمیگرداند.
۲ـ اولین مشتق تابع سیگموید غیر منفی (بزرگ یا مساوی صفر) یا غیر مثبت (کمتر یا مساوی صفر) خواهد بود.
۳ـ تابع فعال سازی سیگموید در لایههای خروجی معماریهای یادگیری عمیق ظاهر میشود و برای پیشبینی خروجیهای مبتنی بر احتمال استفاده میشود و با موفقیت در مسائل طبقهبندی باینری، وظایف رگرسیون لجستیک و همچنین دیگر برنامههای کاربردی شبکه عصبی پیادهسازی شده میشود.
فرمول ریاضی تابع فعال سازی سیگموید
از نظر ریاضی میتوانید تابع فعال سازی سیگموید را به صورت زیر نشان دهید:
میبینید که مخرج همیشه بزرگتر از 1 خواهد بود، بنابراین خروجی همیشه بین 0 و 1 خواهد بود.
چرا از تابع سیگموید استفاده میشود؟
دلیل اصلی استفاده از تابع سیگموید این است که بین (0 تا 1) وجود دارد. بنابراین، بیشترین کاربرد را به ویژه برای مدلهایی که باید احتمال را به عنوان خروجی پیش بینی کنید برایتان خواهد داشت. از آنجایی که احتمال هر چیزی فقط بین محدوده 0 و 1 وجود دارد، سیگموید انتخاب مناسبی است زیرا تابعی قابل تمایز نیز است.
پیاده سازی تابع فعال سازی سیگموید در پایتون
در این قسمت نحوه پیاده سازی تابع فعال سازی سیگموید در پایتون را یاد میگیریم. ما میتوانیم تابع را در پایتون به صورت زیر تعریف کنیم:
حالا تابع سیگموید فوق را بر روی تعدادی از دادهها اجرا کنید:
خروجی شما اگر با اروری برخورد نکنید باید به شکل زیر نشان داده شود:
رسم تابع فعال سازی سیگموید با استفاده از پایتون
برای رسم تابع فعال سازی سیگموید در شبکه عصبی از کتابخانهی Numpy استفاده میکنیم:
خروجی شما به شکل زیر خواهد بود:
میبینیم که خروجی بین 0 و 1 است. تابع سیگموید معمولاً برای پیشبینی احتمالات استفاده میشود زیرا احتمال همیشه بین 0 و 1 است. یکی از معایب تابع سیگموید این است که مقادیر Y نسبت به نواحی انتهایی در مقایسه با میزان تغییر در مقادیر X بسیار حساسیت نشلن میدهند. این منجر به مشکلی میشود که به عنوان مشکل گرادیان ناپدید شدن شناخته میشود. ناپدید شدن گرادیان روند یادگیری را کند میکند و از این رو در شبکه عصبی فاکتوری نامطلوب است.
بیایید چند جایگزین که بر این مشکل غلبه میکنند را بررسی کنیم.
تابع فعالسازی Relu
یک جایگزین بهتر که این مشکل از بین رفتن گرادیان را حل میکند، تابع فعال سازی ReLu است. تابع فعال سازی ReLu اگر ورودی منفی باشد 0 را برمی گرداند در غیر این صورت ورودی را همانطور که هست در خروجی ارائه میدهد. این تابع فعال سازی از نظر ریاضی به صورت زیر نمایش داده میشود:
میتوانید آن را به صورت زیر در پایتون پیاده سازی کنید:
بیایید ببینیم که این تابع فعال سازی چگونه روی برخی از ورودیها کار میکند.
خروجی شما به شکل زیر خواهد بود:
مشکل ReLu این است که گرادیان ورودیهای منفی در آن صفر است. این دوباره به مشکل ناپدید شدن گرادیان (صفر گرادیان) برای ورودیهای منفی منجر میشود. برای حل این مشکل، جایگزین دیگری به نام عملکرد فعالسازی Leaky ReLu داریم.
تابع فعالسازی Leaky Relu
ReLu Leaky با دادن مولفه خطی بسیار کوچک x به ورودیهای منفی، مشکل گرادیان صفر را برای مقدار منفی حل میکند. از نظر ریاضی میتوانیم آن را اینگونه تعریف کنیم:
این تابع با توجه به تعریف ریاضی بالا در پایتون به این صورت نشان داده میشود:
خروجی شما به شکل زیر خواهد بود:
سخن آخر
در مجموعههای آموزش انواع تابع فعالسازی به طور کامل دربارهی تابع سیگموید آموزش داده شده است. در این مطلب نیز نحوهی پیادهسازی تابع سیگموید در پایتون به همراه معایب و مزایای آن و راهحلهای مشکلات احتمالی در مسیر استفاده از تابع سیگموید آموختید. امیدوارم این مطلب از پرتال هوش مصنوعی برای شما مفید بوده باشد.