1、前言
梯度下降法分成三类,batch GD,stochastic GD,mini-batch GD.
三者分别是使用全量样本、随机一个样本、部分样本计算梯度。
普通的mini-batch GD,不能保证好的收敛。
一些挑战如下:
- 选择好的学习率;
- 学习率规划,在拟合后期,尽量减少学习率;
- 尽量避免在非凸函数(神经网络)时陷入局部最优。
以下是梯度下降优化算法介绍:
2、动量(Momentum)
动量算法,目的是为了让SGD尽可能地跳出局部最优值。
vt=γvt−1+η∇θJ(θ)θ=θ−vt
可以看出,和传统的SGD相比,增加了一个动量系数
γ;
一般,动量系数
γ设为0.9;也就是说,更新的部分占比更多,更加容易走出局部最优。
3、Adagrad
对每次更新的不同参数
θi使用不同的学习率;频繁出现的特征会使用小的学习率,适用处理稀疏数据。研究发现,Adagrad能提高SGD的鲁棒性。
学习率和过去的梯度有关。
gt,i=∇θJ(θt,i)θt+1,i=θt,i−Gt,ii+ϵ
η⋅gt,i
Gt∈Rd×d是对角矩阵,对角元素是参数
θi的梯度平方和。
等价的另一种表达:
θt+1=θt−Gt+ϵ
η⊙gt
缺点
由于 G 是梯度的平方和,所以会不断的累加,最终导致学习率很低,以至于学不到什么东西。
4、 Adadelta
针对Adagrad的缺点,Adadelta 的学习率是和一定长度的积累梯度有关,也就是增加了一个控制计算积累梯度的参数
ω;
定义一个之前梯度的平均和现在梯度的线性和,并称为衰减平均值:
E[g2]t=γE[g2]t−1+(1−γ)gt2
因此,用 E 代替 G,有:
Δθt=−E[g2]t+ϵ
ηgt
5、Adam(Adaptive Moment estimation)
自适应时刻估计,对学习率进行自动学习。
它主要是,对过去平方梯度的指数衰减平均值,(这个Adadelta也是这样做),同时,Adam 会保持过去梯度的指数衰减平均值。(这个和动量算法是一样的)
mt=β1mt−1+(1−β1)gtvt=β2vt−1+(1−β2)gt2
mt,vt分别计算梯度的均值和方差,初始化都是 0 向量。
并且进行偏差修正,
m^t=1−β1tmtv^t=1−β2tvt
Adam的更新:
θt+1=θt−v^t
+ϵηm^t
参考:
- 推荐 梯度优化算法