מצאתי שתי שאלות כאן ו- כאן לגבי נושא זה, אך עדיין אין תשובה ברורה או הסבר. אני אוכף את אותה בעיה כאשר שגיאת האימות פחותה מאימון. שגיאה ברשת העצבית שלי. מה זה אומר?
מצאתי שתי שאלות כאן ו- כאן לגבי נושא זה, אך עדיין אין תשובה ברורה או הסבר. אני אוכף את אותה בעיה כאשר שגיאת האימות פחותה מאימון. שגיאה ברשת העצבית שלי. מה זה אומר?
אפשרות אחת: אם אתה משתמש בשכבת הסדרת נשירה ברשת שלך, סביר ששגיאת האימות קטנה יותר משגיאת האימון. מכיוון שבדרך כלל נשירה מופעלת בזמן אימון אך מושבתת בעת הערכה על ערכת האימות. אתה מקבל פונקציה חלקה יותר (בדרך כלל פירושה טובה יותר) במקרה האחרון.
קשה להיות בטוח בלי לדעת את המתודולוגיה שלך בפועל (למשל שיטת אימות צולב, מדד ביצועים, שיטת פיצול נתונים וכו ').
באופן כללי אם כי, שגיאת אימון כמעט תמיד תהיה לזלזל ב שגיאת האימות שלך. עם זאת ייתכן ששגיאת האימות תהיה פחותה מהאימון. אתה יכול לחשוב על זה בשתי דרכים:
לכן חשוב שתעריך באמת את מתודולוגיית אימון המודל שלך. אם לא תחלק את הנתונים שלך לאימון כראוי התוצאות שלך יובילו למסקנות מבלבלות, אם לא פשוט שגויות.
אני חושב על הערכת מודל בארבע קטגוריות שונות:
Underfitting - שגיאת אימות ואימון גבוהה
התאמת יתר - שגיאת אימות גבוהה, שגיאת אימון נמוכה
התאמה טובה - שגיאת אימות נמוכה, מעט גבוהה יותר משגיאת האימון
התאמה לא ידועה - שגיאת אימות נמוכה, שגיאת אימון 'גבוהה'
אני אומר התאמה 'לא ידועה' מכיוון שהתוצאה מנוגדת לאינטואיציה לאופן שבו למידת מכונה עובדת. המהות של ML היא לחזות את הלא נודע. אם אתה טוב יותר בניבוי הלא נודע ממה שלמדת ', AFAIK הנתונים בין אימון לאימות חייבים להיות שונים בדרך כלשהי. זה יכול להיות שאתה צריך להעריך מחדש את שיטת פיצול הנתונים שלך, להוסיף נתונים נוספים, או אולי לשנות את מדד הביצועים שלך (האם אתה באמת מודד את הביצועים שאתה רוצה?).
ערוך
כדי להתייחס להתייחסות ה- OP לפייתון הקודם שאלת לזניה.
זה מצביע על כך שיש לך מספיק נתונים כדי לא לדרוש אימות צולב ופשוט יהיה לך קבוצות משנה של אימונים, אימות ובדיקות. כעת, אם תסתכלו על הדרכת לזניה תוכלו לראות שאותה התנהגות נראית בראש הדף. אני מתקשה להאמין שהמחברים יפרסמו תוצאות כאלה אם זה היה מוזר, אבל במקום להניח שהן נכונות בואו נסתכל הלאה. החלק שהכי מעניין אותנו כאן הוא בקטע לולאת אימונים , ממש מעל התחתית תראה כיצד מחושבים פרמטרים של הפסד.
איבוד אימונים מחושב על פני כל מערך האימונים . כמו כן, אובדן האימות מחושב על פני כל מערך האימות . מערך האימונים בדרך כלל גדול פי 4 מהאימות (80-20). בהתחשב בכך שהשגיאה מחושבת על פני כל הדגימות, אתה יכול לצפות עד פי 4 למדד האובדן של קבוצת האימות. עם זאת תבחין כי אובדן האימון ואובדן האימות מתקרבים זה לזה ככל שנמשך האימון. זה מכוון כאילו שגיאת האימון שלך מתחילה להיות נמוכה יותר משגיאת האימות שלך אתה מתחיל להתאים יותר מדי למודל שלך !!!
אני מקווה שזה יבהיר שגיאות אלה.
אין לי מספיק נקודות להגיב על התשובה של @ D-K, אבל זה עונה כעת כשאלות נפוצות בתיעוד של Keras:
"מדוע אובדן האימונים גבוה בהרבה מאובדן הבדיקה?
למודל של Keras יש שני מצבים: אימון ובדיקה.מנגנוני הסדרה, כגון נשירה ורגולציה במשקל L1 / L2, מושבתים בזמן הבדיקה.
מלבד זאת, הפסד האימונים הוא הממוצע של ההפסדים בכל קבוצה של נתוני אימון.מכיוון שהמודל שלך משתנה עם הזמן, ההפסד במהלך הקבוצות הראשונות של תקופה הוא בדרך כלל גבוה יותר מאשר בקבוצות האחרונות.מאידך, אובדן הבדיקה לתקופה מחושב באמצעות המודל כפי שהוא בסוף התקופה, וכתוצאה מכך הפסד נמוך יותר. "שני הסנטים שלי: הייתה לי אותה בעיה גם ללא שכבות נשירה. במקרה שלי - שכבות נורמה אצווה היו האשמים. כשמחקתי אותם - אובדן אימונים הפך דומה לאובדן אימות. ככל הנראה, זה קרה כי במהלך האימונים נורמה אצווה משתמש בממוצע ובשונות של קבוצת הקלט הנתונה, אשר עשויים להיות שונים מאצווה לאצווה.אך במהלך ההערכה נורמיית אצווה משתמשת בממוצע בריצות ובשונות, אשר שניהם משקפים מאפיינים של מערך האימונים כולו טובים בהרבה מהממוצע והשונות של אצווה אחת במהלך האימון. לפחות, כך מיושם נורמה אצווה ב- pytorch
אפשרות אחרת שמשלבת בצורה כלשהי גם את התשובה של @cdeterman וגם @ D-K היא אם אתה משתמש במנגנון הגדלת נתונים כלשהו.הגדלת נתונים של אינפקט מתבצעת בדרך כלל רק על מערך האימונים ולא על ערכת האימות (באשר להסדרת הנשירה), והדבר עשוי להוביל למערכת אימות המכילה מקרים "קלים יותר" לחיזוי מאלו שבמערכת האימונים.
בשלב זה, שיטות מבוססות שיפוע סטוכסטיות הן כמעט תמיד האלגוריתם הנבחר ללמידה עמוקה. משמעות הדבר היא שהנתונים נכנסים כקבוצות, שיפועים מחושבים והפרמטרים מתעדכנים. זה אומר שאתה יכול גם לחשב את האובדן על הנתונים כאשר כל אצווה נבחרת. במסגרת זו, ישנן שתי דרכים ב אופן חישוב האובדן שאני יכול לחשוב עליהן שיכול להוביל לתופעה זו שגיאת האימון גדולה יותר משגיאת האימות. להלן, אני מראה כי Keras נראה, למעשה, מחשב את השגיאות במדגם בדרכים אלה.
1.) שגיאת האימון T ממוצעת על פני תקופה שלמה, אלא בבת אחת בסוף העידן, אך שגיאת האימות היא רק בסוף העידן. כאשר אנו מדגמים את נתוני האימון שלנו כדי לחשב שיפועים, אנו יכולים גם לחשב את האובדן גם עליהם. אך מכיוון שלא נעשה שימוש בנתוני האימות במהלך חישוב הדרגתיות, אנו עשויים להחליט לחשב את האובדן רק לאחר סיום העידן. במסגרת זו, שגיאת האימות מועילה לעדכון מלא, בעוד שגיאת האימון כוללת חישובי שגיאות עם פחות עדכונים. כמובן, באופן סימפטואלי השפעה זו צריכה להיעלם בדרך כלל, מכיוון שההשפעה על שגיאת האימות של תקופה אחת בדרך כלל משתטחת.
2.) שגיאת האימון T מחושבת לפני ש עדכון האצווה נעשה. בשיטה מבוססת שיפוע סטוכסטית, יש קצת רעש בשיפוע. בזמן שאנו מטפסים על גבעה, יש סבירות גבוהה שהאובדן הגלובלי ממוחשב בכל דגימות האימונים. עם זאת, כאשר מתקרבים מאוד למצב, כיוון העדכון יהיה שלילי ביחס לדוגמאות in אצווה שלך. אך מכיוון שאנו מקפצים סביב מצב, פירוש הדבר ש בממוצע עלינו לבחור כיוון חיובי ביחס לדגימות out של האצווה. כעת, אם אנו עומדים לעדכן ביחס לדוגמאות באצווה נתונה, פירוש הדבר שהם נדחקו על ידי עדכוני אצווה רבים שהם לא נכללו בהם, על ידי חישוב הפסדם לפני העדכון, זה כאשר הסטוכסטי השיטות דחפו את הפרמטרים הכי הרבה לטובת הדגימות האחרות במערך הנתונים שלך, ובכך נתנו לנו הטיה קטנה כלפי מעלה בהפסד הצפוי.
שים לב שבעוד באופן סימפטומי, ההשפעה של (1) נעלמת, (2) לא! להלן אני מראה כי נראה כי קרס עושה גם (1) וגם (2).
(1) מראה כי מדדים ממוצעים בממוצע על כל אצווה בעידן, ולא בבת אחת בסוף. שימו לב להבדל העצום בדיוק המדגם לעומת val_accuracy המועדף על val_accuracy בתקופה הראשונה. הסיבה לכך היא שחלק משגיאות המדגם מחושבות עם מעט מאוד עדכוני אצווה.
>>> model.fit (Xtrn, Xtrn, epochs = 3, batch_size = 100,
... validation_data = (Xtst, Xtst))
התאמן על 46580 דגימות, תקף על 1000 דוגמאות
עידן 1/3
46580/46580 [=================================== - 8s 176us / דוגמה
- הפסד: 0.2320 - דיוק: 0.9216
- val_loss: 0.1581 - val_accuracy: 0.9636
עידן 2/3
46580/46580 [==================================] - 8s 165us / דוגמה
- הפסד: 0.1487 - דיוק: 0.9662
- val_loss: 0.1545 - val_accuracy: 0.9677
עידן 3/3
46580/46580 [==================================] - 8s 165us / דוגמה
- הפסד: 0.1471 - דיוק: 0.9687
- val_loss: 0.1424 - val_accuracy: 0.9699
<tensorflow.python.keras.callbacks. אובייקט היסטוריה ב 0x17070d080>
(2) עדכון השגיאה מחושב לפני עבור כל אצווה. שים לב כי בעידן 1, כאשר אנו משתמשים ב batch_size = nRows
(כלומר, כל הנתונים במנה אחת), שגיאת המדגם היא בערך 0.5 (ניחוש אקראי) בעידן 1, אולם שגיאת האימות היא 0.82. לכן, שגיאת המדגם חושבה לפני עדכון האצווה, ואילו שגיאת האימות חושבה לאחר עדכון האצווה.
>>> model.fit (Xtrn, Xtrn, epochs = 3, batch_size = nRows,
... validation_data = (Xtst, Xtst))
התאמן על 46580 דגימות, תקף על 1000 דוגמאות
עידן 1/3
46580/46580 [==================================== - 9s 201us / דוגמה
- הפסד: 0.7126 - דיוק: 0.5088
- val_loss: 0.5779 - val_accuracy: 0.8191
עידן 2/3
46580/46580 [==================================== - 6s 136us / דוגמה
- הפסד: 0.5770 - דיוק: 0.8211
- val_loss: 0.4940 - val_accuracy: 0.8249
עידן 3/3
46580/46580 [=================================== - 6s 120us / דוגמה
- הפסד: 0.4921 - דיוק: 0.8268
- val_loss: 0.4502 - val_accuracy: 0.8249
הערה קטנה לגבי הקוד שלמעלה: מקודד אוטומטי נבנה, ולכן הקלט ( Xtrn
) זהה לפלט ( Xtrn
). p>
קיבלתי תוצאות דומות (אובדן הבדיקה היה נמוך משמעותית מאובדן האימונים).לאחר שהסרתי את הסדרת הנשירה, שניהם ההפסד הפכו כמעט שווים.
@ cdeterman ו- @ D-K יש הסבר טוב.אני רוצה מסיבה נוספת - דליפת נתונים
.חלק מסוים מנתוני הרכבת שלך "קשור קשר הדוק" לנתוני הבדיקה.
דוגמה אפשרית: דמיין שיש לך 1000 כלבים ו -1000 חתולים עם 500 תמונות דומות לכל חיית מחמד (יש בעלים שאוהבים לצלם את חיות המחמד שלהם במיקומים דומים מאוד), נאמר ברקע.אז אם אתה מבצע פיצול אקראי 70/30, תקבל דליפת נתונים של נתוני הרכבת לנתוני הבדיקה.
אימות נמוך יותר מאשר שגיאת אימון יכול להיגרם כתוצאה מתנודות הקשורות לנשירה או אחרת, אך אם היא נמשכת בטווח הארוך, הדבר עשוי להצביע על כך שמערכי הנתונים של האימונים והאימות לא נמשכו מאותם הרכבים סטטיסטיים.זה יכול לקרות אם הדוגמאות שלך מגיעות מסדרה ואם לא מקרית כראוי את מערכי הנתונים של אימונים ואימות.
חייבים להיות כמה גורמים נוספים השונים במהלך האימון ותקופת האימות.נשירה היא טובה, אבל יכולות להיות אחרות.הקפד לבדוק את התיעוד של כל הספרייה שבה אתה משתמש.בדגמים ושכבות יכולות להיות בדרך כלל הגדרות ברירת מחדל שלרוב איננו שמים לב אליהם.