梯度下降法及其变体小结

 

什么是梯度下降算法

俗话说”人往高处走,水往低处流”,类似的,我们可以把曲线的形状也看成山谷山峰,就可以模拟”水往低处流”的过程,来解决寻找最小值的问题,梯度下降法就类似如此。

梯度下降算法

给定目标函数f(x)和初始点x0,学习率η(步长)

重复:Δx = -Δf(x)

x= x+ηΔx

停止,如果|Δx|<ε

 

算法描述不难理解,就是先求出所在位置的梯度,然后这个梯度的负值就是x向着极小值前进的方向。X在负梯度方向按照步长(学习率)每次更新,直到收敛到极值点。

 

梯度下降法是一种迭代算法,负梯度方向是是函数下降最快的方向,在迭代的每一步,以负梯度方向更新x的值,从而达到减少函数值的目的。

 

为了更好的理解,可以假设一下下山的场景。

一个人被困在山上,需要从山上下来找到山的最低点,也就是山谷。但此时山上的浓雾很大,导致可视度很低。因此,下山的路径就无法确定,他必须利用自己周围的信息去找到下山的路径。这个时候,他就可以利用梯度下降算法来帮助自己下山。具体来说就是,以他当前的所处的位置为基准,寻找这个位置最陡峭的地方,然后朝着山的高度下降的地方走,同理,如果我们的目标是上山,也就是爬到山顶,那么此时应该是朝着最陡峭的方向往上走。然后每走一段距离,都反复采用同一个方法,最后就能成功的抵达山谷

 

 

假设上图的曲线是f(x)

1.随机取一个自变量的值;

2.对应该自变量算出对应点的因变量值:f( x0);

3.计算f(x0)处目标函数f(x)的导数;

4.从f(x0)开始,沿着该处目标函数导数的方向,按一个指定的步长,向前“走一步”,走到的位置对应自变量取值为。

换言之,|x0–x1| /a = f(x)在(x0)处的斜率;

5.继续重复2-4,直至退出迭代(达到指定迭代次数,或f(x)近似收敛到最优解)。

 

以利用梯度下降法,求a的平方根为来理解下

 

import math

'''

利用梯度下降法,求a的平方根

令 sqrt(a) = x 则 x^2 - a =0 

令 F(x)的一阶导数 f(x) = x^2 - a,

则转化为求F(x)的极值点,可用梯度下降法求解如下

x初始值取 0 迭代1000次

'''

if __name__ == "__main__":

    learning_rate = 0.01

    for a in range(1,100):

        cur = 0

        for i in range(1000):

           cur -= learning_rate*(cur**2 - a)

        print(' %d的平方根(近似)为:%.8f,真实值是:%.8f' % (a, cur, math.sqrt(a)))

 

 

以线性回归算法来对三种梯度下降法进行比较。梯度下降法的三种形式BGD、SGD以及MBGD

 

一般线性回归函数的假设函数为:

 

 

对应的能量函数(损失函数)形式为:

 

 

 

1.批量梯度下降法BGD

批量梯度下降法(Batch Gradient Descent,简称BGD)是梯度下降法最原始的形式,它的具体思路是在更新每一参数时都使用所有的样本来进行更新

它得到的是一个全局最优解,但是每迭代一步,都要用到训练集所有的数据,如果样本数目m很大,那么可想而知这种方法的迭代速度!所以,这就引入了另外一种方法,随机梯度下降。

优点:全局最优解;易于并行实现;

缺点:当样本数目很多时,训练过程会很慢。

 

2.随机梯度下降法SGD

随机梯度下降法,其实和批量梯度下降法原理类似,区别在与求梯度时没有用所有的m个样本的数据,而是仅仅选取一个样本j来求梯度。对应的更新公式是:

 

 

随机梯度下降法,和4.1的批量梯度下降法是两个极端,一个采用所有数据来梯度下降,一个用一个样本来梯度下降。自然各自的优缺点都非常突出。对于训练速度来说,随机梯度下降法由于每次仅仅采用一个样本来迭代,训练速度很快,而批量梯度下降法在样本量很大的时候,训练速度不能让人满意。对于准确度来说,随机梯度下降法用于仅仅用一个样本决定梯度方向,导致解很有可能不是最优。对于收敛速度来说,由于随机梯度下降法一次迭代一个样本,导致迭代方向变化很大,不能很快的收敛到局部最优解

 

3.小批量梯度下降法MBGD

小批量梯度下降法是批量梯度下降法和随机梯度下降法的折衷,也就是对于m个样本,我们采用x个样子来迭代,1

关注-微-公众号【学习与成长资源库】获取更多免费学习资料

参考

https://www.jianshu.com/p/c7e642877b0e

https://www.cnblogs.com/maybe2030/p/5089753.html#_label0

https://www.cnblogs.com/pinard/p/5970503.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长青_416686950

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值