Пять советов от экспертов в области глубокого обучения и компьютерного зрения

Я попросил дюжину легенд глубокого обучения в Deci AI поделиться своими любимыми советами по обучению нейронных сетей…

Эти 5 встречались чаще всего:

  1. Экспоненциальная скользящая средняя
  2. Усреднение веса
  3. Пакетное накопление
  4. Точная норма партии
  5. Нулевое снижение веса в зависимости от нормы и смещения партии

Позвольте мне разбить их для вас…

1) Экспоненциальная скользящая средняя

Попасть в ловушку ложных локальных минимумов — отстой.

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

К счастью, в вашем распоряжении есть метод EMA.

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

— Шай Розенберг

Вот как это работает:

  • Пусть W_m будет текущим набором весов после выполнения шага оптимизации.
  • Скопируйте эти веса перед следующим шагом оптимизации
  • Возьмите средневзвешенное значение весов, которые вы только что скопировали, и весов из предыдущего шага.
  • Это средневзвешенное значение обновления на текущем шаге

Вот как это выглядит более формально:

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

2) Усреднение веса

Всем нравится бесплатное повышение точности модели.

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

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

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

3) Пакетное накопление

Вы когда-нибудь пытались изменить рецепт, чтобы он соответствовал ингредиентам, посуде и духовке, которые у вас есть под рукой?

Это не простое дело!

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

Это означает, что вы не всегда будете получать одинаковые результаты тренировок.

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

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

Олкай Цирит и его команда из Uber AI смогли создать нейронную сеть, которая превзошла XGBoost. Узнайте больше, посмотрев этот ролик с нашего недавнего круглого стола для клиентов Comet.

4) Точная норма партии

BatchNorm — замечательное изобретение.

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

Неудивительно, что в последние годы он использовался почти во всех современных CNN.

Однако у BatchNorm есть свои проблемы…

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

— Ян ЛеКун

Почему BatchNorm ловит такой флук?

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

Но статья Facebook AI Research за 2021 год под названием Переосмысление «пакета в BatchNorm»» показала, что эта статистика на основе мини-пакетов неоптимальна.

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

Этот метод под названием Precise BatchNorm помогает повысить как стабильность, так и производительность модели.

5) Распад нулевого веса на BatchNorm и Bias

Большинство задач компьютерного зрения имеют слои и смещения BatchNorm, а также линейные или сверточные слои.

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

Здесь в игру вступает техника регуляризации, называемая уменьшением веса.

Затухание веса (также известное как регуляризация L2) помогает уменьшить сложность модели и предотвратить переоснащение, изменив правило обновления для весов следующим образом:

L_new(w)=L_original(w)+λ_wT_w

Где λ — значение, определяющее силу наказания и поощряющее меньшие веса. Этот метод существенно приближает веса к 0. Это отлично подходит для весов сверточных и линейных слоев. Не так много для слоев BatchNorm.

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

Теперь я знаю, что вы, вероятно, спрашиваете себя…

«Как я могу реализовать эти трюки?»

Вы можете попытаться найти в Интернете код, который сделает все это за вас, выполнить поиск в StackOverflow или скопировать и вставить из других источников или…

Вы можете использовать SuperGradients.

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

Супер что?

Суперградиенты.

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

Посмотри и разбей звезду.

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

Независимая от редакции, Heartbeat спонсируется и публикуется Comet, платформой MLOps, которая позволяет специалистам по данным и командам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим нашим авторам и не продаем рекламу.

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