Skip connection

Коротко

Definition

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

Skip connection также называют residual connection, shortcut connection или residual link.

Главная идея: вместо того чтобы заставлять блок полностью строить новое представление, сеть учится добавлять поправку к уже существующему представлению.

Типичная запись:

где:

  • — вход блока;
  • — преобразование внутри блока;
  • — выход после добавления skip connection.

Зачем нужен

Skip connection нужен, чтобы глубокие сети было проще обучать.

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

  • постепенно уменьшаться;
  • становиться нестабильным;
  • плохо доходить до ранних слоёв;
  • затруднять обучение очень глубоких моделей.

Это связано с проблемой затухания градиента.

Skip connection создаёт более короткий путь для сигнала и ошибки. Благодаря этому ранние слои получают более прямую обратную связь, а глубокая сеть становится устойчивее к обучению.

Как работает

Рассмотрим простую схему.

На схеме skip connection установлен вокруг второго скрытого слоя: выход с первого слоя напрямую прибавляется к выходу второго слоя, то есть к входу третьего слоя.

Упрощённо:

Если обозначить преобразование внутри блока как , то residual-блок можно записать так:

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

Если оптимальное преобразование близко к тождественному, блоку проще выучить маленькую поправку, чем сложное полное преобразование.

Как помогает градиенту

Без skip connection производная ошибки по раннему весу проходит через длинную цепочку множителей:

Если многие множители меньше 1, градиент может стать слишком маленьким для заметного обновления весов.

С skip connection появляется дополнительный путь. По правилу производной суммы градиент получает вклад и через основной путь, и через обход:

Для добавления вида:

производная по содержит слагаемое от тождественного пути:

Именно это слагаемое +1 помогает градиенту проходить назад даже тогда, когда производная основного пути мала.

Интуитивно skip connection создаёт «короткую дорогу» для градиента.

Где используется

Skip connection используется во многих современных архитектурах:

В ResNet skip connection обычно выглядит как добавление входа блока к его выходу.

В трансформерах residual connection применяется вокруг attention-блока и feed-forward-блока. Обычно рядом с ним используется нормализация, например LayerNorm.

Связанные архитектуры

ResNet

В ResNet блок обычно имеет вид:

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

Если размерности не совпадают, используют projection shortcut:

где — дополнительное линейное или свёрточное преобразование, приводящее размерности к совместимому виду.

Transformer

В трансформере skip connection используется вокруг основных подблоков:

и

Это помогает обучать глубокие transformer-модели и сохранять исходное представление при добавлении новых преобразований.

U-Net

В U-Net skip connections соединяют encoder и decoder на соответствующих масштабах. Это позволяет decoder использовать низкоуровневые пространственные детали, потерянные при сжатии.

Типы skip connection

Additive skip connection

Самый классический вариант:

Он требует, чтобы формы и совпадали.

Projection shortcut

Если формы не совпадают, вход сначала преобразуют:

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

Concatenation skip connection

Иногда признаки не складывают, а конкатенируют:

Такой вариант часто встречается в U-Net и похожих encoder-decoder архитектурах.

Типичные ошибки понимания

Думать, что skip connection просто копирует вход

Skip connection действительно передаёт вход по обходному пути, но итоговый выход обычно содержит и исходный сигнал, и результат преобразования .

Сеть учится тому, какую поправку добавить к входу.

Забывать про совместимость размерностей

Для сложения нужно, чтобы и имели одинаковую форму. Если формы различаются, нужен projection shortcut или другой способ согласования размерностей.

Считать skip connection заменой нормализации

Skip connection помогает градиентам, но не заменяет нормализацию. В современных архитектурах residual connections часто используются вместе с нормализацией, например BatchNorm в CNN или LayerNorm в трансформерах.

Думать, что skip connection решает все проблемы глубоких сетей

Skip connection облегчает обучение, но качество всё равно зависит от архитектуры, функции потерь, данных, оптимизации, регуляризации и гиперпараметров.

Путать residual connection и dense connection

Residual connection обычно складывает вход и выход блока. Dense connection, как в DenseNet, может конкатенировать признаки из многих предыдущих слоёв.

Минимальный пример

Пусть обычный блок должен преобразовать вход в выход :

Residual-блок делает иначе:

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

Тогда:

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

Практические замечания

При использовании skip connection важно учитывать:

  1. Совпадают ли формы тензоров.
  2. Нужно ли использовать projection shortcut.
  3. Где ставить нормализацию и активацию.
  4. Используется ли сложение или конкатенация.
  5. Не растёт ли число каналов слишком быстро.
  6. Как skip connection влияет на память и вычисления.

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

Связанные понятия

Что знать перед этим

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