Комментарии (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
- Нестабильные задачи (например, с динамичными данными)
Понимание и контроль градиентных потоков — критически важно для успешного обучения современных моделей глубокого обучения.
Похожие вопросы
- Как напишешь system design для веб-краулера?
- Что такое transfer learning?
- Что такое Attention?
- Как обучить модель предсказывать распределение, а не одно число?
- Что такое mixed precision training?
- На чем основан механизм внимания у трансформеров
- Какая математическая идея диффузионных моделей?
- Какая будет размерность градиента при обучении линейной регрессии?
- Как выбиралась модель в рабочем ML-проекте?
- Как работает FAISS?
- Какие знаешь архитектуры энкодера?
- Что произойдет в бустинге, если изменить глубину деревьев при их неизменном количестве?
- Как определить влияют ли офлайн-метрики на онлайн-метрики?
- Как быстро отранжировать вектора по близости к запросу?
- Градиентный бустинг vs Random Forest: что произойдёт при удалении первого дерева?
- В каких случаях ROC AUC плохо оценивает качество классификатора
- Что такое cold start problem в рекомендациях?
- Что такое seq2seq архитектура?
- Что такое RoI Pooling и RoI Align? Для чего они нужны?
- Какие плюсы и минусы интерпретируемых ЯП?