Processing math: 100%
deeplearning.ai第二章第二周

Mini-batch 梯度下降

在以前的训练中, 我们总是将所有的数据一次性加入算法进行计算。 这回导致计算缓慢。
我们可以将训练集分割成不同的小份, 例如每份 1000 个,这样不仅可以加快运算速度, 并且每次mini-batch 计算完成都能对权重进行更新。

Mini-batch 与 batch 损失函数走势区别


当使用 batch 直接训练时, 可以看到损失函数是稳步下降的, 但是使用 mini-batch 时, 可能因为每步使用的数据集的数据差异, 导致很多噪声, 但是总体是向下的趋势的

选择你的 Mini-batch Size

  • 与样本数量相同: 这就与普通的 batch 没什么不同, 会稳步往中心点下降
  • 指定成 1 : 相当于随机梯度下降, 会出现有时下降有时上升, 趋势是往中心去的, 但是不会收敛, 而且也失去了向量化计算带来的优势
  • 选择 1 到 m 之间的数: 兼顾了两者, 但是也像随机梯度下降一样, 接近中心但是可能会出现不收敛, 这时候可以使用衰减学习率来进行

如何选择 batch size 呢

  • 如果训练集过小(小于 2000): 直接使用batch
  • 通常来说将 mini batch 设置成 64 ~ 512(一般是2的次方), 也需要注意内存是否能够承载

指数加权平均(exponentially weight averages)

可以用来平滑时间序列数据, 减少噪声和浮动
具体做法是使用一个权重 β
套入公式: Vt=βVt1+(1β)θt
相当于过去多少天的平均: 11β

理解指数加权平均

V100=0.9V99+0.1θ100V99=0.9V98+0.1θ99V98=0.9V97+0.1θ98

可以展开为

V100=0.9V99+0.1θ100 =0.1θ100+0.10.9θ99+0.10.92θ99

相当于一个对之前时间的数值进行不断缩减, 直到占比小于 1 / 3 ( 有点疑惑 为什么是 1/3)

使用指数加权平均的优势是不需要保存所需平均天数的所有值, 节约内存和减少计算量, 只需要一个最新值. 这也是导致不精确的原因.

偏差修正(bias correction)

还是看我们之前的那张图, 如果使用 V0=0 实际上并不会得到绿色的线, 而是紫色的线.

所以使用偏差修正公式

Vt1βtt=2:1βt=10.982=0.0396V20.0396=0.0196θ1+0.02θ20.0396

可以修复的你的强迫症, 也可以不修. 因为假设使用0.9 十次迭代之后值就已经变得不重要了

动量梯度下降

就是将 指数加权平均 与用到 w b 的导数更新中, 减缓下降时候的摆动噪声

超参的 β 一般是选择 0.9

RMSprop (root mean square prop)

也是为了 减缓下降时候的摆动噪声, 为了区分 动量梯度下降 中的 β 这边使用 β2
为了防止分母变成 0 需要上 ξ 通常的值是 108

Adam (Adaptive Moment Estimation: Moment + RMSprop)

结合了之前的两者

Vdw=0,Sdw=0,Vdb=0,Sdb=0Vdw=β1Vdw+(1β1)dwVdb=β1Vdb+(1β1)dbMomentβ1Sdw=β2Sdw+(1β2)d2wSdb=β2Sdb+(1β2)d2bRMSpropβ2Vcurrentdw=Vdw1βt1Vcurrentdb=Vdb1βt1Scurrentdw=Sdw1βt2Scurrentdb=Sdb1βt2W:=WαVcurrentdwScurrentdw+ξb:=bαVcurrentdbScurrentdb+ξ

这里面有几个超参可以调整, 但是一般都是使用默认值:

  • α: 需要自己调
  • β1: 一般默认 0.9
  • β2: 一般默认 0.999
  • ξ: 一般默认 108

学习率衰减

因为使用mini-batch 进行训练时, 并不会精确的收敛, 而是会在最小值附近摆动. 因为学习率是固定的值.
而使用衰减二点学习率, 训练的最初阶段还是会快速下降, 但是在接近最小值时, 与固定学习率在大范围摆动不同, 将会在最小值的周围区域小幅度摆动.
因为在开始训练初期你能够接受大范围的摆动,但是接近时需要较小的调整幅度.
有以下集中可供选择:

  • α=11+deacyrateepochnumα0
  • α=0.95epochnumα0
  • α=kepochnumα0
  • 还有离散和手动的方式

局部最优的问题

我们在优化过程中可能并不是会到局部最优点, 而可能是鞍点.
因为假设你的参数是有 2W 个, 而你达到一个局部最优点的可能性是 1/2W 所以你更可能遇到的是鞍点

而平稳段则是影响你学习的一个重要因素, 此处的导数可能长时间为 0 , 导致你无法前进

Author: Sean
Link: https://blog.whileaway.io/posts/5bdcb3dc/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.