Как (систематически) настроить скорость обучения с использованием градиентного спуска в качестве оптимизатора?

12

Посторонний в поле 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
  • Как мне систематически настраивать скорость обучения?
  • Как скорость обучения связана с количеством шагов?
Thoran
источник
1
tpot обеспечивает автоматическую настройку ML трубопроводов
denfromufa

Ответы:

4

Используйте оптимизатор градиентного спуска. Это очень хороший обзор.

Что касается кода, взгляните на этот учебник . Это и это некоторые примеры.

Лично я предлагаю использовать либо ADAM, либо RMSprop. Есть еще некоторые гиперпараметры для установки, но есть некоторые «стандартные», которые работают в 99% случаев. Для ADAM вы можете посмотреть на его документ, а для RMSprop - на слайды .

РЕДАКТИРОВАТЬ

Хорошо, вы уже используете оптимизатор градиента. Затем вы можете выполнить некоторую оптимизацию гиперпараметров, чтобы выбрать лучшую скорость обучения. Недавно был предложен автоматизированный подход . Также есть много многообещающих работ Фрэнка Хаттера по автоматической настройке гиперпараметров.

В общем, взгляните на AutoML Challenge , где вы также можете найти исходный код команд. В этой задаче цель состоит в том, чтобы автоматизировать машинное обучение, включая настройку гиперпараметров.

Наконец, в этом документе LeCun и в самом последнем руководстве DeepMin (см. Главу 8) даны некоторые идеи, которые могут быть полезны для вашего вопроса.

В любом случае, имейте в виду, что (особенно для простых задач) нормально, что скорость обучения не сильно влияет на обучение при использовании оптимизатора градиентного спуска. Обычно эти оптимизаторы очень надежны и работают с разными параметрами.

Саймон
источник
Я уже использую Gradient Descent Optimizer в коде. Спасибо за ссылки!
Торан
@Thoran Хорошо, не читал код: D (и в вопросе не упоминается оптимизатор). Я отредактировал свой ответ, чтобы дать вам больше помощи :)
Симон
Приятные разработки, облегчающие работу для посторонних, таких как. Вы знаете, как связаны количество шагов и скорость обучения? Моя интуиция говорит мне, что если есть больше шагов, процесс обучения должен быть медленнее.
Торан
@Thoran Как правило, да, чем больше количество шагов, тем медленнее процесс (но также и более стабильный). Далее я отредактировал свой ответ, добавив несколько ссылок на некоторые «хитрости», которые могут быть полезны для ручной настройки гиперпараметров.
Симон
очень крутой материал, мне потребуется некоторое время, чтобы переварить его: D
Торан
1

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

Одна из популярных библиотек - это мята.

https://github.com/JasperSnoek/spearmint

iratzhash
источник
1

Самый последний автоматический настройщик скорости обучения приведен в разделе «Адаптация скорости обучения в режиме онлайн с гиперградиентным спуском».

Этот метод очень прост в реализации, основной результат для SGD дается как:

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

где - (гипер) гиперпараметр. Этот метод также применяется к другим обновлениям на основе градиента ( методы на основе импульса). Набор проверки не требуется: требуется только сохранение предыдущего градиента, . Идея состоит в том, чтобы использовать частную производную целевой функции по отношению к скорости обучения ( ), чтобы получить правило обновления для alpha.например f ( θ t - 2 ) αβe.g.f(θt2)α

Как ни странно, я реализовал это поверх моей существующей проблемы и наблюдал гораздо лучшие результаты. Я не настраивал или , но выбрал из предложенных диапазонов из бумаги.α 0βα0

eqzx
источник
0

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

Алиреза
источник
Чем отличается набор данных для удержания от набора данных для тестирования или проверки?
Торан
Выдержка это еще одно имя для проверки. В основном у вас есть три непересекающихся набора данных: тренировка, удержание и тест. Поезд используется только для изучения весов моделей (например, с использованием градиентного спуска). Heldout используется для настройки параметров модели. Тест используется только для измерения производительности обобщения (т. Е. Как я могу ожидать, что моя модель будет работать с невидимыми данными)
Alireza
Спасибо @Alireza, что нашли время, чтобы объяснить. Я уже использую набор данных проверки. А без теста невозможно измерить точность!
Торан
Итак, ваш первоначальный вопрос был об определении скорости обучения: если первый столбец в вашем исходном посте был выдержан с точностью (не обучением), то вы можете сказать, что 0,5 лучше, чем 0,1 (хотя вы должны продолжать пробовать значения> 0,5). [примечание: если вы снова проводите эксперименты, просто разделите некоторые данные, чтобы они служили тестом]
Alireza