Чому точність перевірки коливається?


31

У мене є чотиришаровий CNN для прогнозування відповіді на рак за допомогою даних МРТ. Я використовую активацію ReLU для введення нелінійностей. Точність та втрати поїздів монотонно збільшуються та зменшуються відповідно. Але моя точність тесту починає дико коливатися. Я спробував змінити рівень навчання, зменшити кількість шарів. Але це не зупиняє коливання. Я навіть прочитав цю відповідь і спробував дотримуватися вказівок у цій відповіді, але знову не пощастило. Може хтось допоможе мені зрозуміти, де я помиляюся?

Знімок екрана



Так, я прочитав цю відповідь. Перемішання даних валідації не допомогло
Рагурам

4
Оскільки ви не поділилися фрагментом коду, отже, я не можу сказати, що не так у вашій архітектурі. Але на екрані екрана, бачачи точність тренувань та перевірки, виразно зрозуміло, що ваша мережа переоснащена. Було б краще, якщо ви поділитеся тут своїм фрагментом коду.
Найн

скільки у вас зразків? можливо, коливання насправді не суттєве. Також точність - жахливий захід
rep_ho

Чи може хтось допомогти мені перевірити, чи добре використовувати підхід ансамблю, коли точність перевірки коливається? тому що я зміг керувати своєю коливаючою валідацією_акуратністю ансамблем до хорошого значення.
Sri2110

Відповіді:


27

Якщо я правильно розумію визначення точності, точність (% точок даних, класифікованих правильно) є менш кумулятивною, ніж, скажімо, MSE (середня помилка у квадраті). Ось чому ви бачите, що ваш lossстрімко зростає, а точність коливається.

Інтуїтивно це в основному означає, що деяка частина прикладів класифікується випадковим чином , що створює коливання, оскільки кількість правильних випадкових здогадок завжди коливається (уявіть точність, коли монета завжди повинна повертати "голови"). В основному чутливість до шуму (коли класифікація дає випадковий результат) є загальним визначенням пристосування (див. Вікіпедія):

У статистиці та машинному навчанні одним із найпоширеніших завдань є пристосування «моделі» до набору навчальних даних, щоб мати можливість робити достовірні прогнози щодо загальних непідготовлених даних. У доповненнях статистична модель описує випадкову помилку або шум замість базового співвідношення

Іншим свідченням перевитрати є те, що ваші втрати збільшуються, втрата вимірюється точніше, вона чутливіша до галасливого передбачення, якщо вона не розбита сигмоїдами / порогами (що, здається, є вашим випадком для самої втрати). Інтуїтивно можна уявити ситуацію, коли мережа занадто впевнена у виведенні (коли вона неправильна), тому вона дає значення далеко від порогового випадку у випадку випадкової невідповідності.

Що стосується Вашого випадку, Ваша модель не належним чином зареєстрована, можливі причини:

  • недостатньо точок даних, занадто велика ємність
  • замовлення
  • відсутність / неправильне масштабування / нормалізація функції
  • ααα

Можливі рішення:

  • отримати більше точок даних (або штучно розширити набір існуючих)
  • гра з гіпер-параметрами (наприклад, збільшення / зменшення потужності або термін регуляризації)
  • регуляризація : спробуйте випадання, раннє припинення тощо

Що стосується: "Втрата вимірюється точніше, вона більш чутлива до галасливого прогнозу, тому що вона не розбита сигмоїдами / порогами", я погоджуюся з відсутністю порогу, але якщо ви використовуєте, наприклад, двійкову перехресну ентропію як функцію втрати, сигмоїда все ще грає роль.
Жубарб

1
Щодо швидкості навчання та sgd, що не вистачає мінімумів: досягнення мінімальної величини, швидше за все, означатиме перевиконання (адже це мінімум на навчальному наборі)
Ян Кукацька

@Berkmeister правда, я перефразував трохи (див. Редагування). Я думав, що збільшена втрата є ознакою того, що використовується функція, що не стискається.
dk14

@JanKukacka ви маєте на увазі глобальні мінімуми? Я мав на увазі місцеві мінімуми (фактично поблизу місцевих мінімумів) - в тому сенсі, що якщо це занадто далеко від будь-яких мінімумів, то це було б недостатньо придатним. Напевно, я мушу описати це більш ретельно (див. Редагувати), дякую.
dk14

@ dk14 Я припускаю, що глобального мінімуму на практиці досягти не можна, тому я маю на увазі досить локальні мінімуми. Якщо ви занадто далеко, ви, можливо, недостатні, але якщо ви занадто близько, ви, швидше за все, переобладнаєте. Є цікава робота Моріца Хардта "Тренуйтеся швидше, узагальнюйте краще: Стабільність стохастичного градієнтного спуску" ( arxiv.org/abs/1509.01240 ), що встановлює межу щодо зв'язку між помилкою тренування та тестування під час тренування з SGD.
Ян Кукацька

6

Це питання старе, але розміщуйте його, оскільки його ще не було зазначено:

Можливість 1 : Ви застосовуєте якусь попередню обробку (нульове значення, нормалізація тощо) або до вашого навчального набору, або до набору перевірок, але не до іншого .

Можливість 2 : Якщо ви створили деякі шари, які виконуються по-різному під час тренувань і умовиводів з нуля, ваша модель може бути неправильно реалізована (наприклад, рухоме середнє значення та переміщення стандартного відхилення для нормалізації партії, що оновлюється під час тренувань? Якщо ви використовуєте відсіву, чи ваги правильно масштабуються під час умовивід?). Це може бути, якщо ваш код реалізує ці речі з нуля і не використовує вбудовані функції Tensorflow / Pytorch.

Можливість 3: Переобладнання, як усі зазначали. Я вважаю, що інші два варіанти є більш імовірними у вашій конкретній ситуації, оскільки ваша точність перевірки затримана на 50% з епохи 3. Як правило, я б більше стурбований переозброєнням, якщо це відбудеться на більш пізньому етапі (якщо у вас немає дуже конкретної проблеми під рукою).


У мене виникає проблема, яка є подібною, але не повністю, детальніше тут: stackoverflow.com/questions/55348052/… У моєму випадку я справді маю стійку високу точність даних про тести і під час тренінгу, точність перевірки " "(не втрата) вище, ніж точність тренувань. Але той факт, що він ніколи не конвергується і коливається, змушує мене думати про переозброєння, тоді як деякі припускають, що це не так, тому мені цікаво, чи це так, і яке виправдання, якщо це не так.
дуза

1
Це, безумовно, найбільш правдоподібне пояснення наданих відповідей. Зауважте, що високий імпульс нормалізації партії (наприклад, 0,999 або навіть за замовчуванням Кераса 0,99) у поєднанні з високою швидкістю навчання також може спричинити дуже різну поведінку під час навчання та оцінювання, оскільки статистика шарів дуже відстає. У такому випадку скорочення імпульсу до чогось на зразок 0,9 повинно зробити свою справу. У мене була подібна проблема, як у ОП, і це зробило трюк.
kristjan

5

Додавання відповіді від @ dk14. Якщо ви все ще спостерігаєте коливання після належного регулювання своєї моделі, це можуть бути можливими причинами:

  • Використання випадкової вибірки з вашого набору перевірок: Це означає, що набір валідації на кожному етапі оцінювання відрізняється, як і ваша втрата перевірки.
  • Використання зваженої функції втрат (яка використовується у випадку сильно незбалансованих проблем класу). На кроці поїзда ви зважуєте свою функцію втрат на основі вагових класів, тоді як на кроці dev ви просто обчислюєте невагомі втрати. У такому випадку, хоча ваша мережа переходить у конвергенцію, ви можете бачити великі коливання втрат перевірки після кожного кроку поїзда. Але якщо ви дочекаєтесь більшої картини, ви зможете побачити, що ваша мережа насправді конвергується до мінімуму з коливаннями коливань. (Див. Додані зображення для одного такого прикладу).введіть тут опис зображеннявведіть тут опис зображення

2

Однозначно переобладнання. Розрив між точністю даних щодо тренувань та тестовими даними показує, що ви перевиконали навчання. Можливо, регуляризація може допомогти.


1

Ваша точність перевірки на проблему бінарної класифікації (я припускаю) "коливається" близько 50%, це означає, що ваша модель дає абсолютно випадкові прогнози (іноді вона здогадується правильно на кілька вибірок більше, іноді на кілька зразків менше). Взагалі ваша модель не краща, ніж гортати монету.

{0;1}

У будь-якому випадку, як уже зазначали інші, ваша модель відчуває суворі наряди. Я здогадуюсь, що ваша проблема є надто складною , тобто дуже важко витягти бажану інформацію з ваших даних, і така проста 4-шарова конверт-мережа, що навчається end2end, не має шансів дізнатися її .


0

Є кілька способів спробувати у своїй ситуації. По-перше, спробуйте збільшити розмір партії, що допомагає міні-партії SGD менше блукати дико. По-друге, налаштування рівня навчання, ймовірно, встановить його менше. По-третє, спробуйте інший оптимізатор, наприклад, Adam або RMSProp, які здатні адаптувати швидкість навчання для функцій wrt. Якщо можливо, спробуйте доповнити ваші дані. Нарешті, спробуйте байєсівські нейронні мережі через наближення відсіву, дуже цікавий твір Яріна Гал https://arxiv.org/abs/1506.02158


0

Ви пробували меншу мережу? Зважаючи на те, що ваша точність навчання може досягати> .99, схоже, у вашій мережі є достатньо з'єднань, щоб повністю моделювати ваші дані, але у вас можуть бути сторонні з’єднання, які навчаються випадковим чином (тобто переоснащення).

На моєму досвіді я отримав точність перевірки тримання для стабілізації з меншою мережею, пробуючи різні мережі, такі як ResNet, VGG і навіть більш прості мережі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.