几种梯度下降优化算法

1、前言

梯度下降法分成三类,batch GD,stochastic GD,mini-batch GD.
三者分别是使用全量样本、随机一个样本、部分样本计算梯度。

普通的mini-batch GD,不能保证好的收敛。
一些挑战如下:

  • 选择好的学习率;
  • 学习率规划,在拟合后期,尽量减少学习率;
  • 尽量避免在非凸函数(神经网络)时陷入局部最优。

以下是梯度下降优化算法介绍:

2、动量(Momentum)

动量算法,目的是为了让SGD尽可能地跳出局部最优值。

v t = γ v t 1 + η θ J ( θ ) θ = θ v t v_t = \gamma v_{t-1} + \eta \nabla_\theta J( \theta) \\ \theta = \theta - v_t
可以看出,和传统的SGD相比,增加了一个动量系数 γ γ

一般,动量系数 γ γ 设为0.9;也就是说,更新的部分占比更多,更加容易走出局部最优。

3、Adagrad

对每次更新的不同参数 θ i \theta_i 使用不同的学习率;频繁出现的特征会使用小的学习率,适用处理稀疏数据。研究发现,Adagrad能提高SGD的鲁棒性。

学习率和过去的梯度有关。

g t , i = θ J ( θ t , i ) θ t + 1 , i = θ t , i η G t , i i + ϵ g t , i g_{t, i}=\nabla_{\theta} J\left(\theta_{t, i}\right) \\ \theta_{t+1, i} = \theta_{t, i} - \dfrac{\eta}{\sqrt{G_{t, ii} + \epsilon}} \cdot g_{t, i}
G t R d × d G_{t} \in \mathbb{R}^{d \times d} 是对角矩阵,对角元素是参数 θ i \theta_i 的梯度平方和。

等价的另一种表达:
θ t + 1 = θ t η G t + ϵ g t \theta_{t+1} = \theta_{t} - \dfrac{\eta}{\sqrt{G_{t} + \epsilon}} \odot g_{t}
缺点
由于 G 是梯度的平方和,所以会不断的累加,最终导致学习率很低,以至于学不到什么东西。

4、 Adadelta

针对Adagrad的缺点,Adadelta 的学习率是和一定长度的积累梯度有关,也就是增加了一个控制计算积累梯度的参数 ω ω

定义一个之前梯度的平均和现在梯度的线性和,并称为衰减平均值:
E [ g 2 ] t = γ E [ g 2 ] t 1 + ( 1 γ ) g t 2 E[g^2]_t = \gamma E[g^2]_{t-1} + (1 - \gamma) g^2_t

因此,用 E 代替 G,有:
Δ θ t = η E [ g 2 ] t + ϵ g t \Delta \theta_t = - \dfrac{\eta}{\sqrt{E[g^2]_t + \epsilon}} g_{t}

5、Adam(Adaptive Moment estimation)

自适应时刻估计,对学习率进行自动学习。

它主要是,对过去平方梯度的指数衰减平均值,(这个Adadelta也是这样做),同时,Adam 会保持过去梯度的指数衰减平均值。(这个和动量算法是一样的)
m t = β 1 m t 1 + ( 1 β 1 ) g t v t = β 2 v t 1 + ( 1 β 2 ) g t 2 m_t = \beta_1 m_{t-1} + (1 - \beta_1) g_t \\ v_t = \beta_2 v_{t-1} + (1 - \beta_2) g_t^2

m t , v t m_t,v_t 分别计算梯度的均值和方差,初始化都是 0 向量。

并且进行偏差修正,
m ^ t = m t 1 β 1 t v ^ t = v t 1 β 2 t \hat{m}_t = \dfrac{m_t}{1 - \beta^t_1} \\ \hat{v}_t = \dfrac{v_t}{1 - \beta^t_2}

Adam的更新:
θ t + 1 = θ t η v ^ t + ϵ m ^ t \theta_{t+1} = \theta_{t} - \dfrac{\eta}{\sqrt{\hat{v}_t} + \epsilon} \hat{m}_t


参考:

  1. 推荐 梯度优化算法
发布了510 篇原创文章 · 获赞 152 · 访问量 77万+

猜你喜欢

转载自blog.csdn.net/rosefun96/article/details/104022004