通过优化算法使得 loss 函数梯度下降平稳且快,从而达到快速训练出好的模型的效果。
2.1 Mini-batch 梯度下降(Mini-batch gradient descent )
在没有提出 Mini-batch 梯度下降算法之前,都是在巨大的数据集上直接训练(整个巨大的数据集直接作为一个 batch,进行 batch 梯度下降),这就导致模型训练速度很慢,使得深度学习在之前难以发挥重大作用。
而 mini-batch 梯度下降法具体思想是将整个大数据集划分为 n 个 mini-batch 样本数据集,一个 epoch 里分别对这个 n 个 mini-batch 样本数据集进行 n 次迭代,求出每个 mini-batch 的梯度。具体细节如下:
batch 梯度下降法:使用向量化,能有效地对所有 m 个样本进行计算,允许你处理整个训练集,
而无需某个明确的公式。把训练样本放到巨大的矩阵 X 当中去,。Y 也是如此,
。𝑌 的维数是
,Y 的维数是
,使用向量化来快速处理所有 m 个样本。
mini-batch 梯度下降法:若 m 很大的话,比如 500 万甚至是 5000 万或者更大的数,则用 batch 梯度下降法来训练、处理数据,速度会很慢。因此可以把训练集分割为小一点的子集训练,这些子集被取名为 mini-batch,假设每一个子集中只有 1000 个样本,那么把其中的 𝑦 (1) 到 𝑦 (1000) 取出来,将其称为第一个子训练集,也叫做 mini-batch,然后你再取出接下来的 1000 个样本,从 𝑦 (1001) 到 𝑦 (2000) ,然后再取 1000 个样本,以此类推。
其具体的原理或做法如下图所示:
其中,同样使用向量化去几乎同时处理 1000 个样本。
batch vs mini-batch: 使用 batch 梯度下降法,一次遍历训练集只能让你做一个梯度下降,使用 mini-batch 梯度下降法,一次遍历训练集,能让你做 5000 个梯度下降。
2.2 理解 mini-batch 梯度下降法(Understanding mini-batch gradient descent )
batch 梯度下降法:每次迭代你都需要历遍整个训练集,可以预期每次迭代成本
都会下降,所以如果成本函数 J 是迭代次数的一个函数,它应该会随着每次迭代而减少,如会下降,所以如果成本函数 𝐾 是迭代次数的一个函数,它应该会随着每次迭代而减少,如
果 J 在某次迭代中增加了,那肯定出了问题,也许你的学习率太大。
**
mini-batch 梯度下降法:如果你作出成本函数在整个过程中的图,则并不是每次迭
代都是下降的,特别是在每次迭代中,你要处理的是 X^ {t} 和 Y ^{t} ,如果要作出成本函数 J^ {t} 的图,而 J^ {t} 只和 X^ {t} ,Y ^{t} 有关,也就是每次迭代下你都在训练不同的样本集或者说训练不同的 mini-batch。
注:没有每次迭代都下降是不要紧的,但走势应该向下。
mini-batch 的大小等于 𝑛,其实就是 batch 梯度下降法(缺点:样本数量巨大的时候,要处理整个数据集,单次迭代耗时太长);mini-batch 大小为 1,就有了新的算法,叫做随机梯度下降法(失去所有向量化带给你的加速,因为一次性只处理了一个训练样本,这样效率过于低下);因此一般的 mini-batch 大小为 64 到 512,考虑到电脑内存设置和使用的方式,如果 mini-batch 大小是 2 的 n 次方,代码会运行地快一些。
需要注意的是在你的 mini-batch 中,要确保 X^ {t} 和 Y ^{t} 要符合 CPU/GPU 内存,这取决
于你的应用方向以及训练集的大小。
2.3 指数加权平均数(Exponentially weighted averages )
除了 batch 梯度下降法和 mini-batch 梯度下降法,还有一些更高效的梯度下降优化算法,这些都会使用到指数加权平均这一概念。
使用公式来计算每日的加权平均温度值,β=0.9 的话则得到红色曲线。
注意,在计算时可视 v_t 大概是 1/(1−β) 的每日温度,如果 β 是 0.9,则可以将每日温度 v_t 看作是十天的平均值,也就是红线部分。
β = 0.98,即 β 较大时,相当于平均了更多天的温度,所以指数加权平均值适应地更缓慢一些,为绿线部分,这个曲线,波动更小,更加平坦,缺点是曲线进一步右移,因为现在平均的温度值更多,要平均更多的值,指数加权平均公式在温度变化时,适应地更缓慢一些,所以会出现一定延迟,;若 β = 0.5,则相当于平均了两天的温度,如黄色曲线,会有更多的噪声,有可能出现异常值,但是这个曲线能够更快适应温度变化。
总结:指数加权平均数经常被使用,再说一次,它在统计学中被称为指数加权移动平均值,
我们就简称为指数加权平均数。这个参数(β)也是一个需要调整的超参数。
2.4 理解指数加权平均数(Understanding exponentially weighted averages
所以,这是一个加和并平均。有指数和加权,所以叫指数加权平均.
从 0.1 开始,到 0.1 × 0.9,到 0.1 × (0.9) 2 ,以此类推,所以就有了这个指数衰减函数。
注意:实际上,β=0.9,ε=1-β=0.1,而,大约是 0.34,0.35,换句话说,10 天后曲线高度下降到 1/3,相当于峰值的 1/e.
因此,若是梯度下降算法中,具体做法是先初始化 v𝜃 = 0(v 相当于要更新的 w 或 b),然后每一天,拿到第 t 天的数据,把 v 更新为 v:= βv𝜃 + (1 − β)𝜃_t 。
**梯度下降时更新 w 和 b 使用指数加权平均数的好处:**它占用极少内存,电脑内存中只占用一行数字而已,然后把最新数据代入公式,不断覆盖就可以了.
2.5 指 数 加 权 平 均 的 偏 差 修 正 ( Bias correction in exponentially weighted averages
计算指数加权平均数,你还需要知道一个专业概念,叫做偏差修正,可以让(梯度的)平均数运算更准确.
在上一个视频中,这个(红色)曲线对应 β 的值为 0.9,这个(绿色)曲线对应的 β=0.98,
如果你执行公式,在 β 等于 0.98 的时候,得到的并不是绿色曲线,而是紫色曲线,你可以注意到紫色曲线的起点较低,我们来看看怎么处理.
可以看到偏差主要在估测初期,所以计算时不用 v*t 而是用,t 就是现在的天数,则能使得估计变得更好\更准确,特别对于估计初期很有效.
2.6 动量梯度下降法(Gradient descent with Momentum
后续所说的这些梯度下降优化算法都用到 mini-batch 思想和指数加权平均这一概念,而具体的操作细节不同.
在纵轴上,你希望学习慢一点,因为你不想要这些摆动,但是在横轴上,你希望加快学习,你希望快速从左向右移,移向最小值,移向红点。所以就有了动量梯度下降法.它 batch 或 mini-batch 下降法训练快很多.
公式:
先计算 v*dW 和 v_db:
然后重新更新权重:,这样就可以减缓梯度下降的幅度。
动量梯度下降法由来:
可以理解为如果你要最小化碗状函数,想象你从山上往下滚的一个球,这些微分项 dW 和 db 提供了加速度,Momentum 项相当于速度。而因为 β 稍小于 1,表现出一些摩擦力,所以球不会无限加速下去,所以不像梯度下降法,每一步都独立于之前的步骤,你的球可以向下滚,获得动量,可以从碗向下加速获得动量。
2.7 RMSprop
全称是 root mean square prop 算法,它也可以加速梯度下降.
记得在横轴方向或者在例子中的 W 方向,我们希望学习速度快,而在垂直方向,也
就是例子中的 b 方向,我们希望减缓纵轴上的摆动,所以有了 S_dW 和 S_db ,我们希望 S_dW 会相对较小,所以我们要除以一个较小的数,而希望 S_db 又较大,所以这里我们要除以较大的数字,这样就可以减缓纵轴上的变化。
2.8 Adam 优化算法(Adam optimization algorithm)
Adam 优化算法基本上就是将 Momentum 和 RMSprop 结合在一起.
Adam 里面同样使用了偏差修正,为了避免除以很小的数,几乎为零,在分母上加上一项 ε=1e10-8.
Adam 算法超参数值选择
2.9 学习率 衰减(Learning rate decay)
加快学习算法的一个办法就是随时间慢慢减少学习率,我们将之称为学习率衰减。
学习率衰减,即慢慢减少 α 的本质在于,在学习初期,你能承受较大的步伐,但当开始收敛的时候,小一些的学习率能让你步伐小一些,如绿线部分。
学习率衰减方法/公式:
其中,decay-rate 为衰减率;epoch−num 为当前 epoch 数,k 为某常熟,t 为 mini-batch 的数字.
2.10 局部最优的问题(The problem of local optima)
在深度学习领域,在高维度空间函数中,想要得到局部最优几乎不可能,因为如果你在 2 万维空间中,那么想要得到局部最优,所有的 2 万个方向都需要是这样,但发生的机率也许很小,也许是 2^−20000; 事实上,如果你要创建一个神经网络,通常梯度为零的点并不是这个图中的局部最优点,实际上成本函数的零梯度点,通常是鞍点。
如果局部最优不是问题,那么问题是什么?结果是平稳段会减缓学习,平稳段是一块区域,其中导数长时间接近于 0,如果你在此处,梯度会从曲面从从上向下下降,因为梯度等于或接近 0,曲面很平坦,你得花上很长时间慢慢抵达平稳段的这个点,因为左边或右边的随机扰动,我换个笔墨颜色,大家看得清楚一些,然后你的算法能够走出平稳段(红色笔)。
**总结:**所以此次视频的要点是,
- 第一点,首先你不太可能困在极差的局部最优中,条件是你在训练较大的神经网络,存在大量参数,并且成本函数 J 被定义在较高的维度空间。
- 第二点,平稳段是一个问题,这样使得学习十分缓慢,这也是像 Momentum 或是 RMSprop,Adam 这样的算法,能够加速学习算法的地方。在这些情况下,更成熟的优化算法,如 Adam 算法,能够加快速度,让你尽早往下走出平稳段。
- 本文作者: YuT
- 本文链接: https://ytno1.github.io/archives/2ad80c71.html
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!