是csdn上发布的第一篇博客
先叠个甲XD 本人是人工智能在读准大二学生,此前没有参与此类夏令营的经验,专业知识也较为浅薄,做的不好望海涵
局部极小值与鞍点
参数对损失的微分(梯度)为0时,梯度下降就不能再更新参数了,此时训练就停下来了,因此需要针对这种情况做处理
梯度为0时,有这几种情况:该点为局部极小值 / 局部最大值 / 鞍点
梯度为零的点统称为临界点,此时损失无法继续下降,但不一定收敛在局部极小值。若是在鞍点则可以通过逃离鞍点来使损失更低
如何知道损失函数的形状?
L(θ) 完整的样子写不出来。θ′ 附近的 L(θ) 可近似为
L(θ) ≈ L(θ′)+(θ − θ′)^Tg +1/2(θ − θ′)^T H(θ − θ′)
(泰勒级数近似)
g代表梯度 有时写成∇L(θ′)
第三项跟海森矩阵H 有关,H 里面放的是 L 的二次微分
Hij =(∂^2/∂θi∂θj)L(θ′)
可以根据 1/2(θ − θ′)^T H(θ − θ′) 写作v^THv来判断在 θ′ 附近的误差表面
若其>0,则为局部极小值,若其<0,为局部极大值,而若其时大时小,则为鞍点。
若 H 的所有特征值都是正的,H 为正定矩阵,则 vTHv > 0,临界点是局部极小值。若 H 的所有特征值都是负的,H 为负定矩阵,则 vTHv < 0,临界点是局部极大值。若 H 的特征值有正有负,临界点是鞍点。
逃离鞍点的办法:批量和动量
在计算梯度的时候,并不是对所有数据的损失 L 计算梯度,而是把所有的数据分成一个一个的批量
大的批量更新比较稳定,小的批量的梯度的方向是比较有噪声的(noisy)。但实际上有噪声的的梯度反而可以帮助训练。大的批量大小优化可能会有问题,小的批量大小优化的结果反而是比较好的。
可能的解释:批量梯度下降在更新参数的时候,沿着一个损失函数来更新参数,走到一个局部最小值或鞍点显然就停下来了。如果不看海森矩阵,梯度下降就无法再更新参数了 。
大的批量大小会让我们倾向于走到“峡谷”里面,而小的批量大小倾向于让我们走到“盆地”里面。小的批量有很多的损失,其更新方向比较随机,其每次更新的方向都不太一样。
所以大的批量跟小的批量各有优缺点,批量大小是需要去调整的超参数。
动量法是另外一个可以对抗鞍点或局部最小值的方法。
在物理的世界里面,一个球从高处滚下来的时候,它并不一定会被鞍点或局部最小值卡住,如果将其应用到梯度下降中,这就是动量。
引入动量后,每次在移动参数的时候,不是只往梯度的反方向来移动参数,而是根据梯度的反方向加上前一步移动的方向决定移动方向。(通过模仿物理惯性解决“卡住”)
初始的参数值为 θ0 = 0,前一步的参数的更新量为 m0 = 0。接下来在 θ0 的地方,计算梯度的方向 g0。下一步的方向是梯度的方向加上前一步的方向,不过因为前一步正好是 0,所以更新的方向跟原来的梯度下降是相同的。但从第二步开始就不太一样了。从第二步开始,计算 g1,接下来更新的方向为m2 = λm1 − ηg1,参数更新为 θ2 ,接下来就反复进行同样的过程。
但有动量还是有办法继续走下去,因为动量不是只看梯度,还看前一步的方向。即使梯度方向往左走,但如果前一步的影响力比梯度要大,球还是有可能继续往右走,甚至翻过一个小丘,也许可以走到更好的局部最小值,这就是动量有可能带来的好处 。