المزيد من مقالات التعلم العميق......مقالات التعلم العميق

كيفية اختيار دالة التنشيط للتعلم العميق

اقرأ في هذا المقال
  • نظرة عامة على البرنامج التعليمي
  • دوال التنشيط
  • التنشيط للطبقات المخفية
  • دالة تنشيط الطبقة المخفية ReLU
  • دالة تنشيط الطبقة المخفية Sigmoid
  • دالة تنشيط الطبقة المخفية Tanh
  • كيفية اختيار دالة تنشيط الطبقة المخفية
  • التنشيط لطبقات الإخراج
  • دالة تنشيط الإخراج الخطي
  • دالة تنشيط الإخراج Sigmoid
  • دالة تنشيط الإخراج Softmax
  • كيفية اختيار دالة تنشيط الإخراج
  • الملخص

تعد دوال التنشيط Activation functions جزءًا مهمًا من تصميم الشبكة العصبية neural network.

سيتحكم اختيار دالة التنشيط في الطبقة المخفية hidden layer في مدى معرفة نموذج الشبكة لمجموعة بيانات التدريب. سيحدد اختيار دالة التنشيط في طبقة الإخراج output layer نوع التنبؤات التي يمكن أن يقوم بها النموذج.

على هذا النحو، يجب إجراء اختيار دقيق لدالة التنشيط لكل مشروع شبكة عصبية للتعلم العميق.

في هذا البرنامج التعليمي، سوف تكتشف كيفية اختيار دوال التنشيط لنماذج الشبكة العصبية.

بعد الانتهاء من هذا البرنامج التعليمي، ستعرف:

  • دوال التنشيط هي جزء أساسي من تصميم الشبكة العصبية.
  • دالة التنشيط الافتراضية الحديثة للطبقات المخفية هي دالة ReLU.
  • تعتمد دالة التنشيط لطبقات الإخراج على نوع مشكلة التنبؤ.

هيا بنا نبدأ.

نظرة عامة على البرنامج التعليمي

ينقسم هذا البرنامج التعليمي إلى ثلاثة أجزاء؛ هم انهم:

  • دوال التنشيط.
  • التنشيط للطبقات المخفية.
  • التنشيط لطبقات الإخراج.

دوال التنشيط

تحدد دالة التنشيط في الشبكة العصبية كيفية تحويل المجموع المرجح weighted sum للمدخلات إلى ناتج من عقدة أو عقد في طبقة من الشبكة.

أحيانًا تسمى دالة التنشيط “دالة النقل transfer function”. إذا كان نطاق إخراج دالة التنشيط محدودًا، فقد يطلق عليه “دالة الضغط squashing function”. العديد من داول التنشيط غير خطية ويمكن الإشارة إليها باسم “اللاخطية nonlinearity” في الطبقة أو تصميم الشبكة.

اختيار دالة التنشيط له تأثير كبير على قدرة وأداء الشبكة العصبية، ويمكن استخدام دوال التنشيط المختلفة في أجزاء مختلفة من النموذج.

من الناحية الفنية، يتم استخدام دالة التنشيط داخل أو بعد المعالجة الداخلية لكل عقدة في الشبكة، على الرغم من أن الشبكات مصممة لاستخدام نفس دالة التنشيط لجميع العقد في الطبقة.

قد تحتوي الشبكة على ثلاثة أنواع من الطبقات: طبقات الإدخال التي تأخذ مدخلات أولية من المجال، والطبقات المخفية التي تأخذ المدخلات من طبقة أخرى وتمرر الإخراج إلى طبقة أخرى، وطبقات الإخراج التي تقوم بالتنبؤ.

عادةً ما تستخدم جميع الطبقات المخفية نفس دالة التنشيط. ستستخدم طبقة الإخراج عادةً دالة تنشيط مختلفة عن الطبقات المخفية وتعتمد على نوع التنبؤ الذي يتطلبه النموذج.

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

هناك العديد من أنواع دوال التنشيط المختلفة المستخدمة في الشبكات العصبية، على الرغم من أنه ربما يكون هناك عدد قليل فقط من الدوال المستخدمة في الممارسة العملية للطبقات المخفية والمخرجة.

دعونا نلقي نظرة على دوال التنشيط المستخدمة لكل نوع من الطبقات على حدة.

التنشيط للطبقات المخفية

الطبقة المخفية في الشبكة العصبية هي طبقة تتلقى مدخلات من طبقة أخرى (مثل طبقة مخفية أخرى أو طبقة إدخال) وتوفر إخراجًا إلى طبقة أخرى (مثل طبقة مخفية أخرى أو طبقة إخراج).

لا تتصل الطبقة المخفية مباشرة ببيانات الإدخال أو تنتج مخرجات لنموذج، على الأقل بشكل عام.

قد تحتوي الشبكة العصبية على صفر أو أكثر من الطبقات المخفية.

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

من أجل الوصول إلى مساحة فرضية أكثر ثراءً يمكن أن تستفيد من التمثيلات العميقة، فأنت بحاجة إلى دالة غير خطية أو تنشيط.

– الصفحة 72، التعلم العميق باستخدام بايثون ، 2017.

ربما توجد ثلاث دوال تنشيط قد ترغب في وضعها في الاعتبار لاستخدامها في الطبقات المخفية؛ هم انهم:

  • التنشيط الخطي المصحح (ReLU) Rectified Linear Activation (ReLU)
  • لوجستي (سيني) Logistic (Sigmoid).  
  • الظل الزائدي (تان) Hyperbolic Tangent (Tanh)

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

دعونا نلقي نظرة فاحصة على كل على حدة.

دالة تنشيط الطبقة المخفية ReLU

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

إنه شائع لأنه سهل التنفيذ وفعال في التغلب على قيود دوال التنشيط الأخرى الشائعة سابقًا، مثل Sigmoid وTanh. على وجه التحديد، هو أقل عرضة لتلاشي التدرجات vanishing gradients التي تمنع النماذج العميقة من التدريب، على الرغم من أنها يمكن أن تعاني من مشاكل أخرى مثل الوحدات المشبعة saturated  أو “الميتة dead”.

يتم حساب وظيفة ReLU على النحو التالي:

  • max(0.0, x)

هذا يعني أنه إذا كانت قيمة الإدخال (x) سالبة، فسيتم إرجاع القيمة 0.0، وإلا يتم إرجاع القيمة.

يمكنك معرفة المزيد حول تفاصيل دالة تنشيط ReLU في هذا البرنامج التعليمي:

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

# example plot for the relu activation function
from matplotlib import pyplot

# rectified linear function
def rectified(x):
	return max(0.0, x)

# define input data
inputs = [x for x in range(-10, 10)]
# calculate outputs
outputs = [rectified(x) for x in inputs]
# plot inputs vs outputs
pyplot.plot(inputs, outputs)
pyplot.show()

يؤدي تشغيل المثال إلى حساب مخرجات مجموعة من القيم وإنشاء مخطط للمدخلات مقابل المخرجات.

يمكننا أن نرى شكل kink المألوف لدالة التنشيط ReLU.

مخطط المدخلات مقابل المخرجات لدالة تنشيط ReLU.

عند استخدام دالة ReLU للطبقات المخفية، فمن الممارسات الجيدة استخدام تهيئة الوزن “He Normal” أو “He Uniform” وقياس بيانات الإدخال إلى النطاق 0-1 (التسوية normalize) قبل التدريب.

دالة تنشيط الطبقة المخفية Sigmoid

تسمى دالة التنشيط sigmoid أيضًا الدالة اللوجستية logistic function.

إنها نفس الدالة المستخدمة في خوارزمية تصنيف الانحدار اللوجستي logistic regression classification algorithm.

تأخذ الدالة أي قيمة حقيقية كقيم مدخلات ومخرجات في النطاق من 0 إلى 1. وكلما زاد الإدخال (أكثر إيجابية)، كلما كانت قيمة المخرجات أقرب إلى 1.0، بينما كلما كان الإدخال أصغر (أكثر سلبية)، كلما اقترب سيكون الإخراج إلى 0.0.

يتم حساب دالة التنشيط sigmoid على النحو التالي:

  • 1.0 / (1.0 + e^-x)

حيث e ثابت رياضي، وهو أساس اللوغاريتم الطبيعي.

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

# example plot for the sigmoid activation function
from math import exp
from matplotlib import pyplot

# sigmoid activation function
def sigmoid(x):
	return 1.0 / (1.0 + exp(-x))

# define input data
inputs = [x for x in range(-10, 10)]
# calculate outputs
outputs = [sigmoid(x) for x in inputs]
# plot inputs vs outputs
pyplot.plot(inputs, outputs)
pyplot.show()

يؤدي تشغيل المثال إلى حساب مخرجات مجموعة من القيم وإنشاء مخطط للمدخلات مقابل المخرجات.

يمكننا أن نرى الشكل S المألوف لدالة التنشيط Sigmoid.

مخطط المدخلات مقابل المخرجات لدالة التنشيط Sigmoid.

عند استخدام دالة Sigmoid للطبقات المخفية، فمن الممارسات الجيدة استخدام تهيئة الوزن “Xavier Normal” أو “Xavier Uniform” (يُشار إليها أيضًا بتهيئة Glorot، المسمى Xavier Glorot) وقياس بيانات الإدخال إلى النطاق 0-1 (مثل نطاق دالة التنشيط) قبل التدريب.

دالة تنشيط الطبقة المخفية Tanh

يشار أيضًا إلى دالة تنشيط الظل الزائدي hyperbolic tangent ببساطة باسم دالة Tanh (أيضًا “tanh” و “TanH”).

إنها تشبه إلى حد بعيد دالة التنشيط السيني ولها نفس الشكل S.

تأخذ الدالة أي قيمة حقيقية كقيم مدخلات ومخرجات في النطاق -1 إلى 1. وكلما زاد الإدخال (أكثر إيجابية)، كلما كانت قيمة المخرجات أقرب إلى 1.0، بينما كلما كان الإدخال أصغر (أكثر سلبية)، كلما كان أقرب سيكون الناتج إلى -1.0.

يتم حساب دالة التنشيط Tanh على النحو التالي:

  • (e^x – e^-x) / (e^x + e^-x)

حيث e ثابت رياضي يمثل أساس اللوغاريتم الطبيعي.

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

# example plot for the tanh activation function
from math import exp
from matplotlib import pyplot

# tanh activation function
def tanh(x):
	return (exp(x) - exp(-x)) / (exp(x) + exp(-x))

# define input data
inputs = [x for x in range(-10, 10)]
# calculate outputs
outputs = [tanh(x) for x in inputs]
# plot inputs vs outputs
pyplot.plot(inputs, outputs)
pyplot.show()

يؤدي تشغيل المثال إلى حساب مخرجات مجموعة من القيم وإنشاء مخطط للمدخلات مقابل المخرجات.

يمكننا أن نرى الشكل S المألوف لدالة التنشيط Tanh.

مخطط المدخلات مقابل المخرجات لدالة التنشيط Tanh.

عند استخدام دالة TanH للطبقات المخفية ، فمن الممارسات الجيدة استخدام تهيئة الوزن “Xavier Normal” أو “Xavier Uniform” (يُشار إليها أيضًا بتهيئة Glorot، والمسمى باسم Xavier Glorot) وقياس بيانات الإدخال إلى النطاق -1 إلى 1 (مثل نطاق دالة التنشيط) قبل التدريب.

كيفية اختيار وظيفة تنشيط الطبقة المخفية

ستتمتع الشبكة العصبية دائمًا بنفس دالة التنشيط في جميع الطبقات المخفية.

من غير المعتاد تغيير دالة التنشيط من خلال نموذج الشبكة.

تقليديا، كانت دالة التنشيط sigmoid هي دالة التنشيط الافتراضية في التسعينيات. ربما خلال منتصف وأواخر تسعينيات القرن الماضي وحتى عام 2010، كانت دالة Tanh هي دالة التنشيط الافتراضية للطبقات المخفية.

… عادةً ما تؤدي دالة تنشيط الظل القطعي أداءً أفضل من السيني اللوجيستي.

– صفحة 195 ، التعلم العميق ، 2016.

يمكن لكل من الدالتين Sigmoid وTanh أن تجعل النموذج أكثر عرضة للمشاكل أثناء التدريب، من خلال ما يسمى بمشكلة التدرجات المتلاشية vanishing gradients.

يمكنك معرفة المزيد حول هذه المشكلة في هذا البرنامج التعليمي:

عادةً ما يتم اختيار دالة التنشيط المستخدمة في الطبقات المخفية بناءً على نوع بُنية الشبكة العصبية.

ستستخدم نماذج الشبكات العصبية الحديثة ذات البنى الشائعة، مثل MLP و CNN، دالة تنشيط ReLU أو امتداداتها.

في الشبكات العصبية الحديثة، التوصية الافتراضية هي استخدام الوحدة الخطية المصححة أو ReLU …

– صفحة 174 ، التعلم العميق ، 2016.

لا تزال الشبكات المتكررة Recurrent networks تستخدم دوال التنشيط  Tanhأو التنشيط Sigmoid ، أو حتى كليهما. على سبيل المثال، يستخدم LSTM عادةً التنشيط Sigmoid للاتصالات المتكررة وتنشيط Tanh للإخراج.

  • متعدد الطبقات Perceptron (MLP): دالة تنشيط ReLU.
  • الشبكة العصبية التلافيفية (CNN): دالة تنشيط ReLU.
  • الشبكة العصبية المتكررة (RNN): Tanhأو و / أو وظيفة التنشيط Sigmoid.

إذا لم تكن متأكدًا من دالة التنشيط التي يجب استخدامها لشبكتك، فجرّب القليل منها وقارن النتائج. يلخص الشكل أدناه كيفية اختيار دالة تنشيط للطبقات المخفية لنموذج شبكتك العصبية.

كيفية اختيار دالة تنشيط الطبقة المخفية

التنشيط لطبقات الإخراج

طبقة المخرجات هي الطبقة في نموذج الشبكة العصبية الذي ينتج تنبؤًا مباشرًا.

تحتوي جميع نماذج الشبكة العصبية للتغذية الأمامية feed-forward neural network على طبقة إخراج.

ربما توجد ثلاث دوال تنشيط قد ترغب في وضعها في الاعتبار لاستخدامها في طبقة الإخراج؛ هم انهم:

  • خطي Linear
  • لوجستي Logistic (Sigmoid)
  • Softmax

هذه ليست قائمة شاملة دوال التنشيط المستخدمة لطبقات الإخراج، لكنها الأكثر استخدامًا.

دعونا نلقي نظرة فاحصة على كل على حدة.

دالة تنشيط الإخراج الخطي

تسمى دالة التنشيط الخطي أيضًا “الهوية identity” (مضروبة في 1.0) أو “لا يوجد تنشيط”.

هذا لأن دالة التنشيط الخطي لا تغير المجموع المرجح للإدخال بأي شكل من الأشكال وبدلاً من ذلك تُرجع القيمة مباشرة.

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

# example plot for the linear activation function
from matplotlib import pyplot

# linear activation function
def linear(x):
	return x

# define input data
inputs = [x for x in range(-10, 10)]
# calculate outputs
outputs = [linear(x) for x in inputs]
# plot inputs vs outputs
pyplot.plot(inputs, outputs)
pyplot.show()

عادةً ما يتم قياس القيم المستهدفة المستخدمة لتدريب نموذج بدالة التنشيط الخطي في طبقة الإخراج قبل النمذجة باستخدام تحويلات التسوية normalization أو التوحيد القياسي standardization.

دالة تنشيط الإخراج Sigmoid

تم وصف sigmoid لدالة التنشيط اللوجستي في القسم السابق.

ومع ذلك، لإضافة بعض التناظر، يمكننا مراجعة شكل هذه الدالة باستخدام المثال الموضح أدناه.

 

# example plot for the sigmoid activation function
from math import exp
from matplotlib import pyplot

# sigmoid activation function
def sigmoid(x):
	return 1.0 / (1.0 + exp(-x))

# define input data
inputs = [x for x in range(-10, 10)]
# calculate outputs
outputs = [sigmoid(x) for x in inputs]
# plot inputs vs outputs
pyplot.plot(inputs, outputs)
pyplot.show()

يؤدي تشغيل المثال إلى حساب مخرجات مجموعة من القيم وإنشاء مخطط للمدخلات مقابل المخرجات.

يمكننا أن نرى الشكل S المألوف لدالة التنشيط sigmoid.

مخطط المدخلات مقابل المخرجات لدالة التنشيط Sigmoid

التسميات المستهدفة المستخدمة لتدريب نموذج مع دالة التنشيط Sigmoid في طبقة الإخراج سيكون لها القيم 0 أو 1.

دالة تنشيط إخراج Softmax

تنتج الدالة softmax متجهًا للقيم التي يصل مجموعها إلى 1.0 والتي يمكن تفسيرها على أنها احتمالات لعضوية الفئة class membership.

إنها مرتبطة بالدالة argmax التي تنتج 0 لجميع الخيارات و 1 للخيار المختار. Softmax هو إصدار “أكثر ليونة softer ” من argmax يسمح بإخراج يشبه الاحتمال لدالة الفائز يأخذ كل شيء.

على هذا النحو، فإن مدخلات الدالة عبارة عن متجه للقيم الحقيقية والمخرجات عبارة عن متجه من نفس الطول مع قيم مجموعها 1.0 مثل الاحتمالات.

يتم حساب دالة softmax على النحو التالي:

  • e^x / sum(e^x)

حيث x متجه للمخرجات و e ثابت رياضي يمثل أساس اللوغاريتم الطبيعي.

يمكنك معرفة المزيد حول تفاصيل دالة Softmax في هذا البرنامج التعليمي:

لا يمكننا رسم دالة softmax، لكن يمكننا إعطاء مثال على حسابها في بايثون.

from numpy import exp

# softmax activation function
def softmax(x):
	return exp(x) / exp(x).sum()

# define input data
inputs = [1.0, 3.0, 2.0]
# calculate outputs
outputs = softmax(inputs)
# report the probabilities
print(outputs)
# report the sum of the probabilities
print(outputs.sum())

يؤدي تشغيل المثال إلى حساب إخراج softmax لمتجه الإدخال.

ثم نؤكد أن مجموع مخرجات softmax يصل بالفعل إلى القيمة 1.0.

[0.09003057 0.66524096 0.24472847]
1.0

العلامات المستهدفة المستخدمة لتدريب نموذج باستخدام دالة تنشيط softmax في طبقة الإخراج ستكون متجهات مع 1 للفئة المستهدفة و 0 لجميع الفئات الأخرى.

كيفية اختيار دالة تنشيط الإخراج

يجب عليك اختيار دالة التنشيط لطبقة الإخراج الخاصة بك بناءً على نوع مشكلة التنبؤ التي تحلها.

على وجه التحديد، نوع المتغير الذي يتم توقعه.

على سبيل المثال، يمكنك تقسيم مشاكل التنبؤ إلى مجموعتين رئيسيتين ، والتنبؤ بمتغير فئوي categorical variable (تصنيف classification) والتنبؤ بمتغير رقمي numerical variable (الانحدار regression).

إذا كانت مشكلتك هي مشكلة انحدار، فيجب عليك استخدام دالة التنشيط الخطي.

  • الانحدار: عقدة واحدة، تنشيط خطي.

إذا كانت مشكلتك تتعلق بالتصنيف، فهناك ثلاثة أنواع رئيسية من مشاكل التصنيف وقد يستخدم كل منها دالة تنشيط مختلفة.

توقع احتمال ليس مشكلة انحدار؛ إنه تصنيف. في جميع حالات التصنيف، سيتنبأ نموذجك باحتمالية عضوية الفئة (مثل احتمال أن ينتمي أحد الأمثلة إلى كل فئة) التي يمكنك تحويلها إلى تسمية فئة واضحة عن طريق التقريب (لـ sigmoid) أو argmax (لـ softmax).

إذا كان هناك فئتان متنافيتان (تصنيف ثنائي binary classification)، فستحتوي طبقة الإخراج على عقدة واحدة ويجب استخدام دالة التنشيط sigmoid. إذا كان هناك أكثر من فئتين حصريتين بشكل متبادل (تصنيف متعدد الطبقات multiclass classification)، فستحتوي طبقة الإخراج الخاصة بك على عقدة واحدة لكل فئة ويجب استخدام تنشيط softmax. إذا كان هناك فئتان أو أكثر من الفئات الشاملة بشكل متبادل (تصنيف متعدد التسميات multilabel classification)، فستحتوي طبقة الإخراج الخاصة بك على عقدة واحدة لكل فئة ويتم استخدام دالة التنشيط sigmoid.

  • التصنيف الثنائي: عقدة واحدة، تنشيط sigmoid.
  • تصنيف متعدد الفئات: عقدة واحدة لكل فئة، تفعيل softmax.
  • تصنيف متعدد التسمية: عقدة واحدة لكل فئة، تنشيط sigmoid.

يلخص الشكل أدناه كيفية اختيار دالة تنشيط لطبقة الإخراج لنموذج شبكتك العصبية.

كيفية اختيار دالة تنشيط طبقة الإخراج

الملخص

في هذا البرنامج التعليمي، اكتشفت كيفية اختيار دوال التنشيط لنماذج الشبكة العصبية.

على وجه التحديد، لقد تعلمت:

  • دوال التنشيط هي جزء أساسي من تصميم الشبكة العصبية.
  • دالة التنشيط الافتراضية الحديثة للطبقات المخفية هي دالة ReLU .
  • تعتمد دالة التنشيط لطبقات الإخراج على نوع مشكلة التنبؤ.

 

بواسطة
Jason Brownlee
المصدر
machinelearningmastery

د. علاء طعيمة

كلية علوم الحاسوب وتكنولوجيا المعلومات / جامعة القادسية / العراق

مقالات ذات صلة

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

زر الذهاب إلى الأعلى