计算机视觉教程核心版(三)优化下篇
本节承接优化中篇
在前面的章节中我们已经介绍了最简单的优化方法,随机梯度下降法。如下代码和图示例
左边代码中仅仅需要两行代码就可以实现SGD优化方法。右边的图展示了含有两个参数的损失函数等高线的图,不同颜色代表不同的损失函数,中间红色表示最小梯度。
SGD问题
- SGD的问题在一个方向很敏感(下降较快)在其他方向效果次之,在高维方面更加明显。
2.SGD的另一个问题是由局部最小值点或者鞍点(零梯度)
对于鞍点梯度为零,则权重不会做出任何更新,高维度出现你更多。
而局部最小值是一个更大的问题,向每一个方向损失都将变大,当考虑高维度时候出现的较少。
由于我们的梯度来源于最小批次(可以想象,小批次的数据训练多了就容易发生过拟合,而过拟合就是因为学习到了许多噪声信息),所以它们含有更多的噪声,导致随机梯度下降法将耗费更多的时间训练。
如下图中,加入噪声的随机梯度下降比较曲折,这将导致孙连耗费更多时间。
SGD+Momentum
SGD优化方法和SGD+Momentum的优化方法区别显示如下:
Momentum的思想是,保持一个不随时间变化的速度,我们将梯度估计添加到这个速度上,然后在这个速度的方向上步进,而不是在梯度的方向上步进。在每一步我们采取当前的速度,然后用摩擦tho来对其衰减。摩擦系数有时取值比如0.9,之后加到梯度上。现在我们在速度的方向上前进,而不是原始梯度向量。它基本解决了SGD在刚才提出的各种问题。
即使在鞍点或者最小值点梯度为零或者卡住,我们有速度来使得损失冲破最小值点或者鞍点。示例如图
Nesterov Momentum是原始的一种变形,但更加好用。其公式以及换元后的公式如下
另一种优化方法
RMSprop是AdaGrad的改进,一般不倾向于使用AdaGrad,因为它容易卡住
无论是Momentum还是RMSprop都比单纯的SGD效果要好。
Adam集合和上述的优化方法的优点, 针对许多问题都能有好的表现,因此作为优化函数是首选。
其完整形式如下
学习率衰减方式
在训练过程中,随着时间退役经常减小学习率。
减小学习率的方法有如下
- 每训练一定的epoch就将学习率减少一般
- 指数衰减
- 1/t衰减,
带动量的SGD经常用这种办法,然而像Adam这种优化算法就很少用。学习率衰减是一种二姐参数调试办法,不应该在一开始就使用。
梯度检验待续