深度学习2——梯度下降法(Gradient Descent)

目录

一、梯度下降法

二、调整Learning rate

三、Adagrad梯度下降法

1、前言

2、实例

四、Stochastic梯度下降法

五、特征缩放(Feature Scaling)


一、梯度下降法

梯度下降法(Gradient descent)是一个一阶最优化算法。 要使用梯度下降法找到一个函数的局部极小值,必须向函数上当前点对应梯度(或者是近似梯度)的反方向的规定步长距离点进行迭代搜索。如果相反地向梯度正方向迭代进行搜索,则会接近函数的局部极大值点;这个过程则被称为梯度上升法。

二、调整Learning rate

继《深度学习1——回归实例讲解》,假设我们得到的Loss Function函数如下图所示:

 1、当learning rate调整得刚好(红色),顺着箭头很顺利地走到最低点;

2、当learning rate调整得太小(蓝色),顺着箭头需要花费更多时间才能走到最低点;

3、当learning rate调整得较大(绿色),步伐太大,无法走到最低点;

4、当learning rate调整得很大(黄色),箭头开始往高处走,甚至是飞出去了。

只有当参数为一个或两个时,我们才能用图表现出来,当参数超过三个时,我们无法将其可视化。

但我们可以可视化参数个数的更新和Loss值变化之间的关系:

1、当learning rate太小的话,Loss值下降得太慢;

2、当learning rate较大的话,Loss值一开始下降得快,但慢慢地不再变化;

3、当learning rate大小的话,Loss值开始增强甚至是飞出去了;

4、当learning rate刚好的话,Loss值的变化才是我们想要的结果。

三、Adagrad梯度下降法

1、前言

最流行和最简单的想法是:每隔几个epochs将学习率降低一些系数。

在最开始的时候,我们离目的地很远,所以需要使用较大的学习率;几个epochs之后,我们接近了目的地,所以我们开始降低学习率。

比如使用t分之一衰变:

\eta ^{t}=\frac{n}{\sqrt{t+1}}

但是Learning Rate不能一刀切完,所以需要给定不同的参数和不同的Learning Rate。

而一种称为Adagrad的算法思想是:将每个参数的Learning Rate除以其先前导数的均方根。

在批梯度下降法中,将w看成一个参数:

w^{t+1}\leftarrow w^{t}-\eta ^{t}g^{t}

在Adagrad梯度下降法中,\sigma ^{t}是参数w的先前导数的均方根:

w^{t+1}\leftarrow w^{t}-\frac{\eta ^{t}}{\sigma ^{t}}g^{t}

2、实例

假设初始值是w0,计算在w0处的微分,并且σ0就是g0的平方再开方:

w^{1}\leftarrow w^{0}-\frac{\eta ^{0}}{\sigma ^{0}}g^{0}          \sigma ^{0}=\sqrt{(g^{0})^2}

接下来再更新参数,计算出w2和σ1:

 w^{2}\leftarrow w^{1}-\frac{\eta ^{1}}{\sigma ^{1}}g^{1}          \sigma ^{1}=\sqrt{\frac{1}{2}[(g^{0})^2+(g^{1})^2}]

再更新参数,计算w3和σ2:

w^{3}\leftarrow w^{2}-\frac{\eta ^{2}}{\sigma ^{2}}g^{2}          \sigma ^{2}=\sqrt{\frac{1}{3}[(g^{0})^2+(g^{1})^2+(g^2)^2] }

不断反复执行上述操作,从而得到一个w^t\sigma ^t

w^{t+1}\leftarrow w^{t}-\frac{\eta ^{t}}{\sigma ^{t}}g^{t}          \sigma ^t=\sqrt{\frac{1}{t+1}\sum_{i=0}^{t}(g^i)^2}

因此,在使用Adagrad算法时,我们可以得到最后的计算式子为:

w^{t+1}\leftarrow w^t-\frac{\eta }{\sqrt{\sum_{i=0}^{t}(g^i)^2}}g^t

对于上式的分子g^t,当梯度越大时,那么参数更新的步伐越大;

但是对于上式的分母,当梯度越大时,那么参数更新的步伐越小。

那么分母的作用是什么呢?

解释1、分母的作用就是需要造成一个反差的效果:

比如有一种情况是:

前面的参数值很小,但到了第四个却很大。

另外一种情况是:

前面的参数值很大,但到了第四个却变得很小。

这就起到了一个反差的效果。

解释2、用于估算二次微分的值:

首先考虑一个二次函数:

将式子求导后,得到:

在二次函数上随机选取一个点x0做梯度下降,当踏出去的步伐为:

\left | x_{0}+\frac{b}{2a} \right | = \frac{\left | 2ax_0+b \right |}{2a}

这是一个最佳值,而分子 \left | 2ax_0+b \right | 就是求导后得到的式子,即:

所以说最好的步伐值是跟微分的大小成正比,而对于任何一个式子,最好的步伐值应该是:

\frac{First \;\;derivative}{Second\;\; derivative}

那么当使用Adagrad算法时,如何计算最佳步伐值呢?

该式子的分子可以看成是一次微分,那么我们现在需要考虑的是如何估算二次微分的值。

考虑使用一次微分来估计二次微分,假设一个二次微分比较小的峡谷和一个二次微分比较大的峡谷:

然后将一次微分的值考虑进来,并随机获取几个点:

由图可知,在比较平滑的峡谷中,它的一次微分值都较小;在比较尖的峡谷中,它的一次微分值都较大。

因此当我们计算 \sqrt{(First\;\; derivative)^2} 时,即可用来表示二次微分的大小。

四、Stochastic梯度下降法

当做回归时,我们得到的Loss function是

L=\sum_{n}^{}(\hat{y}^n-(b+\sum w_i x_{i}^{n}))^2

当得到损失值后,便可以开始做梯度下降:

\Theta ^i=\Theta ^{i-1}-\eta \;\bigtriangledown\;L(\Theta ^{i-1}) 

但Stochastic梯度下降法的思想却不同,它每次就随机选取一个值 X^n ,这时计算的损失值只考虑某一个样本的值:

L^n=(\hat{y}^n-(b+\sum w_ix_i^n))^2

接下来进行参数的更新时,只需要考虑这一个样本的值:

\Theta ^i=\Theta ^{i-1}-\eta \;\bigtriangledown \;L^n(\Theta ^{i-1})

普通的梯度下降法需要在考虑完所有的样本后才开始更新参数,结果如下图:

 

而Stochastic梯度下降法则是只需考虑一个样本的值。假设有20个样本值,那么就需要更新20次,结果如下图:

最开始是只考虑一个样本值,最后考虑所有的值,其更新的速度会更快。

五、特征缩放(Feature Scaling)

当预测宝可梦未来的CP值时考虑了两个自变量为x1和x2,其中 x_1 为宝可梦当前的CP值,x_2 为宝可梦当前的生命值。那么模型为 Y=b+w_1x_1+w_2x_2

如果 x_1 和 x_2 分布的范围不一样的话,即:

 那么就需要做一个缩放(Scaling)的操作,得到结果:

这就可以让不同的特征值有着同样的缩放(Scaling),那么为什么要这样做呢? 

对于式子 Y=b+w_1x_1+w_2x_2,如果当 x_1 的取值为1,2......;x_2 的取值为100,200......时,我们得到的损失值为:

 

因为 x_1 的取值较小,所以 w_1 对Y值的影响较小,所以在 w_1 这个方向上比较平滑;

因为 x _2 的取值较大,所以 w_2 对Y值的影响较大,所以在 w_2 这个方向上比较陡峭。

那么如果当 x_1 和 x _2 的取值均为1,2......的时候,那么得到的损失值情况如下:

 

那么特征缩放一般要怎么做呢?

现在假设有一组数据 X^1,X^2,X^3,......,X^r,......,X^R,每一组值又有一系列的特征值(X_{1}^{1},X_{2}^{1},X_{3}^{1}) ,(X_{1}^{2},X_{2}^{2},X_{3}^{2})等等:

对于每一行的值,去计算它们的平均值 M_i 和标准差 \sigma _i ,然后选取第 r 列第 i 行的特征值,计算式子:

X_{i}^{r}=\frac{X_{i}^{r}-M_i}{\sigma _i}

 随后便可以得到所有行的平均值为0,并且方差值全为1。

六、总结

本文简单地讲解了一下什么是梯度下降法,同时通过《深度学习1——回归实例讲解》中的实例,说明了“Adagrad梯度下降法”和“Stochastic梯度下降法”的基本用法,最后使用宝可梦的假设模型来对特征缩放进行了简单讲解

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值