泰勒公式可以表示为:
f
(
x
+
δ
)
=
f
(
x
)
+
g
T
δ
+
1
2
δ
T
h
δ
+
O
(
δ
3
)
(1)
f(\boldsymbol{x}+\boldsymbol{\delta})=f(\boldsymbol{x})+\boldsymbol{g}^{\rm T}\boldsymbol{\delta}+\frac{1}{2}\boldsymbol{\delta}^{\rm T}\boldsymbol{h}\boldsymbol{\delta}+O(\boldsymbol{\delta^3}) \tag{1}
f(x+δ)=f(x)+gTδ+21δThδ+O(δ3)(1)
在(2)中
x
=
[
x
1
,
.
.
.
,
x
n
]
T
δ
=
[
δ
1
,
.
.
.
,
δ
n
]
T
g
=
[
∂
f
∂
x
1
,
.
.
.
,
∂
f
∂
x
n
]
T
h
=
[
∂
2
f
∂
x
1
2
∂
2
f
∂
x
1
∂
x
2
⋯
∂
2
f
∂
x
1
∂
x
n
∂
2
f
∂
x
2
∂
x
1
∂
2
f
∂
x
2
2
⋯
∂
2
f
∂
x
2
∂
x
n
⋮
⋮
⋱
⋮
∂
2
f
∂
x
n
∂
x
1
∂
2
f
∂
x
n
∂
x
2
⋯
∂
2
f
∂
x
n
2
]
\boldsymbol{x}=[x_1,...,x_n]^{\rm T} \\ \boldsymbol{\delta}=[\delta_1,...,\delta_n]^{\rm T}\\ \boldsymbol{g}=[\frac{\partial f}{\partial x_1},...,\frac{\partial f}{\partial x_n}]^{\rm T}\\ \boldsymbol{h}= \begin{bmatrix} \frac{\partial^2 f}{\partial x_1^2} & \frac{\partial^2 f}{\partial x_1 \partial x_2} & \cdots & \frac{\partial^2 f}{\partial x_1 \partial x_n}\\ \frac{\partial^2 f}{\partial x_2 \partial x_1} & \frac{\partial^2 f}{\partial x_2^2} & \cdots & \frac{\partial^2 f}{\partial x_2 \partial x_n}\\ \vdots & \vdots & \ddots & \vdots\\ \frac{\partial^2 f}{\partial x_n \partial x_1} & \frac{\partial^2 f}{\partial x_n \partial x_2} & \cdots & \frac{\partial^2 f}{\partial x_n^2} \end{bmatrix}
x=[x1,...,xn]Tδ=[δ1,...,δn]Tg=[∂x1∂f,...,∂xn∂f]Th=
∂x12∂2f∂x2∂x1∂2f⋮∂xn∂x1∂2f∂x1∂x2∂2f∂x22∂2f⋮∂xn∂x2∂2f⋯⋯⋱⋯∂x1∂xn∂2f∂x2∂xn∂2f⋮∂xn2∂2f
在上面的表达式中 x \boldsymbol{x} x表示函数自变量, δ \boldsymbol{\delta} δ中每个元素分别对应自变量的扰动, g \boldsymbol{g} g表示梯度矩阵, h \boldsymbol{h} h表示海参矩阵,它是一个实对称矩阵。以下推导梯度下降法和牛顿下降法。
(1)梯度下降法
当每个自变量的扰动量足够小时,可以忽略二阶及二阶以上的泰勒展开项,此时(2)可以表示为:
f
(
x
+
δ
)
≈
f
(
x
)
+
g
T
δ
(2)
f(\boldsymbol{x}+\boldsymbol{\delta}) \approx f(\boldsymbol{x})+\boldsymbol{g}^{\rm T}\boldsymbol{\delta} \tag{2}
f(x+δ)≈f(x)+gTδ(2)
我们希望每次运动后的函数值都小于运动前的函数值,即
f
(
x
+
δ
)
<
f
(
x
)
f(\boldsymbol{x}+\boldsymbol{\delta})< f(\boldsymbol{x})
f(x+δ)<f(x),所以显然此时需要满足
g
T
δ
=
∣
∣
g
∣
∣
∣
∣
δ
∣
∣
c
o
s
(
<
g
,
δ
>
)
<
0
\boldsymbol{g}^{\rm T}\boldsymbol{\delta}=||\boldsymbol{g}||||\boldsymbol{\delta}||{\rm cos}(<\boldsymbol{g},\boldsymbol{\delta}>)< 0
gTδ=∣∣g∣∣∣∣δ∣∣cos(<g,δ>)<0,需要注意的函数在已知点处的梯度是确定的,也就是说在某点上
g
\boldsymbol{g}
g是一个常向量,所以
g
T
δ
\boldsymbol{g}^{\rm T}\boldsymbol{\delta}
gTδ中能改变的只有
δ
\boldsymbol{\delta}
δ,显然,当
c
o
s
(
<
g
,
δ
>
)
<
0
{\rm cos}(<\boldsymbol{g},\boldsymbol{\delta}>)< 0
cos(<g,δ>)<0,即向量
g
\boldsymbol{g}
g和
δ
\boldsymbol{\delta}
δ之间的夹角为钝角时,该扰动量能够使函数值下降,且当
c
o
s
(
<
g
,
δ
>
)
=
−
1
{\rm cos}(<\boldsymbol{g},\boldsymbol{\delta}>)=-1
cos(<g,δ>)=−1,即该扰动向量的方向和该点处的梯度向量反向时,函数值下降最快。梯度下降法就是在每个点上均朝着该点梯度反方向运动,经过不断迭代使函数值取得最小值的方法。
函数
f
(
x
)
f(\boldsymbol{x})
f(x)是一个超曲面(如图1所示),令
f
(
x
)
=
C
f(\boldsymbol{x})=C
f(x)=C,其中
C
C
C为常数,即用一个超平面去切
f
(
x
)
f(\boldsymbol{x})
f(x)对应的超曲面,则当
C
C
C取不同值时,可以得到如图1所示的等值线图,函数
f
(
x
)
f(\boldsymbol{x})
f(x)上某一点的梯度方向与该点切线方向垂直,且指向等值线增大的方向,因此,梯度下降法的运动路线即如图1所示,始终沿着函数梯度反方向运动。
梯度下降法的具体操作步骤如下:
a) 设第
k
k
k次迭代的对应的点为
(
x
k
,
f
(
x
k
)
)
(\boldsymbol{x}_k,f(\boldsymbol{x}_k))
(xk,f(xk)),计算该点的梯度向量
g
k
\boldsymbol{g}_k
gk;
b) 根据梯度下降法可得迭代公式
x
k
+
1
=
x
k
−
α
g
k
\boldsymbol{x}_{k+1}=\boldsymbol{x}_k-\alpha \boldsymbol{g}_k
xk+1=xk−αgk,其中
α
\alpha
α表示学习率;
c) 不断重复上面的迭代过程,直到满足一定的停止准则。
以一个例子进行说明,设函数
f
(
x
)
=
f
(
x
1
,
x
2
)
=
x
1
2
+
x
2
2
f(\boldsymbol{x})=f(x_1,x_2)=x_1^2+x_2^2
f(x)=f(x1,x2)=x12+x22,显然(0,0)即为该函数的最小值点,梯度向量为
g
=
[
2
x
1
,
2
x
2
]
T
\boldsymbol{g}=[2x_1,2x_2]^{\rm T}
g=[2x1,2x2]T,设初始时刻
x
0
=
(
1
,
3
)
\boldsymbol{x}_0=(1,3)
x0=(1,3),学习率
α
=
0.1
\alpha=0.1
α=0.1,则迭代过程如下:
x
0
=
(
1
,
3
)
x
1
=
x
0
−
α
g
0
=
(
1
,
3
)
−
0.1
(
2
,
6
)
=
(
0.8
,
2.4
)
x
2
=
x
1
−
α
g
1
=
(
0.8
,
2.4
)
−
0.1
(
1.6
,
4.8
)
=
(
0.64
,
1.92
)
x
3
=
(
0.512
,
1.536
)
⋮
x
10
≈
(
0.107374
,
0.322122
)
⋮
x
100
≈
(
1.6296
e
−
10
,
4.8888
e
−
10
)
\boldsymbol{x}_0=(1,3)\\ \boldsymbol{x}_1=\boldsymbol{x}_0-\alpha \boldsymbol{g}_0=(1,3)-0.1(2,6)=(0.8,2.4)\\ \boldsymbol{x}_2=\boldsymbol{x}_1-\alpha \boldsymbol{g}_1=(0.8,2.4)-0.1(1.6,4.8)=(0.64,1.92)\\ \boldsymbol{x}_3=(0.512,1.536)\\ \vdots\\ \boldsymbol{x}_{10} \approx (0.107374,0.322122)\\ \vdots\\ \boldsymbol{x}_{100} \approx (1.6296e^{-10},4.8888e^{-10})\\
x0=(1,3)x1=x0−αg0=(1,3)−0.1(2,6)=(0.8,2.4)x2=x1−αg1=(0.8,2.4)−0.1(1.6,4.8)=(0.64,1.92)x3=(0.512,1.536)⋮x10≈(0.107374,0.322122)⋮x100≈(1.6296e−10,4.8888e−10)
显然,经过多次迭代后,已逐渐靠近最优点。
(2)牛顿下降法
梯度下降法只利用到泰勒展开式的一次项,将泰勒展开至二次项可得到:
f
(
x
+
δ
)
≈
f
(
x
)
+
g
T
δ
+
1
2
δ
T
h
δ
(3)
f(\boldsymbol{x}+\boldsymbol{\delta}) \approx f(\boldsymbol{x})+\boldsymbol{g}^{\rm T}\boldsymbol{\delta}+\frac{1}{2}\boldsymbol{\delta}^{\rm T}\boldsymbol{h}\boldsymbol{\delta} \tag{3}
f(x+δ)≈f(x)+gTδ+21δThδ(3)
可以看出,此时在很小的一个区域内函数
f
(
x
+
δ
)
f(\boldsymbol{x}+\boldsymbol{\delta})
f(x+δ)可以看成一个关于
δ
\boldsymbol{\delta}
δ的二阶曲面,并可通过对
δ
\boldsymbol{\delta}
δ求导得到该二阶曲面的最小值,将(3)对
δ
\boldsymbol{\delta}
δ求导可得
∂
f
(
x
+
δ
)
∂
δ
=
g
+
h
δ
=
0
→
δ
=
−
h
−
1
g
(4)
\frac{\partial f(\boldsymbol{x}+\boldsymbol{\delta})}{\partial \boldsymbol{\delta}}=\boldsymbol{g}+\boldsymbol{h}\boldsymbol{\delta}=\boldsymbol{0} \rightarrow \boldsymbol{\delta}=-\boldsymbol{h}^{-1}\boldsymbol{g} \tag{4}
∂δ∂f(x+δ)=g+hδ=0→δ=−h−1g(4)
(4)中得到的
δ
\boldsymbol{\delta}
δ即为牛顿下降法对应的运动向量。牛顿下降法属于二阶收敛,因此收敛速度很快,但是它每次迭代都要计算海森矩阵的逆矩阵,计算量比较大。此外,牛顿下降法还存在一些问题,以下进行分析:
从第(1)节中梯度下降法的分析我们知道,一个运动向量,如果满足
g
T
δ
<
0
\boldsymbol{g}^{\rm T}\boldsymbol{\delta}< 0
gTδ<0,即该向量与梯度向量的夹角为钝角时,那么该运动方向就是有效的运动方向。所以对于(4)中
δ
\boldsymbol{\delta}
δ,当
g
T
δ
=
−
g
T
(
h
−
1
g
)
<
0
→
g
T
h
−
1
g
>
0
\boldsymbol{g}^{\rm T}\boldsymbol{\delta}=-\boldsymbol{g}^{\rm T}(\boldsymbol{h}^{-1}\boldsymbol{g})< 0 \rightarrow \boldsymbol{g}^{\rm T}\boldsymbol{h}^{-1}\boldsymbol{g}>0
gTδ=−gT(h−1g)<0→gTh−1g>0时,才能保证牛顿下降法给出的方向是有效的方向,即必须要保证
h
−
1
≻
0
\boldsymbol{h}^{-1} \succ 0
h−1≻0,由于
h
\boldsymbol{h}
h为实对称矩阵,即
h
=
h
T
\boldsymbol{h}=\boldsymbol{h}^{\rm T}
h=hT,所以
h
−
1
=
(
h
T
)
(
−
1
)
=
(
h
−
1
)
T
\boldsymbol{h}^{-1}=(\boldsymbol{h}^{\rm T})^{(-1)}=(\boldsymbol{h}^{-1})^{\rm T}
h−1=(hT)(−1)=(h−1)T,所以
h
−
1
\boldsymbol{h}^{-1}
h−1也是实对称矩阵,所以它可以进行正交对角化且其特征值全为实数,
h
−
1
=
U
Σ
U
T
\boldsymbol{h}^{-1}=\boldsymbol{U}\boldsymbol{\Sigma}\boldsymbol{U}^{\rm T}
h−1=UΣUT,其中
Σ
=
d
i
a
g
(
λ
1
,
.
.
.
,
λ
n
)
\boldsymbol{\Sigma}={\rm diag}(\lambda_1,...,\lambda_n)
Σ=diag(λ1,...,λn),当
m
i
n
(
λ
1
,
.
.
.
,
λ
n
)
>
0
{\rm min}(\lambda_1,...,\lambda_n)>0
min(λ1,...,λn)>0时,矩阵
h
−
1
\boldsymbol{h}^{-1}
h−1满足正定性要求,此时牛顿下降法给出的方向是有效的方向。
当海森矩阵的逆矩阵不满足正定性要求时,可对牛顿下降方向进行适当修正,具体做法如下:
设
m
i
n
(
λ
1
,
.
.
.
,
λ
n
)
=
λ
n
<
0
{\rm min}(\lambda_1,...,\lambda_n)=\lambda_n< 0
min(λ1,...,λn)=λn<0,则可以令
h
^
=
h
−
1
+
σ
I
=
U
Σ
U
T
+
σ
U
I
U
T
=
U
(
Σ
+
σ
I
)
U
T
=
U
Σ
^
U
T
\hat{\boldsymbol{h}}=\boldsymbol{h}^{-1}+\sigma\boldsymbol{I}=\boldsymbol{U}\boldsymbol{\Sigma}\boldsymbol{U}^{\rm T}+\sigma\boldsymbol{U}\boldsymbol{I}\boldsymbol{U}^{\rm T}=\boldsymbol{U}(\boldsymbol{\Sigma}+\sigma\boldsymbol{I})\boldsymbol{U}^{\rm T}=\boldsymbol{U}\hat{\boldsymbol{\Sigma}}\boldsymbol{U}^{\rm T}
h^=h−1+σI=UΣUT+σUIUT=U(Σ+σI)UT=UΣ^UT,其中
σ
=
∣
λ
n
∣
+
ϵ
\sigma=|\lambda_n|+\epsilon
σ=∣λn∣+ϵ,
ϵ
\epsilon
ϵ表示很小的正数,
Σ
^
=
d
i
a
g
(
λ
1
+
σ
,
.
.
.
,
λ
n
+
σ
)
\hat{\boldsymbol{\Sigma}}={\rm diag}(\lambda_1+\sigma,...,\lambda_n+\sigma)
Σ^=diag(λ1+σ,...,λn+σ),则牛顿下降方向可以修正为
δ
=
−
h
^
−
1
g
\boldsymbol{\delta}=-\hat{\boldsymbol{h}}^{-1}\boldsymbol{g}
δ=−h^−1g。
牛顿下降法是二阶收敛,梯度下降是一阶收敛,所以牛顿法的收敛速度更快。形象一点说明就是,如果想找一条最短的路径到盆地的最底部,梯度下降法每次都朝当前位置处坡度最大的方向走,而牛顿法不仅会考虑当前坡度大不大,还会考虑下一步之后,坡度是否会变得更大,因此牛顿法比梯度下降法看得更远,能更快走到最底部。从几何的观点看,牛顿法是用一个二次曲面去拟合当前所在位置的局部曲面,而梯度下降法适用一个平面去拟合当前的局部曲面,通常情况下,二次曲面的拟合效果会比平面更好,因此牛顿法能够选择出更符合真实情况的最优下降路径。