Глубокое обучение

Normalization Layers

Слои нормализации

актуальноТекущий рабочий стандарт

Направления: Глубокое обучение · Нейросети

, LayerNorm, RMSNorm: стабилизация распределения активаций, без которой глубокие сети почти не обучаются.

Ключевые тезисы

  • зависит от и плохо работает при батче 1–2 и в рекуррентных сетях.
  • нормирует по признакам одного объекта — стандарт .
  • RMSNorm убирает вычитание среднего и работает быстрее при том же качестве.

Какую задачу решает

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

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

Классическая ошибка с `model.eval()`

Модель на валидации внезапно даёт мусор, хотя на обучении всё отлично. Причина: забыли model.eval(), и нормализует по статистикам текущего . При батче из одного объекта равна нулю, нормализованная — тоже, и предсказание превращается в константу. То же случается, если батч валидации отсортирован по классу: статистики уезжают, и метрика падает без всякой связи с качеством модели.

Подробный разбор

3 подтемы — объяснения, формулы, примеры и интерактивные графики.

СлойСтатистика поГде применяется
батчу для каждого канала
признакам одного объекта,
GroupNormгруппе каналовмалые батчи в CV
RMSNorm без вычитания среднегосовременные
На практике

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

Изначальное объяснение через internal covariate shift оказалось неполным. Сегодня основной эффект связывают со сглаживанием ландшафта потерь: делает поверхность более предсказуемой, что позволяет брать больший .

  • Позволяет обучать глубокие сети без тщательной настройки инициализации.
  • даёт побочный регуляризующий эффект за счёт шума .
  • Pre-norm ( до подслоя) в устойчивее post-norm при большой глубине.

Слойtrain()eval()
статистики текущего , обновление running mean/varнакопленные running-статистики, обновления нет
часть активаций зануляетсяотключён полностью
, GroupNormповедение одинаковоеповедение одинаковое
model.eval()                      # BN → running stats, Dropout → off
with torch.inference_mode():      # не строить граф и не хранить активации
    logits = model(x)
...
model.train()                     # вернуть режим обучения перед следующей эпохой
`eval()` меняет поведение слоёв, `inference_mode()` отключает автоград — это разные вещи, нужны обе
На практике

Классические симптомы забытого eval(): метрики на валидации скачут от запуска к запуску, а предсказание для одного и того же объекта зависит от того, с кем он попал в . При батче размера 1 в train-режиме и вовсе вырождается.

Где применяется

  • после и до — стандартная связка ResNet и всего, что из него выросло.
  • перед и feed-forward (pre-norm). Без этого глубокие модели требуют тонкой настройки разогрева.
  • Маленькие батчи и с батчем 2–4: ломается на шумных статистиках, берут GroupNorm.
  • по времени неприменим, LayerNorm работает на каждом шаге независимо.

Плюсы, минусы и альтернативы

Плюсы

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

Минусы

  • зависит от : на маленьких батчах статистики шумны и качество падает.
  • Разное поведение в режимах обучения и — источник классических багов (model.eval() забыли).
  • Добавляет вычисления и синхронизацию между устройствами при распределённом обучении.
  • Взаимодействует с неочевидным образом: масштаб весов перед теряет смысл.

Брать, если

  • Практически всегда в глубокой сети — вопрос только в том, какой вариант.
  • и большой — ; и переменная длина — LayerNorm; маленький батч — GroupNorm.

Не брать, если

  • меньше 8 и вы всё же ставите — почти гарантированная деградация.
  • Модель очень мелкая (два-три слоя): выигрыша не будет, а поведение усложнится.

Чем заменяют

Тема также относится к главам:Оптимизация обученияСтабильность обучения

Видеолекции

Записи университетских курсов, где эта тема звучит. Где у записи есть тайм-коды, ссылка открывает её с нужной секунды; где их не проставили — с начала.

Связанные темы

Стабильность обучения нейросетей

Кому эта тема нужна

Профильная компетенция для роли: CV-инженер.

Усиливает профиль: Исследователь.

Проверить себя

Тема встречается в тесте по направлениям — ошибки приведут обратно на эту страницу.

Следующий шагПроверить себя: Глубокое обучениеТема встречается в этом тесте 2 раза. Ошибка приведёт обратно на эту страницу — с объяснением, что именно не сошлось.Перейти →

Глава «Глубокое обучение» последний раз правилась . Нашли ошибку — напишите.