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


9

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

Використовуючи ступінь навчання 0,001 (що я вважав досить консервативним), функція мінімізації фактично би експоненціально підвищила втрати. Після однієї епохи втрати можуть перейти з числа в тисячі до трильйона, а потім до нескінченності («нан»). Коли я знизив рівень навчання до .0001, все працювало нормально.

1) Чому єдиний порядок має такий вплив?

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


Скажіть, будь ласка, як ви ініціалізували вагу?
Хіманшу Рай

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

Відповіді:


9

Можливо, вам стане в нагоді Глава 8 глибокого навчання . У ній автори обговорюють навчання моделей нейронної мережі. Це дуже хитромудро, тому я не здивований, що у вас є труднощі.

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

Цитуючи від авторів:

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

Як правило, вважається, що проблема з поганим кондиціонуванням присутня у навчанні проблем нейронної мережі. Погані кондиціонування можуть проявлятися через те, що SGD «застрягає» в тому сенсі, що навіть дуже маленькі кроки збільшують функцію витрат. [мій акцент додано]

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

ε22gTHgεgTg

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


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

3

1) Чому єдиний порядок має такий вплив?

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

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

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

Подивіться за цим посиланням: http://www.statisticsviews.com/details/feature/5722691/Getting-to-the-Bottom-of-Regression-with-Gradient-Descent.html

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


1
Що стосується другої причини - ця відповідь демонструє (використовуючи прості функції), коли спуск градієнта може розходитися. У цій відповіді також є код Python, щоб ви могли експериментувати і побачити, як поводиться градієнтний спуск в різних сценаріях ..
Орен Мільман
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.