梯度下降法(Gradient Descent)
目前梯度下降法,目前分为三种梯度下降法:标准梯度下降法(GD,Grandient Descent),随机梯度下降法(SGD,Stochastic Gradient Descent)及批量梯度下降法(BGD,Batch Gradient Descent)
1、标准梯度下降(GD)
- 假设要学习训练的模型参数
W
W
W,代价函数为
J
(
W
)
J(W)
J(W)则代价函数关于模型参数的偏导数即相关梯度
Δ
J
(
W
)
\Delta J(W)
ΔJ(W),学习率为
η
t
\eta_t
ηt,则使用梯度下降法更新参数为:
W t + 1 = W t − η Δ J ( W t ) W_{t+1} = W_t - \eta\Delta J(W_t) Wt+1=Wt−ηΔJ(Wt)
W 为模型参数 - 从表达式来看,模型参数的更新调整,与代价函数关于模型参数的梯度有关,即沿着梯度的方向不断减少模型参数,从而最小化代价函数
- 基本策略是“在有限视距内寻找最快路径下山”,因此没走一步,参考当前位置走最陡的方向(即梯度)进而迈出下一步。可以表示为下图:
缺点: - 训练速度慢:每走一步就需要调整下一步的方向,下山的速度变慢。在应用大型数据集中,每输入一个样本都要更新一次参数,且每次迭代都要遍历所有的样本。使得训练过程及其缓慢,需要花费很长时间才能得到收敛解
- 容易陷入局部最优解:由于是在有限视距内寻找下山的反向。当陷入平坦的洼地,会误以为达到了山谷最低点,从而不会继续往下走。所谓局部最优解就是鞍点。落入鞍点,梯度为0使得模型不会更新
2.批量梯度下降法(BGD)
- 假设批量训练样本总数为n,每次输入和输出的样本分别为
X
(
i
)
,
Y
(
i
)
X^{(i)},Y^{(i)}
X(i),Y(i),模型参数为
W
W
W,代价函数为
J
(
W
)
J(W)
J(W),每输入一个样本
i
i
i代价函数关于
W
W
W的梯度为
Δ
J
i
(
W
t
,
X
(
i
)
,
Y
(
i
)
)
\Delta J_i(W_t,X^{(i)},Y^{(i)})
ΔJi(Wt,X(i),Y(i)),学习率为
η
t
\eta_t
ηt,则使用批量梯度下降更新的公式如下:
W t + 1 = W t − η t ∑ i = 1 n Δ J i ( W t , X ( i ) , Y ( i ) ) W_{t+1} = W_t - \eta_t\sum_{i=1}^{n}\Delta J_i(W_t,X^{(i)},Y^{(i)}) Wt+1=Wt−ηt∑i=1nΔJi(Wt,X(i),Y(i))
其中, W t W_t Wt表示 t t t时刻的模型参数 - 从表达式来看,模型参数的调整更新与全部输入样本的代价函数的和(即批量/全局误差)有关。即每次权值调整发生在批量样本输入之后,而不是每输入一个样本就更新一次模型参数。这样就会大大加快训练速度
- 基本策略可以理解,在下山之前掌握了附近的地势情况,选择总体平均梯度最小的方向下山。
评价: - 批量梯度下降法比标准梯度下降法训练时间短,且每次下降的方向很正确
3.随机梯度下降法(SGD)
- 对比批量梯度下降法,假设从一批训练样本
n
n
n中随机选取一个样本
i
s
i_s
is。模型参数为
W
W
W,代价函数为
J
(
W
)
J(W)
J(W),梯度为
Δ
J
(
W
)
\Delta J(W)
ΔJ(W),学习率为
η
t
\eta_t
ηt,则使用随机梯度下降法更新参数表达式为:
W t = W t − η t g t W_t = W_t - \eta_tg_t Wt=Wt−ηtgt
其中, g t = Δ J i s ( W t ; X i s ; X ( i S ) ) , i s ∈ 1 , 2 , . . . , n g_t = \Delta J_{i_s}(W_t;X^{i_s};X^{(i_S)}),i_s\in {1,2,...,n} gt=ΔJis(Wt;Xis;X(iS)),is∈1,2,...,n表示随机选择的一个梯度方向, W t W_t Wt表示 t t t时刻的模型参数。 - E ( g t ) = Δ J ( W t ) E(g_t)=\Delta J(W_t) E(gt)=ΔJ(Wt),这里引入了随机性和噪声,但期望仍然等于正确的梯度下降。
- 基本测率可以理解为随机梯度下降像一个盲人下山,不用每走一步计算一次梯度,但总能下到山底,只不过过程很扭曲
评价
优点- 虽然SGD像需要走很多步,但是对梯度的要求很低(计算梯度快)。引入噪声,大量的理论和实践工作证明,只要噪声不是很大,SGD会很好的收敛。
- 应用大型数据,训练速度很快。例如每次从百万数据样本中,取几百个数据点,算一个SGD梯度,更新一下模型参数。相比于标准梯度下降法遍历全部样本,每输入一个样本更新一次参数,要快的多
缺点 - SGD在随机选择梯度的同时会引入噪声,使得权值更新的方向不一定正确
- 未能克服局部最优解问题
动量优化法
动量优化方法是在梯度下降法的基础上进行的基础上进行的改变,具有加速梯度下降的作用。一般有标准动量优化方法Momentum、NAG(Nesterov accelerated gradient)动量优化方法。
NAG在Tensorflow中与Momentum合并在同一函数tf.train.MomentumOptimizer中,可以通过参数配置启用
1.Momentum
- 使用动量(Momentum)的随机梯度下降法(SGD),主要思想是引入一个积攒历史梯度信息动量来加速SGD
- 从训练集中取一个大小为
n
n
n的小批量
{
X
(
1
)
,
X
(
2
)
,
.
.
.
,
X
(
n
)
}
\{X^{(1)},X^{(2)},...,X^{(n)}\}
{X(1),X(2),...,X(n)}样本,对应的真实值分别为
Y
(
i
)
Y^{(i)}
Y(i),则Momentum表示为
{ v t = α v t − 1 + η t Δ J ( W t , X i s , Y ( i s ) ) W t + 1 = W t − v t \left\{\begin{matrix} & v_t = \alpha v_{t-1}+\eta_t\Delta J(W_t,X^{i_s},Y^{(i_s)}) & \\ & W_{t+1} = W_t - v_t & \end{matrix}\right. {vt=αvt−1+ηtΔJ(Wt,Xis,Y(is))Wt+1=Wt−vt
其中, v t v_t vt表示t时刻积攒的加速度; α \alpha α表示动力的大小;一般取值为0.9(表示最大速度10倍于SGD)。 Δ J ( W t , X ( i s ) , Y ( i s ) ) \Delta J(W_t,X^{(i_s)},Y^{(i_s)}) ΔJ(Wt,X(is),Y(is))含义见SGD算法。 W t W_t Wt表示t时刻模型参数。 - 动量主要解决SGD的两个问题:一是随机梯度的方法(引入的噪声);二是Hessian矩阵病态问题(可以理解为SGD在收敛过程中和正确梯度相比来回摆动比较大的问题)。
- 理解策略为:由于当前权值的改变会受到上一次权值改变的影响,类似于小球向下滚动的时候带上了惯性。这样可以加快小球向下滚动的速度。