اذهب إلى المحتوى
  • 0

دالة التنشيط softsign واستخدامها في كيراس Keras

Chollet ML

السؤال

Recommended Posts

  • 1

هي دالة تنشيط تستخدم مع الشبكات العصبية وتعطي خرجاً ضمن المجال 1 ل -1. ولها الشكل التالي:

softsign(x) = x / (abs(x) + 1).

حسناً هذه الدالة مرتبطة ارتباطاً وثيقاً بدالة tanh لذا أنصح أولاً بقراءة مافي الرابط التالي:

فهذه الدالة جاءت بغاية تطوير أو تحسين دالة ال tanh بغية منع الخلايا من الوصول لحالة ((التشبع)) بسرعة. أي بمعنى آخر منع الخلايا من الوصول لحالة عدم القدرة على تعلم أي معلومات جديدة. الآن تأمل الرسم البياني التالي، حيث أن الخط الأزرق يمثل دالة ال tanh واللون البرتقالي يمثل مشتقها واللون الأحمر هو دالة ال softsign والأخضر مشتقها.
Untitled.png.fbd860c09a00b8701770efc197487751.png

كما تلاحظ فإن دالة التانش تتقارب بشكل سريع من المقارب الأفقي (القيمة y=1 و y=-1) حيث أنها تتقارب منهم بشكل أسي، وهذا مايؤثر سلباً على قيم المشتق حيث أن ميل المماس يصبح أفقياً بسرعة كبيرة مع زيادة قيم ال x وهذا مايعني أن قيم المشتقة تنخفض وهذا مايعني أن عملية التعلم تتباطأ أسياً حتى تنعدم تقريباً في حالة استمرار تزايد قيمة قيم الدخل وهذا مانسميه بحالة (التشبع) أي أن الخلايا لم تعد قاردة على التعلم من البيانات أكثر من ذلك وهذا واضح جداً من الرسم جانباً حيث أن دالة المشتق للتانش تتقارب سريعاً من الصفر. الآن لو نظراً لدالة السوفت فإن أول أمر يمكننا ملاحظته هو أن دالة السوفت كما يشير اسمها هي دالة أنعممم والمقصود هنا أن دالة المشتق لها تتقارب ولكنها لاتنعتدم بسرعة كما في ال tanh وبالتالي منع الخلايا من التشبع. وهي الميزة الوحيدة لها مقارنة بال tanh أما على الجانب الآخر فنجد أن قيم المشتق للتانش أكبر ضمن مجال الدخل من -1 ل 1 وهذا أفضل لعملية التعلم. وفي كيراس يمكننا أن نجدها ضمن الموديول التالي:

tf.keras.activations.softsign(x)

ولاستخدامها أثناء تدريب نماذجك يمكنك تمريرها للطبقة بإحدى الطرق في المثال التالي:

model = Sequential()
model.add(Embedding(10000, 8, input_length=maxlen))
model.add(Flatten())
model.add(Dense(64, activation='softsign'))# بهذه الطريقة
"""
أو 
from tensorflow.keras import activations
model.add(Dense(64, activation=activations.softsign))
أو بالشكل التالي
model.add(Dense(64))
model.add(Activation(activations.softsign )) # أو model.add(Activation("softsign "))

"""
model.add(Dense(1, activation='sigmoid')) 
model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['acc'])
model.summary()

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

دالة Softsign هي دالة تنشيط تقوم بإعادة تعيين القيم بين -1 و 1 من خلال تطبيق عتبة threshold تمامًا مثل دالة sigmoid. الميزة فيها أن قيمة softsign  هي صفر في مركزها ، اي ان نقطة الاصل لديها هي 0 مما يساعد الطبقة العصبية التالية أثناء عملية propagating.

وتعبر عنها رياضيا بالصيغة التالية:

f(x) = x / (1 + |x|)

وتمثل مشتقتها بالصيغة التالية:

dy/dx = 1 / (1 + |x|)^2

ويمكن تمثيل الدالة ومشتقتها كما هو موضح في الشكل التالي:

softsign-and-derivative.png.9bc73205adb5a9c0a2d42b772b6bac24.png

ويمكنك اختبارها بالكود كالتالي:

import tensorflow as tf
input_tensor = tf.constant([-1.5, 9.0, 11.0], dtype = tf.float32)
gen_output = tf.keras.activations.softsign(input_tensor)
gen_output.numpy()

output
>>> array([-0.6 , 0.9 , 0.9166667] , dtype=float32)

على الرغم من التشابة الملحوظ بينها وبين دالة tanh ، الا ان هناك اختلاف بينهما، الاختلاف الأساسي هو أن وظيفةالدالة tanh تتقارب أسيًا، اي تشبة الدوال الاسية. في حالة الدالة Softsign ، فإنها تتقارب مع دوال كثيرة الحدود. وهذا الخط الرفيع  بين الدالتين  يخلق فرقًا كبيرًا بين الحالتين وحالات الاستخدام الخاصة بكل منهما بهما.

ورغم ذلك فان دالة relu تعد افضل واكثر استخداما من softsign لانها ابسط وتاخذ وقتا اقل في الحسابات منهاوايضا تعد افضل في الحسابات المعقدة التي توجد في طبقات التعلم العميق.

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

from keras.models import Sequential
from keras.layers import Flatten, Dense
model = Sequential()
model.add(Embedding(10000, 8, input_length=maxlen))
model.add(Flatten())
model.add(Dense(1, activation='softsign')) 
model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['acc'])
model.summary()

history = model.fit(x_train, y_train,
epochs=10,
batch_size=32,
validation_split=0.2)

 

تم التعديل في بواسطة Ahmed Sharshar
رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...