איך לשנות את קצב הלמידה של TensorFlow

ספריית תוכנה פתוחה לבינה מלאכותית ולמידת מכונה נקראת TensorFlow. למרות שהיא יכולה ליושם על מספר משימות, הכשרת רשתות עצביות עמוקות והשימוש בהן מקבלים תשומת לב מיוחדת.

Google Brain, המחלקה למחקר בינה מלאכותית של החברה, יצרה את TensorFlow. מאז השחרור הראשוני שלו בשנת 2015, הגיעה למעמדה של אחת הספריות משמשות ביותר בעולם למידת מכונה.

פייתון, C++ ו-Java הם רק כמה משפות התכנות שבהן TensorFlow זמין. כמו כן, הוא פועל על מספר מערכות הפעלה, כולל Linux, macOS, Windows, Android ו-iOS.

TensorFlow היא כלי יעיל למידת מכונה ובינה מלאכותית. היא מציעה מגוון רחב של יכולות וקלה לשימוש. TensorFlow היא נקודת מוצא מצויינת אם מדובר בתחום של מידת מכונה.

TensorFlow היא ספרייה גמישה שניתן ליישם אותה במספר רחב של משימות, כגון:

  • מיון תמונות
  • עיבוד שפה טבעית
  • זיהוי קולי
  • מערכות המלצה
  • רובוטיקה
  • צילום רפואי
  • חיזוי כלכלי

קצב הלמידה ב-TensorFlow הוא פרמטר עיקרי המכוון כיצד נעשה שינוי במשקלות המודל במהלך האימון. המספר הטוב ביותר ישתנה תלוי בפרטים של הבעיה שנפתור, מבנה המודל וגודל המערך הנתונים. לעתים קרובות מעדיפים ערך חיובי קטן, כגון 0.001 או 0.01, אך זה לא תמיד מה שנדרש.

כיצד לשנות את קצב הלמידה ב-TensorFlow

אפשר לשנות את קצב הלמידה ב-TensorFlow באמצעות שיטות ואסטרטגיות שונות. הנה שלושה גישות נפוצות:

הקצאת קצב למידה ידנית

באמצעות הזנת ערך חדש במשתנה קצב הלמידה, ניתן לשנות את קצב הלמידה בצורה הפשוטה ביותר. שיטה זו מגדירה את קצב הלמידה כמשתנה TensorFlow או משתנה פייתון, וערכו מתעדכן במהלך האימון. לדוגמה:

Python

 

import tensorflow as tf

# הגדרת משתנה קצב למידה
learning_rate = tf.Variable(0.001, trainable=False)

# במהלך האימון, עדכן את קצב הלמידה כפי שדרוש
# למשל, הגדר קצב למידה חדש של 0.0001
tf.keras.backend.set_value(learning_rate, 0.0001)

הקוד לעיל מסביר כיצד להזין ערך חדש במשתנה קצב הלמידה של TensorFlow כדי לשנות את קצב הלמידה. השלבים מופיעים להלן:

הגדרת המשתנה לקצב למידה:

Python

 

learning_rate = tf.Variable(0.001, trainable=False)

שורה זו יוצרת משתנה TensorFlow המכונה learning_rate ומאתחל אותו עם ערך התחלתי של 0.001. הטיעון trainable=False מבטיח שמשתנה קצב הלמידה לא יתעדכן במהלך האימון.

עדכון קצב הלמידה כפי שדרוש:

Python

 

tf.keras.backend.set_value(learning_rate, 0.0001)

בדוגמה זו, פונקציית set_value מ tf.keras.backend משמשת לעדכון הערך של משתנת שיפוע הלמידה. הארגומנט הראשון הוא המשתנה שיש לעדכן (learning_rate), והארגומנט השני הוא הערך החדש של שיפוע הלמידה (0.0001 במקרה זה).

אפשר לבקר מתי וכיצד שיפוע הלמידה משתנה על ידי עדכון ידני של משתנה שיפוע הלמידה במהלך האימון. אפשר להתנסות בהגדרות שונות, לשנות את שיפוע הלמידה בהתאם לנסיבות מסוימות, או אפילו ליצור תוכנית שיפוע למידה משלך.

בשיטה זו, יש לך שליטה מלאה על שיפוע הלמידה, אך עליך לשנות אותו ידנית לפי הצרכים שלך.

לוחות שיפוע למידה

אפשר לשנות באופן ממוקד את שיפוע הלמידה במהלך האימון באמצעות לוחות שיפוע למידה. יש כמה לוחות שיפוע למידה מובנים ב-TensorFlow, כולל:

tf.keras.optimizers.schedules.ExponentialDecay, tf.keras.optimizers.schedules.PiecewiseConstantDecay, או tf.keras.optimizers.schedules.CosineDecay. לוחות הזמנים אלה משנים את קצב הלמידה לפי כללים קבועים מראש. לדוגמה:

Python

 

import tensorflow as tf

# הגדר לוח זמנים שיפוע למידה
learning_rate_schedule = tf.keras.optimizers.schedules.ExponentialDecay(
    initial_learning_rate=0.001,
    decay_steps=10000,
    decay_rate=0.96
)

# יצירת אופטימייזר עם לוח זמנים שיפוע למידה
optimizer = tf.keras.optimizers.Adam(learning_rate=learning_rate_schedule)

קטע הקוד לעיל מדגים איך להשתמש בלוח זמנים ExponentialDecay של שיפוע למידה ב-TensorFlow. הנה הפרטים של מה כל פרמטר עושה:

  • initial_learning_rate: שיפוע הלמידה ההתחלתי בתחילת האימון.
  • decay_steps: מספר הצעדים אחריהם יירד שיעור הלמידה.
  • decay_rate: הקצב שבו יירד שיעור הלמידה. לדוגמה, אם decay_rate מוגדר על 0.96, שיעור הלמידה יוכפל ב-0.96 לכל decay_steps צעד.

כדי ליצור אופטימייזר עם שיעור למידה, תשלח את אובייקט learning_rate_schedule כפרמטר learning_rate לאופטימייזר. בקוד שלך, אתה משתמש באופטימייזר Adam, אך אפשר גם להשתמש בשיעור הלמידה הזה עם אופטימייזרים אחרים.

על ידי שימוש בשיעור למידה ExponentialDecay, שיעור הלמידה יירד בהדרגה לאורך זמן, מה שמאפשר למודל להתכנס יותר ביעילות במהלך האימון. שנה את הערכים של initial_learning_rate, decay_steps ו-decay_rate על פי הדרישות הספציפיות שלך והמאפיינים של נתוני האימון שלך.

שיטה זו מבטלת את הצורך בערעורים ידניים על ידי התאמת שיעור הלמידה באופן אוטומטי על פי הלוח המוגדר.

Callbacks

TensorFlow מספק גם מנגנון של קולבקים המאפשר לך לשנות את שיעור הלמידה באופן דינמי על פי תנאים מסוימים. לדוגמה, אפשר להשתמש בקולבק tf.keras.callbacks.LearningRateScheduler כדי להגדיר שיעור למידה מUSTOM או בקולבק tf.keras.callbacks.ReduceLROnPlateau כדי להקטין את שיעור הלמידה כאשר האבדות הוולידציה מתיישבת. הנה דוגמה:

Python

 

import tensorflow as tf

# מגדיר פונקצית קולבק כדי לשנות את קצב הלמידה באופן דינמי
lr_callback = tf.keras.callbacks.ReduceLROnPlateau(
    monitor='val_loss',
    factor=0.1,
    patience=5,
    min_lr=0.0001
)

# במהלך מידע ההדרכה, מעבירים את הקולבק לפונקציה fit()
model.fit(
    x_train, y_train,
    validation_data=(x_val, y_val),
    callbacks=[lr_callback]
)

הקטע קוד לעיל מדגים איך להשתמש בקולבק ReduceLROnPlateau כדי לשנות את קצב הלמידה באופן דינמי במהלך מידע ההדרכה. הנה פירוט של מה שכל פרמטר עושה:

  • monitor: המדד שינתן לפקח. במקרה זה, הוא מוגדר כך 'val_loss,' כלומר הקולבק יתבונן בהפסד האימון.
  • factor: הגורם הגורם לירידה בקצב הלמידה. אם התנאי המוצע מתקיים, למשל, אם הגורם מוגדר כ-0.1, קצב הלמידה יוכפל ב-0.1.
  • patience: מספר האפוקים ללא שיפור, לאחר מכן קצב הלמידה יופחת. אם הפסד האימון אינו משתפר במספר patience של אפוקים, קצב הלמידה יופחת.
  • min_lr: הערך המינימלי להורדת הקצב הלמידה. ברגע שקצב הלמידה מגיע לערך זה המינימלי, הוא לא יופחת עוד.

כדי להשתמש בקולבק זה, היית מעביר אותו כפרמטר לפונקציה fit() במהלך מידע המודל שלך. וודא שאתה מחליף את x_train, y_train, x_val, ו-y_val עם המידע האימון והאימון האמיתי שלך.

Python

 

model.fit(
    x_train, y_train,
    validation_data=(x_val, y_val),
    callbacks=[lr_callback]
)

במהלך האימון, הReduceLROnPlateaucallback יעבוד על מנת לנטר את האבחון של הז​​כרון, ואם זה לא משתפר למספר patience של מחזורים, יורד הקצב הלמידה על ידי המספר המסופק factorזה מאפשר שינוי נסתר של קצב הלמידה על פי הביצועים של המודל במהלך האימון.

עם קולבקים, יש לך חופש נוסף לשנות את קצב הלמידה בתגובה לנסיבות או אירועים מסוימים במהלך האימון.

אלה כמה דרכים טיפוסיות לשנות את קצב הלמידה של TensorFlow. השיטה שתשתמש תלויה בדרישות ובמקרים השימושיים שיש לך.

מסקנה

לוח הזמנים הטוב ביותר של קצב הלמידה של המודל שלך יהיה תלוי בנתונים ובמבנה המודל. אתה יכול להתנסות בלוחות זמנים שונים כדי למצוא את האחד שעובד הכי טוב עבור המודל שלך.

Source:
https://dzone.com/articles/how-to-change-the-learning-rate-of-tensorflow