وظيفة ReLu في Python

ريلو أو دالة تنشيط الخطية المستقيمة المستقيمة هي الاختيار الأكثر شيوعًا لدالة التنشيط في عالم التعلم العميق. يوفر ريلو نتائج على أحدث مستوى وفي نفس الوقت فعالية حسابية جدًا.

الفكرة الأساسية لدالة التنشيط ريلو هي كما يلي:

Return 0 if the input is negative otherwise return the input as it is.

يمكننا تمثيلها رياضيًا كما يلي:

Relu Function

الشيفرة الزائفة لريلو كما يلي:

if input > 0:
	return input
else:
	return 0

في هذا البرنامج التعليمي ، سنتعلم كيفية تنفيذ وظيفة ريلو الخاصة بنا ، ونتعرف على بعض عيوبها ونتعلم عن نسخة أفضل من ريلو.

القراءة الموصى بها: الجبر الخطي لتعلم الآلة [الجزء 1/2]

لنبدأ!

تنفيذ وظيفة ريلو في بايثون

لنكتب تنفيذنا الخاص لريلو في بايثون. سنستخدم الدالة القصوى المدمجة لتنفيذها.

الشيفرة لريلو هي كما يلي:

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)))

الشفرة الكاملة

الشفرة الكاملة موضحة أدناه:

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

لنرى ما سيكون الميل (المشتقة) لدالة ReLu. عند التفضيل، سنحصل على الدالة التالية:

f'(x) = 1, x>=0
      = 0, x<0

يمكننا أن نرى أن الميل يساوي 0 لقيم x أقل من الصفر. وهذا يعني أن الأوزان والانحرافات لبعض الخلايا العصبية لا تتم تحديثها. يمكن أن يكون هذا مشكلة في عملية التدريب.

للتغلب على هذه المشكلة، لدينا دالة Leaky ReLu. دعونا نتعرف عليها فيما يلي.

دالة Leaky ReLu

دالة Leaky ReLu هي تحسين لدالة ReLu العادية. لمعالجة مشكلة الميل الصفري للقيم السالبة، تعطي Leaky ReLu مكونًا خطيًا صغيرًا جدًا من x للمداخل السالبة.

رياضيًا يمكننا التعبير عن Leaky ReLu كالتالي:

f(x)= 0.01x, x<0
    = x,   x>=0

رياضيًا:

  • f(x)=1 (x<0)
  • (αx)+1 (x>=0)(x)

هنا a هو ثابت صغير مثل 0.01 الذي تم اختياره أعلاه.

يمكن عرضه بشكل رسومي كما يلي:

Leaky ReLu

معدل الانحدار لوظيفة Leaky ReLu

دعنا نحسب معدل الانحدار لوظيفة Leaky ReLu. يمكن أن يكون معدل الانحدار كالتالي:

f'(x) = 1,  x>=0
      = 0.01, x<0

في هذه الحالة، معدل الانحدار للإدخالات السلبية غير صفر. هذا يعني أن جميع العقد سيتم تحديثها.

تنفيذ Leaky ReLu في لغة Python

الكود المطبق لـ Leaky ReLu معطى أدناه:

def 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)))

الكود الكامل

الكود الكامل لـ Leaky ReLu معطى أدناه:

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

استنتاج

{
“error”: “Upstream error…”
}

Source:
https://www.digitalocean.com/community/tutorials/relu-function-in-python