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

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

ReLU چیست؟
«Relu» یک تابع فعالساز پرکاربرد و محبوب است که با عملکرد بهینه و سادگی خود، در زمینه شبکههای عصبی مصنوعی و بهخصوص مدلهای یادگیری عمیق، نقش مهمی را ایفا میکند.
به منظور یادآوری باید اشاره کنیم که تابع فعالسازی، فعال شدن یا نشدن یک نورون در مدلهای شبکههای عصبی را مشخص میکند. در واقع توابعی مانند ReLU، سیگموید، تانژانت هایپربولیک، سافتمکس و غیره با محاسبات و عملیات ریاضی مشخصی تعیین میکنند که آیا ورودیهای نورون در روند پیشبینی، اهمیت و تأثیر دارند یا خیر.
تابع Relu که نام آن کوتاه شده عبارت «واحد خطی یکسوساز» (Rectified Linear Unit) است، بهدلیل سادگی و کارآمد بودن، در بسیاری از معماریهای شبکههای عصبی مورد استفاده قرار میگیرد. این تابع با تعریف ریاضی نوعی تابع چندضابطهای به شما میرود. در واقع، اگر ورودی مثبت باشد، همان مقدار را عبور داده و در صورت منفی یا صفر بودن ورودی، مقدار صفر را به عنوان خروجی تولید میکند.
فرمول این تابع را در ادامه آوردهایم.
- در این فرمول، x به همان ورودی نورون اشاره دارد.
- اگرx بزرگتر از صفر باشد آنگاه، این تابع خود x را بر میگرداند.
- همچنین اگر x کوچکتر یا مساوی صفر باشد، مقداری که تابع بر میگرداند صفر خواهد بود.
در واقع، همین سادگی باعث شده تا ReLU در روند یادگیری شبکههای عمیق عصبی، عملکرد خوبی داشته باشد. به این دلیل که بدون محاسبات و تبدیلهای پیچیده، به حفظ غیرخطی بودن تابع کمک میکند.
در ادامه نیز نمایش بصری و نمودار تابع فعالساز ReLU را مشاهده میکنید.

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

همانطور که مشاهده میکنید، تابع ReLU برای تمامی مقادیر مثبت، عملکردی مشابه تابع همانی و خطی از خود نشان داده و برای مقادیر منفی نیز مقدار خروجی را صفر میکند. از این ویژگیها میتوان برداشتهای زیر را داشت.
- با توجه به اینکه محاسبات و عملیات ریاضی پیچیدهای صورت نمیگیرد، پردازش آن سریعتر و کمهزینهتر بوده و فرایند آموزش یا اجرای مدل نیز با سرعت بیشتری انجام میشود.
- مدل شما زودتر به همگرایی میرسد. خطی بودن باعث میشود تا با ورودیهای بزرگ، مقدار شیب به اشباع نرسد و در همین راستا، با مسئله محو شوندگی گرادیان موجود در سایر توابع مواجه نشوید.
چه زمانی از ReLU استفاده کنیم؟
در حالات زیر از ReLU استفاده میکنیم:
- پردازش و مدیریت دادههای «Sparse» (پراکنده): همانطور که پیشتر نیز اشاره شد، ReLU با ارائه خروجی صفر برای مقادیر غیر مثبت، در پراکندگی خروجیهای نورون نقش مؤثری دارد و علاوه بر این مانع از «بیشبرازش» (Overfitting) نیز میشود.
- آموزش و همگرایی سریعتر مدل: ReLU با پیشگیری از اشباع شدن و گیر کردن در ناحیه مثبت، سرعت فراینده آموزش مدل را افزایش داده و جریان گرادیان را در شبکههای عمیق عصبی بهبود میدهد.
با این وجود، هنگامیکه مدل ما با مسئله «زوال ReLU» یا «dying ReLU» و همچنین ناپایداری رو به رو است، شاید استفاده از توابع فعالساز دیگری مانند ReLU ،PReLU یا ELU در بهبود عملکرد مدل نقش مؤثرتری داشته باشند.
یادگیری شبکه های عصبی مصنوعی با فرادرس
شبکههای عصبی مصنوعی به کامپیوترها امکان میدهند تا با کمترین دخالت انسانی، تصمیمهای هوشمندانهای را اتخاذ کنند. به بیان دیگر، این نوع شبکهها با مدلسازی روابط پیچیده و غیرخطی بین دادههای وارد شده و خروجی، یاد میگیرند. تسلط بر مفاهیم شبکههای عصبی، به دلیل جایگاه مهم و اثرگذار آن در زندگی روزمره افراد، بسیار حائز اهمیت است. پس اگر شما هم به این حوزه علاقهمند هستید میتوانید در رشته دانشگاهی مانند هوش مصنوعی و رباتیکز به تحصیل بپردازید یا بهجای آن و بهراحتی به منابع متعدد آنلاین دست پیدا کنید.
با توجه به اینکه یادگیری از طریق مشاهده فیلمهای آموزشی یکی از اثربخشترین شیوههای کسب مهارتهای جدید محسوب میشود، پیشنهاد ما این است که مفاهیم هوش مصنوعی از جمله شبکههای عصبی را با محتوای اینچنینی مانند عناوین موجود در مجموعه فیلمهای آموزش شبکههای عصبی مصنوعی، مقدماتی تا پیشرفته از فرادرس یاد بگیرید. این فیلمها که لینک آن نیز در ادامه نیز آورده شده، توسط اساتید مجرب، با کیفیتی بالا و اغلب بهصورت پروژهمحور تهیه شدهاند.

برخی از عناوین موجود در این مجموعه را در ادامه فهرست کردهایم.
کاربردهای ReLU چیست؟
در این قسمت میخواهیم کاربردهای ReLU در شبکههای عصبی مصنوعی را به شما توضیح دهیم. ReLU بهدلیل مشخصههای منحصر به فرد خود جزو رایجترین توابع فعالساز محسوب میشود و در فریمورکهای هوش مصنوعی مانند پایتورچ و تنسورفلو به عنوان تابع فعالساز پیشفرض در نظر گرفته شده است. این تابع در بسیاری از برنامههای یادگیری عمیق از جمله مواردی که در ادامه آورده شده، مورد استفاده قرار میگیرد.
- بازشناسی تصاویر: تابع فعالساز ReLU نقش مهمی در شبکههای عصبی کانولوشن و به خصوص شبکههای مورد استفاده برای استخراج ویژگیها و پردازش تصویر دارد.
- پردازش زبان طبیعی یا NLP: در بسیاری از وظایف مرتبط با پردازش زبان طبیعی نیز از تابع ReLU استفاده میشود.
- سیستمهای توصیهگر: از این تابع فعالساز برای دریافت پیشنهادات سفارشی در سیستمهای توصیهگر نیز استفاده میشود.
نقاط قوت و ضعف تابع فعال ساز ReLU چیست؟
استفاده از تابع فعالساز ReLU، مزایا و معایب زیادی را برایتان بههمراه خواهد داشت که در این قسمت برخی را مورد بررسی قرار میدهیم.
مزایای ReLU چیست؟
از نقاط قوت ReLU میتوان به موارد زیر اشاره کرد.
- کاهش مشکل محوشوندگی گرادیان
- عدم نیاز به محاسبات و پردازشهای پیچیده
معایب ReLU چیست؟
از نقاط ضعف ReLU میتوان به موارد زیر اشاره کرد.
- مشکل «ReLU از کار افتاده» (Dying ReLU): گاهی اوقات نورونها بهاصطلاح غیر فعال میشوند و تنها صفر را در خروجی ارائه میدهند. این مشکل را میتوان یکی از بزرگترین ایرادهای ReLU دانست. در واقع، این مشکل بههنگام صفر شدن شیب و گرادیان توسط مقادیر بزرگ منفی ایجاد میشود. در چنین صورتی، نورونهایی را خواهیم داشت که توانایی یادگیری ندارند و هیچگاه فعال نخواهند شد.
- خروجی بیکران: در تابع ReLU مقادیر مثبت فاقد مرز و کران مشخصی هستند، موردی که در سایر توابع فعالسازی مانند سیگموید، تانژانت هایپربولیک وجود ندارد. این موضوع به هنگام آموزش شبکههای عصبی عمیق میتواند باعث بروز «انفجار گرادیان» شود.
- گرادیان نویزی: بههنگام آموزش مدل، بهخصوص هنگامی که وزنها بهدرستی مقداردهی و تنظیم نشده باشند، ممکن است گرادیان ReLU بیثبات و نویزی شود. در چنین حالتی ممکن است سرعت یادگیری کاهش پیدا کند یا اینکه مدل، کارایی مناسبی نداشته باشد.

نسخه های مختلف ReLU
استفاده از این تابع فعالساز مزایای زیادی دارد. با اینحال برای رفع برخی مشکلات مرتبط با آن نسخههای مختلفی از این تابع معرفی شده است. در این قسمت، مروری بر انواع توابع فعالسازی ReLU خواهیم داشت.
Leaky ReLU
این تابع فعالساز برخلاف ReLU که برای مقادیر منفی، صفر را به عنوان خروجی بر میگرداند، مقدار کمی شیب در نظر میگیرد. بدینترتیب، از بروز مشکل«غیرفعال شدن» (Dying) نورونها پیشگیری خواهد کرد.
شکل ریاضی این تابع فعالساز را در ادامه آوردهایم.
α در اینجا یک ثابت عددی بسیار کوچک است که بهطور معمول، مقداری مانند ۰٫۰۱ دارد.
در ادامه، نمودار این تابع را مشاهده میکنید.

PReLU یا ReLU پارامتری به عنوان نوعی از ReLU چیست؟
تابع فعالساز ReLU پارامتری را میتوان نوع اصلاح شدهای از «Leaky ReLU» دانست. در این تابع، مقدار شیب ناحیه منفی در طول فرایند آموزش یاد گرفته میشود.
فرمول ریاضی تابع ReLU پارامتری بهشکل زیر است.
در نمودار زیر، تابع فعالساز PReLU آورده شده است.

موردی که میبایست اشاره کنیم این است که مقدار α میتواند با توجه به شرایط گوناگون آموزش، تنظیم شود. در نتیجه، در مقایسه با Leaky ReLU که مقدار شیب در آن از قبل مشخص شده، از انعطاف بیشتری برخوردار است.
ELU به عنوان نوعی از ReLU چیست؟
تابع «واحد نمایی خطی» (Exponential Linear Unit) یا «ELU» با اضافه کردن شیب غیر صفر به مقادیر منفی، اثرات انحراف بایاس را کاهش میدهد. از این شیوه برای تسریع همگرایی و فرایند یادگیری در برخی مدلها استفاده میشود.
فرمول ELU، در ادامه آورده شده است.
با توجه به این فرمول، موارد زیر را داریم.
- x ورودی تابع فعالساز است.
- α نیز ثابت عددی مثبت است که خروجی مقادیر منفی را مشخص میکند و بهطور معمول برابر با 1 تنظیم میشود.
- اگر ورودی، بزرگتر یا مساوی با صفر باشد، درست مانند ReLU، خود ورودی به عنوان خروجی برگردانده میشود.
- و اگر ورودی منفی باشد، خروجی یک تابع نمایی از x است که به اندازه یک واحدجابهجا شده و در α ضرب میشود.
نمودار تابع ELU را نیز در ادامه مشاهده میکنید.

CReLU به عنوان نوعی از ReLU چیست؟
تابع «ReLU تلفیقی» (Concatenated ReLU) دارای ۲ خروجی بهشکل زیر است.
- ReLU معمولی
- ReLU منفی
که اینها بههم تلفیق و متصل میشوند. بدینترتیب، در پاسخ به ورودی مثبت، [x, 0] و برای ورودیهای منفی [0, x] را خواهیم داشت. اندازه خروجی نیز در همین راستا ۲ برابر خواهد بود.
ReLU-6 به عنوان نوعی از ReLU چیست؟
این نوع از ReLU که در برخی کتابخانهها وجود دارد، دارای محدودیت y=6 است و بهشکل زیر عمل میکند.

البته در نظر داشته باشید که با توجه به مقاله توسعهدهنده این روش و مجموعه داده مورد آزمایش، مقدار «۶» اختیاری است. بهطور کلی، این محدودیت کمک میکند تا مدل، ویژگیهای پراکنده را سریعتر یاد بگیرد.
پیاده سازی و نحوه استفاده از ReLU
برای استفاده از تابع فعالساز ReLU میتوان از ابزارها و کتابخانههای رایجی مانند تنسورفلو، کراس و پایتورچ استفاده کرد. در ادامه، نحوه دسترسی به این تابع فعالساز در هر یک از کتابخانهها را به همراه کدهای مربوطه آوردهایم.
نحوه استفاده از ReLU در تنسورفلو
برای استفاده از تابع ReLU و انواع مختلف آن در تنسورفلو میتوانید از ماژول tf.nn استفاده کنید. کدهای زیر را در نظر بگیرید.
در این کدها، با استفاده از tf.nn.relu بهعنوان تابع فعالساز، برای شبکه عصبی پیچشی یک لایه کانولوشن ایجاد کردهایم.
نحوه استفاده از ReLU در کراس
در کتابخانه کراس نیز میتوانید از طریق ماژول keras.layers.Activation به تابع ReLU دسترسی داشته باشید. کدهای زیر را در نظر بگیرید.
همانطور که مشاهده میشود، لایهای با تابع فعالساز ReLU به مدل اضافه شده است.
نحوه استفاده از ReLU در پای تورچ
در کتابخانه پایتورچ نیز از ماژول torch.nn برای دسترسی به تابع فعالساز ReLU استفاده میشود. همانطور که در کدهای زیر مشخص است، ۲ لایه کانولوشن با این تابع فعالساز به مدل اضافه شده است.
البته راه دیگری هم برای این منظور وجود دارد. یعنی میتوانیم بهطور مستقیم و طبق کدهای زیر از آن استفاده کنیم.
خط سوم از کدهای بالا، استفاده از ReLU با استفاده از ماژول nn را به خوبی نشان داده است.
کدهای زیر مثال دیگری را نشان میدهد که در آن، شبکه عصبی سادهای شامل ۲ لایه تماممتصل یا به اصطلاح «Fully Connected» ایجاد کردهایم.
همانطور که در خط شماره ۷ هم قابل مشاهده است، بین این ۲ لایه از تابع فعالساز ReLU استفاده کردهایم. ورودی این شبکه در خط شماره ۱۵ مشخص شده که دستهای شامل ۳۲ نمونه را در بر میگیرد که هر یک ۷۸۴ ویژگی دارند. در نهایت نیز خروجی شبکه در خط آخر کدها بالا به شکل [32, 10] خواهد بود.
مروری بر تاریخچه تابع فعال ساز ReLU
این تابع بهعنوان یک مفهوم ریاضی برای مدلسازی شبکههای عصبی بیولوژیکی نخستین باز در اواسط دهه ۹۰ میلادی یعنی بیش از ۸۰ سال پیش توسط ریاضیدان برجسته «آلستون هاوسهولدر» استفاده شد. در سال ۱۹۶۹ «فوکوشیما» که دانشمند شناختهشدهای در حوزه علوم کامپیوتر، شبکههای عصبی مصنوعی و یادگیری عمیق بود از ReLU برای استخراج ویژگیهای دیداری در شبکههای عصبی سلسله مراتبی استفاده کرد. پس از ۳ دهه، «هانلوزر» و همکارانش به رابطه زیستی بین جریان ورودی و نرخ شلیک نورنها پی بردند.
«جارت» و همکانش در سال ۲۰۰۹ میلادی اهمیت استفاده از ReLU برای تشخیص اشیا در شبکههای عصبی پیچشی را بیان کردند. در سال ۲۰۱۰ استفاده از ReLU مجدد رایج شد و پیش از آن سیگموید لجستیک و تانژانت هایپربولیک بهطور گستردهای استفاده میشدند. در سال ۲۰۱۰ «هینتون» و «نایر» نیز تابع ReLU را به عنوان جایگزین مناسبی برای تابع «سافتپلاس» دانستند. در سال ۲۰۱۱ نیز «گلورات» و همکارانش در مورد نقاط قوت ReLU در برابر سیگموید و تانژانت هایپربولیک از جمله محاسبات سبکتر، گرادیان محو شونده و غیره به بحث پرداختند.
در یکی از مطالب پیشین مجله فرادرس تابع فعالسازی در شبکههای عصبی را معرفی کردهایم که مطالعه آن میتواند برایتان مفید باشد.

فرق سایر توابع فعالساز با ReLU چیست؟
در این قسمت میخواهیم مقایسهای روی انواع توابع فعالساز داشته باشیم و آنها را از چندین جنبه مورد بررسی قرار دهیم.
تابع فعالساز | مزایا | معایب |
ReLU | سادگی، بهینهبودن به لحاظ پردازشی، کاهش مشکل محو شوندگی گرادیان، فعالسازی پراکنده و محاسبات بهینه | مشکل «Dying ReLU» و توقف یادگیری نورونها، بیکران بودن خروجی مثبت |
Leaky ReLU | حل مشکل Dying ReLU | نیاز به تعیین شیب α از قبل |
PReLU | یادگیری شیب برای مقادیر منفی | احتمال بیشبرازش |
سیگموید | مفید برای دستهبندی باینری | مشکل محوشدگی گرادیان |
تانژانت هایپربولیک | گرادیان «پیوسته» (Smooth) | متمرکز نبودن خروجیها حول صفر |
ELU | پردازش کندتر نسبت به ReLU | ارائه عملکردی نرم برای مقادیر منفی و پیشگیری از تغییر بایاس |
Softmax | ارائه احتمال تعلق داده به هر کلاس در طبقهبندی چند کلاسی | خطر وقوع محوشوندگی گرادیان |
محدوده خروجیها نیز در توابع فعالساز مختلف به شکل زیر است.

کاربرد هر یک از این توابع فعالساز نیز در مقایسه با ReLU به شرح زیر است.
تابع فعالساز | کاربرد |
ReLU | لایههای پنهان در شبکههای عصبی عمیق |
Leaky ReLU | در لایههای پنهان، جایگزینی برای ReLU |
PReLU | در شبکههای عصبی عمیق در صورت عدم موفقیت ReLU |
سیگموید | لایههای خروجی برای دستهبندی دودویی |
تانژانت هایپربولیک | لایههای پنهان، هنگام نیاز به متمرکز بودن داده حول صفر |
ELU | در شبکههای عمیق برای تسریع همگرایی |
Softmax | لایههای خروجی برای طبقهبندی چندکلاسی |
ادامه یادگیری شبکه های با عصبی پایتون
در این مطلب با تابع فعالساز ReLU آشنا شدید که یکی از مفاهیم موجود در شبکههای عصبی محسوب میشود. اکنون برای ادامه یادگیری و تقویت مهارتهای خود میتوانید پیادهسازیهای شبکههای عصبی و همچنین شبکههای عمیق عصبی را با استفاده از فیلمهای آموزش زیر یاد بگیرید.
جمعبندی
در این مطلب از مجله فرادرس توضح دادیم که ReLU چیست. همچنین گفتیم که این تابع فعالساز، نقش مهمی در آموزش شبکههای عصبی بر عهده دارد و علاوه بر سادگی، یکی از بهترین و اثربخشترین توابع فعالسازی موجود محسوب میشود. ReLU کاربردهای متنوع و بسیار زیادی دارد که در قسمت مربوطه شرح دادیم. به مزایای این تابع اشاره کردیم و نقاط ضعف آن نیز پرداخته شد. برای اینکه بتوانید از مزایای این تابع در پروژههای خود بهرهمند شوید، نحوه استفاده از ReLU را در فریمورکهای محبوب مانند پایتورچ، تنسورفلو و کراس، بههمراه کدهای مربوطه به شما نشان دادیم.
تابع فعالساز ReLU تأثیر زیادی در مدلهای یادگیری عمیق داشته است. این تابع به همگرایی و یادگیری سریعتر شبکهها و عملکرد بهتر آنها کمک بهسزایی میکند. هر چند که ReLU دارای برخی ضعفهاست اما سادگی آن در کنار خصوصیاتی ارزشمند مانند ویژگی «پراکندگی» (Sparsity) و توانایی حل مشکل محوشدگی گرادیان، این تابع را به گزینهای قدرتمند برای ایجاد شبکههای عصبی بهینه تبدیل کرده است. بهطور کلی، در نگارش این مطلب سعی بر این بوده تا ضمن معرفی ReLU و انواع آن و همچنین نقاط ضعف و قوتی که دارد، به شما کمک کنیم تا مدلهای دیپلرنینگ بهتری را برای کاربردهای مدنظر خود ایجاد کنید.
source