这篇文章是在ICLR16上面发表的
=====================================
这篇文章主要也就是将初始化的重要性,在我们构建网络的时候,往往要初始化其中的参数 这个文章就对这种初始化的方法给予了比较好的方案
================
首先这个文章是在《Exact solutions to the nonlinear dynamics of learning indeep linear neural networks》上面发展而来的,
有一个比较有意思的结论就是,当网络的层数大于5层之后就非常难训练了,特别是用uniform的初始化。
Benjio在07年的那个文章里面的layer-wise的pre-training非常好,但是也只是比较适用于MLP,对于卷积神经网络好像效果一般。
===========================
然后开始做了,首先是我们需要对所有的网络的权值矩阵进行一个标准化,这个过程可以依靠刚才那片文章里面的方法来实现,比如说:
先用标准正太分布来初始化这个权值矩阵,然后对矩阵进行分解,使其正交化。这个过程可以依靠SVD或者QR分解来做,然后我们取其中任何一个矩阵就行,
如果是QR,就是那个Q,如果是SVD,就是那左边的或者右边的就行,
然后,就要对这个进行进一步的标准化
The LSUV process then estimates output variance of each convolution and inner product layer and scales the weight to make variance equal to one.
整体的算法如下:
其中的blob如下定义:
其实就是这样,为了使输出的var在1左右(有一个容忍度Tolvar),我们必须首先计算在这个W下的输出,然后当输出的var大的时候,我们就将W缩小,然后继续算我们的方法,当方差满足条件 |Var(B L ) − 1.0| ≥ Tol var的时候停止
======================================
最后作者在好几个数据集上面进行测最终发现这种方法非常好。
但是我们需要注意一个地方就是我们现在的这个网络的复杂度可能会提升,以前用Batch Normalization的时候复杂度会提升约30%
注意文章中的Bl指的是输出而不是输入,是让输出方差在1左右
和BN相比这种方法的好处是有了一个来自于的正交化这样比BN只是均值为0 方差为1的好多了
===================
代码
回复列表: