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

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

    0

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

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

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

    سیناپس‌ها و نورون‌های تشکیل‌دهنده شبکه‌های عصبی زیستی و محاسباتی

     

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

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

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

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

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

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

     

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

     

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

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

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

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

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

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

    تابع سیگموید

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

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

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

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

     

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

     

    ۲- تابع ReLU

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

     

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

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

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

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

     

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

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

    ReLU f(x)

     

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

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

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

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

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

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

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

    Leaky ReLU

     

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

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

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

    نمودار تابع Softmax

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

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

    تابع softmax

     

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

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

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

    مقاله قبلی

    شرکت پویا فناوران کوثر: متمرکز بر فناوری پردازش تصویر

    مقاله بعدی

    شما همچنین ممکن است دوست داشته باشید

    نظرات

    پاسخ دهید

    نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *