Чому ми повинні переміщувати дані під час тренування нейронної мережі?


15

Під час міні-серійного навчання нейронної мережі я почув, що важливою практикою є переміщення даних тренувань перед кожною епохою. Чи може хтось пояснити, чому перемішування в кожну епоху допомагає?

З пошуку Google я знайшов такі відповіді:

  • це допомагає навчанню швидко сходитися
  • це запобігає будь-які упередження під час тренувань
  • це заважає моделі вивчити порядок навчання

Але я маю труднощі зрозуміти, чому будь-який з цих ефектів викликаний випадковим переміщенням. Чи може хто-небудь надати інтуїтивне пояснення?

Відповіді:


8

Щоб спробувати дати інше пояснення:

Однією з найпотужніших речей щодо нейронних мереж є те, що вони можуть бути дуже складними функціями, дозволяючи вивчити дуже складні взаємозв'язки між вашими вхідними та вихідними даними. Ці відносини можуть включати речі, яких ви ніколи не очікували, наприклад, порядок подання даних у епоху. Якщо порядок даних у межах кожної епохи однаковий, то модель може використовувати це як спосіб зменшення помилки тренувань, що є своєрідним перевиконанням.

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


1
Як нейронна мережа може дізнатися порядок введення даних у кожну епоху?
Код Папи

1
Словом, вони не можуть. Якщо використовується міні-пакетна підготовка (тобто, більше однієї партії в епоху), то певний порядок даних може впливати на тренування в тому сенсі, що тренуючись на одній міні-партії спочатку розв'язувач може ввести певний регіон (можливо, що містить локальний мінімум ...), а не інший. Але сказати, що передача НН "дізнається" про впорядкування даних насправді не вірно, тому що кожен прогноз робиться незалежно від будь-якого іншого прогнозу, і замовлення в міні-партіях, звичайно, не матиме жодного ефекту.
Джош

6

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


6

Примітка: у цій відповіді я маю на увазі мінімізацію втрат у навчанні, і я не обговорюю такі критерії зупинки, як втрата валідації. Вибір критеріїв зупинки не впливає на процес / концепції, описані нижче.

Процес тренування нейронної мережі полягає у знаходженні мінімального значення функції втрат , де являє собою матрицю (або кілька матриць) ваг між нейронами, а являє навчальний набір даних. Я використовую підпис для щоб вказати, що наша мінімізація відбувається лише над вагами (тобто ми шукаємо таким, що мінімізоване), поки є фіксованим.X(W)WXXWWX

Тепер, якщо припустити, що у нас є елементи в (тобто в мережі є ваги ), - поверхня в розмірному просторі . Щоб дати візуальний аналог, уявіть, що у нас є лише дві ваги нейронів ( ). Тоді має просту геометричну інтерпретацію: це поверхня в тривимірному просторі. Це випливає з того, що для будь-яких заданих матриць ваг функцію втрат можна оцінити на і це значення стає висотою поверхні.PWPP+1P=2WX

Але є проблема невипуклості; поверхня, яку я описав, матиме численні локальні мінімуми, тому алгоритми спуску градієнта чутливі до того, що вони "застрягають" у цих мінімумах, тоді як поблизу може лежати глибше / нижче / краще рішення. Це, швидше за все, відбудеться, якщо буде незмінним для всіх тренувань тренувань, оскільки поверхня закріплена для даного ; всі його риси є статичними, включаючи різні його мінімуми.XX

Рішенням цього є міні-серійні тренування в поєднанні з перетасуванням. Перемішуючи рядки і тренуючись лише на підмножині з них під час заданої ітерації, змінюється з кожною ітерацією, і насправді цілком можливо, що жодна дві ітерації протягом усієї послідовності тренувань і епох тренувань не будуть виконані в точно такому ж . Ефект полягає в тому, що вирішувач може легко «відскочити» від локального мінімуму. Уявіть, що вирішувач застряг у локальному мінімумі під час ітерації з навчанням міні-партії . Цей локальний мінімум відповідає оцінюється за певним значенням ваг; ми будемо називати цеXXiXiXi(Wi). При наступній ітерації форма нашої поверхні втрат насправді змінюється, оскільки ми використовуємо , тобто може приймати дуже інше значення від і цілком можливо, що це не відповідає локальному мінімуму! Зараз ми можемо обчислити оновлення градієнта та продовжити навчання. Щоб було зрозуміло: форма взагалі буде відрізнятися від форми . Зауважте, що тут я маю на увазі функцію втрат оцінену на тренувальному наборі ; це повна поверхня, визначена за всіма можливими значеннямиXi+1Xi+1(Wi)Xi(Wi)Xi+1XiXW, А не оцінки цієї втрати (який є тільки скаляром) для певного значення . Зауважте також, що якщо міні-партії використовуються без перетасування, все ще існує ступінь "диверсифікації" поверхонь, що втрачають, але буде обмежена (і відносно невелика) кількість унікальних поверхонь помилок, які бачить вирішувач (конкретно, він побачить той самий точний набір міні-партій - і, отже, втратні поверхні - протягом кожної епохи).W

Одне, чого я навмисно уникав, - це обговорення розмірів міні-партії, оскільки на це є мільйон думок, і це має значні практичні наслідки (більша кількість паралелізації може бути досягнута з більшими партіями). Однак я вважаю, що варто згадати наступне. Оскільки оцінюється шляхом обчислення значення для кожного рядка (і підсумовування або взяття середнього; тобто комутативного оператора) для заданого набору вагових матриць , розташування рядків не має ефекту при використанні повно- спуск градієнта партії (тобто коли кожна партія є повною , а ітерації та епохи - це одне і те ж).XWX X


Дякую за корисне пояснення. Після глибокого прочитання вашої відповіді у мене є два питання: 1. Ви згадали, що міні-партія забезпечує певну ступінь обмеженої диверсифікації. Я не розумію, чому цього недостатньо, щоб уникнути зациклювання на локальному мінімумі. Якщо сольвер знаходиться в локальних мінімумах поверхні однієї партії, він з великою часткою ймовірності не в локальних мінімумах поверхні наступної партії, таким чином, він не повинен застрявати. 2. Як розв'язувач розкривається на поверхні функції втрат, тоді як поверхня завжди змінюється за допомогою різних партій?
Код Папи

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

2
Можливо, я не так добре відповів на ваше запитання щодо місцевих мінімумів. Теоретично ці поверхні втрат повинні мати певну схожість, оскільки розподіл ймовірностей відповіді (що залежить від прогнозів моделі) вважається постійним протягом усього навчального набору даних. Тож якщо мінімум достатньо глибокий, він повинен з’являтися на великій кількості міні-партій, тому розв'язувач навряд чи вистрибне з нього. Але якщо мінімум - це лише «шум», то ця стратегія повинна працювати досить добре і дозволяти моделі продовжувати навчання.
Джош

Дякую. Ваша друга відповідь чітко зрозуміла, чому NN конвергується, незважаючи на різні поверхні. Що стосується мого першого запитання, чи правильно сказати, що мати однакову послідовність може мати лише більшу ймовірність того, що "шум" повторюється на багатьох поверхнях втрат партій, ніж при використанні перетасовки? Це єдине пояснення, яке я можу дати, чому все-таки можна застрягти в локальних мінімумах при використанні міні-партій без перетасування.
Код Папи

@CodePope Я думаю, що це правильно. Крім того, коли втрати значно зменшилися з початку тренувань, градієнти будуть досить малі, і, можливо, навіть можливо, що вирішувач в основному застрягне в "петлі", оскільки він продовжує бачити ту саму послідовність поверхонь втрат. Зауважте, що це спекулятивне пояснення, засноване на моєму досить обмеженому досвіді, тому якщо у вас є серйозний теоретичний інтерес до цього, вам краще проконсультуватися з експертом.
Джош

4

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


1

Коли ви тренуєте свою мережу, використовуючи фіксований набір даних, тобто дані, які ви ніколи не змішуєте під час тренінгу. З великою ймовірністю ви отримаєте дуже високі і дуже низькі ваги, такі як 40,70, -101,200 ... тощо. Це просто означає, що ваша мережа не вивчила дані тренувань, але вона дізналася шум ваших навчальних даних. Класичний чохол моделі наряд. З такою мережею ви зможете визначити прогнози щодо даних, які ви використовували для тренувань. Якщо ви використовуєте будь-які інші входи для тестування, ваша модель розвалиться. Тепер, коли ви переміщуєте дані тренувань після кожної епохи (ітерації загального набору), ви просто подаєте різні дані для нейронів у кожну епоху, і це просто регулює ваги, тобто ви, швидше за все, отримуєте "менші" ваги, які ближче до нуля , а це означає, що ваша мережа може робити кращі узагальнення.

Я сподіваюся, що це було зрозуміло.


1

Ось більш інтуїтивне пояснення:

При використанні градієнтного спуску ми хочемо зменшити втрати в напрямку градієнта. Градієнт обчислюється за даними однієї міні-партії для кожного раунду оновлення ваги. Ми хочемо, щоб цей градієнт на основі міні-партії був приблизно градієнтом популяції, оскільки, як очікується, це призведе до швидшого зближення. (Уявіть, що якщо ви подаєте мережеві дані 100 class1 в одній міні-партії, а 100 даних class2 в іншій, мережа буде зависати навколо. Кращим способом є годування її 50 class1 + 50 class2 у кожній міні-партії.)

Як цього досягти, оскільки ми не можемо використовувати дані про населення в міні-партії? Мистецтво статистики говорить нам: перемішайте населення, і перші фрагменти даних batch_size можуть представляти населення. Ось чому нам потрібно перетасовувати населення.

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

Це моє розуміння. Сподіваюся, це допомагає.

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