Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое градиентный взрыв?
Градиентный взрыв (gradient explosion) — это проблема в обучении глубоких нейронных сетей, когда градиенты ошибки становятся экспоненциально большими во время обратного распространения ошибки (backpropagation). Это приводит к нестабильному обучению и расходимости модели.
Суть проблемы
Во время обратного распространения градиенты умножаются на веса слоёв. Если веса больше 1, то с каждым слоём градиент увеличивается. В глубоких сетях эта кумулятивная операция может привести к очень большим числам:
# Пример: если вес > 1 и слоёв 100
weight = 1.5
layers = 100
gradient = 1.0
for _ in range(layers):
gradient *= weight
print(f"Финальный градиент: {gradient}")
# Результат: градиент станет огромным числом
Практические последствия
- NaN и Inf значения — очень большие градиенты превращаются в бесконечность
- Недообучение — параметры обновляются скачками и пропускают оптимум
- Расходимость обучения — функция потерь растёт вместо уменьшения
- Нестабильность — модель может неожиданно "взорваться"
Решения
1. Gradient Clipping (обрезание градиентов)
Ограничиваем значение градиентов максимумом:
import torch
# Обрезание по норме
torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
# Обрезание по значению
torch.nn.utils.clip_grad_value_(model.parameters(), clip_value=0.5)
2. Нормализация слоёв
Batch Normalization или Layer Normalization стабилизируют активации:
import torch.nn as nn
model = nn.Sequential(
nn.Linear(100, 64),
nn.BatchNorm1d(64),
nn.ReLU(),
nn.Linear(64, 10)
)
3. Инициализация весов
Правильная инициализация предотвращает взрыв с самого начала:
# Xavier инициализация для sigmoid/tanh
nn.init.xavier_uniform_(layer.weight)
# He инициализация для ReLU
nn.init.kaiming_uniform_(layer.weight, nonlinearity=relu)
4. Уменьшение learning rate
Медленное обновление весов снижает скачки:
optimizer = torch.optim.Adam(model.parameters(), lr=1e-4)
5. Архитектурные решения
- Использование Residual connections (ResNet) позволяет градиентам проходить напрямую
- Skip connections упрощают обратное распространение
- LSTM/GRU вместо обычных RNN имеют встроенные механизмы контроля градиентов
Когда это особенно важно
- Очень глубокие сети (>50 слоёв)
- RNN и LSTM на длинных последовательностях
- Обучение с большим learning rate
- Нестабильные задачи (например, с динамичными данными)
Понимание и контроль градиентных потоков — критически важно для успешного обучения современных моделей глубокого обучения.