前置知识之—— 利普希茨连续(Lipschitz continuous)
Lipschitz连续,要求函数图像的曲线上任意两点连线的斜率一致有界,就是任意的斜率都小于同一个常数,这个常数就是Lipschitz常数。
从局部看:我们可以取两个充分接近的点,如果这个时候斜率的极限存在的话,这个斜率的极限就是这个点的导数。也就是说函数可导,又是Lipschitz连续,那么导数有界。反过来,如果可导函数,导数有界,可以推出函数Lipschitz连续。
从整体看:Lipschitz连续要求函数在无限的区间上不能有超过线性的增长,所以这些和函数在无限区间上不是Lipschitz连续的。
记下式为L-Lipschitz.
L2归一化
Spectral Normalization
直观地来说,Lipschitz 条件限制了函数变化的剧烈程度,即函数的梯度。在一维空间中,很容易看出 y=sin(x) 是 1-Lipschitz 的,它的最大斜率是 1。
得到谱范数 σl(W)后,每个参数矩阵上的参数皆除以它,以达到归一化的目的。
Python实现
import torch
from torch.optim.optimizer import Optimizer, required
from torch.autograd import Variable
import torch.nn.functional as F
from torch import nn
from torch import Tensor
from torch.nn import Parameter
def l2normalize(v, eps=1e-12):
return v / (v.norm() + eps)
class SpectralNorm(nn