Python3入门机器学习之4.6随机梯度下降法

Python3入门机器学习

4.6 随机梯度下降法

通过我们推导的如下求梯度的公式,要想准确地求出梯度,每一项都要对所有的样本进行计算,这样的梯度下降法通常又叫做批量梯度下降法(Batch Gradient Descent)
在这里插入图片描述
显然,这样带来一个问题:如果我们的样本量m非常大,计算梯度本身也是非常耗时的。

基于这个问题,我们有这样的改进方案。在之前的式子中,由于对于每一项都对m个样本进行了计算,之后为了取平均,还除以了m。所以一个自然的想法就是:我们可不可以每一次只对一个样本计算呢?基于这样的想法,之前的式子可以变为:
在这里插入图片描述
这样一个思想的实现就叫做随机梯度下降法(Stochastic Gradient Descent)。随机梯度下降法搜索的过程如下图所示:
在这里插入图片描述
批量梯度下降法的搜索方向会坚定不移地朝着最小值方向移动,但是随机梯度下降法由于不能保证每一次得到的方向一定是损失函数减小的方向,更不能保证一定是损失函数减小速度最快的方向,因此搜索路径会形成上图所示情况,具有随机性,或者说不可预知性。
不过,实验结论告诉我们即时如此,我们通过随机梯度下降法通常依然能够差不多的来到我们整个函数相应的最小值的附近。虽然它不会像批量梯度下降法那样一定来到最小值这个固定的位置,但是当我们的m非常大的话,我们愿意用一定的精度来换取一定的时间。
这样一来,随机梯度下降法就有意义了,而且在具体实现时有一个非常重要的技巧,就是在随机梯度下降法的过程中学习率的取值变得很重要。这是因为在随机梯度下降法的过程中,如果学习率一直取一个固定的值,很有可能我们的随机梯度下降法已经来到最小值左右的位置了,但是由于随机的过程不够好,学习率eta又是个固定值,慢慢的又跳出了最小值所在的位置,所以在实际中,随机梯度下降法的学习率是逐渐递减的。学习率如下:
在这里插入图片描述
一般可以取a为5,b为50,这是经验上比较好的取值。
这种学习率随着循环次数递减的思想也就是模拟退火的思想。
在这里插入图片描述
下面我们通过一个具体的实例来对比批量梯度下降法和随机梯度下降法:
(1).首先,准备模拟数据,故意使样本数量非常大:
在这里插入图片描述
(2).批量梯度下降法过程及耗时:
在这里插入图片描述
在这里插入图片描述
(3).随机梯度下降法过程及耗时:
在这里插入图片描述
在这里插入图片描述
可见在结果靠近最小值的前提下,随机梯度下降法更加省时间。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值