为什么需要 Mini-batch 梯度下降,及 TensorFlow 应用举例

本文知识点:

  1. 什么是 mini-batch 梯度下降
  2. mini-batch 梯度下降具体算法
  3. 为什么需要 mini-batch 梯度下降
  4. batch, stochastic ,mini batch 梯度下降的比较
  5. 如何选择 mini batch 的参数 batch size 呢
  6. 在 TensorFlow 中应用举例

之前写过一篇文章:
如何选择优化器 optimizer

里面对 BGD,SGD,MBGD,Adagrad,Adadelta,RMSprop,Adam 进行了比较,
今天对其中的 mini-batch 梯度下降 作进一步详解。

1. 什么是 mini-batch 梯度下降

先来快速看一下 BGD,SGD,MBGD 的定义,
当每次是对整个训练集进行梯度下降的时候,就是 batch 梯度下降,
当每次只对一个样本进行梯度下降的时候,是 stochastic 梯度下降,
当每次处理样本的个数在上面二者之间,就是 mini batch 梯度下降。

我们知道 Batch 梯度下降的做法是,在对训练集执行梯度下降算法时,必须处理整个训练集,然后才能进行下一步梯度下降。

如果在处理完整个训练集之前,先让梯度下降法处理一部分数据,那么算法就会相对快一些。

也就是把整个大的训练集划分为若干个小的训练集,被称为 mini batch。

例如 500 万的训练集,划分为每个子集中只有 1000 个样本,那么一共会有 5000 个这样的子集。同样的,对 y 也做相应的划分:

(注:上角标用大括号表示为第几个子集,小括号为第几个样本,中括号为神经网络的第几层。)

这时候,每一次对每个子集进行整体梯度下降,也就是对 1000 个样本进行整体梯度下降,而不是同时处理 500万 个 x 和 y。相应的这个循环要执行 5000 次,因为一共有 5000 个这样的子集。


2. mini-batch 梯度下降具体算法

t 代表第几个子集,从 1 到 5000,因为划分后,一共有 5000 个子集,

1. 对每个子集,先进行前向计算,从第一层网络到最后一层输出层

因为 batch 梯度下降是对整个数据集进行处理,所以不需要角标,而 mini batch 这里需要对 x 加上角标,代表的是第几个子集。

2. 接下来计算当前子集的损失函数,因为子集中一共有 1000 个样本,所以这里要除以 1000。损失函数也是有上角标,和第几个子集相对应。

3. 然后进行反向传播,计算损失函数 J 的梯度。

4. 最后更新参数。

将 5000 个子集都计算完时ÿ

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值