资讯详情

Weight Normalization(WN) 权重归一化

BN/LN/IN/GN都是数据层面的归一化,Weight Normalization(WN)是权值维度的归一化。WN做法是向量权值w 参数向量在其欧氏范数和方向上解耦 v和参数标量 g后使用SGD这两个参数分别优化。

WN也与样本量无关,可应用于batchsize较小以及RNN等待动态网络;另外BN使用的基于mini-batch归一化统计取代全局统计,相当于在梯度计算中引入噪声。而WN没有这个问题,所以在噪声敏感的环境中,如生成模型、加强学习等WN效果也要优于BN。

WN没有额外的参数,这样更节省显存。WN计算效率也优于计算归一化统计BN。

可以认为v是原始权重

v除以v的模,可以得到它的单位方向向量,再乘以g,g是可学习的

原来的权重是v,现在又增加了一个g,新的w保留了v的方向,然后增加了一个学习范围

torch.nn.utils.weight_norm(module, name='weight', dim=0)
import torch from torch import nn layer = nn.Linear(20, 40) m = nn.utils.weight_norm(layer, name='weight') print(m) print(m.weight_g.size()) print(m.weight_v.size()) 

手动实现

import torch from torch import nn input = torch.randn(8, 3, 20) linear = nn.Linear(20, 40, bias=False) wn_layer = nn.utils.weight_norm(linear, name='weight') wn_output = wn_layer(input)  weight_direction = linear.weight / torch.norm(linear.weight, p=2, dim=1, keepdim=True) #二范数 weight_magnitude = wn_layer.weight_g output = input @ (weight_direction.permute(1,0).contiguous() * weight_magnitude.permute(1,0).contiguous()) assert torch.allclose(wn_output, output)

标签: 撕裂传感器限位开关zwn

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台