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

1656637096 kak vybrat luchshuyu skorost obucheniya dlya vashego proekta mashinnogo obucheniya

Дэвид Мак

rOqxO21PhlaHSWJsi1d6pebVJaFtZnkp2wUe

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

Чтобы лучше понять влияние оптимизатора и выбора скорости обучения, я научил ту же модель 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. Исходный код доступен для скачивания.

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

-bK4I26MkIUgfx0n8pHdnkuUpHo7Gv0oxsXw
Неудачные тренировки отображаются в виде отсутствующих точек и разобщенных линий

Вышеприведенный график интересен. Мы видим, что:

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

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

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

2z6pEcdYLajXFXdm5O-5KKbR9LNHj9OvRTLj

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

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

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

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

Q7LiyYjTzEKorkLjac-OP0ZZwPNyvRJ0KLP1
(Заметьте, что это обучение проводилось гораздо медленнее, чем предыдущие эксперименты, с частыми паузами для оценки, чтобы я мог получить более высокое разрешение)

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

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

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

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

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

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

Есть два аспекта, которые мы будем исследовать:

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

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

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

tquS47Rew7bWCWVUKxYQ-l4VIhN66UuUL8pI
Красная линия – это данные, серая пунктирная линия – линейная линия тренда, для сравнения
  • Время на тренировку линейно растет с увеличением размера модели.
  • Такая же скорость обучения успешно обучает сеть всем размерам моделей.

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

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

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

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

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

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

ZFsYwLmU4nYhF9StoYJJ4YJXpSUA79xLXm6N
Неудачные тренировки отображаются в виде отсутствующих точек и разобщенных линий
  • Показатели обучения 0,0005, 0,001, 0,00146 показали лучшие результаты – они также показали лучшие результаты первого эксперимента. Мы видим ту же полосу «сладкой точки», что и в первом эксперименте.
  • Время тренировки каждой скорости обучения растет линейно по размеру модели.
  • Быстрота обучения не зависела от размера модели. Те же показатели, которые были лучшими для размера 1x, были лучшими для размера 10x.
  • Более 0,001 увеличение скорости обучения увеличило время обучения, а также увеличило дисперсию времени обучения (по сравнению с линейной функцией размера модели).
  • Время на тренировку можно примерно смоделировать как с+кн для модели с п весы, фиксированная стоимость c и константа обучения k=f(скорость обучения).

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

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

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

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

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

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

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

Популяционное обучение

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

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

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

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

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

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *