随机梯度下降与Mini-batch梯度下降

随机梯度下降与Mini-batch梯度下降

在讲随机梯度下降(stochastic gradient descent)与Mini-batch gradient descent之前,先简要说一下批量梯度下降(batch gradient descent)。

批量梯度下降应该就是我们最初了解的那种梯度下降,特点就是每一次更新参数,都需要把数据集中全部的数据都遍历一遍。
具体看公式:
batch gradient descent
上图是一个实现逻辑回归模型参数更新的基本过程,其中 h θ ( x ) h_\theta(x) hθ(x)是假设函数, J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ)是损失函数,而重复的过程,就是不断迭代,更新参数 θ \theta θ,可以看到,更新参数的式子中,m代表数据总量,当每迭代一步,都要计算全部数据集的求和平均,当数据集比较小这种方法还行,可以当m达到百万上亿这样的大数据集时,再用batch gradient descent就显得太慢了。

于是才有了stochastic gradient descent和mini-batch gradient descent。

对于stochastic gradient descent,其实就是先随机打断数据集,然后遍历数据集,每次得到一条数据时,就用这条数据的损失值作为损失函数,用这一条数据来更新参数,这样一步一步朝着global minimum去,但它不像batch gradient descent直接可以收敛到最小值,SGD是迂回徘徊,朝着全局最小移动,最终会在全局最小附件徘徊。
SGD
这就是SDG参数更新的公式,可以看到只依靠一条数据进行参数的更新。

而Mini-batch gradient descent则介于SGD和batch gradient descent之间,MGD每次依靠几条数据来进行参数的更新,一般选取2-10条数据作为一个mini-batch。
MGD
如上图所示,选取10作为一个mini-batch,参数 θ \theta θ更新时,对这十条数据进行求和平均,以此来更新参数。同时因为mini-batch是同时选取多条数据,如果计算的时候将这多条数据用向量化的方式处理,则速度会比SGD更快。

那我们该怎么判断SGD是否收敛呢?因为用SGD就是为了避免在大数据 集上计算速度太慢,不可能像BGD那样每次迭代一步就把全部数据集的损失都算出来。

其实判断SGD收敛其实是:在该条数据更新 θ \theta θ之前,先算出该条数据的损失,再进行了1000次iteration之后,计算前面1000条数据对应cost的平均值,每1000次iteration就记录一次,并将画出图像,就可以根据图像观察了。如果不像不符合预期,可能就需要调整学习率或者将1000次换成别的次数。

同时因为SGD不会像BGD那样收敛,BGD快到最小值时迭代速度变慢会呈现收敛得趋势,要想让SGD拥有这样的效果,就需要将学习率 α \alpha α设置成随迭代次数增多而减小的特性。但是一般人不会这么做,因为这样太复杂了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Colin_Jing

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

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

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

打赏作者

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

抵扣说明:

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

余额充值