权重归一化weight_norm
神经网络权重归一化weight_norm
1. 权重归一化原理
对于网络中一神经元,其输入为 x,输出为 y,计算过程为
y=ϕ(ω∗x+b)y=\phi(\omega *x+b)y=ϕ(ω∗x+b)
ω\omegaω为与该神经元连接的权重,通过损失函数与梯度下降对网络进行优化的过程就是求解最优ω\omegaω的过程。将ω\omegaω的长度与方向解耦,可以将ω\omegaω表示为
ω=gv∣∣v∣∣,\omega = g\frac{v}{||v||},ω=g∣∣v∣∣v,
其中ggg为标量,其大小等于ω\omegaω的模长,v∣∣v∣∣\frac{v}{||v||}∣∣v∣∣v为与ω\omegaω同方向的单位向量,此时,原先训练过程中ω\omegaω的学习转化为ggg和vvv的学习。假设损失函数以LLL表示,则LLL对ggg和vvv的梯度可以分别表示为,
∇gL=∇gω∗(∇ωL)T=∇ωL∗vT∣∣v∣∣\nabla_gL=\nabla_g \omega * (\nabla_\omega L)^T = \frac{\nabla_\omega L*v^T}{||v||}∇gL=∇gω∗(∇ωL)T=∣∣v∣∣∇ωL∗vT
∇vL=∇vω∗∇ωL=∂g∗v∣∣v∣∣∂v∗∇ωL=g∗∣∣v∣∣∣∣v∣∣2∗∇ωL−g∗v∗∂∣∣v∣∣∂v∣∣v∣∣2∗∇ωL\nabla_vL = \nabla_v\omega*\nabla_\omega L=\frac{\partial \frac{g*v}{||v||}}{\partial v}*\nabla_\omega L=\frac{g*||v||}{||v||^2}*\nabla_\omega L-\frac{g*v*\frac{\partial||v||}{\partial v}}{||v||^2}*\nabla_\omega L∇vL=∇vω∗∇ωL=∂v∂∣∣v∣∣g∗v∗∇ωL=∣∣v∣∣2g∗∣∣v∣∣∗∇ωL−∣∣v∣∣2g∗v∗∂v∂∣∣v∣∣∗∇ωL
因为
∂∣∣v∣∣∂v=∂(vT∗v)0.5∂v=0.5∗(vT∗v)−0.5∗∂(vT∗v)∂v=v∣∣v∣∣,\frac{\partial||v||}{\partial v}=\frac{\partial (v^T*v)^{0.5}}{\partial v}=0.5*(v^T*v)^{-0.5}*\frac{\partial (v^T*v)}{\partial v}=\frac{v}{||v||},∂v∂∣∣v∣∣=∂v∂(vT∗v)0.5=0.5∗(vT∗v)−0.5∗∂v∂(vT∗v)=∣∣v∣∣v,
所以
∇gL=g∣∣v∣∣∗∇ωL−g∗∇gL∣∣v∣∣2∗v=g∣∣v∣∣∗Mω∗∇ωL,\nabla_gL = \frac{g}{||v||}*\nabla_\omega L-\frac{g*\nabla_g L}{||v||^2}*v=\frac{g}{||v||}*M_\omega*\nabla_\omega L,∇gL=∣∣v∣∣g∗∇ωL−∣∣v∣∣2g∗∇gL∗v=∣∣v∣∣g∗Mω∗∇ωL,
其中Mω=I−ω∗ωT∣∣ω∣∣2M_\omega=I-\frac{\omega*\omega^T}{||\omega||^2}Mω=I−∣∣ω∣∣2ω∗ωT,与向量点乘可以投影任意向量至ω\omegaω的补空间,相对于原先的∇ωL\nabla_\omega L∇ωL,∇vL\nabla_v L∇vL进行了g∣∣v∣∣\frac{g}{||v||}∣∣v∣∣g的缩放以及MωM_\omegaMω的投影,两者对优化过程都起到作用。
2. Pytorch中weight normalization的使用
import torch
import torch.nn as nn
net = nn.Linear(200,10)
net.weight.data
nn.utils.weight_norm(net, name='weight')
net.weight_g.size(),net.weight_v.size()
更多推荐


所有评论(0)