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

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

  1. Поверхности потерь, модовая связность и быстрое объединение DNN »Гарипова и др. аль
  2. Усреднение весов ведет к более широкой оптимальности и лучшему обобщению »Измайлов и др. аль

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

Традиционное объединение нейронных сетей

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

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

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

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

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

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

  • при объединении весов мы все равно получаем одну модель в конце, что ускоряет прогнозы
  • оказывается, этот метод превосходит современный ансамбль снимков

Посмотрим, как это работает. Но сначала нам нужно понять некоторые важные факты о поверхностях потерь и обобщаемых решениях.

Решения в весовом пространстве

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

Во время тренировки, изменяя веса, алгоритм тренировки изменяет сеть и перемещается в пространстве веса. Алгоритм градиентного спуска перемещается по плоскости потерь в этом пространстве, где высота плоскости задается значением функции потерь.

Узкая и широкая Оптима

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

Хинтон: Чтобы иметь дело с гиперплоскостями в 14-мерном пространстве, визуализируйте трехмерное пространство и очень громко скажите себе« четырнадцать . Все так делают ». ("источник")

Одним из показателей, позволяющих отличить хорошее решение от плохого, является его однородность. Идея состоит в том, что набор данных для обучения и набор данных для тестирования будут давать похожие, но не совсем одинаковые поверхности потерь. Вы можете себе представить, что тестовая поверхность будет немного сдвинута относительно поверхности поезда. Для узкого решения во время тестирования точка с низкими потерями может иметь большие потери из-за этого сдвига. Это означает, что это «узкое» решение не получилось хорошо обобщать - потери при обучении низкие, а потери при тестировании велики. С другой стороны, для «широкого» и плоского решения этот сдвиг приведет к тому, что потеря обучения и тестирования будет близка друг к другу.

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

Объединение снимков

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

Длина цикла в подходе ансамбля снимков составляет от 20 до 40 эпох. Идея длинных циклов скорости обучения состоит в том, чтобы иметь возможность находить достаточно разные модели в пространстве весов. Если модели слишком похожи, то предсказания отдельных сетей в ансамбле будут слишком близкими, и преимущество ансамбля будет незначительным.

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

Быстрое геометрическое ансамблирование (FGE)

Быстрое геометрическое ансамблирование очень похоже на ансамбль снимков, но имеет некоторые отличительные особенности. Он использует линейный кусочно-циклический график скорости обучения вместо косинуса. Во-вторых, длина цикла в FGE намного короче - всего от 2 до 4 эпох на цикл. На первый взгляд короткий цикл неверен, потому что модели в конце каждого цикла будут близки друг к другу, и поэтому их объединение не даст никаких преимуществ. Однако, как обнаружили авторы, поскольку существуют соединенные пути с низкими потерями между достаточно разными моделями, можно перемещаться по этим путям небольшими шагами, и модели, встречающиеся при этом, будут достаточно разными, чтобы их можно было объединить с хорошими результатами. Таким образом, FGE показывает улучшение по сравнению с ансамблями моментальных снимков, и для поиска модели требуются меньшие шаги (что ускоряет ее обучение).

Чтобы получить преимущества как от ансамбля снимков, так и от FGE, необходимо сохранить несколько моделей, а затем сделать прогнозы для всех из них перед усреднением для окончательного прогноза. Таким образом, за дополнительную производительность ансамбля нужно платить большим объемом вычислений. Так что бесплатного обеда там нет. Или есть? Вот тут-то и появляется новая бумага со стохастическим усреднением веса.

Стохастическое усреднение веса (SWA)

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

Интуиция для SWA исходит из эмпирического наблюдения, что локальные минимумы в конце каждого цикла скорости обучения имеют тенденцию накапливаться на границе областей на поверхности потерь, где значение потерь низкое (точки W1, W2 и W3 находятся на границе красной области низкие потери на левой панели рисунка выше). Взяв среднее значение нескольких таких точек, можно получить широкое обобщаемое решение с еще меньшими потерями (Wswa на левой панели рисунка выше).

Вот как это работает. Вместо ансамбля из множества моделей вам понадобятся всего две модели:

  • первая модель, в которой хранится скользящее среднее весов модели (w_swa в формуле). Это будет последняя модель после окончания обучения, которая будет использоваться для прогнозов.
  • вторая модель (w в формуле), которая будет пересекать весовое пространство, исследуя его с помощью циклического графика скорости обучения.

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

Реализации

Авторы статьи предоставляют свою реализацию в PyTorch.

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

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

Вы можете подписаться на меня в Twitter. Давайте также подключимся к LinkedIn.