У статті Адама сказано, "... багато об'єктивних функцій складаються з суми підфункцій, оцінених за різними підпроборами даних; в цьому випадку оптимізацію можна зробити більш ефективною, зробивши кроки градієнта wrt окремих підфункцій ..." Тут вони просто означають, що цільова функція - це сума помилок щодо тренінгових прикладів, і тренування можна робити на окремих прикладах або міні-боях. Це те саме, що і при стохастичному градієнтному спуску (SGD), який є більш ефективним для великих масштабних проблем, ніж тренування з партіями, оскільки оновлення параметрів частіше.
Щодо того, чому працює Адам, він використовує кілька хитрощів.
Одним із таких хитрощів є імпульс, який може дати швидше конвергенцію. Уявіть об'єктивну функцію, що має форму довгого вузького каньйону, який поступово нахиляється до мінімуму. Скажімо, ми хочемо мінімізувати цю функцію за допомогою градієнтного спуску. Якщо ми почнемо з якоїсь точки стіни каньйону, негативний градієнт буде вказувати у напрямку найкрутішого спуску, тобто переважно до дна каньйону. Це тому, що стіни каньйону набагато крутіші, ніж поступовий нахил каньйону до мінімального. Якщо рівень навчання (тобто розмір кроку) невеликий, ми можемо спуститися до підлоги каньйону, а потім дотримуватися його до мінімального. Але прогрес буде повільним. Ми могли б збільшити ступінь навчання, але це не змінило напряму кроків. У цьому випадку ми б перекинули підлогу каньйону і опинилися на протилежній стіні. Потім ми повторимо цю схему, коливаючись від стіни до стіни, роблячи повільний прогрес до мінімуму. Імпульс може допомогти в цій ситуації.
Момент просто означає, що деяка частка попереднього оновлення додається до поточного оновлення, так що повторні оновлення у певному складі напрямку; ми нарощуємо імпульс, рухаючись все швидше і швидше в цьому напрямку. У випадку з каньйоном ми б нарощували імпульс у мінімальному напрямку, оскільки всі оновлення мають компонент у цьому напрямку. Навпаки, переміщення вперед-назад по стінах каньйону передбачає постійний зворотний напрямок, тому імпульс допоможе придушити коливання в цих напрямках.
Ще одна хитрість, яку використовує Адам, - адаптивно вибрати окремий коефіцієнт навчання для кожного параметра. Параметри, які зазвичай отримують менші або менш часті оновлення, отримують більші оновлення з Адамом (зворотне також правда). Це прискорює навчання у випадках, коли відповідні темпи навчання змінюються в залежності від параметрів. Наприклад, у глибоких мережах градієнти можуть набувати невеликих розмірів на ранніх шарах, і є сенс збільшувати рівень навчання за відповідними параметрами. Ще одна перевага цього підходу полягає в тому, що, оскільки рівень навчання регулюється автоматично, ручна настройка стає менш важливою. Стандартний SGD вимагає ретельної настройки (і, можливо, онлайн-коригування) темпів навчання, але це менш справедливо для Адама та відповідних методів. Ще потрібно вибрати гіперпараметри,
Споріднені методи :
Моментум часто використовується зі стандартним SGD. Вдосконалена версія називається імпульсом Нестерова або градієнтом Нестерова. Інші методи, що використовують автоматично налаштовані показники навчання для кожного параметра, включають: Adagrad, RMSprop та Adadelta. RMSprop і Adadelta вирішують проблему з Adagrad, яка може спричинити припинення навчання. Адам схожий на RMSprop зі швидкістю. Надам модифікує Адама використовувати імпульс Нестерова замість класичного імпульсу.
Список літератури :
Кінгма і Ба (2014) . Адам: Метод стохастичної оптимізації.
Goodfellow та ін. (2016) . Глибоке навчання, глава 8.
Слайди з курсу Джеффа Гінтона
Дозат (2016) . Включення імпульсу Нестерова в Адама.