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


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
  • Как мне систематически настраивать скорость обучения?
  • Как скорость обучения связана с количеством шагов?

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


1

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

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

αt=αt−1+β∇f(θt−1)T∇f(θt−2)

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

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


0

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


Чем отличается набор данных для удержания от набора данных для тестирования или проверки?
— Торан

Выдержка это еще одно имя для проверки. В основном у вас есть три непересекающихся набора данных: тренировка, удержание и тест. Поезд используется только для изучения весов моделей (например, с использованием градиентного спуска). Heldout используется для настройки параметров модели. Тест используется только для измерения производительности обобщения (т. Е. Как я могу ожидать, что моя модель будет работать с невидимыми данными)
— Alireza

Спасибо @Alireza, что нашли время, чтобы объяснить. Я уже использую набор данных проверки. А без теста невозможно измерить точность!
— Торан

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