• 0

استخدام خوارزمية التحسين Adam في كيراس  Keras

ما المقصود ب Adam في كيراس  Keras، وكيف نقوم باستخدامه؟

انشر على الشّبكات الاجتماعية


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

باختصار هذه الخوارزمية تقوم بتسريع أداء نموذجك (أي تجعله يتقارب إلى القيم الصغرى الشاملة لل Cost Function بشكل أسرع وأدق) أي أنها تحسين لخوارزمية الGD بأنواعها المختلفة Batch-GD و Mini-Batch GD و Stocastic GD ففي هذه الخوارزميات ولاسيما الميني والستوكاستيك يكون مسار التدرج إلى القيمة الصغرى الشاملة متعرجاً (متذبذباً أي اتجاهه ليس بشكل مباشر إلى القيمة الصغرى) وبالتالي يكون النموذج أبطأ وأقل دقة. أما ADAM فهو تحسين ل GD حيث يستخدم فكرة ال Exponentially wighted average ويطبقها في عملية تحديث الأوزان التدريبية وبالتالي تصبح التدرجات gredients أو قيم المشتقات معتمدة على قيم المشتقات السابقة مما يجعل المسار العام للتدرجات أفضل وتخفف من التذبذبات في مسار خوارزمية ال GD، انظر للشكل التالي الذي يوضح كلامي:Untitled.thumb.png.5a4a4fa7968d77fdbdb4d83e2bdf47ae.png

حيث أن النقطة الحمراء تشير إلى القيمة الصغرى الشاملة GM لدالة التكلفة، لاحظ كيف أن آدم يقوم بجعل المسار موجه مباشرة (يخفف التعرجات) إلى القيمة GM، وبشكل أكثر تفصيلاً:
هي اختصار ل Adaptive moment estimation، وتقوم فكرة خوارزمية التحسين هذه على دمج خوارزمية التحسين RMSprop مع خوارزمية التحسين Momentum أي تجمع بينهما، ويعتبر هذه المحسن إلى جانب RMSprop أفضل خوارزميات التحسين الموجودة ويناسبان أغلب المشاكل "المصدر آندرو ج" و "فرانسوا كوليت"، حيث تعتمد على نفس أفكار الخوارزميتين السابقتين (حساب ال Exponentially wighted average للمشتقات السابقة (المتوسطات الأسية)) لكنها تضيف لهم فكرة ال bias correction وبالتالي تعطي تحسن أكبر في المراحل الابتدائية للتدريب. وبشكل عام لايهمك الخوض كثيراً في تفاصيلها فكيراس وتنسرفلو يجعلان استخدامها بسيطاً:

keras.optimizers.Adam(
    learning_rate=0.001,
    beta_1=0.9,
    beta_2=0.999,
    epsilon=1e-07,
    amsgrad=False,
    name="Adam",
    **kwargs
)

الوسيط الأول هو معامل التعلم (حجم الخطوة)، الوسيط الثاني أي beta1 هو الوسيط الخاص بال momentum أما الوسيط الثالث فهو قيمة بيتا الخاصة ب RMSprop ولا أنصحك بتغيير قيمتهما فهما القيمتين المثاليتين في 95% من الحالات. الوسيط الرابع هو epsilon وهي قيمة تستخدم مع المومينتوم وال ار ام اس بروب وتستخدم من أجل منع حصول القسمة على صفر (هذه انسى أمرها لاتهمنا في أي شيئ) لكن أنصحك بتغيير القيمة الافتراضية إلى الأس 8 أو 9 بدلاً من الأس 7 لأسباب رياضية بحتة. والوسيط الأخير لتحديد فيما ما إذا كان سيتم تطبيق متغير AMSGrad لهذه الخوارزمية من الورقة البحثية التي صدرت عام 2018 بعنوان "On the Convergence of Adam and beyond" أم لا (هي تحسين على adam) ولاستخدامها مع نماذجك يمكنك القيام بذلك ببساطة من خلال تمريرها للدالة compile، بالشكال التالي:

model.compile(
  optimizer=keras.optimizers.Adam(
    learning_rate=0.001,
    beta_1=0.9,
    beta_2=0.999,
    epsilon=1e-07,
    amsgrad=False,
    name="Adam",
)
# أو 
model.compile(
  optimizer="Adam"
)

انظر للنموذج البسيط التالي، حيث استخدمها في مهمة NLP لتحليل مراجعات الأفلام على مجموعة بيانات IMDB:

from keras.datasets import imdb
from keras import preprocessing
import keras
max_features = 1000
maxlen = 20
(x_train, y_train), (x_test, y_test) = imdb.load_data(
num_words=max_features)
x_train = preprocessing.sequence.pad_sequences(x_train,maxlen=maxlen) 
x_test = preprocessing.sequence.pad_sequences(x_test, maxlen=maxlen)
from keras.models import Sequential
from keras.layers import Dense
model = Sequential()
model =Sequential()
model.add(Dense(16, activation='relu',input_shape=(20,)))
model.add(Dense(16, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer=keras.optimizers.Adam(
    learning_rate=0.001,
    beta_1=0.9,
    beta_2=0.999,
    epsilon=1e-07,
    amsgrad=True,
    name="Adam",
)
, loss='binary_crossentropy', metrics=['acc'])
history = model.fit(x_train, y_train,
epochs=3,
batch_size=64,
validation_split=0.2)

 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


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

خوارزميّة التحسين آدم adam optimization هي امتداد لخوارزميّة انحدار المُشتقّ العشوائيّ (SGD=Stochastic Gradien Descent)، وتستخدم مؤخراً على نطاق واسع في تطبيقات التعلّم العميق وخاصّةً الرؤية الحاسوبيِّة ومهام معالجة اللّغة الطبيعيّة.

وهي خوارزميّة تحسين من الدّرجة الأولى يمكن أن تحلَّ محل عمليّة انحدار المشتق العشوائي التقليدية SGD “حيث تقوم عملية انحدار المشتق العشوائيّ بالإنطلاق من نقطة عشوائيّة وتعمل على الانتقال بخطوات ثابتة للوصول إلى لحظة التّدرُّب ولكنّ ذلك يتطلّب عدداً كبيراً من التكرارات بسبب العشوائيّة”، ويمكنها تحديث أوزان الشبكة العصبونية بشكل متكرّر بناءاً على بيانات التدريب.

مزايا خوارزميّة التحسين آدم

  • ذاكرة أقل.
  • حسابات فعّالة.
  • ثبات التدرّج من خلال عملية تصحيح mt و vt لجعل القيم متقاربة “تم ذِكر عمليّة التصحيح في تهيئة الخوارزميّة”.
  • مناسبة لحل مشاكل التحسين مع البيانات والمُعاملات واسعة النطاق.
  • مناسبة للأهداف الثابتة (أي بيانات التعلّم ثابتة ولا يتم تحديثها ضمن عمليّة التعلّم، مثلاً: عمليّة تصنيف الصور).

ختلف خوارزميّة آدم عن انحدار المُشتقّ العشوائيّ SGD، حيث يُحافِظ الأخير على مُعامل تعلّم واحد (ألفا α) لتحديث جميع الأوزان، ولا يتغيّر معدّل التعلّم أثناء عمليّة التدريب.

وفي الجّهة المقابلة تقوم آدم بحساب معدّلات التعلّم التكيّفيّة المستقلّة للمعاملات المختلفة عن طريق حساب تقديرات اللحظة الأولى والثانية للتدرج “حسابات خاصّة لهذه الخوارزميّة”.

أما عن استخدامها في keras فهو سهل وتوجد على هيئة دالة ويمكن ظبطها كالتالي:

keras.optimizers.Adam(
    learning_rate=0.001,
    beta_1=0.9,
    beta_2=0.999,
    epsilon=1e-07,
    amsgrad=False,
    name="Adam",
    **kwargs
)

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

وفي استخدامها للتعلم، يمكن ظبطها في أخر خطوة كالتالي:

model.compile(optimizer=keras.optimizers.Adam(
    learning_rate=0.001,
    beta_1=0.9,
    beta_2=0.999,
    epsilon=1e-07,
    amsgrad=True,
    name="Adam",
)
, loss='binary_crossentropy', metrics=['acc'])

 

انشر على الشّبكات الاجتماعية


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

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن