Оптимизация обучения

Gradient Clipping

Обрезка градиента

актуальноТекущий рабочий стандарт

Ограничение нормы градиента перед шагом оптимизатора — простейшая защита от расходимости обучения.

Что означает каждый компонент
  • если норма градиента больше порога τ, вектор укорачивается до τ; направление при этом сохраняется

Ключевые тезисы

  • Обрезка по норме сохраняет направление, обрезка по значению — нет; предпочтительна первая.
  • Типичный порог 1.0 для трансформеров, 5.0 для рекуррентных сетей.
  • Постоянное срабатывание обрезки — признак того, что learning rate слишком велик.
Тема также относится к главам:Глубокое обучениеОбучение

Подробный разбор

2 подтем — раскройте любую, чтобы увидеть объяснение, формулы, примеры и интерактивные графики.

1

Как применять

Порядок операций важен.

loss.backward()
torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
optimizer.step()
optimizer.zero_grad()
На практике

При смешанной точности обрезка выполняется после unscale_ градиентов, иначе порог применяется к масштабированным значениям и не работает.

2

Обрезка как диагностика

Что говорит частота срабатывания.

  • Срабатывает изредка на первых шагах — норма, так и задумано.
  • Срабатывает почти всегда — learning rate слишком велик или в данных есть выбросы.
  • Норма градиента скачет на порядки — ищите битые примеры или деление на ноль в функции потерь.

Логируйте норму градиента как обычную метрику обучения: по ней проблемы видны раньше, чем по кривой потерь.

Связанные темы

Стабильность обучения нейросетей