1 反向传播
在训练神经网络时,正向传播和后向传播相互依赖。对于正向传播,我们沿着依赖的方向遍历计算图并计算其路径上的所有变量。然后将这些用于反向传播,其中计算顺序与计算图的相反。以上述简单网络为例进行说明。一方面,在正向传播期间计算正则项取决于模型参数 W(1) 和 W(2) 的当前值。它们是由优化算法根据最近迭代的反向传播给出的。另一方面,反向传播期间参数 的梯度计算取决于由正向传播给出的隐藏变量 h 的当前值。因此,在训练神经网络时,在初始化模型参数后,我们交替使用正向传播和反向传播,利用反向传播给出的梯度来更新模型参数。注意,反向传播复用正向传播中存储的中间值,以避免重复计算。带来的影响之一是我们需要保留中间值,直到反向传播完成。这也是为什么训练比单纯的预测需要更多的内存(显存)的原因之一。此外,这些中间值的大小与网络层的数量和批量的大小大致成正比。因此,使用更大的批量来训练更深层次的网络更容易导致内存(显存)不足错误。
2 梯度问题
(1) 多层神经网络就是从输入层到输出层一直求偏导数的过程,如果导数的值一直大于1那么求n次以后会引起梯度爆炸,同样梯度小于1则会引起梯度消失
(2) 选择可以与非线性激活函数的选择以有趣的方式结合在一起。我们选择哪个函数以及如何初始化参数可以决定优化算法收敛的速度有多快。糟糕选择可能会导致我们在训练时遇到梯度爆炸或梯度消失。
(3)不稳定梯度带来的风险不止在于数值表示。不稳定梯度也威胁到我们优化算法的稳定性。我们可能面临一些问题。 要么是 梯度爆炸(gradient exploding)问题:参数更新过大,破坏了模型的稳定收敛; 要么是 梯度消失(gradient vanishing)问题:参数更新过小,在每次更新时几乎不会移动,导致无法学习。
3 数值稳定性
(1) 如果训练了前几个epoch之后验证集的准确率就稳定不变了通常是选取的模型数值稳定性有问题
(2)一般来说ReLU比sigmoid拥有更好的数值稳定性因此,更稳定(但在神经科学的角度看起来不太合理)的ReLU系列函数已经成为从业者的默认选择。
4如何让数值稳定
解决(或至少减轻)上述问题的一种方法是仔细地进行初始化。优化期间的注意和适当的正则化可以进一步提高稳定性
使用正态分布来初始化权重值。如果我们不指定初始化方法,框架将使用默认的随机初始化方法,对于中等规模的问题,这种方法通常很有效。
Xavier初始化方法
总结
梯度消失和爆炸是深度网络中常见的问题。在参数初始化时需要非常小心,以确保梯度和参数可以得到很好的控制。
需要用启发式的初始化方法来确保初始梯度既不太大也不太小。
ReLU激活函数缓解了梯度消失问题,这样可以加速收敛。
随机初始化是保证在进行优化前打破对称性的关键。
Xavier初始化表明,对于每一层,输出的方差不受输入数量的影响,任何梯度的方差不受输出数量的影响。