1. mini-batch,小批量梯度下降法
- 批量(Batch)和小批量(mini-batch)梯度下降法
向量化输入输出
- 输入:(
nx
,m),n个特征,m个样本
X=[x(1)x(2) ... x(m)] - 输出:(1,m)
Y=[y(1)y(2) ... y(m)]
Batch & mini-batch定义
- 批量:一次迭代整个数据集,计算出一个误差然后更新权值和偏置(w,b)
- 小批量:一次迭代mini-batch size个样本,计算一个误差然后更新参数
算法步骤
- 假设样本集大小为500万,mini-batch size为1000,则有5000个mini-batch
- repeat
- For t=1…5000
- Forward prop on
X{t}
- Z[1]=W[1]X{t}+b[1]
- A[1]=g[1](Z[1])
- …
- A[L]=g[L](Z[L])
- Compute cost J{t}=11000∑Li=1L(y^(i),y(i))+λ2∗1000∑L||w[l]||2F
- Backprop to compute gradients using
J{t}(X{t},Y{t})
- W[L]:=W[L]−αdW[L],b[L]:=b[L]−αdb[L]
- Forward prop on
X{t}
- epoch: 遍历一次训练集,使用batch,一次epoch只能更新一次参数,mini-batch如上例,可以更新5000次参数
- For t=1…5000
J下降
- batch: 一直下降
- mini-batch: 局部波动,整体下降
选择mini-batch size
- mini-batch size=m: Batch gradient descent
- mini-batch size=1: Stochastic gradient descent
- 优点和缺点
- Batch gradient descent: 可以很好的取到最好的参数,但是如果数据集太大会导致迭代一次耗时很长
- Stochastic gradient descent: 有噪声,虽然可以通过减小学习率减少噪声,但是不会取到最好的参数,而且失去了向量化带来的速度优化
- mini-batch: 可以向量化,不需要一次性遍历整个训练集
- 选择mini-batch size的原则
- 如果训练集很小,比如样本数小于2000,mini-batch size=m
- mini-batch size取2的整数倍,比如说64,128,256,512等,有助于计算机加快运算
- 确保CPU/GPU能够加载一个mini-batch
2. 指数加权平均(Exponentially weight average)
计算公式
给定一个时间序列,比如伦敦一年的每天气温 θ1,θ2,...,θ365
v0v1vt===00.9v0+0.1θ10.9vt−1+0.1θt维基百科上的定义
St={Y1,αYt+(1−α)St−1,t=1t>1
其中 α 是权值, Yt 是实际值, St 是加权平均后的值
平均过去多少天
≈11−β
- 如上 β=0.9 ,则约等于10天
- β 越大,过去的影响越多,曲线越平滑,即时反应越弱
算法本质
v100=0.1θ100+0.1∗0.9∗θ99+0.1∗0.92∗θ98 ...
- 0.910≈1e ,相当于把过去10天的气温指数加权平均作为当日的气温,因为10天后权重下降到当日的三分之一不到
算法步骤
- v = 0
- repeat
- get θi
- v := β v+(1- β ) θi
- 好处,节省内存,尤其对于数据大的情况,和移动窗求加权平均稍微差一点
偏差修正(bias correction)
- 注意到加权平均的第一个值被初始化为0,所以前几个值和实际值会相差很大,使用偏差修正来改变
将上述算法计算后的值做如下处理
vt:=vt1−βt对于第一个值
v1=βv0+(1−β)θ1=(1−β)θ1v1:=v11−β=θ1对于第二个值
v2=βv1+(1−β)θ2=(1−β)θ2+β(1−β)θ1v2:=v21−β2=11−βθ2+β1−βθ1越往后偏差修正的影响越小
3. 动量梯度下降法(gradient descent with momentum)
- 计算梯度的指数加权平均数,并利用该梯度更新权重
算法步骤
- On iteration t:
- Compute dw, db on current mini-batch
- vdw=βvdw+(1−β)dw
- vdb=βvdb+(1−β)db
- w:=w−αvdw,b:=b−αvdb
- 另一个版本: vdw=βvdw+dw,vdb=βvdb+db , vdw,vdb 减小了 1−β 倍,所以 α 需要相应改变
- 效果:在抵达最小值的路径上减少了摆动,通过累加,减少摆动的误差,增大向极小值的梯度
- 一般 β=0.9
4. RMSprop(root mean square prop)
算法步骤
- On iteration t:
- Compute dw, db on current mini-batch
- Sdw=β2vdw+(1−β2)dw2
- Sdb=β2vdb+(1−β2)db2
- w:=w−αvdwSdw√+ϵ,b:=b−αvdbSdb√+ϵ
- 效果:在抵达最小值的路径上减少了摆动,比较大的dwi,会被一个大的vdwi除,所以可以减少摆动,同时可以增大学习速率来加快学习
- ϵ=10−8 ,防止分母太小导致变化太大
5. Adam(Adaptive moment estimate) optimization algorithm
- 整合了momentum和RMSprop
算法步骤
- On iteration t:
- Compute dw, db on current mini-batch
- momentum
- vdw=β1vdw+(1−β1)dw,vdb=β1vdb+(1−β1)db
- RMSprop
- Sdw=β2vdw+(1−β2)dw2,Sdb=β2vdb+(1−β2)db2
- bias correction
- vcorrectiondw=vdw/(1−βt1),vcorrectiondb=vdb/(1−βt1)
- Scorrectiondw=Sdw/(1−βt2),Scorrectiondb=Sdb/(1−βt2)
- change the w and b
- w:=w−αvcorrectiondwScorrectiondw√+ϵ,b:=b−αvcorrectiondbScorrectiondb√+ϵ
参数设置
- alpha : 需要调参
- β1 : 影响 dw,db ,作者设置为0.9,一般不需要改
- β2 : 影响 dw2,db2 ,作者设置为0.999,一般不需要改
- ϵ : 一般设置为 10−8
6. 学习率衰减(learning rate decay)
- 随时间慢慢减少学习率,在学习初期步长较大,能够比较快的接近最小值,后期步长减小,帮助收敛
算法步骤
- 1 epoch: 迭代一次训练集
- α=11+decayrate∗epochnumα0
- 或者 α=0.95epochnumα0 或者 α=kepochnum√α0,α=ktα0 或者离散下降(discrete staircase),阶梯函数,过几代就减少,例如减小一半
7. 局部最优问题
- 不太可能碰到局部最优,J对w,b求导为0的点一般都是鞍点,w的维度很高,只要有一个是凹函数,就是鞍点
- plateaus: 导数长时间接近于0的区域,因为导数很小,所以需要长时间的迭代才能走出来
课程地址:http://mooc.study.163.com/course/deeplearning_ai-2001281003?tid=2001391036#/info