Как выбрать лучшую скорость обучения для вашего проекта машинного обучения

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

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

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

Экспериментальная установка

Я обучил базовую сверточную нейронную сеть из серии руководств TensorFlow, которая учится распознавать цифры MNIST. Это достаточно небольшая сеть с двумя сверточными слоями и двумя плотными слоями, всего для обучения требуется примерно 3400 весов. Для каждого обучения используется одно и то же случайное начальное число.

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

(Если вы хотите выделить немного времени графического процессора для запуска более крупной версии этого эксперимента на CIFAR-10, свяжитесь с нами).

Какая скорость обучения работает лучше всего?

Первое, что мы исследуем, - это то, как скорость обучения влияет на обучение модели. При каждом запуске одна и та же модель обучается с нуля, варьируя только оптимизатор и скорость обучения.

Модель обучалась с помощью 6 различных оптимизаторов: Gradient Descent, Adam, Adagrad, Adadelta, RMS Prop и Momentum. Для каждого оптимизатора было обучено 48 различных скоростей обучения, от 0,000001 до 100 с логарифмическими интервалами.

В каждом прогоне сеть обучается до тех пор, пока не будет достигнута точность поезда не менее 97%. Максимально разрешенное время составляло 120 секунд. Эксперименты проводились на Nvidia Tesla K80, размещенной на FloydHub. Исходный код доступен для скачивания.

Вот время обучения для каждого выбора скорости обучения и оптимизатора:

Приведенный выше график интересен. Мы это видим:

  • Для каждого оптимизатора большая часть скорости обучения не позволяет обучить модель.
  • У каждого оптимизатора есть форма впадины: слишком низкая скорость обучения никогда не прогрессирует, слишком высокая скорость обучения вызывает нестабильность и никогда не сходится. Между ними есть группа «правильных» темпов обучения, которые успешно тренируются.
  • Не существует скорости обучения, подходящей для всех оптимизаторов.
  • Скорость обучения может влиять на время обучения на порядок.

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

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

Еще одно наблюдение на приведенном выше графике - широкий диапазон скоростей обучения (от 0,001 до 30), которые позволяют добиться успеха хотя бы с одним оптимизатором.

Какой оптимизатор работает лучше всего?

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

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

Несколько наблюдений:

  • Всем оптимизаторам, кроме RMSProp (см. Заключительный пункт), удается сойтись за разумное время.
  • Адам учится быстрее всех.
  • Adam более стабилен, чем другие оптимизаторы, его точность не снижается.
  • RMSProp запускался с аргументами по умолчанию из TensorFlow (скорость распада 0,9, эпсилон 1e-10, импульс 0,0), и, возможно, они не подходят для этой задачи. Это хороший вариант использования для автоматического поиска гиперпараметров (подробнее об этом см. В последнем разделе).

У Адама также был относительно широкий диапазон успешных темпов обучения в предыдущем эксперименте. В целом, Адам - ​​лучший выбор из шести наших оптимизаторов для этой модели и набора данных.

Как размер модели влияет на время обучения?

Теперь давайте посмотрим, как размер модели влияет на ее обучение.

Мы изменим размер модели линейным коэффициентом. Этот коэффициент будет линейно масштабировать количество сверточных фильтров и ширину первого плотного слоя, таким образом приблизительно линейно масштабируя общее количество весов в модели.

Мы рассмотрим два аспекта:

  1. Как изменяется время обучения по мере роста модели для фиксированного оптимизатора и скорости обучения?
  2. Какая скорость обучения обучается быстрее всего для каждого размера модели для фиксированного оптимизатора?

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

Ниже показано время, необходимое для достижения 96% точности обучения модели, увеличив ее размер с 1x до 10x. Мы использовали один из наших самых успешных гиперпараметров из предыдущих:

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

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

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

Это также показывает, что по мере того, как сеть становится больше, она не требует O (n²) работы по схождению модели (линейный рост во времени можно объяснить дополнительными операциями, выполняемыми для тренировки с каждым весом).

Этот результат обнадеживает, так как показывает, что наша структура глубокого обучения (здесь TensorFlow) эффективно масштабируется.

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

Давайте проведем тот же эксперимент для нескольких уровней обучения и посмотрим, как время обучения зависит от размера модели:

  • Показатели обучения 0,0005, 0,001, 0,00146 показали лучшие результаты - они также показали лучшие результаты в первом эксперименте. Здесь мы видим ту же полосу «золотого пятна», что и в первом эксперименте.
  • Время для каждой скорости обучения линейно растет с размером модели.
  • Скорость обучения не зависела от размера модели, те же скорости, которые лучше всего работали для размера 1x, лучше всего работали для размера 10x.
  • Выше 0,001 увеличение скорости обучения увеличивает время обучения, а также увеличивает дисперсию времени обучения (по сравнению с линейной функцией размера модели).
  • Время на обучение можно примерно смоделировать как c + kn для модели с n весами, фиксированной стоимостью c и константой обучения k = f (скорость обучения) .

Таким образом, лучшая скорость обучения для размера 1x была также лучшей скоростью обучения для размера 10x.

Автоматизация выбора скорости обучения

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

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

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

Поиск по сетке

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

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

Обучение на основе популяции

Обучение на основе популяции (DeepMind) - это элегантная реализация использования генетического алгоритма для выбора гиперпараметров.

В PBT создается совокупность моделей. Все они проходят непрерывную параллельную подготовку. Когда у любого члена популяции было достаточно времени, чтобы тренироваться, чтобы показать улучшение, его точность проверки сравнивается с остальной частью популяции. Если его производительность составляет 20% самых низких показателей, то он копирует и изменяет гиперпараметры и переменные одного из 20% лучших исполнителей.

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

Следующие шаги

Спасибо, что прочитали это исследование скорости обучения. Я начал эти эксперименты из-за моего собственного любопытства и разочарования по поводу поворота гиперпараметров, и я надеюсь, что вам понравятся результаты и выводы так же, как и мне.

Если вас интересует конкретная тема или расширение, дайте мне знать. Кроме того, если вы хотите выделить немного времени графического процессора для проведения более масштабной версии этого эксперимента, я бы хотел поговорить.

Эти работы являются частью годичного исследования тем архитектуры ИИ. Следите за этой публикацией (и дайте этой статье несколько аплодисментов!), Чтобы получать обновления, когда выйдут следующие статьи.