torch.nn.utils.parametrizations.orthogonal
-
torch.nn.utils.parametrizations.orthogonal(module, name='weight', orthogonal_map=None, *, use_trivialization=True)[исходный код] -
Применяет ортогональную или унитарную параметризацию к матрице или пакету матриц.
Пусть — это или , параметризованная матрица является ортогональной, если
где — эрмитово сопряжённая матрица, если комплексная, и транспонированная матрица, если вещественная, а — единичная матрица
n-мерного пространства. Проще говоря, у будут ортонормированные столбцы, если , и ортонормированные строки в противном случае.Если тензор имеет более двух измерений, мы рассматриваем его как пакет матриц формы
(…, m, n).Матрица может быть параметризована тремя различными
orthogonal_mapисходного тензора:-
"matrix_exp"/"cayley":matrix_exp()и преобразование Кэли применяются к кососимметричной матрице , чтобы получить ортогональную матрицу. -
"householder": вычисляет произведение отражений Хаусхолдера (householder_product()).
"matrix_exp"/"cayley"часто обеспечивают более быструю сходимость параметризованных весов, чем"householder", но медленнее вычисляются для очень узких или очень широких матриц.Если
use_trivialization=True(значение по умолчанию), параметризация реализует «Dynamic Trivialization Framework», в рамках которого дополнительная матрица сохраняется вmodule.parametrizations.weight[0].base. Это способствует сходимости параметризованного слоя ценой дополнительного расхода памяти. См. Тривиализации для оптимизации на многообразиях на основе градиентного спуска.Начальное значение : если исходный тензор не параметризован и
use_trivialization=True(значение по умолчанию), начальным значением становится значение исходного тензора, если он ортогонален (или унитарен в комплексном случае); в противном случае он ортогонализуется с помощью QR-разложения (см.torch.linalg.qr()). То же происходит, когда он не параметризован иorthogonal_map="householder", даже еслиuse_trivialization=False. В противном случае начальным значением становится результат композиции всех зарегистрированных параметризаций, применённых к исходному тензору.Примечание
Эта функция реализована с помощью функциональности параметризации из
register_parametrization().- Параметры:
-
- module (nn.Module) – модуль, для которого регистрируется параметризация.
-
name (str, необязательный) – имя тензора, который нужно сделать ортогональным. Значение по умолчанию:
"weight". -
orthogonal_map (str, необязательный) – один из вариантов:
"matrix_exp","cayley","householder". Значение по умолчанию:"matrix_exp"для квадратной или комплексной матрицы,"householder"в противном случае. -
use_trivialization (bool, необязательный) – использовать ли динамическую тривиализацию. Значение по умолчанию:
True.
- Возвращает:
-
Исходный модуль с ортогональной параметризацией, зарегистрированной для указанного веса
- Тип возвращаемого значения:
Пример:
>>> orth_linear = orthogonal(nn.Linear(20, 40)) >>> orth_linear ParametrizedLinear( in_features=20, out_features=40, bias=True (parametrizations): ModuleDict( (weight): ParametrizationList( (0): _Orthogonal() ) ) ) >>> Q = orth_linear.weight >>> torch.dist(Q.T @ Q, torch.eye(20)) tensor(4.9332e-07) -
© 2026, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://docs.pytorch.org/docs/2.14/generated/torch.nn.utils.parametrizations.orthogonal.html