Что такое проблема взрывающегося градиента (Exploding Gradient) в нейронных сетях?

«Что такое проблема взрывающегося градиента (Exploding Gradient) в нейронных сетях?» — вопрос из категории Нейронные сети и Deep Learning, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Проблема взрывающегося градиента — это ситуация в процессе обучения глубоких нейронных сетей (особенно рекуррентных — RNN), когда градиенты функции потерь по параметрам сети в ходе обратного распространения ошибки (backpropagation) становятся аномально большими (стремятся к бесконечности). Это приводит к нестабильному обучению: веса обновляются чрезмерно большими шагами, что вызывает резкие скачки функции потерь и делает сходимость невозможной.

Причина возникновения: Проблема возникает из-за цепного правила при вычислении градиентов в глубоких сетях. Градиент на ранних слоях является произведением градиентов и весов всех последующих слоев. Если веса сети (или их собственные значения) больше 1, это произведение многократно умножается само на себя, приводя к экспоненциальному росту (взрыву) градиента.

Последствия:

  • Веса модели принимают значения NaN ("Not a Number") из-за переполнения числового формата.
  • Модель не сходится, функция потерь демонстрирует резкие скачки.
  • Обучение становится невозможным.

Методы решения:

  1. Обрезка градиента (Gradient Clipping): Самый распространенный и эффективный метод. Мы задаем максимальное пороговое значение (порог) для нормы градиента. Если норма градиента превышает порог, градиент масштабируется вниз.
    # Пример в PyTorch
    torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
  2. Правильная инициализация весов: Использование методов, таких как инициализация Xavier/Glorot или He, которые учитывают размерность слоев и помогают сохранять дисперсию сигналов.
  3. Использование архитектур с механизмами управления потоком: Замена простых RNN на LSTM (Long Short-Term Memory) или GRU (Gated Recurrent Unit). Их внутренние вентили (гейты) специально разработаны для борьбы с проблемой исчезающих/взрывающихся градиентов, позволяя сети запоминать долгосрочные зависимости.
  4. Использование функций активации, устойчивых к градиентам: Например, ReLU и ее вариации (Leaky ReLU) менее подвержены этой проблеме по сравнению с сигмоидой или гиперболическим тангенсом, чьи производные могут быть очень малыми.
  5. Применение методов нормализации: Batch Normalization или Layer Normalization стабилизируют распределение активаций в слоях, что косвенно помогает контролировать масштаб градиентов.