**在DPCM的学习中,为了自适应确定最佳预测系数需要用到最小二乘法。**相关推到可移步添加链接描述(这两篇文章是同一次作业)
在这三种解决最小二乘法的思路中,都用到了泰勒多项式的相关思路。本文首先介绍泰勒多项式的相关知识。
泰勒展开式
假设有这么一个函数,f(x)=cos(x).大家都知道这是基础中的基础的余弦函数。
现在有这么一个问题:能不能找到一个式子可以复制cos(x)的效果呢?
这就是当年泰勒所研究的问题。大致思路是:
选定一个点x0,使我们要创造的式子g(x)在x0处满足:
- g(x0)=0
- g’(x0)=0
- g’’(x0)=0
- …
以此类推
我们在高中学习导数时也用过这种思路。只不过当时最多求导2,3阶导,而在泰勒多项式中:
为了使g(x)不断逼近f(x),每带入一个下一阶导数的条件,创造出的多项式就更接近原来的f(x).
要带入N阶导的条件,即设
g
(
x
)
=
a
n
x
n
+
a
n
−
1
x
n
−
1
+
.
.
.
+
a
2
x
2
+
a
1
x
+
a
0
g(x)=a_nx^n+a_{n-1}x^{n-1}+...+a_2x_2+a_1x+a_0
g(x)=anxn+an−1xn−1+...+a2x2+a1x+a0
求系数过程略(其实并不难),最终我们可以得到:
f
(
x
)
=
g
(
x
)
=
g
(
x
0
)
0
!
(
x
−
x
0
)
0
+
g
′
(
x
0
)
1
!
(
x
−
x
0
)
1
+
g
′
′
(
x
0
)
2
!
(
x
−
x
0
)
2
+
.
.
.
+
g
(
n
)
(
x
0
)
n
!
(
x
−
x
0
)
n
+
R
n
(
x
0
)
f(x)=g(x)=\frac{g(x_0)}{0!}(x-x_0)^0+\frac{g'(x_0)}{1!}(x-x_0)^1+\frac{g''(x_0)}{2!}(x-x_0)^2+...+\frac{g^{(n)}(x_0)}{n!}(x-x_0)^n+R_n(x_0)
f(x)=g(x)=0!g(x0)(x−x0)0+1!g′(x0)(x−x0)1+2!g′′(x0)(x−x0)2+...+n!g(n)(x0)(x−x0)n+Rn(x0)
其中最后一项称为佩亚诺余项。
这便是泰勒多项式,接下来的三种最小二乘法解法中分别涉及不同阶数的泰勒展开。
最小二乘法简介
最小二乘法是一种基于MSE(Mean Square Error)均方误差的最优化方法(使误差最小)。
假设我们在预测编码中,实际信号值为y,预测得到的值为yi,则我们的目标是得到最小MSE,保证恢复的信号最接近原信号,使误差最小。
M
S
E
=
m
i
n
(
∣
∣
y
−
y
i
∣
∣
2
)
MSE=min(||y-y_i||^2)
MSE=min(∣∣y−yi∣∣2)
在更通用的解释中,有这么一个方程组,其中x为要求的系数:
A
x
=
b
Ax=b
Ax=b
但这个方程组是没有解的,b为我们需要的真值。因此我们需要做的就是设定x使Ax尽可能接近真值b,即得到
M
S
E
=
H
(
x
)
=
m
i
n
(
∣
∣
b
−
A
x
∣
∣
2
)
MSE=H(x)=min(||b-Ax||^2)
MSE=H(x)=min(∣∣b−Ax∣∣2)
看到这结合上面介绍的泰勒公式大致思路,可以想到他们其中明显的相似性。实际上,泰勒公式在项数有限的情况下,g(x)也不可能到达目标函数f(x).
此外,这个方法也可以用投影的思维进行理解:
其中A即代表了其中阴影平面,在这里有a1a2两个量。在此向量空间中要求解Ax=b不一定有解。但当b投影到A平面上时(p=Ax),在同一平面内就一定有解。我们求解的对象就从Ax=b变成了Ax=p。
其中将b投影为p的矩阵称之为投影矩阵P,可以求得:
A
T
(
b
−
A
x
)
=
0
∴
x
=
(
A
T
A
)
−
1
A
T
⋅
b
p
=
A
x
=
A
(
A
T
A
)
−
1
A
T
⋅
b
∴
P
=
A
(
A
T
A
)
−
1
A
T
A^T(b-Ax)=0\\ \therefore \quad x=(A^TA)^{-1}A^T \cdot b\\ p=Ax=A(A^TA)^{-1}A^T \cdot b\\ \therefore \quad P=A(A^TA)^{-1}A^T
AT(b−Ax)=0∴x=(ATA)−1AT⋅bp=Ax=A(ATA)−1AT⋅b∴P=A(ATA)−1AT
这里的投影矩阵即对应上面最小二乘法中x的解:
x
=
A
(
A
T
A
)
−
1
A
T
x=A(A^TA)^{-1}A^T
x=A(ATA)−1AT
这也是线性回归中参数的解析解。线性回归问题中也经常有最小二乘法的身影。
接下来介绍三种最小二乘法的思路。
梯度下降法
故名思议,这是一种利用梯度下降方向的最优化问题解决方案,是一种迭代算法,针对线性最小二乘法
我们都学习过梯度,指函数在某点变化最快的方向。既然涉及到梯度的计算,这里涉及了泰勒的一阶展开。
先在一维函数中进行讨论,假设有函数f(x),我们要找到其中的最低点。
以梯度下降法的思路:
- 选定一个初始点x,设定允许误差e0>0
- 从x出发以固定的步长向梯度的反方向进行求取下一个x(用迭代公式)
- 若得到的的x可以满足|f(x)-f(x0)|<e0,则满足要求,得到我们需要的x.结束迭代,否则:
- 继续进行2.
具体计算过程:
对f(x)进行一阶泰勒展开:
f
(
x
)
=
f
(
x
0
)
+
f
′
(
x
0
)
(
x
−
x
0
)
f(x)=f(x_0)+f'(x_0)(x-x_0)
f(x)=f(x0)+f′(x0)(x−x0)
其中x0为上一次迭代得到的值,那么这里**(x-x0)即梯度下降方向**,我们设其为:
(
x
−
x
0
)
=
η
ν
其
中
η
为
固
定
的
步
长
,
ν
为
单
位
向
量
,
指
向
梯
度
的
反
方
向
∴
f
(
x
)
=
f
(
x
0
)
+
η
ν
f
′
(
x
0
)
(x-x_0)=\eta\nu\\ 其中\eta为固定的步长,\nu为单位向量,指向梯度的反方向\\ \therefore f(x)=f(x_0)+\eta\nu f'(x_0)
(x−x0)=ην其中η为固定的步长,ν为单位向量,指向梯度的反方向∴f(x)=f(x0)+ηνf′(x0)
既然单位向量指向的是梯度的反方向,而梯度即我们所熟知的一阶导数,那么
ν
=
−
f
′
(
x
0
)
∣
∣
f
′
(
x
0
)
∣
∣
\nu=-\frac{f'(x_0)}{||f'(x_0)||}
ν=−∣∣f′(x0)∣∣f′(x0)
因此迭代公式为:
x
=
x
0
−
η
f
′
(
x
0
)
(
其
中
分
母
∣
∣
f
′
(
x
0
)
∣
∣
并
入
了
η
)
x=x_0-\eta f'(x_0)\\ (其中分母||f'(x_0)||并入了\eta)
x=x0−ηf′(x0)(其中分母∣∣f′(x0)∣∣并入了η)
放到最小二乘法中,这里的f(x)即我们求MSE的函数,我们要求的系数x即这里的x.这就是求解最小二乘法的一个思路.
当然实际情况不可能像这个一维问题这么简单.扩展到多维问题时,我们要先引入雅可比矩阵:
雅可比矩阵
雅克比矩阵为函数对各自变量的一阶导数.大致形式如下:(m*n矩阵)
(
∂
y
1
x
1
.
.
.
∂
y
1
x
n
.
.
.
.
.
.
.
.
.
∂
y
m
x
1
.
.
.
∂
y
m
x
n
)
往
往
可
以
表
示
为
J
F
(
x
1
,
x
1
,
.
.
.
,
x
n
)
=
J
F
(
X
)
\begin{pmatrix} \frac{\partial y_1}{x_1} & ... & \frac{\partial y_1}{x_n}\\ ... & ... & ...\\ \frac{\partial y_m}{x_1} & ... &\frac{\partial y_m}{x_n} \end{pmatrix}\\ 往往可以表示为J_F(x_1,x_1,...,x_n)=J_F(X)
⎝⎛x1∂y1...x1∂ym.........xn∂y1...xn∂ym⎠⎞往往可以表示为JF(x1,x1,...,xn)=JF(X)
可以看到,雅可比矩阵即对应多维函数的一阶导数,带入梯度下降法得到多维情况下的迭代公式:
x
⃗
=
x
⃗
0
−
η
J
F
\vec x=\vec x_0-\eta J_F
x=x0−ηJF
这就是梯度下降法的通用算法,可以预见的是,由于方向为梯度反方向,速度非常快.
但同时有个很大的缺点:由于步长是固定的,很容易在接近理想值时,在其附近不断震荡而无法进一步逼近,最后收敛速度很慢.此外,梯度下降法终究只是线性收敛.
如图所示:
可能出现最后在这两点间“反复横跳”的情况。
牛顿法
这是一种非线性最小二乘法的迭代算法。
一般来说牛顿法有两种主要的应用:
- 求解方程根
- 求解最优化问题
简单介绍第一种应用:
假设要求这么一个函数f(x)的根,用泰勒一阶展开,去掉线性部分,不断迭代不断逼近,具体方法如下:
通过泰勒一阶展开有
f
(
x
)
=
f
(
x
0
)
+
f
′
(
x
0
)
(
x
−
x
0
)
∴
x
1
=
x
0
−
f
(
x
0
)
f
′
(
x
0
)
f(x)=f(x_0)+f'(x_0)(x-x_0)\\ \therefore x_1=x_0-\frac{f(x_0)}{f'(x_0)}
f(x)=f(x0)+f′(x0)(x−x0)∴x1=x0−f′(x0)f(x0)
经过迭代可以得到迭代公式:
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不断逼近方程根的真实值。
这里着重介绍第二种应用,即最小二乘法中的应用。在最优化算法中,涉及到了二阶泰勒展开。原因如下:
我们通过一阶导数为零的方法计算得到的往往不能保证函数两侧单调性必然相反.
为了提高准确性,在梯度下降法的基础上,牛顿法的迭代引入了二阶导数(二阶泰勒展开式).
照例先分析一维情况下的迭代算法,目标函数为f(x),大致迭代算法如下,和梯度下降法类似:
- 选定一个初始点x,设定允许误差e0>0
- 从x出发以用迭代公式求取下一个x
- 若得到的的x可以满足|f(x)-f(x0)|<e0,则满足要求,得到我们需要的x.结束迭代,否则:
- 继续进行2.
求解迭代公式,对f(x)二阶泰勒展开:
其中x0为上次迭代得到的x,目的是求x:
f
(
x
)
≈
g
(
x
)
=
f
(
x
0
)
+
f
′
(
x
0
)
(
x
−
x
0
)
+
1
2
f
′
′
(
x
0
)
(
x
−
x
0
)
2
设
Δ
x
=
(
x
−
x
0
)
,
有
f
(
x
0
+
Δ
x
)
=
f
(
x
0
)
+
f
′
(
x
0
)
Δ
x
+
1
2
f
′
′
(
x
0
)
Δ
x
2
左
右
f
(
x
0
+
Δ
x
)
≈
f
(
x
0
)
可
约
去
,
对
剩
下
部
分
处
理
可
得
f
′
(
x
0
)
+
f
′
′
(
x
0
)
Δ
x
=
f
′
(
x
0
)
+
f
′
′
(
x
0
)
(
x
−
x
0
)
=
0
由
此
可
得
x
=
x
0
−
f
′
(
x
0
)
f
′
′
(
x
0
)
f(x)\approx g(x)=f(x_0)+f'(x_0)(x-x_0)+\frac{1}{2}f''(x_0)(x-x_0)^2\\ 设\Delta x=(x-x_0),有\\ f(x_0 + \Delta x)=f(x_0)+f'(x_0)\Delta x+\frac{1}{2}f''(x_0)\Delta x^2\\ 左右f(x_0 + \Delta x)\approx f(x_0)可约去,对剩下部分处理可得\\ f'(x_0)+f''(x_0)\Delta x=f'(x_0)+f''(x_0)(x-x_0)=0\\ 由此可得\\ x=x_0-\frac{f'(x_0)}{f''(x_0)}
f(x)≈g(x)=f(x0)+f′(x0)(x−x0)+21f′′(x0)(x−x0)2设Δx=(x−x0),有f(x0+Δx)=f(x0)+f′(x0)Δx+21f′′(x0)Δx2左右f(x0+Δx)≈f(x0)可约去,对剩下部分处理可得f′(x0)+f′′(x0)Δx=f′(x0)+f′′(x0)(x−x0)=0由此可得x=x0−f′′(x0)f′(x0)
由此可得迭代公式
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)
进入多维无约束情况的分析.在此要引入代表二阶偏导数的海森矩阵(Hessian Matrix).
海森矩阵
海森矩阵为函数对自变量的二次微分。形式如下:(n*n方阵)
KaTeX parse error: Undefined control sequence: \ at position 305: …\partial x_n}\\\̲ ̲ ... & ... & .…
将雅可比矩阵和海森矩阵带入迭代公式可得:
x
⃗
n
+
1
=
x
⃗
n
−
J
F
(
X
)
H
(
X
)
\vec x_{n+1}=\vec x_n-\frac{J_F(X)}{H(X)}
xn+1=xn−H(X)JF(X)
与梯度下降法相同,这里目标函数f(x)即最小二乘法中的的MSE函数,求解对象即矩阵x
牛顿法的一个很大的缺点是,求海森矩阵的计算量非常大
高斯牛顿法
高斯牛顿法是对牛顿法的一个扩展.大致迭代算法和牛顿法相同,但其中对海森矩阵有一些简化处理.
因为对实际的无约束高维问题,求解海森矩阵(二阶偏导)是一件费时费力的事,还不一定求得出.
对此,高斯牛顿法提出的优化方法为:
∂
f
2
∂
x
i
∂
x
j
≈
∂
f
∂
x
i
∂
f
∂
x
j
\frac{\partial f^2}{\partial x_i\partial x_j}\approx \frac{\partial f}{\partial x_i}\frac{\partial f}{\partial x_j}
∂xi∂xj∂f2≈∂xi∂f∂xj∂f
因此海森矩阵可以简化为两个雅可比矩阵相乘:
H
(
X
)
≈
J
F
(
X
)
T
J
F
(
X
)
H(X) \approx J_F(X)^T J_F(X)
H(X)≈JF(X)TJF(X)
因此迭代公式变为:
x
⃗
n
+
1
=
x
⃗
n
−
J
F
(
X
)
J
F
(
X
)
T
J
F
(
X
)
\vec x_{n+1}=\vec x_n-\frac{J_F(X)}{J_F(X)^T J_F(X)}
xn+1=xn−JF(X)TJF(X)JF(X)
与牛顿法相比,高斯牛顿法大大降低了运算量.
但要注意这种一阶向二阶逼近是有条件的!
残差(x-x0)接近于零或者接近线性函数从而接近与零时,二阶信息项才可以忽略。通常称为“小残量问题”,否则高斯牛顿法不收敛。
此外,必须要求矩阵J满秩才能进行计算.
对于零残量,小残量和最小二乘法问题高斯牛顿法有很好的求解效果.