8.2.1 病态
[info] condition在这里应译为“状态”而不是“条件”。因此此处的“ill condition”译为病态。但在本书其它地方将它译为“状态条件”,这是不对的。
在优化凸函数时,会遇到一些挑战。 这其中最突出的是Hessian矩阵$H$的病态。 这是数值优化、凸优化或其他形式的优化中普遍存在的问题,更多细节请回顾\sec?。
病态问题一般被认为存在于神经网络训练过程中。 病态体现在随机梯度下降会"卡"在某些地方,此时即使很小的更新步长也会增加代价函数。
[success] 病态矩阵 Hessian矩阵的病态问题 问:病态的原始定义为“输入的微小差异导致输出的巨大变化。”但病态在神经网络中的表现为“即使很小的更新步长也会增加代价函数。”这两者是怎么联系上的? 答:病态的H表现为f的等高线是同心椭圆。病态越严重,椭圆越扁,即长轴和短轴差别越大。 这种情况有点像没有做特征归一化的梯度下降法,在尺度比较大的特征上,学习率太小会难以收敛。在尺度较小的特征上,学习率太大会震荡而无法收敛。 这里的情况有点类似,在长轴方向上,学习率太小会难以收敛。在短轴方向上,学习率太大会震荡而无法收敛。 “即使很小的更新步长也会增加代价函数”就是在长轴方向上难以收敛的表现。 “输入的微小差异导致输出的巨大变化”就是在短轴方向上震荡的表现。 特征归一化可以解决特征不在同一尺度的问题,H的病态问题可以用类似的方法解决吗?
回顾公式4.9,代价函数的二阶泰勒级数展开预测梯度下降中的$-\epsilon g$步骤会增加
到代价中。
[success]
公式4.9是f(x)在$x^0$处泰勒展开的二阶近似。 $f(x^0-\epsilon g)$为x0在负梯度方向移到一个步长得到的值。 由于是向负梯度的方向移到,理论上$f(x^0-\epsilon g) < f(x^0)$ 实际上$f(x^0-\epsilon g) - f(x^0) = \frac{1}{2} \epsilon^2 g^\top Hg - \epsilon g^\top g$,取决于公式8.10
当$\frac{1}{2} \epsilon^2 g^\top Hg$超过$\epsilon g^\top g$时,梯度的病态会成为问题。 我们可以通过监测平方梯度范数$g^\top g$和$g^\top Hg$,来判断病态是否不利于神经网络训练任务。
[success] 平方梯度范数以及下文中的梯度范数都是指$g^\top g$
在很多情况中,梯度范数不会在训练过程中显著缩小,但是$g^\top Hg$的增长会超过一个数量级。 其结果是尽管梯度很强,学习会变得非常缓慢,因为学习率必须收缩以弥补更强的曲率。
[success] 公式8.10中,$g^\top g$改变不大,但$g^\top Hg$会增长。 正常情况下,g大就应该学习快。g小就会学习慢。 但当H过大时,即使g大也会学习慢,因此称为病态。 解决方法:可以通过改变学习率来调节公式8.10中第一项与第二项的关系。 H代表曲率,更大的H就必须使用更小的$\epsilon$。
如\fig?所示,成功训练的神经网络中,梯度显著增加。
尽管病态还存在于除了神经网络训练的其他情况中,有些适用于其他情况的解决病态的技术并不适用于神经网络。 例如,牛顿法在解决带有病态条件的\,Hessian\,矩阵的凸优化问题时,是一个非常优秀的工具,
[success] 问:牛顿法为什么能解决H的病态问题? 答:牛顿法 VS 梯度下降法 可以看出,牛顿法不需要指定学习率,而是根据$H^{-1}$计算出来一组值来作为学习率。 牛顿法的学习率是根据H算出来的,是适配于H矩阵的。即使是病态的H,而计算出合适这个H的学习率。 因此能解决H的病态问题。 DL中解决H矩阵病态问题的方法
但是我们将会在以下小节中说明牛顿法运用到神经网络时需要很大的改动。
Last updated