吴恩达.深度学习系列-C2神经网络进阶-W2算法优化
- 词汇
- 前言
- 1. Mini-batch gradient descent
- 2.Understanding mini-batch gradient descent
- 3.指数加权平均Exponentially weighted averages
- 4.Understanding exponentially weighted averages
- 5.偏差纠正Bias correction in exponentially weighted averages
- 6.动量梯度下降法Gradient descent with momentum
- 7.RMSprop
- 8.自适应矩估计Adam optimization algorithm
- 9.[番外]不同优化算法的对比
- 10.学习率衰减Learning rate decay
- 11.The problem of local optima
- 12.小测题目
- 13.Programming assignment
词汇
单词 | 中文解释 |
---|---|
Exponentially | adv. 以指数方式 |
correction | n. 改正,修正 |
momentum | n. 势头;[物] 动量 |
local optima | [专]局部最优 |
前言
学习目标
- 学习随机梯度下降SGD,动量Momentum,RMSProp,Adam等算法
- 使用随机bathches来加速收敛和改进优化
- 了解学习率衰减的益处,并将它应用到优化算法中
1. Mini-batch gradient descent
小批量梯度下降(算法)
【相对的,Batch gradient descent.是一次处理整个训练集】
Vectorization化,将样本数据全部放到一个大矩阵中,不使用for-loop可以提升计算的速度。然后如果m非常大(比如100w以上的样本),速度依然会很慢。
处理方式:假设有500w的训练样本。可以将大批量的样本拆分成小批量训练集(mini-batch)。每个训练集只有1000左右的样本。总共分成5000组训练集。同时将Y也同样分成5000组。
for t=1,….,5000:
Forward propagation on X{t}
[Vectorized implement 1000 example]
Z[1]=W[1]X{t}+b[1]
A[1]=g1
…
A[L]=gL
Compute Cost J=(1/1000)sum(L(y_pred,y))+正则项
Backpropagation to comput gradients J{t}的梯度
事实上从Batch改为mini-batch算法上没有变化。只是将全训练集改为mini-batch,m由全训练集的样本总数替换为小训练集的样本数,在这之上套一个循环遍历每一个mini-batch.
2.Understanding mini-batch gradient descent
如上左图:全批量训练梯度下降曲线,是单调下降的,如果有出现上升那肯定哪里有错误
如上右图:mini-batch训练梯度下降的曲线,不同的mini-batch是不同的训练样本,会给下降曲线带来一定的噪音。随着轮数(全样本训练一次为一轮)不断增加,总体cost也是往下降的趋势。
Choosing your mini-batch size
mini-batch size=1,即一批次只训练一个样本的缺点:
1. 无法利用cpu/gpu对向量化计算的加速
2. 噪声太大,梯度下降并不是指向最低点,虽然总体趋势是下降,但会非常曲折,这反而会损耗时间。
3. 可能永远无法收敛,而是在最优解附近一直徘徊。
选择size的法则:
- 如果你训练集较小,就直接用Batch gradient descent.[m<2000]
- 选择mini-batch size大小为2的幂数64,128,254,512之间,这根据内存或gpu现存的大小来调整设定。[m>2000]
- 确保你的mini-batch数据能放进内存或显存。
- mini-batch size也是一个超参数,选择的好能让J更快的下降。
3.指数加权平均Exponentially weighted averages
(统计学:EWMA(Exponentially Weighted Moving Average)指数加权平滑平均,是一种常用的序列数据处理方式。)
假设伦敦一年的气温:单位华氏度(F)
重新加权计算每一天的温度值,如下:
…
近似于天的温度均值。
情形 | 图例 |
---|---|
365天温度图 | |
β=0.9红色线 β=0.98绿色线 |
50天均值线比10天均值线更平滑,并且会向后移动。
4.Understanding exponentially weighted averages
根据上一节所描述公式,我们将任意展开如下:
已知
当β=0.9,,带入方程后为第11项后的权重是已非常小,所以之后的项可以忽略不记
同样当β=0.98时,,带入方程后为第51项后的权重是已非常小,所以之后的项可以忽略不记
近似于前项的均值。
当1>β>0时,β的整数幂是指数级衰减,当幂大于等于时,值约等于再乘以(1-β)也是小于1的项,认为从此开始的值比重已非常小可以忽略。所以公式可以认为是前的近似均值。
算术平均:比如算50天平均温度,需要存储近50天的温度数据进行计算。优点:更精确。
指数加权平滑平均:比如算50天平均温度,只需要存储上一天数据,只需一行代码能获得一个近似值。优点:内存更小,执行代码更少。
5.偏差纠正Bias correction in exponentially weighted averages
如上图,我们对气温数据求均值应该要得到绿色的线。但指数加权平均得到的却是紫色的线。先来分析一下产生的原因:
因为在指数加权平均中存在冷启动的问题。即我们假设,而这样的值只相当于的很小一部分。这样的情况在数据的起始部分会一直存在,但会逐步减弱,最后与均值线接近。
回到伦敦温度的例子,设定β=0.98,单位华氏度(F)
改进的方法:
随着 t 增加, 将接近于 0,所以当 t 很大的时候,偏差修正几乎没有作用,因此当t较大的时候,紫线基本和绿线重合了。
在机器学习中,大部分时候很少使用偏差修正。如果你的算法关心初始时期的偏差,在刚开始计算指数加权移动平均数的时候,偏差修正能帮助你在早期获得更好的估测
6.动量梯度下降法Gradient descent with momentum
有一种算法叫叫动量梯度下降算法,它几乎总会比标准的梯度下降算法更快。算法的主要思想是,计算梯度的指数加权平均,然后使用这个梯度来更新权重。
TYPE | Gradient descent with momentum | SGD |
---|---|---|
same | On iteration t: Compute dw,db on current mini-batch |
On iteration t: Compute dW,db on current mini-batch |
different |
|
|
same |
|
|
根据指数加权平均Exponentially weighted averages的性质,我们知道这是对dw,db进行一个均值化处理。设定β=0.9,相当于对前次的梯度值求均值,将前10次梯度的均值设定为当前的梯度。就像是把当前的梯度压缩一点,并且补上一个之前就已经存在的“动量”。
每一次梯度下降都会有一个之前的速度的作用,如果我这次的方向与之前相同,则会因为之前的速度继续加速;如果这次的方向与之前相反,则会由于之前存在速度的作用不会产生一个急转弯,而是尽量把路线向一条直线拉过去。这就解决了普通梯度下降中存在的下降路线折来折去浪费时间的问题。因为梯度下降法单次梯度可能会拐向非最低点,但总体趋势总是正确的。而“均值”就是把这个趋势保留住,而降低单次梯度的不确定性。这像一个球从碗口滚向碗底,被称为”动量”momentum。
注意:动量参数β是一个新的超参数。通常被设为0.9.
7.RMSprop
Root Mean Square prop(均方根传递)
#相当于用做指数加权平均
#相当于用做指数加权平均
RMSprop的作用是抑制不正确方向上的梯度震荡(不是指向最低点的方向都是非正确方向)。从而加速梯度下降,它让我们可以使用更大的学习率而不会出现很大的震荡。
8.自适应矩估计Adam optimization algorithm
Adam=Adaptive Moment Estimation,自适应矩估计。本质上是momentum算法与RMSprop算法的结合。目前已被证明在很多不同的神经网络架构中都是十分有效的。
On iteration t:
compute using current mini-batch
#t-迭代次数
这个算法中的超参数:
9.[番外]不同优化算法的对比
虽然现在不断的出现了很多的梯度下降的优化算法,但是吴恩达认为Adam仍是当前适用面最广,最有效的优化算法。
10.学习率衰减Learning rate decay
学习率衰减通常是超参数调优中是比较靠后再开始优化的一个。
设定学习率衰减的原因 在mini-batch gradient descent中,因为噪音的存在,梯度下降最后总是在最低点附近震荡,如图中蓝色线路。如果在梯度下降的后期减小学习率,就会使震荡的范围缩小,哪怕永远无法抵达最低点,也会只在最低点的很小范围内摆动,如上图绿色线路。
实现梯度衰减
epoch:所有的数据训练一遍
iteration:一个mini-batch训练了一遍
类型 | 公式 | 注释 |
---|---|---|
方式一 |
初始学习率,比如0.2 常数,衰减率,比如1 epoch次数 |
|
方式二 exponentially decay |
初始学习率 | |
方式三 |
初始学习率 k,某个常数 |
|
方式四 |
iteration次数 k,某个常数 |
11.The problem of local optima
上图左是用一个低维空间来表达局部最优的情形,他不是全局最优点,但各方向上的导数却为0。
但在神经网络中,实际上我们经常遇到的是上图右,鞍点(saddle point),虽然部分反向的导数为0,但还有有方向的存在导数。
即神经网络中我们的困扰不是局部最优,而是鞍点。
比如20000维,因为很难出现20000个方向上的导数都为0。鞍点会变成一个停滞区。停滞区指导数长时间接近于0的一段区域。 然而因为梯度为零或接近于零,曲面很平,你会花费很长的时间,缓慢地在停滞区里找到这个点 然后因为左侧或右侧的随机扰动。
鞍点会成为停滞区,让学习过程变得相当慢。
这也是象动量(Momentum)算法,RmsProp算法,Adam算法能改善学习速度的地方。他们可以加快我们离开停滞区。
12.小测题目
第 1 个问题
Which notation would you use to denote the 3rd layer’s activations when the input is the 7th example from the 8th minibatch?
答:
答:1)是普通梯度下降,2)是使用动量的梯度下降 β=0.5,3)是使用动量的梯度下降 β=0.9
13.Programming assignment
13.1.GD,SGD 与 mini-batch GD
在随机梯度下降(SGD)中,每次只使用一个训练样本更新梯度。当训练集非常大时,SGD可以运行的很快。但参数将 “oscillate” (震荡)着指向最小值而不是平直的走向最小值。下图分别展示了SGD,GD的参数走势。
“+”的点,表示代价函数的最小值点。SGD带来非常多的震荡才能完成收敛。
Mini-batch gradient descent每批训练的样本大于1(SGD)又小于m(GD)。
mini-batch gradient descent通常能带来更快的优化速度。
What you should remember:
- 梯度下降法、随机梯度下降法、批量梯度下降法的区别是每次进行训练的样本数量。(GD=m,SGD=1,mini-batch GD=2的n次方)The difference between gradient descent, mini-batch gradient descent and stochastic gradient descent is the number of examples you use to perform one update step.
- 你需要调优超参数-学习率。You have to tune a learning rate hyperparameter .
- 当训练集非常大的时候,mini-batch size设置的恰当,通常能带来学习速度超过GD与SGD方法。With a well-turned mini-batch size, usually it outperforms either gradient descent or stochastic gradient descent (particularly when the training set is large).
- 建立mini-batches的两个关键步骤是:乱序(shuffling)与分割(Partitioning)。
- mini-batch size 通常选择为2的n次方,e.g., 16,32,64,128.
13.2.Momentum,Adam 优化算法
动量(Momentum)法会考虑到过去梯度的渐变惯性,以平滑更新当前梯度。算法保存之前梯度的”方向”在变量V中。具体的,是使用指数加权平均法(exponentially weighted average)来平均之前计算留下的梯度值。你可以形象的理解V就像一个球从山上滚下的“速度”,根据山坡的坡度/坡度方向来确立加速度(动量)。
Figure 3: 红色箭头显示了一个带动量的小批量梯度下降的方向。 之前梯度的方向的指数加权平均值v,相当于给当前梯度一个“力”,将梯度的方向拉向最低点。蓝色点的虚线显示了”V”这种力的方向。
示例
样本分布如下,我们使用一个3层神经网络来训练这个分类任务。
1 -Mini-batch Gradient descent 训练效果
2 -Mini-batch gradient descent with momentum训练效果
3 -Mini-batch with Adam mode训练效果
13.3.总结
**optimization method** | **accuracy** | **cost shape** |
Gradient descent | 79.7% | oscillations |
Momentum | 79.7% | oscillations |
Adam | 94% | smoother |
动量通常是有帮助的,但是考虑到小的学习速率和简单的数据集上,它的效果几乎就没有。另外,你会看到这样一个事实,即小批量梯度下降法,会带来cost计算的巨大震荡,而且一般的优化算法无法弥补上这一问题。
另一方面,Adam算法明显优于小批量梯度下降和动量。如果您在这个简单的数据集上运行这个模型,那么这三种方法都将带来非常好的结果。你能看到Adam算法收敛得快得多。
Adam优点:
- 相对较低的内存需求(尽管高于梯度下降和梯度下降)
- 通常情况下,按推荐值设定的超参数就能很好地工作(不包含学习率α)