李宏毅机器学习三天速成~~~第四课~~~Gradient Descent

在第二课Regression中简单讲述了Gradient Descent(梯度下降),现在在第二课的基础上深入将Gradient Descent的一些细节问题。

首先先回顾以下Gradient Descent

Gradient Descent该旨在寻找损失函数Loss Function中的使得Loss最小的参数,主要思想是利用高等数学中求极小值(最小值)的方法,通过选定一个初始的参数值\theta ^{0},然后求得损失函数在\theta ^{0}处的导数,如果该导数大于0,则向左移动\eta *\tfrac{dL}{d\theta },反之向右移动\eta *\tfrac{dL}{d\theta }。就像下面的猴子一样,猴子往低处跑。

\eta是learning rate,反映了Gradient Descen的快慢。

如果是多个参数,则按照下面方法进行(L为loss function)

1.\eta(learning rate)大小的影响

选择\eta要慎重

如果\eta选的好(如下图中红色的线),刚好可以到谷底

如果选择不好,就会项蓝色、绿色、黄色的线一样

蓝色的下降的太慢,绿色的陷入死循环到不了谷底,黄色的可能就会飞出去

所以在做Gradient Descent的时候应该画右边的图

2.自动调节\eta

随着Gradient Descent的逐步进行,逐渐减小\eta的值,这是因为随着我们更新次数的增大,我们是希望我们的学习率越来越慢。因为我们认为在学习率的最初阶段,我们是距离损失函数最优解很远的,随着更新的次数的增多,我们认为越来越接近最优解,于是学习速率也随之变慢。

下面介绍以下Adagrad

3.Adagrad

 

\sigma ^{t}见下图:

总结如下:

Ada矛盾的地方(结合下图):

g^{t}越大,说明移动的距离会大,但是下面的分母中g^{t}越大会导致移动的距离减小,这两个效应会不会很矛盾呢?

对于这个有两种解释方法,一种是直白的解释(结合下图):每次梯度变化的反差,即现在梯度和过去梯度之间的差别

对于这个有更为正规的解释方法,下面用一元二次函数进行演示:

下图中点X0跨向谷底的最好的step长度是|2ax0+b|/|2a|,这个步伐与在x0的一阶微分值(|2ax+b|)成正比。

但是在Loss function有多个参数的时候(结合下图):

画出两个参数一次求导后的函数,可以看出对于参数w1来说,a点的微分值大于b点的微分值,所以a点的步伐选择应该大于b点的步伐选择。同样参数w2,也是c点的微分值大于d点的微分值,所以c点的步伐值的选择应该比d点的步伐值要大。

但是我们比较a点和c点的步伐值的选择。综合比较发现c点的微分值大于a点的微分值,但实际上是a点离最优点的位置比c点离最优点的位置要大。

所以对于多参数的情况,仅仅根据微分值的大小来确定最终的学习速率(步伐)是不合理的。

再次回到一元二次函数中的那个图(下图),你会发现最佳步伐|2ax0+b|/|2a|下还有个|2a|,这个|2a|是什么呢?这个一元二次函数的二次求导的值。

故对于一个参数的一阶微分,我们发现最优步伐是|2ax0+b|/|2a|,分母实际上二阶微分,所以最优的步伐选择应该是 |First derivative|/|Second derivative|

那么在拥有多个参数的情况下该怎么去做呢?当然是一样的,考虑二次导数呗。

但是神奇的是AdaGrad中的分子明显不是二次求导的值啊!这个为了保证在程序运算时不重新加入新的计算导致算法效率变得很差才采取这个做法。那么这么做的依据是什么呢?见下图:

其实还是蛮像的对不对,实际上,Adagrad在没有增加计算量的情形下,直接使用一阶微分的均方和根,有时候效果比|First derivative|/|Second derivative|不差。

Adagrad的缺点是在训练的中后期,分母上梯度平方的累加将会越来越大,从而梯度趋近于0,使得训练提前结束。

4.Stochastic Gradient Descent随机梯度下降(SGD)

可以使training过程更快

这是因为Stochastic Gradient Descent每次只考虑一个样本,可以重复取一个样本,也可以按次序取一个样本。而梯度下降法考虑的是整体所有的样本。

demo

随机梯度下降法的学习速率更新了20次(每次只看一个样本),而梯度下降法的速率只更新了一次(每次看所有的20个样本)。所以随机梯度下降法的速率更新速度比较快。

相关SGD学习链接:https://www.leiphone.com/news/201709/c7nM342MTsWgau9f.html

5.Feature Scaling(特征归一化)

在training的时候,如果数据中拥有多种特征,且不同特征之间的尺度不一致,需要对特征进行归一化。

为什么需要Feature Scaling?

1.提升模型的精度

比如算法要计算欧氏距离,下图左中x2的取值范围比较大,涉及到距离计算时其对结果的影响远比x1带来的大,所以这就会造成精度的损失。所以归一化很有必要,他可以让各个特征对结果做出的贡献相同。

2.提升模型的收敛速度

如下图,有特征x1,x2,左图特征差别较大假如只有这两个特征,对其进行优化时,会得到一个窄长的椭圆形,导致在梯度下降时,梯度的方向为垂直等高线的方向而走之字形路线,这样会使迭代很慢,相比之下,右图的迭代就会很快

Feature Scaling的方法

上图中是不是很像概率论中学到的知识?哈哈哈哈

参考链接:https://www.cnblogs.com/ooon/p/4947347.html

6.Gradient Descent Theory梯度下降的理论基础

泰勒公式和多参数的泰勒公式应该都很清楚,就是下面图中所示:

步入正题:

要在下图中以点(a,b)为圆心的红色圈圈中找到Loss最小的点,如何找呢?

红色圈圈够小,learning rate也要足够小,才能满足泰勒=Gradient descent

以上是不是就是梯度下降的公式呀,耐心看。

 

7.Limitation of Gradient Descent

1.Gradient  Descent会卡在local minima处

2.Gradient  Descent会卡在saddle point处,当然几率很小

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值