Вибір курсу навчання


85

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

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

Коротше кажучи: як я можу вибрати рівень навчання для SGD?

Відповіді:


69
  • Чи пов’язана ступінь навчання з формою градієнта помилок, оскільки це диктує швидкість спуску?

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

    • Адаград є найбільш широко відомим з них і масштабує глобальну швидкість навчання η на кожен вимір на основі l2 норми історії градієнта помилок gt на кожен вимір:

      введіть тут опис зображення

    • Ададельта - ще один такий алгоритм навчання, який використовує як історію градієнта помилок, як адаград, так і історію оновлення ваги, і має перевагу взагалі не встановлювати рівень навчання .

  • Якщо я не буду вибирати значення, а як я їх вибирати?

    • Встановлення швидкості навчання для простого SGD в нейронних мережах зазвичай є процесом, починаючи зі здорового значення, такого як 0,01, а потім здійснюючи перехресну перевірку, щоб знайти оптимальне значення. Типові значення коливаються на кілька порядків від 0,0001 до 1.
  • Здається, ви хочете мати невеликі значення, щоб уникнути перенапруги, але як ви виберете таке, щоб не зациклюватися на локальних мінімумах або не зайняти занадто багато часу для спуску? Чи має сенс мати постійну швидкість навчання чи я повинен використовувати якусь метрику, щоб змінити її значення, оскільки я наближаюся до мінімуму в градієнті?

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

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

Слід зазначити, що оптимізатор Адама є більш звичним, ніж Адаград або Ададельта в наші дні.
E_net4 продовжує страйкувати

22

Нижче наводиться дуже хороша примітка (стор. 12) про ступінь навчання в нейронних мережах (Заднє розповсюдження) Ендрю Нг. Ви знайдете деталі, пов'язані зі швидкістю навчання.

http://web.stanford.edu/class/cs294a/sparseAutoencoder_2011new.pdf

Що стосується Вашого четвертого пункту, Ви маєте рацію, що зазвичай потрібно вибирати "збалансовану" швидкість навчання, яка не повинна ні проганяти, ні сходитися занадто повільно. Можна побудувати графік засвоєння значень скорочення функції витрат для діагностики / тонкої настройки. На практиці Ендрю зазвичай використовує алгоритм L-BFGS (згаданий на сторінці 12), щоб отримати "достатньо хороший" рівень навчання.


9

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

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

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


6

Скопіюйте з моєї магістерської дисертації :

  • Якщо втрати не зменшаться протягом кількох епох, рівень навчання може бути занадто низьким. Процес оптимізації також може затримуватися на локальному мінімумі.
  • Втрата як NAN може бути пов’язана із занадто високими показниками навчання. Ще одна причина - поділ на нуль або прийняття логарифму нуля.
  • Відстеження оновлення ваги: ​​Андрій Карпаті запропонував у 5-й лекції CS231n відстежувати оновлення ваги, щоб перевірити, чи правильно вибрано рівень навчання. Він припускає, що оновлення ваги має бути в порядку 10-3. Якщо оновлення ваги занадто велике, то рівень навчання потрібно зменшити. Якщо оновлення ваги занадто низьке, то рівень навчання потрібно збільшити.
  • Типові показники навчання приведені в [0,1, 0,00001]

4

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

У моєму питанні є три варіанти розміру кроку:

  • Один пов'язаний з " часом ", і кожен вимір повинен мати однаковий розмір кроку. Можливо, ви помітили щось подібне

αt

в той час як t демонструє поточний номер ітерації, альфа - це гіпер параметр

  • наступний пов'язаний з градієнтом , і кожен вимір має свій розмір кроку. Можливо, ви помітили щось подібне

1αβ+s=1t1gs2αβ+s=1tgs2

в той час як альфа і бета є гіпер параметром, g демонструє градієнт

  • останній - це поєднання часу та градієнта , і це має бути схожим

1αβ+s=1t1gs2αβ+s=1tgs2+γt

або

1αβ+s=1t1gs2αβ+s=1tgs2γt

Сподіваємось, це допоможе вам, удачі -)


Чи є у вас посилання на це?
Джон

Ви можете віднести частину курсу FTRL до рівня швидкості навчання, ми можемо сформулювати це з TIME та GRADIENT.
Джо

3

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

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


3

На додаток до відповіді Девіда, у fastai - це те, де я знайшов концепцію пошуку найкращого рівня навчання для цих даних, використовуючи певну архітектуру.

Але ця річ існує лише на фастаї / піторху. Нещодавно хтось зробив реалізацію керас .

які в свою чергу базуються на цих документах:

Сподіваюся, це допомагає.


2

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

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

введіть тут опис зображення

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

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