Встановлення швидкості навчання вашої нейронної мережі

Джеремі Джордан

Інженер машинного навчання. Широко цікавий.

Ще повідомлення Джеремі Джордана.

швидкості

Джеремі Джордан

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

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

Тож як знайти оптимальний рівень навчання?

3e-4 - найкраща швидкість навчання для Адама, опустивши руки.

- Андрей Карпаті (@karpathy) 24 листопада 2016 р

Ідеально! Я думаю, моя робота тут виконана.

(я просто хотів переконатись, що люди розуміють, що це жарт.)

- Андрей Карпаті (@karpathy) 24 листопада 2016 р

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

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


Кредит зображення

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

Систематичний підхід до пошуку оптимального рівня навчання

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

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

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

Ця техніка була запропонована Леслі Смітом у циклічному тарифі для навчання нейронних мереж та євангелізована Джеремі Говардом на курсі fast.ai.

Встановлення графіка для регулювання темпу навчання під час навчання

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

Найпопулярнішою формою відпалу швидкості навчання є ступінчастий спад, коли швидкість навчання зменшується на деякий відсоток після встановленої кількості епох навчання.

Більш загально, ми можемо встановити, що корисно визначити a графік темпів навчання в якому швидкість навчання оновлюється під час навчання відповідно до певного правила.

Циклічні показники навчання

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


Кредит зображення

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

Ми можемо написати загальний графік як

де $ x $ визначається як

і $ cycle $ можна розрахувати як