Paper Reading - 基础系列 - Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour

 更多可关注 

计算机视觉-Paper&Code - 知乎

Abstract

恺明出品必属精品,目前在Facebook AI Research,多的不用多说。可以说这篇17年的论文即使到现在也绝不过时,其中一些思想和实验都给人很深的启发

总结来说本文主要以下贡献

  1. 作者展示了256GPUS的超强财力,表明batchsize不是越大越好,达到极限16k之后learning rate,validation error都降不下来
  2. 提出hyper-parameter-free linear scaling rule,学习率随着ecopch增大而减少,随着batchsize增大二增大,加快模型收敛以及提高性能
  3. 太大的学习率又会在一开始使模型训练不稳定,因此提出warmup 方法用来解决模型前期优化的问题

Algorithm

作者写的实在比较清晰

Large Minibatch SGD

损失函数和权重更新方法如下,不过多解释。关于Batchsize作者如下观点(经验来说选用32)

  • 当batch size太小的时候,在一定的epoch数里,训练出来的参数是无法逼近整体数据集定态分布的
  • 当batch size太大,深度学习的优化(training loss降不下去)和泛化(generalization gap很大)都会出导致在validation 上 error 很高
  • 随机梯度噪音的在深度学习中是正比于learning rate/batch size(也证明了line scale的有效率),batch size太大,噪音就太小了。其中随机梯度噪音对于逃离saddle points (优化问题)和sharp minima (反话问题)都必不可少的作用

 

  • batchsize增加k,学习率也对应增大,每次更新时,都采用bs个样本的平均loss进行梯度更新

Warmup

  • constant warmup,也就是通过手动固定设置epoch<5时的较下lr,再依次增大
  • gradual warmup, 逐渐将学习率从小到大增大,到epoch=5时,达到k倍lr,k代表batchsize。之后再继续执行lr schedule这个效果很好。如图可以看到,使用warmup的training error更低

Batch Normalization

  对于Mini-Batch SGD来说,一次训练过程里面包含m个训练实例,其具体BN操作就是对于隐层内每个神经元的激活值来说,进行如下变换:

经过这个变换后某个神经元的激活x形成了均值为0,方差为1的正态分布,加快训练收敛速度。但是这样会导致网络表达能力下降。比如说我原先学习到的是一个S型分布,但是被强制统一归一到0-1正态了。

为了防止这一点,每个神经元增加两个调节参数(scale和offset),计算得到的y作为该层的新输出,这两个参数是通过训练来学习到的,同时参加反向更新

推理的时候直接用全局统计的方差和均值,同时也可以通过融合conv+bn加速

其他方面是作者讨论分布式训练和硬件实现的内容

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

子韵如初

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

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

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

打赏作者

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

抵扣说明:

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

余额充值