РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
569 of 769 menu

Функция clip_grad_norm

Функция clip_grad_norm выполняет нормирование градиентов параметров модели, ограничивая их суммарную норму заданным порогом. Она принимает на вход итерируемый объект параметров модели, максимально допустимую норму градиентов и тип нормы. В отличие от функции clip_grad_norm_, данная функция возвращает значение нормы градиентов до их ограничения, не изменяя сами градиенты.

Синтаксис

torch.nn.utils.clip_grad_norm(parameters, max_norm, norm_type=2.0)

Параметры функции:

parameters - итерируемый объект параметров модели (например, результат вызова model.parameters);

max_norm - максимально допустимая норма градиентов (положительное число);

norm_type - тип нормы (по умолчанию 2.0 - евклидова норма).

Пример

Давайте создадим простую модель и вычислим градиенты, а затем применим нормирование:

import torch import torch.nn as nn torch.manual_seed(0) model = nn.Linear(10, 5) x = torch.randn(1, 10) y = model(x) loss = y.sum() loss.backward() total_norm = torch.nn.utils.clip_grad_norm(model.parameters(), max_norm=1.0) print(total_norm)

Результат выполнения кода:

tensor(0.8408)

Функция вернула норму градиентов до их ограничения, которая оказалась меньше порога 1.0, поэтому градиенты не были изменены.

Пример

Давайте рассмотрим случай, когда норма градиентов превышает заданный порог:

import torch import torch.nn as nn torch.manual_seed(42) model = nn.Linear(10, 5) x = torch.randn(1, 10) y = model(x) loss = y.sum() * 100 loss.backward() total_norm = torch.nn.utils.clip_grad_norm(model.parameters(), max_norm=1.0) print(total_norm)

Результат выполнения кода:

tensor(8.6087)

Значение нормы значительно превышает порог 1.0, поэтому градиенты будут масштабированы коэффициентом 1.0 / total_norm, что эквивалентно их нормированию.

Пример

Давайте используем нормирование с другим типом нормы (L-бесконечность):

import torch import torch.nn as nn torch.manual_seed(7) model = nn.Linear(10, 5) x = torch.randn(1, 10) y = model(x) loss = y.sum() * 50 loss.backward() total_norm = torch.nn.utils.clip_grad_norm(model.parameters(), max_norm=2.0, norm_type=float('inf')) print(total_norm)

Результат выполнения кода:

tensor(1.0480)

При использовании L-бесконечности норма вычисляется как максимальное абсолютное значение градиента среди всех параметров.

Смотрите также

  • функцию clip_grad_norm_,
    которая выполняет нормирование градиентов с изменением их значений
  • функцию clip_grad_value_,
    которая обрезает градиенты по абсолютному значению
  • функцию SGD,
    которая представляет оптимизатор стохастического градиентного спуска
  • функцию Adam,
    которая реализует алгоритм адаптивной оценки момента
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить