קדמה
פונקציות אבדן הם בסיסיות באימון מודלים במחשבת מודלים, ובמידה רבה מהפרויקטים במחשבת מודלים, אין דרך אחרת לגרום למודל שלך לעשות הערכים נכונים בלי להשתמש בפונקציית אבדן. בשפה פשוטה, פונקציית אבדן היא פונקציית מתמטית או מבנה שמשתמשים בו כדי למדוד את היכולת של המודל לעבוד עם מערכת מסויימת. ידיעה על היכולת של המודל לעבוד עם מערכת מסויימת נותנת למפתח הידע על המחשבות רבות בזמן האימון, כמו בשימוש במודל חדש יותר חזק או אפילו בשינוי את הפונקציית האבדן עצמה לסוג אחר. מדברים על סוגי פונקציות אבדן, יש מספר הם פונקציות אבדן שנפתחו במהלך השנים, כל אחת מהם מתאימה למטרה האימון הספציפית.
דרישות קדמות
המאמר הזה דורש מידע על מערכות עצבים. ברמה גבוהה, מערכות עצבים מורכבות מתאים מקושרים ("עצבים") מסודרים לשכבות. הם לומדים ועושים הערכים באמצעות תהליך שנקרא "אימון" שמתקנה את המשקלים והעקרונות של הקישורים בין העצבים. ידיעת המערכות האלה כוללת ידיעה על השכבות השונות שלהן (שכבת קבלה, שכבות חביכים, שכבת יוצאה), פונקציות ההפעלה, אלגוריתמים העידוד (סיבובים מילוליים שונים), פונקציות אבדן
בנוסף, מומחיות בסיסית בסינtax של מערך Python ובספריית PyTorch היא בעיקר להבנה של הקטעים הקטנים שמציגים במאמר זה.
במאמר זה, נסווה בקשר למספר פונקציות אובדן שבתוך מודל PyTorch nn. נעדד בעוד מעמק את הדרך בה PyTorch מפתחת את הפונקציות האלה למשתמשים בתוך API הnn שלה על-ידי בניית אחד משלנו.
אחרי שנובעה הבנה ראשונית גבוהה מהם הפונקציות האובדן, בואו נלך לספקטר המדענים יותר על איך פונקציות אובדן עובדות.
מהן פונקציות אובדן?
אמרנו לפני-כן שפונקציות אובדן מספרות לנו איך המודל שלנו מתפקד על מאגר מידע ספציפי. טכנית, הדרך בה הם עושים את זה היא באמצעות מדידת איך קרובה מערכת ההערכות שלנו לערכים האמתיים. כשהמודל שלנו מעשה הערכות קרובות מאוד לערכים האמתיים על גישות ההערכת והבדיקה, זה אומר שיש לנו מודל חזק.
למרות שפונקציות אובדן מספקות מידע קריטי על הביצועים של המודל, זו לא התפקיד העיקרי שלהן, מפני שיש דרכים יותר חזקות להעריך את המודלים שלנו כמו דיוק וממדים F. החשיבות של הפונקציות האובדן מועדכנה בעיקר בזמן האימון, בו אנחנו מנעים את המשקלים של המודל שלנו בכיוון שמינים את האובדן. על-ידי עשיית זאת, אנחנו
פונקציות אובדן שונות מתאימות לבעיות שונות, כל אחת מהן נבנתה בקפידה על ידי חוקרים כדי להבטיח זרימת גרדיאנטים יציבה במהלך האימון.
לפעמים, הביטויים המתמטיים של פונקציות האובדן יכולים להיות מעט מרתיעים, וזה הוביל לכך שחלק מהמפתחים מתייחסים אליהם כאל קופסה שחורה. בהמשך נחשוף כמה מפונקציות האובדן הנפוצות ביותר ב-PyTorch, אבל לפני כן, נסתכל על איך משתמשים בפונקציות אובדן בעולם של PyTorch.
פונקציות אובדן ב-PyTorch
PyTorch מגיעה עם הרבה פונקציות אובדן קאנוניות עם דפוסי עיצוב פשוטים שמאפשרים למפתחים לחזור בקלות על פונקציות האובדן השונות במהלך האימון. כל פונקציות האובדן של PyTorch ארוזות במודול nn, המחלקה הבסיסית של PyTorch לכל רשתות העצבים. זה הופך את הוספת פונקציית אובדן לפרויקט שלך לפשוטה כמו הוספת שורת קוד אחת. בואו נראה איך להוסיף פונקציית אובדן של שגיאה ריבועית ממוצעת (Mean Squared Error) ב-PyTorch.
הפונקציה המוחזרת מהקוד שלמעלה יכולה לשמש לחישוב המרחק בין תחזית לערך בפועל באמצעות הפורמט הבא.
עכשיו שיש לנו מושג על איך להשתמש בפערים בPyTorch, בואו נעבור עמוק יותר למאחורי המסך של חלק מהפערים האלה של PyTorch.
אילו פערים אפשר להשתמש בPyTorch?
רוב הפערים האלה שיוצאים עם PyTorch מוקטפים באופן רחב לשלושה קבוצות – פערי הריסוק, פערי הקלASSIFICATION ופערי הרינקING.
פערי הריסוק מעוניינים בערכים המתמשכים, שיכולים לקחת את כל הערכים בין שני מגבלות. דוגמה אחת לאחד מאלה תהיה הערכים של המחירים של בתים בקהילה.
פערי הקלASSIFICATION מעוניינים בערכים המפריכים, כמו בעיית קלASSIFICATION של עצם כמו קופסה, עט או בקבוק.
פערי הרינקING מעוניינים בהערכים הקרדיות בין הערכים. דוגמה לזה תהיה האשרה פנים, בה אנחנו רוצים לדעת אילו תמונות של פנים שיש להן קשר לפנים מסויימים, ואנחנו יכולים לעשות את זה על-ידי סירוק איזה פנים קרובים ואיזה רחוקים מהפנים המקוריים דרך הדרגה שלהם לתמונה הסריקה המטרה.
פער הL1 / השגיאה הממוצעת המושלמת
הפונקציית האבעבועה L1 מחשבת את הטעות הממוצעת הבסיסית בין כל ערך בטensor הצפוי לערך בטensor המטרה. היא ראשית מחשבת את ההבדל הבסיסי בין כל ערך בטensor הצפוי לערך בטensor המטרה, ומחשבת את הסכם של כל הערכים שחוזרים מכל חישוב של ההבדל הבסיסי. לבסוף, היא מחשבת את הממוצע של הסכם הזה על מנת לקבל את טעות הממוצעת הבסיסית (MAE). הפונקציית האבעבועה L1 מאוד עמידה לטעיות.
הערך היחיד שנשאר הוא האבעבועה שבין שני טensors עם ממד 3 על 5.
Mean Squared Error
הטעות הממוצעת במעלה הרבה דומים לMAE. במקום לחשב את ההבדל המוחלט בין הערכים בטensor ההערכים ובטensor המטרה, כפי שקורה במהירות הממוצעת המוחלטת, הוא מחשב את ההבדל המותץ בין הערכים בטensor ההערכים ובטensor המטרה. על ידי עשיית זאת, ההבדלים הגדולים ביותר מועמדים לעומתם יותר, בעוד ההבדלים הקטנים ביותר מועמדים לעומתם פחות. MSE נחשבת פחות עמידה במענה ליותרים ורעש מאשר MAE, אולם.
פסד השוואה לחילוף-מינים
פסד השוואה לחילוף-מינים משמש בבעיות התבחינה עם מספר מינים מבודדים. הוא מודד את ההבדל בין שתי התפקידים הגלובליים עבור סדרה מסויימת של משתנים מקריים. בדרך כלל, כשמשתמשים בפסד השוואה לחילוף-מינים, היוצא של הרשת שלנו הוא שכבת הספירות, שומרת על כך שהיוצא של הרשת המוח הוא ערך ההסתברות (ערך בין 0-1).
שכבת הספירות מורכבת משני חלקים – הערך האקספונד של ההערכים המערכים למינה ספציפי.
yi היא היוצאה של הרשת למינה ספציפי. היוצא של הפעילות הזו הוא מספר קרוב לאפס, אך ורק אם yi גדול ושלילי, וק
החלק השני הוא משקל הגיוני ומשמש לוודאת שהיציאה של השכבה הרך תמיד תהיה ערך סביבתי.
זה מקבל על-ידי סכום כל הערכים של כל מיני הקבוצות. המשוואה הסופית של השכבה הרך נראית כך:
]
במודל של PyTorch, הפסד המעברי משתלב את השכבה הרכזית ואת הפסד השגרה (NLL) לתשוך פסד אחד.
שימו לב כי הפונקציה השונית בהוצאה המוצגת היא NLL פסד. זה למעשה מגלה שהפסד המעברי משתלב את NLL פסד מאחורים בעזרת שכבה הרכזית.
פסד המעברי (NLL)
תפקיד הפסד המעברי דומה די לתפקיד פסד ההפרדה. פסד ההפרדה משתלב שכבה הרכזית ופסד השגרה כדי לקבל את ערך הפסד ההפרדה. זה אומר שפסד השגרה יכול להיות משמש לקבלת ערך הפסד ההפרדה על ידי כך שהשכבה האחרונה של המערכת המוחית תהיה שכבה הרכזית במקום שכבה של השכבה הרכזית.
פס-פסים בריראת-ערכים דו-מימדיים
פס-פסים בריראת-ערכים דו-מימדיים הם סוג מסויים של פס-פסים בריראת-ערכים שמשמשים לבעיה מיוחדת של התגובה לשני סוגי מאגרים בלבד. התגובות לסוג זה של בעיה הן בינאריות, והמטרה שלנו היא לדחוף את המודל לצפייה במספר קרוב לאפס עבור תגובה אפסית ומספר קרוב לאחד עבור תגובה אחת. בדרך כלל, כשמשתמשים בפס-פסים האלה לקליעה בינארית, היוצא מהמנתר המוח הוא של סיגמיות כדי לוודא שהיוצא מהמנתר הוא בעל ערך קרוב לאפס או בעל ערך קרוב לאחד.
אפסי קריסון הצטברי הבינארי עם לוגיטס
הזכרנו בסECTION הקודמת שאפסי הקריסון הבינארי הוא בדרך כלל יוצא בעזרת שכבה סיגמואידית כדי לוודא שהיציאה נמצאת בין 0 ל1. אפסי קריסון הבינארי עם לוגיטס משלבים שתי השכבות הללו לשכבה אחת. לפי הדוגמה של PyTorch, זו גירסה יותר סטאבל מספרית בגלל שהיא מנצלת את המנעד הלוג-סום-אקספ.
אפסי קריסון הסמות 1
תסמך האחסון הלם L1 משלב את היתרונות של אובייקט האיבוד MSE ואובייקט האיבוד MAE דרך ערך היסטורי בתגיות beta. הקריטריון נאסף בעבודת המאמר של Fast R-CNN. כשההבדל הבסיסי בין הערך האמתי והערך הצפוי הוא מתחת לבתגיות beta, הקריטריון משתמש בהבדל הריבועי, דומה לאובייקט האיבוד MSE. הגרף של אובייקט האיבוד MSE הוא קו מתמשך, מה שאומר שהשיפוע עבור כל ערך האיבוד משתנה וניתן להוציא אותו בכל מקום. בנוסף, כשהערך האיבוד נפלט, השיפוע נדלה, מה שנוח בזמן ההתקדמות השיפועית. אך בערכים האיבוד הגדולים מדי, השיפוע מתפוצץ, לכן הקריטריון מעבר לMAE, בו השיפוע כמעט מובך לאורך של כל ערך האיבוד, כשההבדל הבסיסי הוא יותר גדול מבתגיות beta והאפשרות להתפוצצות השיפוע המעברת לבעלת היתרון.
הפסד הדביקה הלם
הפסד הדביקה הלם משמש בעיקר במשימות למידה חלקית למדידת הדומיניסטי בין שתי קלטים. הוא משמש כשיש טסטר קלט וטסטר תווית שמילות הערך 1 או -1. הוא נוצץ בבעיות שעליהם עובדים הדביקות לא-לינאריות ולמידה חלקית.
איבדן רישום מרגיעה
איבדן רישום מרגיעה הוא סוג של איבדן רישומים שהמטרה שלו, שונה מכל סוג של פונקציית איבדן, היא למדוד את המרחק היחסי בין סט של קלטות במאגר נתונים. פונקציית איבדן הרישום המרגיעה לוקחת שני קלטות ותג שמונחת רק על 1 או -1. אם התג הוא 1, אז נניח שהקלט הראשון צריך להיות בריר גבוה מהקלט השני ואם התג הוא -1, אז נניח שהקלט השני צריך להיות בריר גבוה מהקלט הראשון. היחסים האלה מוצגים במשוואה ובקוד הבא.
פסד מרגל של טריפלט
הקריטריון הזה מודד דמיינות בין נקודות מידע בעזרת טריפלטים של דגימות הערכת האימון. הטריפלטים המעורבים הם דגימה המקור ודגימה החיובית ודגימה השלילית. המטרה היא 1) להשתמש במרחק בין הדגימה החיובית והמקור במיון המינימום שהוא אפשרי, ו 2) להשתמש במרחק בין המקור והשלילית כך שיהיה גדול מערך מרגל יחסית למרחק בין הדגימה החיובית והמקור. בדרך כלל, הדגימה החיובית שייך לאותה מיניה כמו המקור, אך הדגימה השלילית לא. לכן, באמצעות פסד זה, אנחנו מעוניינים בשימוש בפסד מרגל הטריפלט כדי להעריך ערך גבוה של דמיינות בין המקור והדגימה החיובית וערך נמוך של דמיינות בין המקור והדגימה השלילית.
פסד הכיוון הקוסיני
מפץ הכוונה מודד את האובייקטים המסויימים האלה בניגוד לקלטים x1 ו x2, ולתוך תנועה y הכוונה ערכים של 1 או -1. הוא משמש למדידה של הדמייה של הדיוק בו שני הקלטים דומים או שונים.
הקריטריון מודד דמיית הדיוק על-ידי חישוב המרחק הקוסיני בין שני נקודות מידע במרחב. המרחק הקוסיני קורא לזולת הזווית בין שני הנקודות האלה, אז כשהזווית קטנה, הקלטים קרובים יותר ולכן דומים יותר.
אובדן הדיברסציה של קולבאק-לייבלר
לפי שתי התפקידים, P ו-Q, אובדן הדיברסציה של קולבאק-לייבלר (קל) מודד כמה מידע נאבד כשP (מועדף להיות ההתפקיד האמיתי) מחליף בעזרת Q. על-ידי מדידת כמה מידע נאבד כשאנחנו משתמשים ב-Q כדי לסקיר את P, אנחנו מקבלים את הדומין בין P ל-Q, ולכן אנחנו מוכרחים להדביק את האלגוריתם שלנו כדי ליצור התפקיד דומה מאוד להתפקיד האמיתי, P. האובדן של המידע כשמשתמשים ב-Q כדי לסקיר את P אינו אותו הדבר שבעזרת P מסוגל לסקיר את Q, ולכן ההתפקיד של קולבאק-לייבלר אינו סימטרי.
בניית פונקציית אובדן מותאמת
פייטורץ מעניקה לנו שתי דרכים פופולריות לבנות את הפונקציית האובדן המותאמת לבעיה שלנו; הן בעצם בעזרת יישום של מושג ובעזרת יישום של פעולה. בואו נראה איך אנחנו יכולים ליישם שני השיטות האלה, הן בעזרת יישום של פעולה.
זו בהחלט הדרך הפשוטה ביותר לכתוב משהו שלך באופן אקסלוגי. זה קל בדיוק כמו ליצור פונקציה, להעביר את הקלטים הדרושים ואת הפרמטרים אחרים אליה, לבצע מספר פעולות בעזרת ה API היברני של PyTorch או בעזרת ה API הפונקציונלי, ולהחזיר ערך. בואו נראה דemonstration עם הפרדיגמה המותאמת לריבוע הממוצע.
בקוד העליון, אנחנו מגדירים פעולה הפסד מותאמת אינטיליגנטית כדי לחשב את הריבוע הממוצע נתון על ידי טensor של התחזית וטensor של המטרה
אנחנו יכולים לחשב את הפסד בעזרת הפעולה המותאמת שלנו ובעזרת הפעולה MSE של PyTorch כדי להבחין שהם מקבלים את אותם התוצאות.
פעולה הפסד מותאמת עם קבוצות פינקס במערך פיוני
הגישה הזו היא בטח השיטה הסטנדרטית והמומלצת להגדירת פעולות פסד ב PyTorch. הפעולה הפסד נוצרת בתור עץ בגרף הנייר המוחשי של המערך המנטלי על-ידי הצגת סבכה בעזרת המודול nn. זה אומר שהפעולה המותאמת שלנו היא PyTorch ליבה בדיוק באותה דרך שבעזרתה תיצור קומפוזיציון קונבלציון. בואו נראה דemonstration איך זה עובד עם הפעולה המותאמת לריבוע הממוצע המותאם.
מחשבות סופיות
דיברנו הרבה על פעולות אובדן הזמינות בPyTorch וגם צעדנו עמוק לתוך העבודה הפנימית של רוב הפעולות האלה. בחירת הפעולה הנכונה לבעיה מסויימת יכולה להיות משימה מדאיגה. בתור מסגרת דעה, אנו מקווים שהמדריך הזה יחבור למסמך הרשמי של PyTorch ויעזור לך בהבנה איזה פעולה אובדן מתאימה טוב לבעיה שלך.
Source:
https://www.digitalocean.com/community/tutorials/pytorch-loss-functions