דיוק מעורב וקנה מידה של הפסד

איך מודלים בעצם לומדים — מירידת גרדיאנט הבסיסית ועד Adam

אימון בדיוק מעורב משתמש בפורמטים מספריים קטנים יותר למהירות ולחיסכון בזיכרון. במקום לשמור כל חישוב בדיוק מלא (float32 סטנדרטי), פעולות רבות משתמשות ב-float16 או ב-bfloat16: פורמטים בני 16 סיביות שתופסים חצי מהזיכרון תמורת פחות דיוק, ועבור float16, גם טווח צר יותר של גדלים ניתנים לייצוג.

הסיכון הוא הטווח המספרי. גרדיאנטים מסוימים זעירים. אם מספר זעיר מעוגל לאפס, האופטימייזר מאבד מידע. קנה מידה של הפסד (loss scaling) מגן על הגרדיאנטים הקטנים האלה על ידי הכפלת ההפסד לפני התפשטות אחורה, ואז חלוקת הגרדיאנטים בחזרה למטה.

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

איפה זה ב־MLדיוק מעורב הוא אחת הסיבות לכך שרשתות נוירונים גדולות מתאמנות מהר על חומרה מודרנית. האופטימייזרים עדיין זקוקים לאותם מושגים, אך קנה המידה המספרי הופך לחלק ממתכון האימון.
▶ דיוק מעורב וקנה מידה של הפסד
← ריבועים פחותים מתחלפיםקנה מידה של גודל אצווה →