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 и другие глубокие CNN;
- трансформеры;
- diffusion U-Net в диффузионных моделях;
- автоэнкодеры и U-Net-подобные архитектуры;
- глубокие MLP-блоки;
- residual blocks в разных нейросетях.
В 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 важно учитывать:
- Совпадают ли формы тензоров.
- Нужно ли использовать projection shortcut.
- Где ставить нормализацию и активацию.
- Используется ли сложение или конкатенация.
- Не растёт ли число каналов слишком быстро.
- Как skip connection влияет на память и вычисления.
В большинстве современных глубоких архитектур skip connection — почти обязательный элемент, потому что он резко упрощает обучение глубоких сетей.