Проблема взрыва градиентов
Материал из MachineLearning.
| | Статья написана с использованием 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, или
), из-за чего процесс обучения расходится.
Содержание |
История исследования
Проблема нестабильности градиентов начала активно обсуждаться в научном сообществе на рубеже 1980–1990-х годов.
- В 1986 году Дэвид Румельхарт (David Rumelhart) и соавторы, популяризируя алгоритм обратного распространения ошибки, эмпирически обнаружили сложности с обучением многослойных структур. Формальная теория причин этих сложностей появилась позже.
- В 1991 году Сепп Хохрайтер (Sepp Hochreiter) в своей дипломной работе формально показал, что при использовании стандартных функций активации градиенты неизбежно либо затухают, либо взрываются.
- В 1994 году Йошуа Бенджио (Yoshua Bengio) с соавторами математически доказали, что обучение долгосрочным зависимостям в RNN с помощью градиентного спуска является крайне сложной задачей из-за экспоненциальной динамики градиентов.
- В 2013 году Разван Паскану (Razvan Pascanu) и соавторы провели глубокий анализ динамических систем, лежащих в основе RNN, и предложили практический метод решения — клиппинг градиентов.
Интуитивное объяснение и связь с затуханием градиентов
Чтобы понять суть проблемы, представим простейшую нейронную сеть без нелинейных функций активации, состоящую из слоев, где на каждом шаге входной сигнал умножается на некоторый скалярный вес
:
По правилу дифференцирования сложной функции производная выхода по весу пропорциональна:
При большой глубине сети (например, ) поведение градиента критически зависит от величины
:
- Если
(например,
), то производная стремится к нулю (
). Это Проблема затухания градиентов (Gradient Vanishing Problem).
- Если
(например,
), то производная экспоненциально возрастает (
). Это и есть взрыв градиентов.
Обе проблемы имеют общую природу и часто рассматриваются совместно. Основную роль в их возникновении играют спектральные свойства произведения операторов, включающего весовые матрицы и производные функций активации, а также структура сети и методы нормализации.
Математический анализ проблемы
Рассмотрим глубокую полносвязную нейронную сеть прямого распространения с слоями:
где — матрица весов,
— Функция активации (Activation Function).
Градиент функции потерь по весам первого слоя
вычисляется через цепное правило:
Произведение матриц Якоби (Jacobians) перехода между слоями имеет вид:
где — диагональная матрица производных функции активации.
Норма этого произведения ограничена сверху:
Так как производные большинства популярных функций активации ограничены (например, у sigmoid максимум равен 0.25, а у ReLU производная почти всюду равна 0 или 1, хотя в нуле не определена), главной причиной взрыва градиентов становятся нормы весовых матриц . Если они существенно больше единицы, норма итогового градиента будет расти экспоненциально с ростом глубины
.
Особенности в рекуррентных сетях (RNN)
В RNN ситуация усугубляется переиспользованием одной и той же матрицы скрытого состояния на каждом шаге по времени. При применении алгоритма Обратное распространение ошибки во времени (BPTT) для последовательности длины
возникает произведение:
Одним из важных факторов, способствующих взрыву градиентов в этом случае, является превышение спектральным радиусом (максимальным по модулю собственным значением) единицы.
Практическая диагностика
Взрыв градиентов можно диагностировать по следующим признакам:
- Появление NaN или Inf: Значение функции потерь (loss) внезапно принимает нечисловое значение из-за арифметического переполнения при вычислении градиентов или обновлении весов.
- Аномальный график функции потерь: Loss демонстрирует резкие, многократные скачки (spikes) вверх, после которых модель может перестать обучаться.
- Экспоненциальный рост нормы градиента: При мониторинге нормы вектора градиентов
наблюдается её лавинообразный рост на несколько порядков.
Методы снижения влияния проблемы
Процедурные методы
Наиболее распространенным подходом в инженерии является принудительное ограничение градиентов — Gradient Clipping. Чаще всего используется клиппинг по норме (Norm Clipping), который сохраняет направление вектора:
Также существенную роль играет Нормализация по батчам (Batch Normalization) и Нормализация слоев (Layer Normalization). Стабилизируя распределение активаций, они способствуют более стабильной оптимизации и косвенно уменьшают риск нестабильности, позволяя использовать большие шаги обучения (learning rate).
Архитектурные методы
- Остаточные связи (Residual Connections): Внедрение аддитивных связей (
) в сетях типа 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.

