任务1:推导线性预测器最佳预测系数的线性方程
任务2:最小二乘法的总结
文章目录
(一)线性预测器最佳预测系数线性方程推导
(二)最小二乘法总结
2.1 定义
最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和来寻找数据的最佳函数匹配。
利用最小二乘法可以简便的求得未知的数据,并使得求得的数据与实际数据之间误差的平方和为最小。
“最小二乘法”是对线性方程组,即方程个数比未知数更多的方程组,以回归分析求得近似解的标准方法。在这整个解决方案中,最小二乘法演算为每一方程式的结果中,将残差平方和的总和最小化。
最重要的应用是在曲线拟合上。最小平方所涵义的最佳拟合,即残差(残差为:观测值与模型提供的拟合值之间的差距)平方总和的最小化。当问题在自变量(x变量)有重大不确定性时,那么使用简易回归和最小二乘法会发生问题;在这种情况下,须另外考虑变量-误差-拟合模型所需的方法,而不是最小二乘法。
2.2 思路
OLS(最小二乘法)主要用于线性回归的参数估计,它的思路很简单,就是求一些使得实际值和模型估值之差的平方和达到最小的值。即上文说到的最小化误差的平方和。
2.3 分类
最小平方问题分为两种:线性或普通的最小二乘法,和非线性的最小二乘法。
两种的分类取决于在所有未知数中的残差是否为线性。
2.4 示例1(最简单的例子算最小二乘)
某次实验得到了四个数据点
(
x
,
y
)
{\displaystyle (x,y)}
(x,y):
(
1
,
6
)
{\displaystyle (1,6)}
(1,6)、
(
2
,
5
)
{\displaystyle (2,5)}
(2,5)、
(
3
,
7
)
{\displaystyle (3,7)}
(3,7)、
(
4
,
10
)
{\displaystyle (4,10)}
(4,10)(下图红色的点)。我们希望找出一条和这四个点最匹配的直线
y
=
β
1
+
β
2
x
{\displaystyle y=\beta _{1}+\beta _{2}x}
y=β1+β2x,即找出在某种“最佳情况”下能够大致符合如下超定线性方程组的
β
1
{\displaystyle \beta _{1}}
β1和
β
2
{\displaystyle \beta _{2}}
β2:
β
1
+
1
β
2
=
6
\beta_1+1\beta_2=6
β1+1β2=6
β
1
+
2
β
2
=
5
\beta_1+2\beta_2=5
β1+2β2=5
β
1
+
3
β
2
=
7
\beta_1+3\beta_2=7
β1+3β2=7
β
1
+
4
β
2
=
10
\beta_1+4\beta_2=10
β1+4β2=10
最小二乘法采用的方法是尽量使得等号两边的平方差最小,也就是找出下面这个函数的最小值:
S
(
β
1
,
β
2
)
=
[
6
−
(
β
1
+
1
β
2
)
]
2
+
[
5
−
(
β
1
+
2
β
2
)
]
2
+
[
7
−
(
β
1
+
3
β
2
)
]
2
+
[
10
−
(
β
1
+
4
β
2
)
]
2
S(\beta_1,\beta_2) \\ =[6-(\beta_1+1\beta_2)]^2\\+[5-(\beta_1+2\beta_2)]^2 \\+[7-(\beta_1+3\beta_2)]^2\\+[10-(\beta_1+4\beta_2)]^2
S(β1,β2)=[6−(β1+1β2)]2+[5−(β1+2β2)]2+[7−(β1+3β2)]2+[10−(β1+4β2)]2
最小值可以通过对
S
(
β
1
,
β
2
)
S(\beta_1,\beta_2)
S(β1,β2)分别求
β
1
\beta_1
β1和
β
2
\beta_2
β2的偏导数,然后使他们等于零得到:
∂
S
∂
β
1
=
0
=
8
β
1
+
20
β
2
−
56
\frac{\partial S}{\partial \beta_1}=0=8\beta_1+20\beta_2-56
∂β1∂S=0=8β1+20β2−56
∂
S
∂
β
2
=
0
=
20
β
1
+
60
β
2
−
154
\frac{\partial S}{\partial \beta_2}=0=20\beta_1+60\beta_2-154
∂β2∂S=0=20β1+60β2−154
如此就得到了一个只有两个未知数的方程组,很容易就可以解出:
β
1
=
3.5
\beta_1=3.5
β1=3.5
β
2
=
1.4
\beta_2=1.4
β2=1.4
也就是说,直线
y
=
3.5
+
1.4
x
y=3.5+1.4x
y=3.5+1.4x是所要求的根据最小二乘得到的线性方程。
参考资料:
2.5 梯度下降法求解最小二乘
梯度
在向量微积分中,标量场的梯度是一个向量场。标量场中某一点上的梯度指向标量场增长最快的方向,梯度的长度是这个最大的变化率。
在三维直角坐标系中表示为:
∇
φ
=
(
∂
φ
∂
x
,
∂
φ
∂
y
,
∂
φ
∂
z
)
=
∂
φ
∂
x
i
⃗
+
∂
φ
∂
y
j
⃗
+
∂
φ
∂
z
k
⃗
\nabla \varphi=(\frac{\partial \varphi}{\partial x},\frac{\partial \varphi}{\partial y},\frac{\partial \varphi}{\partial z})=\frac{\partial \varphi}{\partial x} \vec i+\frac{\partial \varphi}{\partial y}\vec j+\frac{\partial \varphi}{\partial z}\vec k
∇φ=(∂x∂φ,∂y∂φ,∂z∂φ)=∂x∂φi+∂y∂φj+∂z∂φk
梯度下降
梯度下降背后的思想是:开始时我们随机选取一个参数的组合
(
θ
0
,
θ
1
,
⋯
,
θ
n
)
(\theta_0,\theta_1,\cdots,\theta_n)
(θ0,θ1,⋯,θn),计算代价函数
J
(
θ
)
J(\theta)
J(θ),然后我们寻找下一个能让代价函数值下降最多的参数组合。我们持续这么做,直到找到一个局部最小值,因为我们并没有尝试完所有的参数组合,所以不能确定我们得到局部最小值是否便是全局最小值,不同的初始参数组合,可能会找到不同的局部最小值。如果我们知道代价函数是一个凸函数,那么我们就可以保证我们找到的局部最小点就是全局最小点。
通过梯度的定义,我们知道,梯度的方向是增长(上升)最快的方向,那么梯度的反方向便是让代价函数下降程度最大的方向。
相关概念:
- 步长(Learning rate):步长决定了在梯度下降迭代的过程中,每一步沿梯度负方向前进的长度,它决定了我们沿着能让代价函数下降程度最大的方向更新的步长。用上面下山的例子,步长就是在当前这一步所在位置沿着最陡峭最易下山的位置走的那一步的长度。每走一步,我们都要重新计算函数在当前点的梯度,然后选择梯度的反方向作为走下去的方向。随着每一步迭代,梯度不断地减小,到最后减小为零。
- 特征(feature):指的是样本中输入部分,比如2个单特征的样本 ( x ( 0 ) , y ( 0 ) ) (x^{(0)},y^{(0)}) (x(0),y(0)), ( x ( 1 ) , y ( 1 ) ) (x^{(1)},y^{(1)}) (x(1),y(1)),则第一个样本特征为 x ( 0 ) x^{(0)} x(0),第一个样本输出为 y ( 0 ) y^{(0)} y(0)。
- 假设函数(hypothesis function):在监督学习中,为了拟合输入样本,而使用的假设函数,记为 h θ ( x ) h_{\theta}(x) hθ(x)。比如对于单个特征的 m m m个样本 ( x ( i ) , y ( i ) ) ( i = 1 , 2 , ⋯ , m ) (x^{(i)},y^{(i)})(i=1,2,\cdots,m) (x(i),y(i))(i=1,2,⋯,m),可以采用拟合函数如下: h θ ( x ) = θ 0 + θ 1 x h_{\theta}(x)=\theta_0+\theta_1x hθ(x)=θ0+θ1x。
- 损失函数(loss function):为了评估模型拟合的好坏,通常用损失函数来度量拟合的程度。损失函数极小化,意味着拟合程度最好,对应的模型参数即为最优参数。在线性回归中,损失函数通常为样本输出和假设函数的差取平方。比如对于 m m m个样本 ( x ( i ) , y ( i ) ) ( i = 1 , 2 , ⋯ , m ) (x^{(i)},y^{(i)})(i=1,2,\cdots,m) (x(i),y(i))(i=1,2,⋯,m),采用线性回归,损失函数为: j ( θ 0 , θ 1 ) = Σ i = 1 m ( h θ ( x i ) − y i ) 2 j(\theta_0,\theta_1)=\Sigma^m_{i=1}(h_{\theta}(x_i)-y_i)^2 j(θ0,θ1)=Σi=1m(hθ(xi)−yi)2 其中 x i x_i xi表示第 i i i个样本特征, y i y_i yi表示第 i i i个样本对应的输出, h θ ( x i ) h_{\theta}(x_i) hθ(xi)为假设函数。
梯度下降法的详细算法
梯度下降法的算法可以有代数法和矩阵法(也称向量法)两种表示,如果对矩阵分析不熟悉,则代数法更加容易理解。不过矩阵法更加的简洁,且由于使用了矩阵,实现逻辑更加的一目了然。这里先介绍代数法,后介绍矩阵法。
梯度下降法的代数方式描述
1.先决条件:确认优化模型的假设函数和损失函数。
比如对于线性回归,假设函数为
h
θ
(
x
1
,
x
2
,
⋯
,
x
n
)
=
θ
0
+
θ
1
x
1
+
⋯
+
θ
n
h_{\theta}(x_1,x_2,\cdots,x_n)=\theta_0+\theta_1x_1+\cdots+\theta_n
hθ(x1,x2,⋯,xn)=θ0+θ1x1+⋯+θn,其中
θ
i
(
i
=
0
,
1
,
⋯
,
n
)
\theta_i(i=0,1,\cdots,n)
θi(i=0,1,⋯,n)为模型参数,
x
i
(
i
=
0
,
1
,
2
,
⋯
,
n
)
x_i(i=0,1,2,\cdots,n)
xi(i=0,1,2,⋯,n)为每个样本的
n
n
n个特征值,可以简化为
h
θ
(
x
1
,
x
2
,
⋯
,
x
n
)
=
Σ
i
=
0
n
θ
i
x
i
h_{\theta}(x_1,x_2,\cdots,x_n)=\Sigma^n_{i=0}\theta_ix_i
hθ(x1,x2,⋯,xn)=Σi=0nθixi。
同样是线性回归,对应于上面的假设函数,损失函数为:
J
(
θ
0
,
θ
1
,
⋯
,
θ
n
)
=
1
2
m
Σ
j
=
1
m
(
h
θ
(
x
0
(
j
)
,
x
1
(
j
)
,
⋯
,
x
n
(
j
)
)
−
y
j
)
2
J(\theta_0,\theta_1,\cdots,\theta_n)=\frac{1}{2m}\Sigma^m_{j=1}(h_{\theta}(x_0^{(j)},x_1^{(j)},\cdots,x_n^{(j)})-y_j)^2
J(θ0,θ1,⋯,θn)=2m1Σj=1m(hθ(x0(j),x1(j),⋯,xn(j))−yj)2
2.算法相关参数初始化。
主要是初始化
θ
0
,
θ
1
,
⋯
,
θ
n
\theta_0,\theta_1,\cdots,\theta_n
θ0,θ1,⋯,θn,算法终止距离
ε
\varepsilon
ε以及步长
α
\alpha
α,将所有的
θ
\theta
θ初始化为0,将步长初始化为1.
3.算法过程:
- 确定当前位置的损失函数的梯度,对于 θ i \theta_i θi,其梯度表达式如下: ∂ ∂ θ i J ( θ 0 , θ 1 , ⋯ , θ n ) \frac{\partial }{\partial \theta_i}J(\theta_0,\theta_1,\cdots,\theta_n) ∂θi∂J(θ0,θ1,⋯,θn)
- 用步长乘以损失函数的梯度,得到当前位置下降的距离,即 α ∂ ∂ θ i J ( θ 0 , θ 1 , ⋯ , θ n ) \alpha\frac{\partial }{\partial \theta_i}J(\theta_0,\theta_1,\cdots,\theta_n) α∂θi∂J(θ0,θ1,⋯,θn)对应于前面登山例子中的某一步。
- 确定是否所有的 θ i \theta_i θi,梯度下降的距离都小于 ε \varepsilon ε,如果小于 ε \varepsilon ε则算法终止,当前所有的 θ i ( i = 0 , 1 , ⋯ , n ) \theta_i(i=0,1,\cdots,n) θi(i=0,1,⋯,n)即为最终结果,否则进入步骤4.
- 更新所有的 θ \theta θ,对于 θ i \theta_i θi,其更新表达式如下: θ i = θ i − α ∂ ∂ θ i J ( θ 0 , θ 1 , ⋯ , θ n ) \theta_i=\theta_i-\alpha\frac{\partial }{\partial \theta_i}J(\theta_0,\theta_1,\cdots,\theta_n) θi=θi−α∂θi∂J(θ0,θ1,⋯,θn)更新完后继续转入步骤1.
梯度下降法的矩阵方式描述
前置知识
- 梯度矩阵:
∇
A
f
(
A
)
\nabla_Af(A)
∇Af(A)
对于梯度矩阵,有如下定义 ∇ A f ( A ) = [ ∂ f ∂ A 11 ⋯ ∂ f ∂ A 1 , n ⋮ ⋱ ⋮ ∂ f ∂ A m 1 ⋯ ∂ f ∂ A m n ] \nabla_Af(A)=\begin{bmatrix} \frac{\partial f}{\partial A_{11}} & \cdots & \frac{\partial f}{\partial A_{1,n} } \\ \vdots & \ddots & \vdots \\ \frac{\partial f}{\partial A_{m1}} & \cdots & \frac{\partial f}{\partial A_{mn}}\end{bmatrix} ∇Af(A)=⎣⎢⎢⎡∂A11∂f⋮∂Am1∂f⋯⋱⋯∂A1,n∂f⋮∂Amn∂f⎦⎥⎥⎤ 所以梯度矩阵中的每一个元素都是函数 f ( A ) f(A) f(A)关于矩阵A对应位置变量的偏导数,比如说: f ( A ) = 3 2 A 11 + 5 A 12 2 + A 21 A 22 f(A)=\frac{3}{2}A_{11}+5A^2_{12}+A_{21}A_{22} f(A)=23A11+5A122+A21A22 则关于矩阵 A A A和该函数 f ( A ) f(A) f(A)的梯度矩阵为 ∇ A f ( A ) = [ 3 2 10 A 12 A 22 A 21 ] \nabla_Af(A)=\begin{bmatrix}\frac{3}{2} & 10A_{12} \\ A_{22} & A_{21}\end{bmatrix} ∇Af(A)=[23A2210A12A21] - 矩阵的迹性质
1). 假设 a a a为常数,则 t r ( a ) = a tr(a)=a tr(a)=a
2). 如果 A B AB AB为方针,则 t r ( A B ) = t r ( B A ) tr(AB)=tr(BA) tr(AB)=tr(BA)证明: t r ( A B ) = Σ i = 1 m Σ j = 1 n a i j b j i = Σ i = 1 n Σ j = 1 m a i j b j i = t r ( B A ) tr(AB)=\Sigma^m_{i=1}\Sigma^n_{j=1}a_{ij}b_{ji}=\Sigma^n_{i=1}\Sigma^m_{j=1}a_{ij}b_{ji}=tr(BA) tr(AB)=Σi=1mΣj=1naijbji=Σi=1nΣj=1maijbji=tr(BA),因此在矩阵乘积为方阵的情况下,矩阵乘积的迹不受矩阵乘积顺序的影响
t r ( A T ) = t r ( A ) tr(A^T)=tr(A) tr(AT)=tr(A)
- 梯度矩阵的性质
1). ∇ A t r ( A B ) = B T \nabla_Atr(AB)=B^T ∇Atr(AB)=BT
2). ∇ A t r ( A B A T C ) = C T A B T + C A B \nabla_Atr(ABA^TC)=C^TAB^T+CAB ∇Atr(ABATC)=CTABT+CAB
性质推导
∇
A
t
r
(
A
B
)
=
B
T
\nabla_Atr(AB)=B^T
∇Atr(AB)=BT
性质推导
∇
A
t
r
(
A
B
A
T
C
)
=
C
T
A
B
T
+
C
A
B
\nabla_Atr(ABA^TC)=C^TAB^T+CAB
∇Atr(ABATC)=CTABT+CAB
目前我推不出来,先当公式记着
结论推导
梯度下降法存在的问题
- 有些函数可能有多个局部极小值点。假设A、B、C均为函数的极小值,而只有C是函数的全局极小值,梯度下降法可能迭代到B或者C点处就终止。
- 在鞍点处,梯度下降法遇到了鞍点,认为已经找到了极值点,从而终止迭代过程,而这根本不是极值点。
鞍点:鞍点是指梯度为0,Hessian矩阵既不是正定也不是负定,即不定的点。
参考资料:
- 梯度下降从放弃到入门
- 梯度下降(Gradient Descent)小结
- 机器学习算法之梯度下降(Gradient descent)附相关项目
- 矩阵梯度
- 张贤达《矩阵分析与应用》下载地址
- 机器学习中的矩阵向量求导(四) 矩阵向量求导链式法则
2.6 牛顿法求解最小二乘
和梯度下降法一样,牛顿法寻找的也是导数为0的点。
基本思想
利用迭代点
x
k
x_k
xk处的一阶导数(梯度)和二阶导数(Hessen矩阵)对目标函数进行二次函数近似,然后把二次模型的极小点作为新的迭代点,并不断重复这一过程,直至求得满足精度的近似极小值。
牛顿法的速度相当快,而且能高度逼近最优值。牛顿法分为基本的牛顿法和全局牛顿法。
基本牛顿法
基本牛顿法是一种用导数的算法,它每一步的迭代方向都是沿着当前点函数值下降的方向。
在一维的情况下,对于一个需要求解的优化函数
f
(
x
)
f(x)
f(x),求函数的极值的问题可以转化为求导函数
f
′
(
x
)
=
0
f'(x)=0
f′(x)=0。对函数
f
(
x
)
f(x)
f(x)进行泰勒展开到二阶,得到
f
(
x
)
=
f
(
x
k
)
+
f
′
(
x
k
)
(
x
−
x
k
)
+
1
2
f
′
′
(
x
k
)
(
x
−
x
k
)
2
f(x)=f(x_k)+f'(x_k)(x-x_k)+\frac{1}{2}f''(x_k)(x-x_k)^2
f(x)=f(xk)+f′(xk)(x−xk)+21f′′(xk)(x−xk)2 对上式求导并令其为0,则,
f
′
(
x
k
)
+
f
′
′
(
x
k
)
(
x
−
x
k
)
=
0
f'(x_k)+f''(x_k)(x-x_k)=0
f′(xk)+f′′(xk)(x−xk)=0,即
x
=
x
k
−
f
′
(
x
k
)
f
′
′
(
x
k
)
x=x_k-\frac{f'(x_k)}{f''(x_k)}
x=xk−f′′(xk)f′(xk) 这就是牛顿法的更新公式(一维)。
对于高维函数,推导过程基于多元函数的泰勒展开。
f
(
x
)
≈
f
(
x
n
)
+
∇
f
(
x
n
)
T
(
x
−
x
n
)
+
1
2
(
x
−
x
n
)
T
H
(
x
n
)
(
x
−
x
n
)
f(x)\approx f(x_n)+\nabla f(x_n)^T(x-x_n)+\frac{1}{2}(x-x_n)^TH(x_n)(x-x_n)
f(x)≈f(xn)+∇f(xn)T(x−xn)+21(x−xn)TH(xn)(x−xn). 这是用高维二次曲面在
x
n
x_n
xn处逼近原函数。如下图所示(图片来源)
对上式,令其对
x
x
x的导函数为0,则
∇
f
(
x
)
=
H
(
x
n
)
(
x
−
x
n
)
+
∇
f
(
x
n
)
=
0
\nabla f(x)=H(x_n)(x-x_n)+\nabla f(x_n)=0
∇f(x)=H(xn)(x−xn)+∇f(xn)=0 解得,
x
n
+
1
=
x
n
−
H
(
x
n
)
−
1
∇
f
(
x
n
)
x_{n+1}=x_n-H(x_n)^{-1}\nabla f(x_n)
xn+1=xn−H(xn)−1∇f(xn)
其中
H
H
H是hessian矩阵,定义为
H
(
f
)
=
[
∂
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
1
∂
x
2
⋯
∂
2
f
∂
x
1
∂
x
n
⋮
⋮
⋱
⋮
∂
2
f
∂
x
n
p
a
r
t
i
a
l
x
1
∂
2
f
∂
x
n
∂
x
2
⋯
∂
2
f
∂
x
n
2
]
H(f)=\begin{bmatrix}\frac{\partial^2f}{\partial x_1^2} & \frac{\partial^2f}{\partial x_1\partial x_2} & \cdots & \frac{\partial^2f}{\partial x_1\partial x_n} \\ \frac{\partial^2f}{\partial x_2 \partial x_1} & \frac{\partial^2f}{\partial x_1\partial x_2} & \cdots & \frac{\partial^2f}{\partial x_1\partial x_n} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial^2f}{\partial x_npartial x_1} & \frac{\partial ^2f}{\partial x_n\partial x_2} & \cdots & \frac{\partial^2f}{\partial x_n^2}\end{bmatrix}
H(f)=⎣⎢⎢⎢⎢⎢⎡∂x12∂2f∂x2∂x1∂2f⋮∂xnpartialx1∂2f∂x1∂x2∂2f∂x1∂x2∂2f⋮∂xn∂x2∂2f⋯⋯⋱⋯∂x1∂xn∂2f∂x1∂xn∂2f⋮∂xn2∂2f⎦⎥⎥⎥⎥⎥⎤
基本牛顿法的流程
- 给定终止误差值 0 ≤ ε ≪ 1 0\leq \varepsilon \ll 1 0≤ε≪1,初始点 x 0 ∈ R n x_0 \in R^n x0∈Rn,令 k = 0 k=0 k=0
- 计算 g ( k ) = ∇ f ( x k ) g(k)=\nabla f(x_k) g(k)=∇f(xk),若 ∣ ∣ g k ∣ ∣ ≤ ε ||g_k|| \leq \varepsilon ∣∣gk∣∣≤ε,则停止,输出 x ∗ ≈ x k x* \approx x_k x∗≈xk
- 计算 G k = ∇ 2 f ( x k ) G_k=\nabla ^2f(x_k) Gk=∇2f(xk),并求解线性方程组得解 d k : G k d = − g k d_k:G_kd=-g_k dk:Gkd=−gk
- 令 x k + 1 = x k + d k , k = k + 1 x_{k+1}=x_k+d_k,k=k+1 xk+1=xk+dk,k=k+1,并转2
全局牛顿法
牛顿法最突出的优点是收敛速度快,具有局部二阶收敛性,但是,基本牛顿法初始点需要足够“靠近”极小点,否则,有可能导致算法不收敛。这样就引入了全局牛顿法。
全局牛顿法的流程
- 给定终止误差值 0 ≤ ε ≪ 1 0\leq \varepsilon \ll 1 0≤ε≪1, δ ∈ ( 0 , 1 ) \delta \in (0,1) δ∈(0,1), σ ∈ ( 0 , 0.5 ) \sigma \in (0,0.5) σ∈(0,0.5),初始点 x 0 ∈ R n x_0 \in R^n x0∈Rn,令 k = 0 k=0 k=0
- 给定 g ( k ) = ∇ f ( x k ) g(k)=\nabla f(x_k) g(k)=∇f(xk),若 ∣ ∣ g k ∣ ∣ ≤ ε ||g_k|| \leq \varepsilon ∣∣gk∣∣≤ε,则停止,输出 x ∗ ≈ x k x* \approx x_k x∗≈xk
- 计算 G k = ∇ 2 f ( x k ) G_k=\nabla ^2f(x_k) Gk=∇2f(xk),并求解线性方程组得解 d k : G k d = − g k d_k:G_kd=-g_k dk:Gkd=−gk
- 记 m k m_k mk是不满足下列不等式的最小非负整数 m m m: f ( x k + δ m d k ) ≤ f ( x k ) + σ δ m g k T d k f(x_k+\delta^md_k)\leq f(x_k)+\sigma \delta^m g_k^Td_k f(xk+δmdk)≤f(xk)+σδmgkTdk
令 α k = δ m k , x k + 1 = x k + α k d k , k = k + 1 \alpha_k=\delta^{m_k},x_{k+1}=x_k+\alpha_kd_k,k=k+1 αk=δmk,xk+1=xk+αkdk,k=k+1,并转2
牛顿法的优缺点
- 牛顿法的优点是收敛速度快,缺点是需要求矩阵的逆,计算量比较大。
- 如果矩阵非正定(在一维情况下表现为泰勒展开的二阶导数小于0),极值点为极大值,而非极小值。
- 如果初始位置离最优点太远,也会导致迭代过程中目标函数不严格递减的情况。
- Hessian矩阵可能不可逆。
牛顿法和梯度下降法的比较
- 梯度法自起始点出发,在局部进行下降步步逼近极值,行进路线往往呈之字形;而牛顿法在二阶导数的作用下,考虑函数凹凸性,直接搜索如何达到极值。在选择行进方向上,不仅考虑当前坡度是否够大,还考虑前进后坡度是否会变得更大。
- 牛顿法有更快的收敛速度,但每一步迭代的成本也更高。在每次迭代中,除了要计算梯度向量还要计算Hessian矩阵,并求解Hessian矩阵的逆矩阵。
参考资料:
2.7 高斯牛顿法求解最小二乘
高斯-牛顿法是牛顿法的特例,用于解非线性最小二乘问题。
假设观测到N个数据点
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
⋯
,
(
x
N
,
y
N
)
}
\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\}
{(x1,y1),(x2,y2),⋯,(xN,yN)},其中
x
∈
R
M
x \in R^M
x∈RM,希望找到包含
M
M
M个参数的非线性函数
f
(
x
,
a
1
,
a
2
,
⋯
,
a
M
)
f(x,a_1,a_2,\cdots,a_M)
f(x,a1,a2,⋯,aM),拟合上述
N
N
N个数据点,为了方便书写,记
f
1
(
a
⃗
)
=
f
(
x
1
,
a
1
,
⋯
,
a
M
)
f_1(\vec a)=f(x_1,a_1,\cdots,a_M)
f1(a)=f(x1,a1,⋯,aM),则最小二乘的目标函数为
ε
(
a
⃗
)
=
Σ
i
=
1
N
∣
∣
f
i
(
a
⃗
)
−
y
i
∣
∣
2
\varepsilon(\vec a)=\Sigma^N_{i=1}||f_i(\vec a)-y_i||^2
ε(a)=Σi=1N∣∣fi(a)−yi∣∣2 我们需要找到
a
⃗
=
[
a
1
,
a
2
,
⋯
,
a
M
]
T
\vec a=[a_1,a_2,\cdots,a_M]^T
a=[a1,a2,⋯,aM]T,使目标函数最小,将目标函数对
a
j
a_j
aj求导:
∂
ε
(
a
⃗
)
a
j
=
Σ
i
=
1
N
2
(
f
i
(
a
⃗
)
−
y
i
)
∂
f
i
(
a
⃗
)
∂
a
j
\frac{\partial \varepsilon (\vec a)}{a_j}=\Sigma^N_{i=1}2(f_i(\vec a)-y_i)\frac{\partial f_i(\vec a)}{\partial a_j}
aj∂ε(a)=Σi=1N2(fi(a)−yi)∂aj∂fi(a) 令
J
=
[
∂
f
1
(
a
⃗
)
∂
a
1
∂
f
1
(
a
⃗
)
∂
a
2
⋯
∂
f
1
(
a
⃗
)
∂
a
M
∂
f
2
(
a
⃗
)
∂
a
1
∂
f
2
(
a
⃗
)
∂
a
2
⋯
∂
f
2
(
a
⃗
)
∂
a
M
⋮
⋮
⋱
⋮
∂
f
N
(
a
⃗
)
∂
a
1
∂
f
N
(
a
⃗
)
∂
a
2
⋯
∂
f
N
(
a
⃗
)
∂
a
M
]
J=\begin{bmatrix} \frac{\partial f_1(\vec a)}{\partial a_1} & \frac{\partial f_1(\vec a)}{\partial a_2}& \cdots & \frac{\partial f_1(\vec a)}{\partial a_M}\\ \frac{\partial f_2(\vec a)}{\partial a_1} & \frac{\partial f_2(\vec a)}{\partial a_2} & \cdots & \frac{\partial f_2(\vec a)}{\partial a_M}\\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial f_N(\vec a)}{\partial a_1} & \frac{\partial f_N(\vec a)}{\partial a_2} & \cdots & \frac{\partial f_N(\vec a)}{\partial a_M}\end{bmatrix}
J=⎣⎢⎢⎢⎢⎡∂a1∂f1(a)∂a1∂f2(a)⋮∂a1∂fN(a)∂a2∂f1(a)∂a2∂f2(a)⋮∂a2∂fN(a)⋯⋯⋱⋯∂aM∂f1(a)∂aM∂f2(a)⋮∂aM∂fN(a)⎦⎥⎥⎥⎥⎤,
r
⃗
=
[
f
1
(
a
⃗
)
−
y
1
f
2
(
a
⃗
)
−
y
2
⋮
f
N
(
a
⃗
)
−
y
N
]
\vec r=\begin{bmatrix}f_1(\vec a)-y_1 \\ f_2(\vec a)-y_2\\ \vdots\\ f_N(\vec a)-y_N\end{bmatrix}
r=⎣⎢⎢⎢⎡f1(a)−y1f2(a)−y2⋮fN(a)−yN⎦⎥⎥⎥⎤ 将求导后的式子写成向量形式:
∇
ε
(
a
⃗
)
=
2
J
T
r
⃗
\nabla \varepsilon(\vec a)=2J^T \vec r
∇ε(a)=2JTr 接下来求海森矩阵第
k
k
k行第
j
j
j列的元素:
∂
2
ε
(
a
⃗
)
∂
a
k
∂
a
j
=
∂
∂
a
k
∂
ε
(
a
⃗
)
∂
a
j
=
∂
∂
a
k
(
Σ
i
=
1
N
2
(
f
i
(
a
⃗
)
−
y
i
)
∂
f
i
(
a
⃗
)
∂
a
j
)
=
2
Σ
i
=
1
N
(
∂
f
i
(
a
⃗
)
∂
a
k
∂
f
i
(
a
⃗
)
∂
a
j
+
(
f
i
(
a
⃗
)
−
y
i
)
∂
2
f
i
(
a
⃗
)
∂
a
k
∂
a
j
\begin{aligned}& \frac{\partial^2\varepsilon(\vec a)}{\partial a_k\partial a_j}\\&=\frac{\partial}{\partial a_k}\frac{\partial \varepsilon (\vec a)}{\partial a_j}\\ &=\frac{\partial }{\partial a_k}(\Sigma^N_{i=1}2(f_i(\vec a)-y_i)\frac{\partial f_i(\vec a)}{\partial a_j})\\&=2\Sigma^N_{i=1}(\frac{\partial f_i(\vec a)}{\partial a_k}\frac{\partial f_i(\vec a)}{\partial a_j}+(f_i(\vec a)-y_i)\frac{\partial^2f_i(\vec a)}{\partial a_k\partial a_j} \end{aligned}
∂ak∂aj∂2ε(a)=∂ak∂∂aj∂ε(a)=∂ak∂(Σi=1N2(fi(a)−yi)∂aj∂fi(a))=2Σi=1N(∂ak∂fi(a)∂aj∂fi(a)+(fi(a)−yi)∂ak∂aj∂2fi(a)
令
H
H
H为
ε
(
a
⃗
)
\varepsilon(\vec a)
ε(a)的海森矩阵,由上式可知,
H
=
2
(
J
T
J
+
S
)
H=2(J^TJ+S)
H=2(JTJ+S) 其中,
S
k
,
j
=
Σ
i
=
1
N
(
f
i
(
a
⃗
)
−
y
i
)
∂
2
f
i
(
a
⃗
)
∂
a
k
∂
a
j
S_{k,j}=\Sigma^N_{i=1}(f_i(\vec a)-y_i)\frac{\partial^2f_i(\vec a)}{\partial a_k \partial a_j}
Sk,j=Σi=1N(fi(a)−yi)∂ak∂aj∂2fi(a). 将
∇
ε
(
a
⃗
)
=
2
J
T
r
⃗
\nabla \varepsilon(\vec a)=2J^T \vec r
∇ε(a)=2JTr和
H
=
2
(
J
T
J
+
S
)
H=2(J^TJ+S)
H=2(JTJ+S)带入牛顿法中的
x
n
+
1
=
x
n
−
H
(
x
n
)
−
1
∇
f
(
x
n
)
x_{n+1}=x_n-H(x_n)^{-1}\nabla f(x_n)
xn+1=xn−H(xn)−1∇f(xn)得:
a
⃗
n
+
1
=
a
⃗
n
−
(
J
T
J
)
−
1
J
T
r
⃗
\vec a_{n+1}=\vec a_n-(J^TJ)^{-1}J^T\vec r
an+1=an−(JTJ)−1JTr 将
S
S
S忽略,则最终高斯-牛顿法的迭代公式为
a
⃗
n
1
=
a
⃗
n
−
(
J
T
J
)
−
1
J
T
r
⃗
\vec a_{n_1}=\vec a_n-(J^TJ)^{-1}J^T\vec r
an1=an−(JTJ)−1JTr
高斯牛顿法和牛顿法的区别
基本区别是:Gauss-Newton只用于求解非线性最小二乘问题,Newton法可用于求解任意连续函数的最优化问题。
高斯-牛顿法使牛顿法在最小二乘问题上的特例,但不是完全套用牛顿法,而是在套用的过程中做了简化。