[论文笔记] [2010] Understanding the Difficulty of Training Deep Feedforward Neural Networks

这篇论文主要是从参数初始化和**函数的角度,通过实验中观察网络在训练迭代时每层的 activations 和 gradients,来探究训练深层模型困难的原因,并提出了一种新的参数初始化方式来加快模型训练时的收敛。

Effect of Activation Functions and Saturation During Training

sigmoid **函数在之前已经被证明会减慢学习的速度,如果再采用随机初始化参数(这里的随机是服从均匀分布 U[1n,1n]U\left[-\frac{1}{\sqrt{n}}, \frac{1}{\sqrt{n}}\right])的方式,它会使得深层网络的训练效果很差(优化的很差)并且泛化能力很差(在测试集上的表现也很差)。下图是观察采用 sigmoid **函数的模型训练过程中,其每一层神经元的 activation value 的均值和标准差。

[论文笔记] [2010] Understanding the Difficulty of Training Deep Feedforward Neural Networks
上图可以看到一个很神奇的现象,最后一层的神经元瞬间饱和了,并且这个饱和的状态持续了很久;当第一层的神经元开始趋向饱和了,最后一层才逐渐脱离饱和的状态。作者猜测这种现象就是由于 random initialization + sigmoid function 搭配使用导致的,如果采用 pre-training 的方式初始化参数就不会出现这种现象。

作者给出的解释基于一个假设 “the transformation that the lower layers of the randomly initialized network computes initially is not useful to the classification task”,那么softmax层 softmax(b+Wh)\mathrm{softmax}(b+Wh) , 较之隐层的**值 hh,更依赖于 bb。这也就使得前面训练时会迫使 WhWh 为 0,而这可以通过迫使 hh 为 0 来实现(这也就解释了为什么一开始最后一层的神经元就立马饱和了)。在采用 tanh 或者 softsign **函数时,隐层的**值为 0,其反向传播的梯度是不为 0 的,而采用了 sigmoid **函数时,隐层的**值为 0,也就意味着神经元饱和了(实则死亡)。这会导致梯度难以反向传播,lower layers 的参数就难以更新去学习到有用的特征。

虽然在随着训练迭代,最后一层的神经元开始脱离饱和的状态,lower layers 也开始学习有用的特征,但这个过程非常缓慢,并且最后优化的效果很差,模型的泛化能力也很差。那既然上面的问题是由随机初始化和**函数搭配使用引起的,那是不是可以考虑另外的**函数或者初始化方式。文中是提到softsign 能较好的避免上述问题;那么从初始化方式上考虑呢,**函数该搭配怎么样的初始化方式?设计出来的初始化方式应该符合怎么样的条件才是好的?

Studying Gradients and their Propagation

这里有个说法,就是训练过程中,为了保持网络信息流动,网络中逐层的 activation values 和反向传播梯度的方差都应该尽可能的相等(在一个量级上),用公式表示就是:
(i,i),Var[zi]=Var[zi](i,i),Var[Costsi]=Var[Costsi] \forall (i,i'), Var[z^i] = Var[z^{i'}] \\ \forall (i,i'), Var[\frac{\partial Cost}{\partial s^i}] = Var[\frac{\partial Cost}{\partial s^{i'}}]

既然有了"标准",那就可以来看看怎样的初始化能符合这个"标准"。可以先看看每一层 activation values 的方差,具体推导可见 [1] [2]:
Var[zi]=Var[x]i=0i1niVar[Wi] Var[z^i] = Var[x] \prod_{i'=0}^{i-1}{n_{i'}Var[W^{i'}]}
其中 Var[Wi]Var[W^{i'}] 是 layer ii' 所有权值的方差。考虑网络有 dd 层,那么看看每一层反向传播梯度的方差,具体推导也见 [1] [2]:
Var[Costsi]=Var[Costsd]i=1dni+1Var[Wi],Var[Costwi]=i=0i1niVar[Wi]i=1d1ni+1Var[Wi]×Var[x]Var[Costsd] Var[\frac{\partial Cost}{\partial s^i}] = Var[\frac{\partial Cost}{\partial s^d}] \prod_{i' = 1}^d{n_{i'+1}Var[W^{i'}]}, \\ Var[\frac{\partial Cost}{\partial w^i}] = \prod_{i' = 0}^{i-1} n_{i'} Var[W^{i'}] \prod_{i'=1}^{d-1}{n_{i'+1}Var[W^{i'}]} \times Var[x]Var[\frac{\partial Cost}{\partial s^d}]
需要注意的是,其中 Var[x]Var[x] 是常数,那么要符合上面"标准",则需满足下面两个条件:
i,niVar[Wi]=1i,ni+1Var[Wi]=1 \forall i, n_iVar[W^i] = 1 \\ \forall i, n_{i+1} Var[W^i] = 1
可以将上面两个条件合并得到:
i,Var[Wi]=2ni+ni+1 \forall i, Var[W^i] = \frac{2}{n_i + n_{i+1}}
即可以设计一种新的初始化方式,即论文中提到的 normalized initialization:
WU[6nj+nj+1,6nj+nj+1] W \sim U\left[ -\frac{\sqrt{6}}{\sqrt{n_j+n_{j+1}}}, \frac{\sqrt{6}}{\sqrt{n_j+n_{j+1}}} \right]

值得注意的是,如果每一层的 width 相等,并且每一层采用同样的初始化方式,可以得到一个有趣的性质:
i,Var[Costsi]=[nVar[W]]diVar[x]i,Var[Costwi]=[nVar[W]]dVar[x]Var[Costsd] \forall i, Var[\frac{\partial Cost}{\partial s^i}] = \left[ nVar[W]\right]^{d-i}Var[x] \\ \forall i, Var[\frac{\partial Cost}{\partial w^i}] = \left[ nVar[W]\right]^dVar[x] Var\left[\frac{\partial Cost}{\partial s^d}\right]
可以看到权值梯度的方差对于每一层来说是相等的,而反向传播梯度的方差在深层网络中仍可能会消失或者爆炸。下面的实验结果也可以看到,在不采用 normalized initialization 的情况下,初始的反向传播梯度的方差每一层是不一样,而权值的方差在两种情况下,每一层近乎相等的。另外可以看到,在采用了 normalized initialization 后反向传播的方差每一层就近乎相等了。

[论文笔记] [2010] Understanding the Difficulty of Training Deep Feedforward Neural Networks
[论文笔记] [2010] Understanding the Difficulty of Training Deep Feedforward Neural Networks

总结

这篇主要是实验分析为主,可以得到几个比较重要的结论:

  • sigmoid 和 tanh **函数搭配常规随机初始化方式,会使得模型收敛效果较差;
  • softsign **函数较之上面两个**函数会使得模型更鲁棒,因为 softsign 的非线性更缓和;
  • tanh 搭配 normalized initialization 较优;
  • 保持层与层之间**值和梯度的良好流动非常有用。

参考文献

[1] 深度学习——Xavier初始化方法, https://blog.****.net/shuzfan/article/details/51338178
[2] 《Understanding the difficulty of training deep feedforward neural networks》笔记, https://blog.****.net/kangroger/article/details/61414426
[3] 《Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification》阅读笔记与实现, https://blog.****.net/happynear/article/details/45440811
[4] He, Kaiming, et al. “Delving deep into rectifiers: Surpassing human-level performance on imagenet classification.” Proceedings of the IEEE international conference on computer vision. 2015.