1、orthogonal简介

torch.nn.utils.parametrizations.orthogonal模块是PyTorch库中的一个功能,用于对神经网络中的矩阵或一批矩阵应用正交或酉参数化。这种技术主要用于优化网络权重的表示,使其保持正交或酉性质,从而有助于提高网络的训练稳定性和性能。其用途主要有三种:
(1)保持网络权重的正交性或酉性,以保持稳定的特征提取。
(2)提高模型的训练效率和泛化能力。
(3)在特定应用中,如自编码器或循环神经网络,保持权重的正交性可以防止梯度消失或爆炸。

2、orthogonal参数

torch.nn.utils.parametrizations.orthogonal(module, name='weight', orthogonal_map=None, *, use_trivialization=True)

参数介绍

module: 要注册参数化的nn.Module模块。
name: 需要进行正交化的张量的名称,默认为"weight"。
orthogonal_map: 正交映射的类型,可以是"matrix_exp", "cayley", "householder"中的一个。
use_trivialization: 是否使用动态琐碎化框架,默认为True。

3、orthogonal应用

import torch
from torch import nn
from torch.nn.utils.parametrizations import orthogonal
 
# 创建一个线性层
linear_layer = nn.Linear(20, 40)
 
# 对线性层的权重应用正交参数化
orth_linear = orthogonal(linear_layer)
 
# 输出参数化后的线性层
print(orth_linear)
 
# 验证权重的正交性
Q = orth_linear.weight
print(torch.dist(Q.T @ Q, torch.eye(20)))

这段代码首先创建了一个线性层,然后应用了正交参数化。最后,它验证了权重的正交性,输出应接近于零,表示权重矩阵接近正交。