有关梯度优化方法学习总结

背景

在机器学习领域,待解决的问题往往抽象建模成代价函数(cost function), 求解代价函数的最优解便是我们解决这个问题的目标。代价函数的求解便是优化过程,我们需要找到该函数的极小值,最好是最小值,但是最小值通常难以求解。极小值能够使我们的代价函数取值相对小,因而我们可以减少训练集中的损失(loss)。此时,模型便是能够反映整个数据集合的构成的。当然,这里先不考虑过拟合(overfitting)的情况。

然而如何求解代价函数最值,这是一个很棘手的问题。对于只有一个自变量的函数,求解极值可以简单求解二阶导数,但是由于在机器学习范畴简单问题的代价函数通常不只只有一个自变量,因此二阶导数的求解会传换成一个时间复杂度为 n2 n 2 的求解 hessian 矩阵问题,因此求解二阶导数往往不是很实用。但是拟牛顿法在今天也在这个领域发挥着它的作用,另外,遗传算法(GA)也展现了强大的优化能力。这些强大的算法都基于梯度,这也是本文着重讲述的。

基于梯度的简单优化方法是初学者最开始接触的优化算法。本文基于 CIFAR10 数据集简单对比 随机梯度下降(stochastic gradient descent),随机梯度下降 + momentum,RMSProp 以及 Adam 算法。

算法总结

代价函数的取值范围在高纬坐标系中可以很明显的看到,例如图一,展示了包含两个自变量 x, y 的代价函数的在每一点的对应取值。随着代价函数的不同,该取值曲面也不同。既然二阶导数已经在效率上不可用,那么能否简单画出每个代价函数的取值然后肉眼观察呢?显然这是一个很可爱的想法。因此,我们最后决定根据梯度的方向进行优化。

总的来说, 梯度是一个矢量,是函数一个点上导数最大值的方向,也就是函数值在该方向上下降最快,因此只要随着梯度的方向,便能最快的到达极值点。梯度下降(gradient descent)的方法就是这么得来的。想象我们在山顶,只要我们每一步都沿着最陡的方向迈出下一步,那么我们一定可以最快到达山脚。因此,找到了梯度,我们也需要小心注意步长值,若步长值太大,我们可能一步迈出过大,错过了极值点,若步长值太小,我们到达极值点的次数会增加。

图1 某一代价函数3D图
图1 某一代价函数3D图 [1]

随机梯度下降

随机梯度下降也称为小批量梯度下降(mini-batch gradient decent)。一般而言,梯度下降需要在遍历所有的数据后才进行梯度计算然后更新参数。假设现有数据集有10,000条数据,那么在这10,000条数据陡进行训练之后才会确定梯度,这样的计算会耗时很长。随机梯度下降解决的这个需要遍历所有数据才更新一次参数的问题。随机梯度下降根据每一个小批量数据进行更新参数。也就是说,10,000个数据,假设分成10个批量,每个批量是1,000个数据,那么在遍历完每个批量后,计算这个小批量的梯度然后进行更新参数,这样在遍历完10,000个多有数据后,梯度下降实际上已经进行了十次,相比于普通梯度下降而言,速度快了10倍。实验结果表明,在数据打乱情况下,随机梯度下降的每一个批量是可以很好近似整个数据集的。随机梯度下降的参数更新公示如下:

W=Wlr×dW W = W − l r × d W

lr 表示的是学习率(learning rate),也就是下山例子中的步长值,所以学习率的设置影响着优化过程

随机梯度下降 + Momentum

Momentum 通过保持前一步的行动势头从而加速整个 cost function 优化查找的收敛过程。例如当前一步与前一步方向保持一致,那么整个跨出的范围就会大一些,反之则会减小以防跨出的步子太大。可以想象,当当前梯度方向与前一步方向不一致时,通过矢量加法,下降的步伐会平滑很多。

V=mu×Vlr×dW V = m u × V − l r × d W
W=W+V W = W + V

在上面两条公式中,V初始化为 0 ,记录了前一个步伐的方向和大小。

RMSProp

要开始讨论 RMSProp 算法,得从 Adagrad 算法开始。 从梯度下降到随机梯度下降我们发现,所有的参数都是使用同一个学习率,这并不利于一个模型的学习。想象一个大型神经网络(Neural Network),其中蕴含的参数可能成千上百,要更新每一个参数都得找到符合其自身的学习率。Adagrad 正是基于这个问题而提出的。该算法强调给不同的参数以不同的学习率。因此其核心思想便是:加快减小偏导数大的参数的学习率,而减慢减小偏导数小的参数的学习率。这样的结果便是偏导数大的参数可以通过快速减小步伐而不至于错过极值点,而导数偏小的参数可以保

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值