有人认为模型参数初始化的选择并不是很重要,相反,初始化方案的选择在神经网络学习中起着举足轻重的作用,它对保持数值稳定性至关重要,此外,这些初始化方案的选择可以与非线性激活函数的选择有趣的结合在一起。我们选择哪个函数以及如何初始化参数可以决定优化算法收敛的速度有多快。糟糕选择可能会导致我们在训练时遇到梯度爆炸或梯度消失。
梯度消失和梯度爆炸
考虑一个具有L层、输入x和输出o的深层网络。每一层由变换
定义,该变换的参数为权重
,其隐藏变量是
。我们的网络可以表示为:
如果所有隐藏变量和输入都是向量,我们可以将o关于任何一组参数的梯度写为下式:
换言之,该梯度是L − l个矩阵 ...
与梯度向量
的乘积。 因此,我们容易受到数值下溢问题的影响. 当将太多的概率乘在一起时,这些问题经常会出现。在处理概率时,一个常见的技巧是切换到对数空间,即将数值表示的压力从尾数转移到指数。
不稳定梯度带来的风险不止在于数值表示;不稳定梯度也威胁到我们优化算法的稳定性。我们可能面临一些问题。要么是梯度爆炸(gradient exploding)问题:参数更新过大,破坏了模型的稳定收敛;要么是梯度消失(gradient vanishing)问题:参数更新过小,在每次更新时几乎不会移动,导致模型无法学习。
sigmoid函数的输入过大或者过小会导致其梯度消失。