Посторонний в поле ML / DL; начал курс Udacity Deep Learning, основанный на 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
- Как мне систематически настраивать скорость обучения?
- Как скорость обучения связана с количеством шагов?
Ответы:
Используйте оптимизатор градиентного спуска. Это очень хороший обзор.
Что касается кода, взгляните на этот учебник . Это и это некоторые примеры.
Лично я предлагаю использовать либо ADAM, либо RMSprop. Есть еще некоторые гиперпараметры для установки, но есть некоторые «стандартные», которые работают в 99% случаев. Для ADAM вы можете посмотреть на его документ, а для RMSprop - на слайды .
РЕДАКТИРОВАТЬ
Хорошо, вы уже используете оптимизатор градиента. Затем вы можете выполнить некоторую оптимизацию гиперпараметров, чтобы выбрать лучшую скорость обучения. Недавно был предложен автоматизированный подход . Также есть много многообещающих работ Фрэнка Хаттера по автоматической настройке гиперпараметров.
В общем, взгляните на AutoML Challenge , где вы также можете найти исходный код команд. В этой задаче цель состоит в том, чтобы автоматизировать машинное обучение, включая настройку гиперпараметров.
Наконец, в этом документе LeCun и в самом последнем руководстве DeepMin (см. Главу 8) даны некоторые идеи, которые могут быть полезны для вашего вопроса.
В любом случае, имейте в виду, что (особенно для простых задач) нормально, что скорость обучения не сильно влияет на обучение при использовании оптимизатора градиентного спуска. Обычно эти оптимизаторы очень надежны и работают с разными параметрами.
источник
Вы можете автоматизировать настройку гиперпараметров в самих алгоритмах машинного обучения или просто в гиперпараметрах для оптимизатора градиентного спуска, т.е. скорости обучения.
Одна из популярных библиотек - это мята.
https://github.com/JasperSnoek/spearmint
источник
Самый последний автоматический настройщик скорости обучения приведен в разделе «Адаптация скорости обучения в режиме онлайн с гиперградиентным спуском».
Этот метод очень прост в реализации, основной результат для SGD дается как:
где - (гипер) гиперпараметр. Этот метод также применяется к другим обновлениям на основе градиента ( методы на основе импульса). Набор проверки не требуется: требуется только сохранение предыдущего градиента, . Идея состоит в том, чтобы использовать частную производную целевой функции по отношению к скорости обучения ( ), чтобы получить правило обновления для alpha.например ∇ f ( θ t - 2 ) αβ e.g. ∇f(θt−2) α
Как ни странно, я реализовал это поверх моей существующей проблемы и наблюдал гораздо лучшие результаты. Я не настраивал или , но выбрал из предложенных диапазонов из бумаги.α 0β α0
источник
Чтобы настроить гиперпараметры (будь то скорость обучения, скорость затухания, регуляризация или что-то еще), вам нужно установить набор данных с задержкой; этот набор данных не связан с вашим обучающим набором данных. После настройки нескольких моделей с различными конфигурациями (где конфигурация = конкретный выбор каждого гиперпараметра), вы выбираете конфигурацию, выбирая ту, которая максимизирует точность удержания.
источник