《Understanding the difficulty of training deep feedforward neural networks》
概要
神经网络难以训练,作者想要读者更好理解:为什么梯度下降法不适用随机初始化权重的神经网络,且怎么设计更好的初始化方法。
作者发现随机化初始化权重时,不适合使用sigmod作为激活函数,因为它均值不为零,前面的hidden layer容易饱和;令人惊讶的时饱和的神经元可以自动变为不饱和,尽管过程很慢。
作者通过观察不同层的激活函数和梯度,提出了新的权重初始化方法,可以更快的是网络收敛。
Sigmod实验
bias初始化为零,权重初始化
n 表示前一层的size(即前一层权重W的列数)
下图是5层网络中,4个隐藏层的激活值随epoc的变化:
通过图片可以看到,最后的隐藏层很快饱和,但是在epoch 100左右,又开始变为不饱和。其它几层的均值大概为0.5,随着训练进行开始变小。
上面这种情况很可能是因为随机初始化权重引起的。输出层为
作者还对比了使用不同激活函数的情况。
代价函数的影响
在逻辑回归或似然估计时,使用softmax输出,cost function为对数函数 −logP(y|x) 比二次代价函数要好。一个2层网络,代价函数随两层网络权重变化如图:
交叉熵代价函数是黑色,二次型代价函数是红色; W1 和 W2 分别表示两层的权重。可以看出二次型代价函数有明显的“平”的区域。
权重初始化
为了便于研究,假设使用线性激活函数 f(x) ,且在零点导数 f′(x)=1 。
对于一层网络
输出的方差
其中
由于 w 和
假设
zi
是第
i
层的输入向量,
可以得到
假设第
i
层的大小为
其中
Var[Wi′]
表示第
i′
层的共享权重的方差,对于
d
层的网络
对于前向传播
对于反向传播:
因此得到:
一个层的输入输出一般不相同,作为折中
对于
因此得到初始化权重: