前言:为什么要Normalization
深度学习是一种在给定数据的情况下,学习求解目标函数最小化或者最大化的模型。在深度网络中,模型参数往往包含了大量的weights和biases。在求解优化模型的时候,通常是利用一阶梯度的求解来更新网络的权重。
众所周知,优化深度网络时需要通过计算一阶梯度,而目标函数的曲率会极大的影响优化的难易度。如果目标函数的Hessian矩阵的条件数太低,将会表现出一种病理曲率的问题,其结构就是早晨一阶梯度下降会遇到问题。
(注:条件数:在数值分析领域,一个函数关于一个参数的条件数(Condition Number)测量了函数的输出值相对于输入参数的变化强度。这用来测量一个函数相对于输入变化或误差有多敏感,以及输出结果相对于输入中的误差的误差变化。)
然而一个目标函数的曲率并不是对重参数不变的,因此可以采取相同模型中多种等效的重参数方法来使得目标函数的优化空间的曲率更加的平滑。寻找一种好的重参数方法在深度学习中起着至关重要的作用。
(这里插一句题外话,作为CV领域常用的normalization, Batch Normalization,一开始Google在2013的论文声称其本质是解决ICS问题,然而最新的论文表明BN并没有解决ICS问题,其解决的是对目标函数空间增加了平滑约束,从而使得利用更大的学习率获得更好的局部优解)
Weight Normalization
对于人工神经网络中的一个神经元来说,其输出yyy表示为:
y=ϕ(wx+b)y=\phi(\bm{wx}+b)y=ϕ(wx+b)
其中w\bm{w}w是k维权重向量,bbb是标量偏差,x\bm{x}x是k维输入特征,ϕ(.)\phi(.)ϕ(.)是激活函数。
WN的重参数表示:对权重w\bm{w}w用参数向量v和标量g进行表示,则新参数表示为:
w=g∥v∥v\bm{w}=\frac{g}{\|\bm{v}\|}\bm{v}w=∥v∥gv
其中v\bm{v}v是k维向量,g是标量,∥v∥\|\bm{v}\|∥v∥为v\bm{v}v的欧式范数。我们注意到,此时w\bm{w}w则被重参数为v\bm{v}v和g两个参数。
通过上述重参数表示,我们可以发现∥w∥=g\|\bm{w}\| =g∥w∥=g,与参数v\bm{v}