Потеря градиента (Vanishing Gradient): почему глубокое обучение страдает от «кратковременной амнезии»
1. Введение: "Господин директор, я не слышу ваш голос!"
В прошлый раз мы узнали, как обратное распространение ошибки (Backpropagation) передаёт ошибку (Loss) от выходного слоя к входному. Теоретически, чем глубже слои, тем сложнее задачи они могут решать.
Однако до начала 2000‑х годов глубокое обучение находилось в темноте. При добавлении 10, 20 слоёв производительность падала, а иногда обучение вовсе прекращалось.
Пример:
- CEO (выходной слой): "Эй! Почему качество продукта так низкое? (Loss)"
- Руководители → менеджеры → супервайзеры…: сигнал должен проходить вниз,
- Новичок (входной слой): "...что вы сказали? Я ничего не слышал!"
Параметры, отвечающие за фундаментальные операции в передней части (входной слой), не обновляются. Это и есть потеря градиента (Vanishing Gradient).
2. Анализ причин: виновники – «Сигмоида» и «умножение»
Почему сигнал исчезает? Виноваты стандартные функции активации, которые мы считали нормой, и математические свойства цепного правила.
(1) Предательство сигмоиды: «слишком плотный фильтр»
Исследователи любили сигмоиду, потому что она выдаёт значения между 0 и 1, как вероятность спайка нейрона. Но с точки зрения разработчика сигмоида – это «сжатие», которое искажает вход.
- Проблема 1: верхняя граница градиента (Max Gradient = 0.25)
- Производная сигмоиды достигает максимум 0.25 только при x = 0.
- При небольших изменениях x градиент стремится к 0.
- Это как микрофон, выставленный на минимум: даже громко вы кричите, слышится шепот.
(2) Трагедия цепного правила: «0.25 в степени N»
Обучение основано на обновлении весов: w = w – (learning_rate * gradient). Градиент должен существовать.
В обратном распространении градиенты умножаются слои за слоем. При 30 слоях даже при идеальном 0.25 результат будет:
$$0.25 \times 0.25 \times \dots \times 0.25 \,(30\text{ раз}) \approx 8\times10^{-19}$$
- Результат: градиент вблизи входного слоя становится меньше, чем может представить компьютер, и становится 0 (Underflow).
- Проблема: обновление весов превращается в w = w – 0, обучение останавливается.
- Это как сеть с 99.99 % потерей пакетов: ошибки не доходят до передней части.
3. Решение 1: ReLU – «переходим от аналогового к цифровому»
Герой, который решил эту проблему, – простая функция ReLU (Rectified Linear Unit).
(1) Революция производной: «1 или 0»
Код ReLU:
def relu(x):
return max(0, x)
Производная:
- x > 0 (активировано): градиент 1.
- x ≤ 0 (неактивировано): градиент 0.
Почему это важно? В положительной области сигнал не уменьшается при умножении.
$$1 \times 1 \times 1 \times \dots \times 1 = 1$$
ReLU пропускает сигнал без потерь, поэтому крик CEO доходит до новичка с градиентом 1.
(2) Оптимизация производительности: exp() vs if
Сигмоида использует экспоненциальные функции, которые тяжело вычислять на CPU/GPU. ReLU – простое сравнение (if x > 0), что делает её значительно быстрее.
(3) Предупреждение: Dying ReLU
Если вход всегда отрицательный, градиент становится 0 и нейрон «умирает». Для этого появились варианты, такие как Leaky ReLU, которые дают небольшую наклонную часть.
4. Решение 2: ResNet (Residual Network) – «создаём горячую линию»
ReLU позволила строить сети до 20–30 слоёв, но желание добавить 100, 1000 слоёв снова привело к проблемам. Решением стал ResNet.
(1) Идея: «учись только разнице»
Обычная сеть пытается построить полную функцию H(x). ResNet вводит «пропускной» связь:
$$Output = F(x) + x$$
Это значит: модель учится только крошечной разнице (Residual), а оригинальный вход передаётся напрямую.
(2) Быстрый путь обратного распространения
При дифференцировании сумма имеет свойство распределения:
$$\frac{\partial Output}{\partial x} = \frac{\partial F(x)}{\partial x} + 1$$
Независимо от того, как сильно F(x) уменьшает градиент, всегда сохраняется +1, который проходит к входу. Это как «быстрая дорога» для градиента.
- Без ResNet: если градиент исчезает, обучение останавливается.
- С ResNet: даже если F(x) даёт 0, +1 сохраняет поток.
Благодаря этому можно строить сети из 152, даже 1000 слоёв.
5. Вывод: победа инженерии над «зимним» глубоким обучением
Проблема потери градиента казалась теоретическим пределом, но решения оказались инженерными, а не математическими.

- ReLU: убирает сложные вычисления, оставляя линейность.
- ResNet: открывает «короткие пути» для градиента.
Современные архитектуры – Transformer, CNN и др. используют эти два принципа как базовые инструменты.
Когда вы видите в коде return x + layer(x), помните: это установка «подвески» (Shortcut), чтобы градиент не исчезал.
"А, я установил защиту от потери градиента. Теперь могу спокойно строить глубокие сети!"
Комментариев нет.