第二周内容目录
mini-batch gradient descent
-
深度学习需要大量的样本来训练网络,所以需要一些优化算法来提高训练速度,之前用的方法:向量化,X=[x1, x2,…, xm],当m很大时,比如500万,训练起来依旧会很慢,所以有了下面的方法
-
将整个训练集m(假设为500万)分为一个个小的mini-batch,每个mini-batch有1000个样本,这个时候我们有了5000个mini-batch
for t in range(5000):
forward prop on X{T}
compute cost J{t}
backprop compute gradient
update weights
-
以上伪代码是进行一次epoch,遍历了一次数据集,我们可以将该for循环重复多次
-
batch gradient descent和 mini-batch gradient descent的区别:batch遍历一次整个数据集只进行一次梯度下降,本例中,mini-batch遍历一次数据集可进行5000次梯度下降
-
三种方法对比
1. 若mini-batch size = m,则成了batch gradient descent,(x{1}, y{1})=(X, Y)
2. 若mini-batch size = 1, 则成了随机梯度下降法,每个样本都是一个独立的mini-batch,该方法不会收敛,最终会一直在最小值附近波动
3. 若1 < mini-batch size < m, -
如何选择mini-batch的大小?
1. m ≤ 2000 时,直接使用batch gradient descent
2. m > 2000 时, 一般的mini-batch size为64,128,256,512(都是2的次方),确保其符合CPU/GPU的内存
几个优化算法
返回目录- 前提知识:指数加权平均
举个例子,θi表示伦敦一年中每天的温度,现在我们要根据已给数据求出未来几天的温度。
数据:θ1=40°F,θ2=49°F,θ3=45°F,…,θ180=60°F,θ181=56°F …
根据数据画图:
令V0=0
V1 = 0.9V0 + 0.1θ1
V2 = 0.9V1 + 0.1θ2
…
Vt = 0.9Vt-1 + 0.1θt
然后画图,红线部分
总结:Vt = βVt-1 + (1-β) θt,Vt 表示前1/(1-β)天的平均温度
如:β = 0.9时,Vt表示前10天的平均值(红线);β = 0.98时,Vt表示前50天的平均值(绿线);β = 0.5时,Vt表示前2天的平均值(黄线)
- 指数加权平均公式: vt = βVt-1 + (1-β)θt
- 偏差修正:使平均数的运算更加准确,保证最初几个数据修正后的准确性
公式: V t = β V t − 1 + ( 1 − β ) V t 1 − β t V_t = \frac{βV_{t-1}+(1-β)V_t}{1-β^t} \quad Vt=1−βtβVt−1+(1−β)Vt - 动量梯度下降法(Momentum gradient descent)
返回目录
其运算速度快于标准的梯度下降法
基本思想:计算梯度的指数加权平均数,用该梯度重新更新权重
on iteration t:
VdW = βVdW +(1-β)dW
Vdb = βVdb +(1-β)db
W = W - αVdW
b = b - αVdb
- 两个超参:α 和 β(β一般设置为0.9)
- momentum可以使纵轴学习的慢一些,横轴学习的快一些
下图圆圈为cost函数,我们从左侧出发进行梯度下降,十字为最小cost
-
tips:在momentum中一般不进行偏差修正,因为10次迭代之后,偏差已经很小了
-
RMSprop(root mean square prop)
返回目录 -
该方法也可以加速梯度下降
2.9 学习率衰减
返回目录
- 改变学习率,α0为原学习率
- 超参:decay_rate