Проблема взрыва градиентов

Материал из MachineLearning.

Версия от 17:53, 14 июля 2026; Said Mavletov (Обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск
Статья написана с использованием LLM Gemini и доработана участником Said Mavletov 21:53, 14 июля 2026 (MSD)


Проблема взрыва градиентов (gradient exploding problem) — одна из классических трудностей, возникающих при обучении глубоких нейронных сетей (Artificial Neural Networks, ANN) и рекуррентных нейронных сетей (Recurrent Neural Networks, RNN) с помощью алгоритма градиентного спуска (Gradient Descent) и метода обратного распространения ошибки (Backpropagation). Она заключается в лавинообразном, экспоненциальном росте величины градиентов функции потерь по мере их распространения от выходных слоев к входным.

Это явление приводит к численной нестабильности: обновления параметров становятся слишком большими, веса модели совершают резкие колебания или принимают нечисловые значения (not-a-number, \text{NaN} или \pm\infty), из-за чего процесс обучения расходится.

Содержание

История исследования

Проблема нестабильности градиентов начала активно обсуждаться в научном сообществе на рубеже 1980–1990-х годов.

  • В 1986 году Дэвид Румельхарт (David Rumelhart) и соавторы, популяризируя алгоритм обратного распространения ошибки, эмпирически обнаружили сложности с обучением многослойных структур. Формальная теория причин этих сложностей появилась позже.
  • В 1991 году Сепп Хохрайтер (Sepp Hochreiter) в своей дипломной работе формально показал, что при использовании стандартных функций активации градиенты неизбежно либо затухают, либо взрываются.
  • В 1994 году Йошуа Бенджио (Yoshua Bengio) с соавторами математически доказали, что обучение долгосрочным зависимостям в RNN с помощью градиентного спуска является крайне сложной задачей из-за экспоненциальной динамики градиентов.
  • В 2013 году Разван Паскану (Razvan Pascanu) и соавторы провели глубокий анализ динамических систем, лежащих в основе RNN, и предложили практический метод решения — клиппинг градиентов.

Интуитивное объяснение и связь с затуханием градиентов

Чтобы понять суть проблемы, представим простейшую нейронную сеть без нелинейных функций активации, состоящую из d слоев, где на каждом шаге входной сигнал умножается на некоторый скалярный вес w:

\hat{y} = w \cdot w \cdot \dots \cdot w \cdot x = w^d x

По правилу дифференцирования сложной функции производная выхода по весу пропорциональна:

\frac{\partial \hat{y}}{\partial w} = d \cdot w^{d-1} \cdot x

При большой глубине сети (например, d = 100) поведение градиента критически зависит от величины w:

  1. Если |w| < 1 (например, w = 0.9), то производная стремится к нулю (\approx 0.00003). Это Проблема затухания градиентов (Gradient Vanishing Problem).
  2. Если |w| > 1 (например, w = 1.1), то производная экспоненциально возрастает (1.1^{99} \approx 12527). Это и есть взрыв градиентов.

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

Математический анализ проблемы

Рассмотрим глубокую полносвязную нейронную сеть прямого распространения с d слоями:

z_l = W_l a_{l-1} + b_l,
a_l = \sigma(z_l),

где W_l — матрица весов, \sigmaФункция активации (Activation Function).

Градиент функции потерь L по весам первого слоя W_1 вычисляется через цепное правило:

\frac{\partial L}{\partial W_1} = \frac{\partial L}{\partial z_d} \left( \prod_{t=2}^d \frac{\partial z_t}{\partial z_{t-1}} \right) \frac{\partial z_1}{\partial W_1}

Произведение матриц Якоби (Jacobians) перехода между слоями имеет вид:

\prod_{t=2}^d \frac{\partial z_t}{\partial z_{t-1}} = \prod_{t=2}^d W_t D_{t-1}

где D_{t-1} = \operatorname{diag}(\sigma'(z_{t-1})) — диагональная матрица производных функции активации.

Норма этого произведения ограничена сверху:

\left\| \frac{\partial z_d}{\partial z_1} \right\| \le \prod_{t=2}^d \|W_t\| \|D_{t-1}\|

Так как производные большинства популярных функций активации ограничены (например, у sigmoid максимум равен 0.25, а у ReLU производная почти всюду равна 0 или 1, хотя в нуле не определена), главной причиной взрыва градиентов становятся нормы весовых матриц W_t. Если они существенно больше единицы, норма итогового градиента будет расти экспоненциально с ростом глубины d.

Особенности в рекуррентных сетях (RNN)

В RNN ситуация усугубляется переиспользованием одной и той же матрицы скрытого состояния W_{hh} на каждом шаге по времени. При применении алгоритма Обратное распространение ошибки во времени (BPTT) для последовательности длины T возникает произведение:

\frac{\partial h_T}{\partial h_1} = \prod_{t=2}^T W_{hh} D_t

Одним из важных факторов, способствующих взрыву градиентов в этом случае, является превышение спектральным радиусом \rho(W_{hh}) (максимальным по модулю собственным значением) единицы.

Практическая диагностика

Взрыв градиентов можно диагностировать по следующим признакам:

  1. Появление NaN или Inf: Значение функции потерь (loss) внезапно принимает нечисловое значение из-за арифметического переполнения при вычислении градиентов или обновлении весов.
  2. Аномальный график функции потерь: Loss демонстрирует резкие, многократные скачки (spikes) вверх, после которых модель может перестать обучаться.
  3. Экспоненциальный рост нормы градиента: При мониторинге нормы вектора градиентов \|g\|_2 наблюдается её лавинообразный рост на несколько порядков.

Методы снижения влияния проблемы

Процедурные методы

Наиболее распространенным подходом в инженерии является принудительное ограничение градиентов — Gradient Clipping. Чаще всего используется клиппинг по норме (Norm Clipping), который сохраняет направление вектора:

g \leftarrow \begin{cases} g, & \|g\|_2 \le c \\ c \frac{g}{\|g\|_2}, & \|g\|_2 > c \end{cases}

Также существенную роль играет Нормализация по батчам (Batch Normalization) и Нормализация слоев (Layer Normalization). Стабилизируя распределение активаций, они способствуют более стабильной оптимизации и косвенно уменьшают риск нестабильности, позволяя использовать большие шаги обучения (learning rate).

Архитектурные методы

  • Остаточные связи (Residual Connections): Внедрение аддитивных связей (a_l = \mathcal{F}(a_{l-1}) + a_{l-1}) в сетях типа ResNet существенно уменьшает влияние проблемы. При дифференцировании появляется единичная матрица, позволяющая градиенту проходить в обход нелинейных преобразований.
  • Модифицированные RNN (LSTM / GRU): Архитектуры LSTM и GRU используют механизмы вентилей (gates) и аддитивный канал состояния ячейки (cell state), что делает протекание градиентов во времени более устойчивым.
  • Архитектура Transformer: В современных моделях Transformer проблема взрыва градиентов выражена гораздо слабее. Это достигается за счет комбинации сквозных остаточных связей, обязательного использования LayerNorm и грамотной инициализации весов.

Практические рекомендации

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

  • Правильную инициализацию (Xavier или He);
  • Современные адаптивные оптимизаторы с регуляризацией (например, AdamW);
  • Клиппинг градиентов (например, clip_grad_norm_ в PyTorch);
  • Методы нормализации (LayerNorm или BatchNorm);
  • Архитектурные решения с остаточными связями.

Пример использования клиппинга в PyTorch перед шагом оптимизатора:

torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
optimizer.step()

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

Литература

  • Goodfellow I., Bengio Y., Courville A. Deep Learning. — MIT Press, 2016.
  • Bengio Y., Simard P., Frasconi P. Learning long-term dependencies with gradient descent is difficult // IEEE Transactions on Neural Networks. — 1994. — Т. 5. — № 2. — С. 157–166.
  • Hochreiter S. Untersuchungen zu dynamischen neuronalen Netzen // Diploma thesis, Institut für Informatik, Technische Universität München. — 1991.
  • Pascanu R., Mikolov T., Bengio Y. On the difficulty of training recurrent neural networks // International Conference on Machine Learning (ICML). — 2013. — С. 1310–1318.
  • Glorot X., Bengio Y. Understanding the difficulty of training deep feedforward neural networks // AISTATS. — 2010. — С. 249–256.
  • He K., Zhang X., Ren S., Sun J. Deep residual learning for image recognition // CVPR. — 2016. — С. 770–778.