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

Почему скорость обучения так важна? Давайте рассмотрим несколько различных сценариев. Во-первых, рассмотрим минимальную скорость обучения, намного меньшую, чем идеальная скорость обучения. На каждой итерации обучения сеть обновляет свои веса, используя следующую формулу:

Где θ - это набор весов, которые изучает сеть, которые успешно соответствуют данным. Знак ⍺ обозначает скорость обучения, которая контролирует обновление весов сети. J (θ) называется функцией потерь. Функция потерь помогает измерить правильность модели с точки зрения ее способности оценивать взаимосвязь между X (входные данные) и y (выходная метка).

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

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

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

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

Что такое LRFinder

Идея поисковика скорости обучения (LRFinder) взята из статьи Лесли Смита Циклические скорости обучения для обучения нейронных сетей. Средство поиска скорости обучения - это метод определения хорошей скорости обучения для большинства оптимизаторов на основе градиентов.

Метод LRFinder можно применять поверх любого варианта стохастического градиентного спуска ¹ и большинства типов сетей. Однако некоторые сложные сетевые настройки, например Сети GAN могут не работать с LRFinder (по крайней мере, без некоторых размышлений и исследований).

Как пользоваться LRFinder

Учитывая необученную нейронную сеть, функцию потерь и обучающие данные, выполните следующие действия:

  1. Начните с очень маленькой скорости обучения (например, 1e-10) и экспоненциально увеличивайте скорость обучения с каждым шагом обучения. Вот как это сделать в модельной функции вашей сети:
# decay_learning_rate = learning_rate *
                        decay_rate ^ (global_step / decay_steps)
learning_rate = tf.train.exponential_decay(1e-10, global_step=global_step, decay_steps=your_value, decay_rate=your_value)
# So it can be seen in TensorBoard later
tf.summary.scalar('learning_rate', learning_rate)

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

2. Обучите свою сеть как обычно.

3. Запишите потерю тренировки и продолжайте, пока не увидите, что она быстро растет.

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

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

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

Вот графики TensorBoard из реального примера:

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

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

Используя график скорости обучения в зависимости от шага обучения, мы можем узнать, какая скорость обучения использовалась на шаге 4.4k. Было 1.03e-5. Это скорость обучения, которую мы будем использовать для нашей сети.

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

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

LRFinder против поиска по сетке

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

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

Дополнительные ресурсы

  • Реализация keras
  • Реализация библиотеки fast.ai

О Октавиане

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

Благодарности

Я хотел бы поблагодарить Дэвида Мака за идею написать статью о LRFinder, а также за помощь в рецензировании и редактировании статьи. Я хотел бы поблагодарить Эндрю Джефферсона за его вклад в реализацию метода поиска скорости обучения в TensorFlow.

1. Обзор алгоритмов оптимизации градиентного спуска Себастьяна Рудера.