【学习记录】优化方法:梯度下降、牛顿法
前言
学习过程中的一些思考和记录,有错误的地方欢迎指正
神经网络的参数主要通过梯度下降来进行优化。
一、优化方法基础
求解无约束最优化问题的一种最常用的方法。
1.梯度下降
李航老师《统计学习方法》的附录A
例如我们要求解
m
i
n
(
f
(
x
)
)
min(f(x))
min(f(x))的极小值点。
大致思路就是:先选一个合适的初值,然后去不断迭代,更新这个x,直到收敛。
那么怎样去迭代呢:
首先记
f
(
x
)
f(x)
f(x)的梯度是
g
k
=
g
(
x
k
)
=
∇
f
(
x
k
)
g_{k}=g(x^{k})=\nabla f(x^{k})
gk=g(xk)=∇f(xk),这里的
x
k
x_{k}
xk就是第k次的迭代值,
g
k
g_{k}
gk是
f
(
x
)
f(x)
f(x)在
x
k
x^{k}
xk的梯度。
假设
x
0
x^{0}
x0是一个比较合适的初始值,此时可以进行的一阶泰勒展开
f
(
x
)
=
f
(
x
0
)
+
g
0
T
∗
(
x
−
x
0
)
f(x)=f(x^{0})+g_{0}^{T}*(x-x^{0})
f(x)=f(x0)+g0T∗(x−x0)
第k+1次的迭代值
x
k
+
1
x^{k+1}
xk+1 [重点是这个迭代式怎么来的]:
x
k
+
1
←
x
k
+
λ
k
p
k
x^{k+1} \gets x^{k}+ \lambda_{k}p_{k}
xk+1←xk+λkpk
其中,
p
k
=
−
∇
f
(
x
k
)
p_{k} =- \nabla f(x^{k})
pk=−∇f(xk),
λ
k
\lambda_{k}
λk是步长,由一维搜索确定,即
λ
k
\lambda_{k}
λk使得
f
(
x
k
+
λ
k
p
k
)
=
min
λ
≥
0
f
(
x
k
+
λ
k
p
k
)
f (x^{k}+ \lambda_{k}p_{k}) =\min\limits_{\lambda \geq 0} f (x^{k}+ \lambda_{k}p_{k})
f(xk+λkpk)=λ≥0minf(xk+λkpk)
怎么理解上面这个迭代式呢?假设从 x k x^{k} xk 求 x k + 1 x^{k+1} xk+1 且 x k < x k + 1 x^{k} < x^{k+1} xk<xk+1 ,目标是求 f ( x ) f(x) f(x)的最小值,所以希望 f ( x k + 1 ) ≤ f ( x k ) f(x^{k+1}) \le f(x^{k}) f(xk+1)≤f(xk),于是: f ( x k + 1 ) − f ( x k ) = g k T ∗ ( x k + 1 − x k ) ≤ 0 f(x^{k+1}) - f(x^{k})=g_{k}^{T}*(x^{k+1}-x^{k}) \le 0 f(xk+1)−f(xk)=gkT∗(xk+1−xk)≤0 g k T ∗ ( x k + 1 − x k ) ≤ 0 g_{k}^{T}*(x^{k+1}-x^{k}) \le 0 gkT∗(xk+1−xk)≤0,也就是说在 k k k 处的梯度方向和 x k + 1 − x k x^{k+1}-x^{k} xk+1−xk 的方向夹角的cos值小于0, ∣ ∣ g k T ∣ ∣ × ∣ ∣ x k + 1 − x k ∣ ∣ × c o s ( g k T , ( x k + 1 − x k ) ) ≤ 0 ||g_{k}^{T}||\times||x^{k+1}-x^{k}||\times cos(g_{k}^{T},(x^{k+1}-x^{k}) )\le 0 ∣∣gkT∣∣×∣∣xk+1−xk∣∣×cos(gkT,(xk+1−xk))≤0当 c o s ( g k T , ( x k + 1 − x k ) ) = − 1 cos(g_{k}^{T},(x^{k+1}-x^{k}) )=-1 cos(gkT,(xk+1−xk))=−1式上面的值会达到最小值,也就是梯度和 x k + 1 − x k x^{k+1}-x^{k} xk+1−xk的方向恰好相反,也就是 − λ g k T = x k + 1 − x k -\lambda g_{k}^{T}=x^{k+1}-x^{k} −λgkT=xk+1−xk ,这个 λ \lambda λ就是对两者模长的调整,这样就得到了上面的迭代式。
算法描述:
输入:目标函数 f ( x ) f(x) f(x),梯度 g ( x ) = ∇ f ( x ) g(x)=\nabla f(x) g(x)=∇f(x),精度要求 ϵ \epsilon ϵ;
输出: f ( x ) f(x) f(x) 极小值点 x ∗ x^{*} x∗
(1)取初始点 x 0 x^{0} x0,置k=0
(2)计算 f ( x k ) f(x^{k}) f(xk)
(3)计算梯度 g k = g ( x k ) g_{k}=g(x^{k}) gk=g(xk),当 ∣ ∣ g k ∣ ∣ < ϵ ||g_{k}||< \epsilon ∣∣gk∣∣<ϵ时,则停止计算,令 x ∗ = x k x^{*}=x^{k} x∗=xk,否则 p k = − g k p_{k}=-g_{k} pk=−gk,求 λ k \lambda _{k} λk,使 f ( x k + λ k p k ) = min λ ≥ 0 f ( x k + λ k p k ) f (x^{k}+ \lambda_{k}p_{k}) =\min\limits_{\lambda \geq 0} f (x^{k}+ \lambda_{k}p_{k}) f(xk+λkpk)=λ≥0minf(xk+λkpk)(4)置 x k + 1 = x k + λ k p k x^{k+1}=x^{k}+\lambda _{k}p_{k} xk+1=xk+λkpk,计算 f ( x k + 1 ) f(x^{k+1}) f(xk+1),当 ∣ ∣ f ( x k + 1 ) − f ( x k ) ∣ ∣ < ϵ ||f(x_{k+1})-f(x_{k})||< \epsilon ∣∣f(xk+1)−f(xk)∣∣<ϵ或 ∣ ∣ x k + 1 − x k ∣ ∣ < ϵ ||x_{k+1}-x_{k}||< \epsilon ∣∣xk+1−xk∣∣<ϵ 时,停止迭代,令 x ∗ = x k + 1 x^{*}=x^{k+1} x∗=xk+1
(5)否则,置 k = k + 1 k=k+1 k=k+1,转(3) 当目标函数是凸函数时,梯度下降法的解是全局最优解
“花书”上的解释直观易懂,copy在这里:
在
μ
\mu
μ(单位向量)方向的方向导数是函数f在u方向的斜率。换句话说,方向导数是函数
f
(
x
+
α
μ
)
f(x+ \alpha \mu)
f(x+αμ)关于
α
\alpha
α的导数(在
α
=
0
\alpha=0
α=0时取得)。
使用链式法则,可以看到
α
=
0
\alpha=0
α=0时,
∂
∂
α
f
(
x
+
α
μ
)
=
μ
T
∇
x
f
(
x
)
\frac{\partial}{\partial \alpha} f(x+\alpha \mu)=\mu^{T} \nabla _{x}f(x)
∂α∂f(x+αμ)=μT∇xf(x)
为了最小化
f
f
f,我们希望找到使
f
f
f下降得最快得方向。计算方向导数:
min
μ
,
μ
T
μ
=
1
μ
T
∇
x
f
(
x
)
=
min
μ
,
μ
T
μ
=
1
μ
T
∣
∣
μ
∣
∣
2
∣
∣
∇
x
f
(
x
)
∣
∣
2
c
o
s
θ
\min \limits_{\mu ,\mu^{T}\mu=1} \mu^{T}\nabla_{x}f(x)=\min \limits_{\mu ,\mu^{T}\mu=1} \mu^{T}||\mu||_{2}||\nabla_{x}f(x)||_{2}cos\theta
μ,μTμ=1minμT∇xf(x)=μ,μTμ=1minμT∣∣μ∣∣2∣∣∇xf(x)∣∣2cosθ其中,
θ
\theta
θ是
μ
\mu
μ与梯度得夹角。
∣
∣
μ
∣
∣
2
=
0
||\mu||_{2}=0
∣∣μ∣∣2=0代入,就能简化得到
min
μ
cos
θ
\min \limits_{\mu } \cos\theta
μmincosθ,这在
m
u
mu
mu与梯度方向相反时取得最小。换句话说,梯度向量指向上坡,负梯度向量指向下坡。
2.牛顿法
李航老师《统计学习方法》的附录B
方法细节
牛顿法也是一种迭代算法,每一步都需要求解目标函数的黑塞矩阵的逆矩阵。
和上面的梯度下降一样,我们要求解
m
i
n
(
f
(
x
)
)
min(f(x))
min(f(x))的极小值点(这里一般是损失函数)。
那么黑塞矩阵(Hessian Matrix)又是什么呢
Hessian矩阵就是函数二阶导组成的一个方阵。
H
(
x
)
=
[
∂
2
f
∂
x
i
∂
x
j
]
H(x)=\begin{bmatrix} \frac{ \partial^{2} f}{\partial x_{i}\partial x_{j}} \end{bmatrix}
H(x)=[∂xi∂xj∂2f]
比如函数
f
(
x
)
=
a
x
0
2
+
b
∗
x
1
3
+
c
x
2
4
f(x)=ax_{0}^{2}+b*x_{1} ^{3}+cx_{2}^{4}
f(x)=ax02+b∗x13+cx24
∂
f
x
0
=
2
a
x
0
,
∂
f
x
1
=
3
b
x
1
2
,
∂
f
x
2
=
4
a
x
2
3
\frac{ \partial f}{x_{0}}=2ax_{0},\frac{ \partial f}{x_{1}}=3bx_{1}^{2},\frac{ \partial f}{x_{2}}=4ax_{2}^{3}
x0∂f=2ax0,x1∂f=3bx12,x2∂f=4ax23
∂
2
f
x
0
2
=
2
a
,
∂
2
f
x
1
2
=
6
b
x
1
,
∂
2
f
x
2
2
=
12
a
x
2
2
\frac{ \partial^{2} f}{x_{0}^{2}}=2a,\frac{ \partial^{2} f}{x_{1}^{2}}=6bx_{1},\frac{ \partial^{2} f}{x_{2}^{2}}=12ax_{2}^{2}
x02∂2f=2a,x12∂2f=6bx1,x22∂2f=12ax22
∂
2
f
x
0
x
1
=
0
,
∂
2
f
x
0
x
2
=
0
,
∂
2
f
x
1
x
2
=
0
\frac{ \partial^{2} f}{x_{0}x_{1}}=0,\frac{ \partial^{2} f}{x_{0}x_{2}}=0,\frac{ \partial^{2} f}{x_{1}x_{2}}=0
x0x1∂2f=0,x0x2∂2f=0,x1x2∂2f=0Hessian矩阵就是(一定是个方阵):
H
e
s
s
i
a
n
=
[
∂
2
f
x
0
2
∂
2
f
x
0
x
1
∂
2
f
x
0
x
2
∂
2
f
x
0
x
1
∂
2
f
x
1
2
∂
2
f
x
1
x
2
∂
2
f
x
0
x
2
∂
2
f
x
1
x
2
∂
2
f
x
2
2
]
=
[
2
a
0
0
0
6
b
x
1
0
0
0
12
a
x
2
2
]
Hessian=\begin{bmatrix} \frac{ \partial^{2} f}{x_{0}^{2}} & \frac{ \partial^{2} f}{x_{0}x_{1}} & \frac{ \partial^{2} f}{x_{0}x_{2}} \\ \frac{ \partial^{2} f}{x_{0}x_{1}} & \frac{ \partial^{2} f}{x_{1}^{2}} & \frac{ \partial^{2} f}{x_{1}x_{2}} \\ \frac{ \partial^{2} f}{x_{0}x_{2}} & \frac{ \partial^{2} f}{x_{1}x_{2}} & \frac{ \partial^{2} f}{x_{2}^{2}} \end{bmatrix}= \begin{bmatrix} 2a & 0 & 0 \\ 0 & 6bx_{1} & 0 \\ 0 & 0 & 12ax_{2}^{2} \end{bmatrix}
Hessian=⎣⎢⎢⎡x02∂2fx0x1∂2fx0x2∂2fx0x1∂2fx12∂2fx1x2∂2fx0x2∂2fx1x2∂2fx22∂2f⎦⎥⎥⎤=⎣⎡2a0006bx100012ax22⎦⎤
对目标函数
f
(
x
)
f(x)
f(x)二阶泰勒展开:
f
(
x
)
=
f
(
x
k
)
+
g
0
T
∗
(
x
−
x
k
)
+
1
2
(
x
−
x
k
)
T
H
(
x
k
)
(
x
−
x
k
)
f(x)=f(x^{k})+g_{0}^{T}*(x-x^{k})+\frac{1}{2}(x-x^{k})^{T}H(x_{k})(x-x^{k})
f(x)=f(xk)+g0T∗(x−xk)+21(x−xk)TH(xk)(x−xk)
f
(
x
)
f(x)
f(x)有极值的必要条件是在极值点处的一阶导数为0,即梯度向量为0.
假设从第k步开始求极小值点,就有 ∇ f ( x k + 1 ) = 0 \nabla f(x^{k+1})=0 ∇f(xk+1)=0,由上面的二阶展开,可以知道 ∇ f ( x ) = g k + H k ( x − x k ) \nabla f(x)=g_{k}+H_{k}(x-x^{k}) ∇f(x)=gk+Hk(x−xk),那么 g k + H k ( x k + 1 − x k ) = 0 g_{k}+H_{k}(x^{k+1}-x^{k})=0 gk+Hk(xk+1−xk)=0,解得 x k + 1 = x k − H k − 1 g k x^{k+1}=x^{k}-H_{k}^{-1}g_{k} xk+1=xk−Hk−1gk若记 p k = − H k − 1 g k p_{k}=-H_{k}^{-1}g_{k} pk=−Hk−1gk,可以写成 x k + 1 = x k + p k x^{k+1}=x^{k}+p_{k} xk+1=xk+pk
详细算法描述:
输入:目标函数 f ( x ) f(x) f(x),梯度 g ( x ) = ∇ f ( x ) g(x)=\nabla f(x) g(x)=∇f(x),Hessian矩阵,精度要求 ϵ \epsilon ϵ;
输出: f ( x ) f(x) f(x) 极小值点 x ∗ x^{*} x∗(1)取初始点 x 0 x^{0} x0,置k=0
(2)计算 g k = g ( x k ) g_{k}=g(x^{k}) gk=g(xk)
(3)若 ∣ ∣ g k ∣ ∣ < ϵ ||g_{k}||< \epsilon ∣∣gk∣∣<ϵ,则停止计算,得近似解 x ∗ = x k x^{*}=x^{k} x∗=xk
(4)计算 H k = H ( x k ) H_{k}=H(x^{k}) Hk=H(xk),并求 p k p_{k} pk p k = − H k − 1 g k , H k p k = − g k p_{k}=-H_{k}^{-1}g_{k},H_{k}p_{k}=-g_{k} pk=−Hk−1gk,Hkpk=−gk(5)置 x k + 1 = x k + p k x^{k+1}=x^{k}+p_{k} xk+1=xk+pk (6)置 k = k + 1 k=k+1 k=k+1,转(2)
∣ ∣ g k ∣ ∣ < ϵ ||g_{k}||< \epsilon ∣∣gk∣∣<ϵ 即在给定一个足够小的正数的情况下,整个过程可以认为已经收敛,如果还没有满足这个条件,说明模型的最小值还不够近似,需要继续迭代。
那么在这个算法中,我们是用来估计模型的参数,有一次做“用Newton-Raphson Method方法近似求解方程的根”,于是对它们做一些记录,在一些大厂的机考中有遇到过
和上面的思路相同,我们可以得到一个迭代式,不过现在不是高维数据,不用矩阵表示
x
n
+
1
=
x
n
−
f
(
x
n
)
f
′
(
x
n
)
x_{n+1}=x_{n}-\frac{f(x_{n})}{f^{'}(x_{n})}
xn+1=xn−f′(xn)f(xn)
迭代上述式子即可,直到
x
n
+
1
−
x
n
x_{n+1}-x_{n}
xn+1−xn的绝对值小于等于一个给定的足够小的正数。在这里和求解参数没有什么不同,方程的系数就相当于是样本,求解的根类似于上述的参数。(当前的理解是这样)
补充
既然都说到Hessian矩阵的,也来记录一下它的好兄弟Jacobian矩阵,Hessian矩阵对二阶导数感兴趣,那么Jacobian矩阵对一阶导数感兴趣。
二、神经网络参数学习中常见的优化算法
1.小批量梯度下降
参考邱锡鹏老师《神经网络与深度学习》
通常在训练深度神经网络是训练数据的规模都很大,这样很浪费计算资源,所以经常会使用小批量梯度下降。这样迭代式就可以写成 x k + 1 ← x k + λ k p k x^{k+1} \gets x^{k}+ \lambda_{k}p_{k} xk+1←xk+λkpk,如果神经网络的参数是 θ \theta θ,那么就可以写成 θ k + 1 ← θ k + λ k p k \theta^{k+1} \gets \theta^{k}+ \lambda_{k}p_{k} θk+1←θk+λkpk, λ \lambda λ是学习率,更新的梯度为 p k ( θ ) = − 1 K ∑ ( x , y ) ∈ S t ∂ L ( y , f ( x ; θ ) ) ∂ θ p_{k}(\theta)=-\frac{1}{K} \sum_{(x,y)\in S_{t}}\frac{\partial L(y,f(x;\theta))}{\partial \theta} pk(θ)=−K1(x,y)∈St∑∂θ∂L(y,f(x;θ))L就相当于梯度下降中的 f ( x ) f(x) f(x),这里的K就是批量大小。
这种方法实际过程中优化过程
举例来说,有100张灰度图,每张图片是16*16的,把它们分成10个batch,每个batch是十张图片,用一层的MLP去拟合,这样的话就需要256个参数,我们接下来就是要学出这256个参数。用均方误差表示损失函数。
首先,对这256个参数随机初始化,记为
θ
1
0
,
θ
2
0
.
.
.
θ
256
0
\theta_{1}^{0},\theta_{2}^{0}...\theta_{256}^{0}
θ10,θ20...θ2560,
p
r
e
=
θ
1
∗
p
i
x
e
l
1
+
θ
2
∗
p
i
x
e
l
1
+
.
.
.
+
θ
256
∗
p
i
x
e
l
256
pre=\theta _{1}*pixel_{1}+\theta_{2}*pixel_{1}+...+\theta_{256}*pixel_{256}
pre=θ1∗pixel1+θ2∗pixel1+...+θ256∗pixel256第一个batch,
θ
i
1
=
θ
i
0
−
1
10
∑
t
=
1
10
∂
(
p
r
e
t
0
−
l
a
b
e
l
)
2
∂
θ
t
0
\theta_{i}^{1}=\theta_{i}^{0}-\frac{1}{10}\sum_{t=1}^{10}\frac{\partial (pre^{0}_{t}-label)^{2}}{\partial \theta_{t}^{0}}
θi1=θi0−101t=1∑10∂θt0∂(pret0−label)2256个参数的更新公式都相同,后面的9次参数更新和第一个相同。
每一次小批量更新为一次迭代(也就是所有参数更新一次)为一次迭代,所有训练集的样本更新一遍为一个回合,两者的关系是 1 回 合 ( E p o c h ) = ( 训 练 样 本 的 数 量 N 批 量 大 小 K ) ∗ 迭 代 ( I t e r a t i o n ) 1回合(Epoch)=(\frac{训练样本的数量N}{批量大小K})*迭代(Iteration) 1回合(Epoch)=(批量大小K训练样本的数量N)∗迭代(Iteration)在上面的例子中,Iteration就是10,也就是所有参数在一个回合中更新了10次。
2.随机梯度下降SGD
算法
输入:目标函数 f ( x ) f(x) f(x),梯度 g ( x ) = ∇ f ( x ) g(x)=\nabla f(x) g(x)=∇f(x),精度要求 ϵ \epsilon ϵ,初始学习率 λ 0 \lambda_{0} λ0;
输出: f ( x ) f(x) f(x) 极小值点 x ∗ x^{*} x∗
(1)取初始点 x 0 x^{0} x0,置k=0
(2)从训练集中采包含m个样本的小批量,计算 f ( x k ) f(x^{k}) f(xk)
(3)计算梯度 g k = g ( x k ) g_{k}=g(x^{k}) gk=g(xk),当 ∣ ∣ g k ∣ ∣ < ϵ ||g_{k}||< \epsilon ∣∣gk∣∣<ϵ时,则停止计算,令 x ∗ = x k x^{*}=x^{k} x∗=xk,否则 p k = − g k p_{k}=-g_{k} pk=−gk,使( τ \tau τ为迭代次数) g k ( θ ) = 1 K ∑ ( x , y ) ∈ S t ∂ L ( y , f ( x ; θ ) ) ∂ θ , λ k = ( 1 − α ) λ 0 + α λ τ g_{k}(\theta)=\frac{1}{K} \sum_{(x,y)\in S_{t}}\frac{\partial L(y,f(x;\theta))}{\partial \theta},\lambda_{k}=(1-\alpha)\lambda_{0}+\alpha \lambda_{\tau} gk(θ)=K1(x,y)∈St∑∂θ∂L(y,f(x;θ)),λk=(1−α)λ0+αλτ(4)置 x k + 1 = x k + λ k p k x^{k+1}=x^{k}+\lambda _{k}p_{k} xk+1=xk+λkpk,计算 f ( x k + 1 ) f(x^{k+1}) f(xk+1),当 ∣ ∣ f ( x k + 1 ) − f ( x k ) ∣ ∣ < ϵ ||f(x_{k+1})-f(x_{k})||< \epsilon ∣∣f(xk+1)−f(xk)∣∣<ϵ或 ∣ ∣ x k + 1 − x k ∣ ∣ < ϵ ||x_{k+1}-x_{k}||< \epsilon ∣∣xk+1−xk∣∣<ϵ 时,停止迭代,令 x ∗ = x k + 1 x^{*}=x^{k+1} x∗=xk+1
(5)否则,置 k = k + 1 k=k+1 k=k+1,转(3)
解释
《Deep Learning》'花书'
SGD算法中的一个关键参数是学习率,在训练模型的过程中,有必要随着时间的推移逐渐降低学习率,我们将第k步迭代的学习率记作
ϵ
k
\epsilon_{k}
ϵk,这是因为SGD中梯度估计引入的噪声源(m个样本的随机采样)并不会在极小值点处消失。
相比之下,当我们使用批量梯度下降到达极小点时,整个损失函数的真实梯度会变得很小,之后为0(因为想找的点它的导数就是0嘛),因此批量梯度下降可以使用固定的学习率。
SGD收敛的充分条件:
∑
k
∞
λ
k
=
∞
,
∑
k
∞
λ
k
2
<
∞
\sum_{k}^{\infty}\lambda_{k}=\infty,\sum_{k}^{\infty}\lambda_{k}^{2}<\infty
∑k∞λk=∞,∑k∞λk2<∞
实践中,一般会线性衰减学习率到第
τ
\tau
τ次迭代(即常见的线性策略):
λ
k
=
(
1
−
α
)
λ
0
+
α
λ
τ
\lambda_{k}=(1-\alpha)\lambda_{0}+\alpha \lambda_{\tau}
λk=(1−α)λ0+αλτ其中,
α
=
k
τ
\alpha=\frac{k}{\tau}
α=τk,在
τ
\tau
τ步迭代后,一般会使
λ
\lambda
λ保持常数。
再结合上面的例子,也就是说一个batch会有一个学习率,对模型的参数更新中的步长同时也进行更新。在不设置次数限制的情况下,上面的例子中,步长
λ
\lambda
λ也会更新10次。
通常,就总训练时间和最终代价值而言,最优初始学习率会高于大约迭代100次后达到最佳效果的学习率。因此,通常最好是检测最早的几轮迭代,选择一个比在效果上表现最佳的学习率更大的学习率,但又不能太大导致严重的震荡。
3.动量法
《Deep Learning》'花书'
一种在上述方法的基础上加速学习的优化方法,形式上来看,动量算法引入了变量v充当速度的角色,代表参数在参数空间移动的方向和速率。
引入v后,参数的更新规则有了一些变化,m为批量大小
v
←
α
v
−
λ
∇
θ
(
1
K
∑
(
x
,
y
)
∈
S
t
∂
L
(
y
,
f
(
x
;
θ
)
)
∂
θ
)
v\gets \alpha v -\lambda \nabla_{\theta} (\frac{1}{K}\sum_{(x,y)\in S_{t}}\frac{\partial L(y,f(x;\theta))}{\partial \theta})
v←αv−λ∇θ(K1(x,y)∈St∑∂θ∂L(y,f(x;θ)))
θ
←
θ
+
v
\theta \gets \theta+v
θ←θ+v从公式中就可以看到,速度v累积了梯度元素,
λ
\lambda
λ不变,
α
\alpha
α越大,之前的梯度对现在方向的影响也越大。
之前,步长只是梯度范数乘以学习率,现在步长取决于梯度序列的大小和排列。当许多的梯度指向相同的方向时,步长最大。
对比与思考
1.梯度下降法 :一阶泰勒展开 步长需要调整
牛顿法: 二阶泰勒展开 没有需要调整的超参数
2.
方法 | 迭代式 |
---|---|
SGD | p k ( θ ) = − 1 K ∑ ( x , y ) ∈ S t ∂ L ( y , f ( x ; θ ) ) ∂ θ p_{k}(\theta)=-\frac{1}{K} \sum_{(x,y)\in S_{t}}\frac{\partial L(y,f(x;\theta))}{\partial \theta} pk(θ)=−K1(x,y)∈St∑∂θ∂L(y,f(x;θ)) λ k = ( 1 − α ) λ 0 + α λ τ \lambda_{k}=(1-\alpha)\lambda_{0}+\alpha \lambda_{\tau} λk=(1−α)λ0+αλτ θ k + 1 = θ k + λ k p k \theta^{k+1}=\theta^{k}+\lambda _{k}p_{k} θk+1=θk+λkpk |
动量法 | p k ( θ ) = − 1 K ∑ ( x , y ) ∈ S t ∂ L ( y , f ( x ; θ ) ) ∂ θ p_{k}(\theta)=-\frac{1}{K} \sum_{(x,y)\in S_{t}}\frac{\partial L(y,f(x;\theta))}{\partial \theta} pk(θ)=−K1(x,y)∈St∑∂θ∂L(y,f(x;θ)) v k + 1 ← α v k + λ k p k v^{k+1}\gets \alpha v^{k} +\lambda^{k}p_{k} vk+1←αvk+λkpk θ k + 1 = θ k + v k + 1 \theta^{k+1}=\theta^{k}+v^{k+1} θk+1=θk+vk+1 |