Як (систематично) налаштовувати рівень навчання з градієнтним походженням як оптимізатор?


12

Аутсайдер у галузі ML / DL; розпочав курс глибокого навчання Udacity, який базується на Tensorflow; виконання завдання 3 завдання 4; намагаючись налаштувати рівень навчання за допомогою наступної конфігурації:

  • Розмір партії 128
  • Кількість кроків: достатньо, щоб заповнити 2 епохи
  • Розміри прихованих шарів: 1024, 305, 75
  • Ініціалізація ваги: ​​усічений нормальний з std. відхилення sqrt (2 / n), де n - розмір попереднього шару
  • Ймовірність збереження випаду: 0,75
  • Регуляризація: не застосовується
  • Алгоритм швидкості навчання: експоненціальний розпад

пограти з параметрами швидкості навчання; вони, здається, не мають ефекту в більшості випадків; код тут ; результати:

Accuracy    learning_rate   decay_steps     decay_rate      staircase
93.7        .1              3000            .96             True
94.0        .3              3000            .86             False
94.0        .3              3000            .96             False
94.0        .3              3000            .96             True
94.0        .5              3000            .96             True
  • Як я повинен систематично налаштовувати рівень навчання?
  • Як швидкість навчання пов'язана з кількістю кроків?

1
tpot забезпечує автоматичну настройку трубопроводів МЛ
denfromufa

Відповіді:


4

Використовуйте оптимізатор спуску градієнта. Це дуже хороший огляд.

Щодо коду, подивіться цей підручник . Це та ось деякі приклади.

Особисто я пропоную використовувати або ADAM, або RMSprop. Існує ще кілька гіперпараметрів, які потрібно встановити, але є "стандартні", які працюють 99% часу. Для ADAM ви можете переглянути його папір, а для RMSprop - слайди .

EDIT

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

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

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

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


Я вже використовую в коді оптимізатор градієнтного зниження. Дякуємо за посилання!
Торан

@Thoran Добре, не читав код: D (і питання не згадує оптимізатор). Я відредагував свою відповідь, щоб надати вам ще допомогу :)
Саймон

Приємні розробки, полегшують роботу стороннім людям, як <. Чи знаєте ви яким-небудь чином, як пов’язані кількість ступенів та швидкість навчання? Моя кишка каже мені, що якщо кроків буде більше, процес навчання повинен проходити повільніше.
Торан

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

дуже класні речі, мені знадобиться певний час, щоб перетравити це: D
Торан,

1

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

Одна з популярних для цього бібліотека - це м'ята.

https://github.com/JasperSnoek/spearmint


1

Зовсім недавній автоматичний тюнер швидкості навчання представлений в Інтернеті з адаптацією швидкості навчання з гіперградієнтним походженням

Цей метод дуже простий у здійсненні, основний результат для SGD задається як:

αt=αt1+βf(θt1)Tf(θt2)

βe.g.f(θt2)α

βα0


0

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


Чим набір даних про Holdout відрізняється від набору даних тесту чи перевірки?
Торан

holdout - інша назва для перевірки. В основному у вас є три непересічні набори даних: поїзд, тривання та тест. Поїзд використовується тільки для вивчення вагових моделей (наприклад, за допомогою градієнтного спуску). Heldout використовується для настройки параметрів моделі. Тест використовується лише для вимірювання продуктивності узагальнення (тобто як я можу очікувати, що моя модель буде виконана на небачених даних)
Аліреза

Дякуємо @Alireza, що знайшли час для пояснення. Я вже використовую набір даних перевірки. І без тесту неможливо виміряти точність!
Торан

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