שְׁאֵלָה:
שגיאת אימות פחות משגיאת אימון?
Bido
2015-12-18 04:04:33 UTC
view on stackexchange narkive permalink

מצאתי שתי שאלות כאן ו- כאן לגבי נושא זה, אך עדיין אין תשובה ברורה או הסבר. אני אוכף את אותה בעיה כאשר שגיאת האימות פחותה מאימון. שגיאה ברשת העצבית שלי. מה זה אומר?

אני לא חושב שניתן לענות על שאלה זו בלי לדעת את המספר המוחלט של מקרי אימון (cv) ומבחנים, כמו גם את השונות שנצפתה עבור MSE הן עבור אימות צולב והן מבחנים.
ערבב את הנתונים
מה אנו מסיקים מכך?כן, זה נוצר מרשת צפופה עם נשירה ושכבות batchnorm.[! [הזן כאן תיאור תמונה] (https://i.stack.imgur.com/KX1Fz.png)] (https://i.stack.imgur.com/KX1Fz.png)
עשר תשובות:
D-K
2016-04-06 19:02:55 UTC
view on stackexchange narkive permalink

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

איזו תשובה פשוטה, הגיונית!
כן יש לסמן זאת אכן כתשובה נכונה.
הסרתי את שכבת הנשירה שלי, אך עדיין רואה את אובדן האימות נמוך בהשוואה לאובדן האימונים בתחילה!(גם אני לא מציין שום רגולציה בשכבות!)
מתאים למקרה שלי.שימוש בהרבה נשירה.
@JosiahYoder - יש לך עוד משהו לחלוק על זה?יש לי 1650 תכונות קלט.כשאני שומר על הרשת קטנה (1650, 50, 1) נשירה או בלי נשירה, שגיאת האימונים בתקופות הראשוניות גבוהה יותר משגיאת אימות.כשאני משתמש ברשתות גדולות (1650, 1200, 800, 100 ..... בסביבות 10 שכבות של 100 עם הפעלת סלו), הדפוס המוזר של דיוק אימות גבוה יותר מתמתן מעט.
@MiloMinderbinder זו תצפית מעניינת.לא, עדיין לא הבנתי שום דבר אחר בנושא זה.
אם הנשירה שהיא באמת האשמה, האם המודל שנוצר באמת אכן בר-קיימא?האם מומלץ להפחית את הנשירה כך שתופעה זו תיעלם?
למרבה הצער, הנחת היסוד העיקרית נראית פגומה.אין שום סיבה שביטול הנשירה יחליק על פונקציה.
כדי להרחיב עוד יותר על תשובה זו, לעתים קרובות אובדן האימונים מחושב באמצע תקופה, ואילו אובדן האימות מחושב לאחר סיום העידן.זה יכול גם לגרום לשינוי.https://www.pyimagesearch.com/2019/10/14/why-is-my-validation-loss-lower-than-my-training-loss/#:~:text=Regularization%20methods%20often%20sacrifice%20 אימונים, הוחלו% 20at% 20 אימות% 2 בדיקה% 20time.
cdeterman
2015-12-18 19:51:30 UTC
view on stackexchange narkive permalink

קשה להיות בטוח בלי לדעת את המתודולוגיה שלך בפועל (למשל שיטת אימות צולב, מדד ביצועים, שיטת פיצול נתונים וכו ').

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

  1. למערך האימונים שלך היו הרבה מקרים 'קשים' ללמוד
  2. למערך האימות שלך היו מקרים 'קלים' לחיזוי בעיקר

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

אני חושב על הערכת מודל בארבע קטגוריות שונות:

  1. Underfitting - שגיאת אימות ואימון גבוהה

  2. התאמת יתר - שגיאת אימות גבוהה, שגיאת אימון נמוכה

  3. התאמה טובה - שגיאת אימות נמוכה, מעט גבוהה יותר משגיאת האימון

  4. התאמה לא ידועה - שגיאת אימות נמוכה, שגיאת אימון 'גבוהה'

  5. ol >

    אני אומר התאמה 'לא ידועה' מכיוון שהתוצאה מנוגדת לאינטואיציה לאופן שבו למידת מכונה עובדת. המהות של ML היא לחזות את הלא נודע. אם אתה טוב יותר בניבוי הלא נודע ממה שלמדת ', AFAIK הנתונים בין אימון לאימות חייבים להיות שונים בדרך כלשהי. זה יכול להיות שאתה צריך להעריך מחדש את שיטת פיצול הנתונים שלך, להוסיף נתונים נוספים, או אולי לשנות את מדד הביצועים שלך (האם אתה באמת מודד את הביצועים שאתה רוצה?).

    ערוך

    כדי להתייחס להתייחסות ה- OP לפייתון הקודם שאלת לזניה.

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

    איבוד אימונים מחושב על פני כל מערך האימונים . כמו כן, אובדן האימות מחושב על פני כל מערך האימות . מערך האימונים בדרך כלל גדול פי 4 מהאימות (80-20). בהתחשב בכך שהשגיאה מחושבת על פני כל הדגימות, אתה יכול לצפות עד פי 4 למדד האובדן של קבוצת האימות. עם זאת תבחין כי אובדן האימון ואובדן האימות מתקרבים זה לזה ככל שנמשך האימון. זה מכוון כאילו שגיאת האימון שלך מתחילה להיות נמוכה יותר משגיאת האימות שלך אתה מתחיל להתאים יותר מדי למודל שלך !!!

    אני מקווה שזה יבהיר שגיאות אלה.

תשובה יפה.קיימת גם אפשרות שקיים באג בקוד המאפשר שהאימון לא התכנס לפיתרון האופטימלי על סט האימונים.לחלופין, אם מטרת האימון אינה קמורה ואלגורית האימון מתכוון למינימום מקומי שבמקרה טוב למערך האימות.
תודה @cdeterman. אני משתמש ב- RMSE כמדד ביצועים.חילקתי את הנתונים שלי ל- 20% למבחן ו- 80% לאימון ואימות (20% מנתוני האימון מאושרים כדי לחשב את שגיאת האימות).למעשה, שגיאת האימות נמוכה, נמוכה מעט יותר משגיאת האימון.שגיאת הבדיקה גבוהה יותר משגיאות אימון ואימות.אנו יכולים למצוא מקרה דומה ב- MNISTdataset לזיהוי כתב יד http://stats.stackexchange.com/questions/178371/python-lasagne-tutorial-validation-error-lower-than-training-error?lq=1
@Bido האם העריכה האחרונה שלי כתובת שאתה שואל?
@cdeterman תודה.בדיוק שמתי לב שערכת את התשובה שלך.זה ברור ומועיל.
הסבר נהדר, אם היית יכול להוסיף כמה גרפים - זה יהיה הכי טוב שאפשר
האם יכול לעבור אימות צולב כזה?
שקול מאמר מבריק זה על שתי סיבות אפשריות נוספות להתמחות קלילה.הוא כולל גם את התמונות הרצויות.`רגולציה המופעלת במהלך אימון, אך לא במהלך אימות / בדיקה` ו'אובדן אימונים נמדד במהלך כל תקופה ואילו אובדן אימות נמדד לאחר כל תקופה 'מכאן: https://www.pyimagesearch.com/2019/10/14/למה-האובדן שלי-הפסד-נמוך יותר מההכשרה שלי /
dter
2018-01-29 18:33:27 UTC
view on stackexchange narkive permalink

אין לי מספיק נקודות להגיב על התשובה של @ D-K, אבל זה עונה כעת כשאלות נפוצות בתיעוד של Keras:

"מדוע אובדן האימונים גבוה בהרבה מאובדן הבדיקה?

למודל של Keras יש שני מצבים: אימון ובדיקה.מנגנוני הסדרה, כגון נשירה ורגולציה במשקל L1 / L2, מושבתים בזמן הבדיקה.

מלבד זאת, הפסד האימונים הוא הממוצע של ההפסדים בכל קבוצה של נתוני אימון.מכיוון שהמודל שלך משתנה עם הזמן, ההפסד במהלך הקבוצות הראשונות של תקופה הוא בדרך כלל גבוה יותר מאשר בקבוצות האחרונות.מאידך, אובדן הבדיקה לתקופה מחושב באמצעות המודל כפי שהוא בסוף התקופה, וכתוצאה מכך הפסד נמוך יותר. "
גם זה לא לגמרי עונה על השאלה.כאשר הנשירה מושבתת, אני עדיין רואה את אובדן האימות כמחצית מאובדן האימונים במשך מספר תקופות ברציפות!
האם נתוני האימון שלך מייצגים את נתוני ה- dev?
פיצלתי באופן אקראי את מערך הנתונים לאימונים ובדיקות.זה נראה מבחינה ויזואלית מדגם טוב.עבדתי על בעיית רגרסיה שבה המסווגים הטובים ביותר היו טובים מעט יותר מאשר תמיד לחזות את הערך הממוצע.
התשובה שלך לא מדברת על אובדן אימונים שהוא גדול יותר מאובדן האימות שהוא השאלה שנשאלה.אתה מרוכז יותר באובדן אימונים ואובדן מבחנים
Mans007
2018-08-27 16:36:05 UTC
view on stackexchange narkive permalink

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

תודה @Mans007, זה קרה לי והשתמשתי בקרס.שכבות הנורמה האצווה היו הסיבה.
se7entyse7en
2018-09-26 16:47:11 UTC
view on stackexchange narkive permalink

אפשרות אחרת שמשלבת בצורה כלשהי גם את התשובה של @cdeterman וגם @ D-K היא אם אתה משתמש במנגנון הגדלת נתונים כלשהו.הגדלת נתונים של אינפקט מתבצעת בדרך כלל רק על מערך האימונים ולא על ערכת האימות (באשר להסדרת הנשירה), והדבר עשוי להוביל למערכת אימות המכילה מקרים "קלים יותר" לחיזוי מאלו שבמערכת האימונים.

Cliff AB
2019-10-18 09:46:17 UTC
view on stackexchange narkive permalink

בשלב זה, שיטות מבוססות שיפוע סטוכסטיות הן כמעט תמיד האלגוריתם הנבחר ללמידה עמוקה. משמעות הדבר היא שהנתונים נכנסים כקבוצות, שיפועים מחושבים והפרמטרים מתעדכנים. זה אומר שאתה יכול גם לחשב את האובדן על הנתונים כאשר כל אצווה נבחרת. במסגרת זו, ישנן שתי דרכים ב אופן חישוב האובדן שאני יכול לחשוב עליהן שיכול להוביל לתופעה זו שגיאת האימון גדולה יותר משגיאת האימות. להלן, אני מראה כי 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>

Ravi
2017-12-10 12:45:35 UTC
view on stackexchange narkive permalink

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

Danylo Zherebetskyy
2018-05-24 23:00:39 UTC
view on stackexchange narkive permalink
ל

@ cdeterman ו- @ D-K יש הסבר טוב.אני רוצה מסיבה נוספת - דליפת נתונים .חלק מסוים מנתוני הרכבת שלך "קשור קשר הדוק" לנתוני הבדיקה.

דוגמה אפשרית: דמיין שיש לך 1000 כלבים ו -1000 חתולים עם 500 תמונות דומות לכל חיית מחמד (יש בעלים שאוהבים לצלם את חיות המחמד שלהם במיקומים דומים מאוד), נאמר ברקע.אז אם אתה מבצע פיצול אקראי 70/30, תקבל דליפת נתונים של נתוני הרכבת לנתוני הבדיקה.

jacaboul
2019-08-27 14:37:59 UTC
view on stackexchange narkive permalink

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

Zhihan Yang
2019-07-17 04:53:39 UTC
view on stackexchange narkive permalink
בפשטות, אם אובדן אימונים ואובדן אימות מחושבים נכון, לא ייתכן שאובדן אימונים יהיה גבוה יותר מאובדן אימות.הסיבה לכך היא כי התפשטות גב ישירות מפחיתה שגיאות המחושבות על ערכת האימונים ורק INDIRECTLY (אפילו לא מובטחת!) מפחיתה שגיאות המחושבות בערכת האימות.

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

זה למעשה לא בלתי אפשרי.החלק השני שלך של התשובה מצביע על כיוון טוב.אנא שקול https://www.pyimagesearch.com/2019/10/14/why-is-my-validation-loss-lower-than-my-training-loss/


שאלה ותשובה זו תורגמה אוטומטית מהשפה האנגלית.התוכן המקורי זמין ב- stackexchange, ואנו מודים לו על רישיון cc by-sa 3.0 עליו הוא מופץ.
Loading...