Узнайте, как взрывные градиенты влияют на глубокое обучение, и откройте для себя проверенные методы смягчения последствий, такие как обрезка градиентов, чтобы обеспечить стабильное обучение для Ultralytics .
Взрывные градиенты возникают во время обучения искусственных нейронных сетей, когда градиенты — значения, используемые для
обновления весов сети — накапливаются и становятся чрезмерно большими. Это явление обычно происходит во время
обратное распространение ошибки (backpropagation), процесс, при котором сеть
вычисляет ошибку и корректирует себя для повышения точности. Когда эти сигналы ошибок многократно умножаются через
глубокие слои, они могут расти экспоненциально, что приводит к массовым обновлениям
веса модели. Эта нестабильность препятствует сходимости модели
, фактически нарушая процесс обучения и часто приводя к тому, что функция потерь дает результат
NaN (Не число) значения.
Чтобы понять, почему градиенты взрываются, полезно взглянуть на структуру архитектур глубокого обучения. В глубоких сетях, таких как рекуррентные нейронные сети (RNN) или очень глубокие сверточные нейронные сети (CNN), градиент для ранних слоев является произведением термов всех последующих слоев. Если эти термы больше 1,0, повторяющееся умножение действует как эффект снежного кома.
Это создает сценарий, в котором оптимизатор предпринимает слишком большие шаги, проходя мимо оптимального решения в пространстве ошибок. Это распространенная проблема при обучении на сложных данных с помощью стандартных алгоритмов, таких как стохастический градиентный спуск (SGD).
Современные разработки в области ИИ используют несколько стандартных методов для предотвращения выхода градиентов из-под контроля, обеспечивая надежное обучение модели.
Проблема взрывного градиента часто обсуждается наряду с ее противоположностью — исчезающим градиентом. Обе проблемы вытекают из правила цепочки дифференцирования, используемого в обратном распространении, но проявляются противоположным образом.
Обработка величины градиента имеет решающее значение для внедрения надежных решений искусственного интеллекта в различных отраслях промышленности.
Хотя библиотеки высокого уровня часто обрабатывают это автоматически, вы можете явно применить обрезку градиента в PyTorch во время пользовательского цикла обучения. Этот фрагмент кода демонстрирует, как обрезать градиенты до того, как оптимизатор обновит веса.
import torch
import torch.nn as nn
# Define a simple model and optimizer
model = nn.Linear(10, 1)
optimizer = torch.optim.SGD(model.parameters(), lr=0.1)
# Simulate a training step
loss = torch.tensor(100.0, requires_grad=True) # Simulated high loss
loss.backward()
# Clip gradients in place to a maximum norm of 1.0
# This prevents the weight update from being too drastic
torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
# Update weights using the safe, clipped gradients
optimizer.step()