Як працює метод Адама стохастичного градієнтного спуску?


45

Мені знайомі основні алгоритми спуску градієнта для навчання нейронних мереж. Я прочитав документ, що пропонує Адаму: АДАМ: МЕТОД СТОХАСТИЧНОЇ ОПТИМІЗАЦІЇ .

Хоча я, безумовно, отримав деяку інформацію (принаймні), папір здається мені занадто високим рівнем. Наприклад, функція витрат часто є сумою безлічі різних функцій, тому для оптимізації її значення необхідно зробити велику кількість обчислень; стохастичні градієнтні спуски - наскільки я розумію тему - обчислюють оптимізацію лише для підмножини цих функцій. Мені незрозуміло, як це робить Адам і чому це призводить до зменшення помилки тренувань для всього .J(θ)J(θ)

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

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

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


1
ви повинні надати кращу назву для свого питання. Що саме про Адама ви хочете запитати? Навіть якщо це взагалі, спробуйте зробити його трохи більш пошуковим.
Чарлі Паркер

Відповіді:


40

У статті Адама сказано, "... багато об'єктивних функцій складаються з суми підфункцій, оцінених за різними підпроборами даних; в цьому випадку оптимізацію можна зробити більш ефективною, зробивши кроки градієнта wrt окремих підфункцій ..." Тут вони просто означають, що цільова функція - це сума помилок щодо тренінгових прикладів, і тренування можна робити на окремих прикладах або міні-боях. Це те саме, що і при стохастичному градієнтному спуску (SGD), який є більш ефективним для великих масштабних проблем, ніж тренування з партіями, оскільки оновлення параметрів частіше.

Щодо того, чому працює Адам, він використовує кілька хитрощів.

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

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

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

Споріднені методи :

Моментум часто використовується зі стандартним SGD. Вдосконалена версія називається імпульсом Нестерова або градієнтом Нестерова. Інші методи, що використовують автоматично налаштовані показники навчання для кожного параметра, включають: Adagrad, RMSprop та Adadelta. RMSprop і Adadelta вирішують проблему з Adagrad, яка може спричинити припинення навчання. Адам схожий на RMSprop зі швидкістю. Надам модифікує Адама використовувати імпульс Нестерова замість класичного імпульсу.

Список літератури :

Кінгма і Ба (2014) . Адам: Метод стохастичної оптимізації.

Goodfellow та ін. (2016) . Глибоке навчання, глава 8.

Слайди з курсу Джеффа Гінтона

Дозат (2016) . Включення імпульсу Нестерова в Адама.


2
(+1) Спільнота отримала б велику користь, якби ви могли оновити свою відповідь, щоб включити більше інформації про докази сходження Адама та їх виправлення, такі як "Про зближення Адама та поза ним" openreview.net/forum?id=ryQu7f- RZ
Відновіть Моніку

2
Дякую @Sycorax, я спробую оновити, коли отримаю певний час
user20160

1
IIUC, Адам використовує щось схоже на імпульс, але інше. Як ви писали, метод імпульсу додає поточне оновлення до (великої) частки попереднього оновлення. На відміну від цього, Адам використовує експоненціально середнє занепад останніх градієнтів де більшість методів SGD використовують поточний градієнт. Тобто кожен крок Адам займає лише невелику частку градієнта струму. Отже, на відміну від простої кулі, яка накопичує оберти, Адам поводиться як важка куля з тертям, як пояснено в GANs, що навчаються двома часовими масштабами оновлення правила переходу до локальної рівноваги Неша . w
Орен Мільман

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