في هذا البرنامج التعليمي، سنتعرف على وظيفة التنشيط سيجمويد. تقوم وظيفة سيجمويد دائمًا بإرجاع مخرج بين 0 و 1.
بعد هذا البرنامج التعليمي، ستعرف:
- ما هي وظيفة التنشيط؟
- كيفية تنفيذ وظيفة سيجمويد في بايثون؟
- كيفية رسم وظيفة سيجمويد في بايثون؟
- أين نستخدم وظيفة سيجمويد؟
- ما هي المشاكل الناجمة عن وظيفة التنشيط سيجمويد؟
- بدائل أفضل لوظيفة التنشيط سيجمويد.
ما هي وظيفة التنشيط؟
وظيفة التنشيط هي وظيفة رياضية تتحكم في مخرج الشبكة العصبية. تساعد وظائف التنشيط في تحديد ما إذا كان يجب تنشيط العقدة أم لا.
بعض وظائف التنشيط الشهيرة هي :
- الخطوة الثنائية
- الخطية
- سيجمويد
- تانجنت هيبيربوليك
- ReLU
- ليكي ريلو
- سوفتماكس
التنشيط مسؤول عن إضافة غير الخطية إلى مخرج نموذج الشبكة العصبية. بدون وظيفة تنشيط، الشبكة العصبية مجرد تحويل خطي.
المعادلة الرياضية لحساب مخرج الشبكة العصبية هي:

بهذا البرنامج التعليمي، سنركز على وظيفة التنشيط sigmoid. تأتي هذه الوظيفة من وظيفة التنشيط في الرياضيات.
لنبدأ بمناقشة الصيغة الخاصة بالوظيفة.
الصيغة الخاصة بوظيفة التنشيط sigmoid
يمكنك تمثيل وظيفة التنشيط sigmoid رياضيًا على النحو التالي:

يمكنك رؤية أن المقام سيكون دائمًا أكبر من 1، لذلك سيكون الإخراج دائمًا بين 0 و 1.
تنفيذ وظيفة التنشيط Sigmoid باستخدام لغة Python
في هذا القسم، سنتعلم كيفية تنفيذ وظيفة التنشيط sigmoid باستخدام لغة Python.
يمكننا تعريف الوظيفة في لغة Python كما يلي:
import numpy as np
def sig(x):
return 1/(1 + np.exp(-x))
لنجرب تشغيل الوظيفة على بعض الإدخالات.
import numpy as np
def sig(x):
return 1/(1 + np.exp(-x))
x = 1.0
print('Applying Sigmoid Activation on (%.1f) gives %.1f' % (x, sig(x)))
x = -10.0
print('Applying Sigmoid Activation on (%.1f) gives %.1f' % (x, sig(x)))
x = 0.0
print('Applying Sigmoid Activation on (%.1f) gives %.1f' % (x, sig(x)))
x = 15.0
print('Applying Sigmoid Activation on (%.1f) gives %.1f' % (x, sig(x)))
x = -2.0
print('Applying Sigmoid Activation on (%.1f) gives %.1f' % (x, sig(x)))
الناتج:
Applying Sigmoid Activation on (1.0) gives 0.7
Applying Sigmoid Activation on (-10.0) gives 0.0
Applying Sigmoid Activation on (0.0) gives 0.5
Applying Sigmoid Activation on (15.0) gives 1.0
Applying Sigmoid Activation on (-2.0) gives 0.1
رسم وظيفة التنشيط Sigmoid باستخدام لغة Python
لرسم تنشيط السيغمويد، سنستخدم مكتبة Numpy:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-10, 10, 50)
p = sig(x)
plt.xlabel("x")
plt.ylabel("Sigmoid(x)")
plt.plot(x, p)
plt.show()
الناتج :

يمكننا أن نرى أن الناتج بين 0 و 1.
يتم استخدام وظيفة السيغمويد بشكل شائع للتنبؤ بالاحتمالات لأن الاحتمال دائمًا بين 0 و 1.
واحدة من العيوب لوظيفة السيغمويد هي أنه في المناطق النهائية، تستجيب قيم Y بشكل قليل جدًا للتغيير في قيم X.
وهذا يؤدي إلى مشكلة تعرف بـمشكلة التدرج الفاني.
التدرج الفاني يبطئ عملية التعلم وبالتالي هو غير مرغوب فيه.
دعونا نناقش بعض البدائل التي تتغلب على هذه المشكلة.
وظيفة التنشيط ReLu
A better alternative that solves this problem of vanishing gradient is the ReLu activation function.
تعيد وظيفة التنشيط ReLu القيمة صفر إذا كان الإدخال سلبيا ، وإلا تعيد الإدخال كما هو.
رياضيًا ، يتم تمثيلها على النحو التالي:

يمكنك تنفيذها في بايثون كما يلي:
def relu(x):
return max(0.0, x)
دعونا نرى كيف يعمل على بعض الإدخالات.
def relu(x):
return max(0.0, x)
x = 1.0
print('Applying Relu on (%.1f) gives %.1f' % (x, relu(x)))
x = -10.0
print('Applying Relu on (%.1f) gives %.1f' % (x, relu(x)))
x = 0.0
print('Applying Relu on (%.1f) gives %.1f' % (x, relu(x)))
x = 15.0
print('Applying Relu on (%.1f) gives %.1f' % (x, relu(x)))
x = -20.0
print('Applying Relu on (%.1f) gives %.1f' % (x, relu(x)))
الناتج:
Applying Relu on (1.0) gives 1.0
Applying Relu on (-10.0) gives 0.0
Applying Relu on (0.0) gives 0.0
Applying Relu on (15.0) gives 15.0
Applying Relu on (-20.0) gives 0.0
المشكلة مع ReLu هي أن التدرج للإدخالات السلبية يكون صفرا.
هذا بدوره يؤدي إلى مشكلة التدرج الفاني (صفر التدرج) للإدخالات السلبية.
لحل هذه المشكلة لدينا بديل آخر يعرف بوظيفة التنشيط Leaky ReLu.
وظيفة التنشيط Leaky ReLu
تعالج وظيفة التنشيط Leaky ReLu مشكلة الانحدارات الصفرية للقيم السالبة، من خلال منح مكون خطي صغير جداً من x للقيم السالبة.
من الناحية الرياضية يمكننا تعريفها على النحو التالي:
f(x)= 0.01x, x<0
= x, x>=0
يمكنك تنفيذها في Python باستخدام:
def leaky_relu(x):
if x>0 :
return x
else :
return 0.01*x
x = 1.0
print('Applying Leaky Relu on (%.1f) gives %.1f' % (x, leaky_relu(x)))
x = -10.0
print('Applying Leaky Relu on (%.1f) gives %.1f' % (x, leaky_relu(x)))
x = 0.0
print('Applying Leaky Relu on (%.1f) gives %.1f' % (x, leaky_relu(x)))
x = 15.0
print('Applying Leaky Relu on (%.1f) gives %.1f' % (x, leaky_relu(x)))
x = -20.0
print('Applying Leaky Relu on (%.1f) gives %.1f' % (x, leaky_relu(x)))
الناتج:
Applying Leaky Relu on (1.0) gives 1.0
Applying Leaky Relu on (-10.0) gives -0.1
Applying Leaky Relu on (0.0) gives 0.0
Applying Leaky Relu on (15.0) gives 15.0
Applying Leaky Relu on (-20.0) gives -0.2
الختام
كان هذا البرنامج التعليمي حول وظيفة التنشيط Sigmoid. تعلمنا كيفية تنفيذ ورسم الوظيفة في Python.
Source:
https://www.digitalocean.com/community/tutorials/sigmoid-activation-function-python