递归最小二乘算法(RLS递归最小二乘法(Recursive Least Squares))
RLS递归最小二乘法(Recursive Least Squares)
感谢B站Up 凩子白的讲解视频, 大多数的RLS算法介绍都是从各种专业领域角度讲解的(比如滤波器等角度), 对于缺乏专业背景的同学入门较难, 本文主要是以上提到的视频的文字化, 加入了自己的一些理解, 也许有一些地方不是那么严谨, 不过希望能帮助其他同学快速了解一下RLS算法的思想 。
PRELIMINARIES
最小二乘法
对于样本数据对儿
(
x
,
y
)
(\mathbf{x},y)
(x,y), 其中输入数据向量x
=
[
x
11
,
x
12
,
.
.
.
,
x
1
m
]
T
∈
R
m
\mathbf{x}=[x_{11},x_{12},...,x_{1m}]^T \in \mathbb{R}^m
x=[x11,x12,...,x1m]T∈Rm, 输出样本为y
∈
R
y\in \mathbb{R}
y∈R; 使用参数为w
\mathbf{w}
w 的模型来拟合数据(
x
,
y
)
(\mathbf{x},y)
(x,y)之间的真实映射关系; 认为模型w
\mathbf{w}
w的输出为y
y
y的估计值y
^
∈
R
\hat{y}\in \mathbb{R}
y∈R, 满足y
^
∼
f
(
w
;
x
)
\hat{y} \sim f({\mathbf{w}};\mathbf{x})
y∼f(w;x), 拟合模型满足如下形式
y
1
^
=
w
1
x
11
+
w
2
x
12
+
.
.
.
w
m
x
1
m
=
x
1
T
w
y
2
^
=
x
2
T
w
⋮
y
n
^
=
x
n
T
w
(1)
\hat{y_1}=w_1x_{11}+w_2x_{12}+...w_mx_{1m}=\mathbf{x_1^T}\mathbf{{w}}\\ \hat{y_2}=\mathbf{x_2^T }\mathbf{{w}}\\ \vdots\\ \hat{y_n}=\mathbf{x_n^T }\mathbf{{w}} \tag{1}
y1=w1x11+w2x12+...wmx1m=x1Twy2=x2Tw⋮yn=xnTw(1) 最小二乘法的思路, 就是希望近似模型参数w
\mathbf{{w}}
w在这n
n
n个样本输入数据X
n
×
m
=
[
x
1
,
x
2
,
.
.
.
,
x
n
]
T
X_{n\times m}=[\mathbf{x_1},\mathbf{x_2},...,\mathbf{x_n}]^T
Xn×m=[x1,x2,...,xn]T (以后简记为X
X
X)上得出的估计值y
^
=
[
y
1
^
,
y
2
^
,
.
.
.
,
y
n
^
]
T
\hat{\mathbf y}=[\hat{y_1},\hat{y_2},...,\hat{y_n}]^T
y=[y1,y2,...,yn]T 与ground truth 输出样本数据y
=
[
y
1
,
y
2
,
.
.
.
,
y
n
]
T
\mathbf y=[y_1,y_2,...,y_n]^T
y=[y1,y2,...,yn]T之间的差值平方和最小,即
w
=
arg
m
i
n
∑
i
=
1
n
(
y
i
−
y
i
^
)
2
=
arg
m
i
n
∑
i
=
1
n
(
y
i
−
x
i
T
w
)
2
=
arg
m
i
n
∥
y
−
X
w
∥
2
2
=
arg
m
i
n
E
(
w
)
(2)
{\mathbf{w}} =\arg min \sum\limits_{i=1}^n (y_i-\hat{y_i})^2\\ = \arg min \sum\limits_{i=1}^n (y_i-\mathbf{x_i^T }\mathbf{{w}})^2\\ =\arg min \begin{Vmatrix} \mathbf{y}-X\mathbf{w} \end{Vmatrix}_2^2\\ =\arg min\ E(\mathbf{w}) \tag{2}
w=argmini=1∑n(yi−yi)2=argmini=1∑n(yi−xiTw)2=argminy−Xw22=argminE(w)(2) 误差E
(
w
)
E(\mathbf{w})
E(w)对参数w
\mathbf{w}
w求梯度,
∇
w
E
=
∇
w
∥
y
−
X
w
∥
2
2
=
∇
w
[
(
y
−
X
w
)
T
(
y
−
X
w
)
]
=
2
X
T
(
y
−
X
w
)
(3)
\nabla_\mathbf{w} E =\nabla_\mathbf{w}\begin{Vmatrix} \mathbf{y}-X\mathbf{w} \end{Vmatrix}_2^2\\ =\nabla_\mathbf{w} \big[(\mathbf{y}-X\mathbf{w})^T(\mathbf{y}-X\mathbf{w})\big] \\ =2X^T(\mathbf{y}-X\mathbf{w}) \tag{3}
∇wE=∇wy−Xw22=∇w[(y−Xw)T(y−Xw)]=2XT(y−Xw)(3) 令∇
w
E
=
\nabla_\mathbf{w} E=0
∇wE=0, 即可求出
w
=
X
−
1
y
=
(
X
T
X
)
−
1
X
T
y
(4)
\mathbf{w}=X^{-1}\mathbf{y}=(X^TX)^{-1}X^T\mathbf{y} \tag{4}
w=X−1y=(XTX)−1XTy(4) 注意, 公式3
{3}
3中的y
\mathbf y
y是样本数据, 将X
−
1
X^{-1}
X−1表述为(
X
T
X
)
−
1
X
T
(X^TX)^{-1}X^T
(XTX)−1XT的原因是矩阵X
X
X不一定是n
×
n
n\times n
n×n形状,因此不一定有逆矩阵, 而X
T
X
X^TX
XTX的逆是存在的?当一次性给出所有样本集合
(
X
,
y
)
(X,\mathbf{y})
(X,y)时, 可以通过公式4
{4}
4来直接计算出最优的拟合模型参数w
\mathbf{w}
w , 然而, 在实际应用中, 这种直接计算法并不常见, 主要是因为公式中求逆部分(
X
T
X
)
−
1
(X^TX)^{-1}
(XTX)−1 的计算量大, 在样本数据量大时计算量更是明显增大; 另外, 现实生活中,往往出现样本数据可能也并不是一次性给出, 而是不断给出新的样本数据, 以一种数据流的形式给出样本数据, 例如传感器随时间不断读取信号等, 这种情况下利用公式4
{4}
4直接计算最优模型参数w
{\mathbf{w}}
w 就需要每次进行直接计算, 也是不现实的.因此, 为了利用最小误差平方和原则, 求解在大样本量, 或者数据流情况下的最优模型参数
w
{\mathbf{w}}
w, 一种方法可以将大样本分成多批次(batch), 计算旧模型在新批次样本上的梯度, 不断进行梯度下降来进行迭代求解(也可以将数据流当做一个个batch来梯度更新); 另一种则是解析的方法, 就是这里提到的递归最小二乘解法(RLS).本质上, 递归最小二乘法RLS和梯度下降 、直接计算法一样, 都是为了求解满足最小误差平方和原则的最优模型参数
w
{\mathbf{w}}
w, 只是在实现方式上有所不同.递归最小二乘法
如之前提到的, RLS的主要应用场景, 是假设输入样本数据
X
X
X在不断添加新数据, 例如X
=
[
x
1
,
x
2
,
.
.
.
,
x
n
]
T
→
X
′
=
[
x
1
,
x
2
,
.
.
.
,
x
n
,
x
n
+
1
]
T
X=[\mathbf{x_1},\mathbf{x_2},...,\mathbf{x_n}]^T\rightarrow X=[\mathbf{x_1},\mathbf{x_2},...,\mathbf{x_n} , \mathbf{x_{n+1}}]^T
X=[x1,x2,...,xn]T→X′=[x1,x2,...,xn,xn+1]T,y
=
[
y
1
,
y
2
,
.
.
.
,
y
n
]
T
→
y
′
=
[
y
1
,
y
2
,
.
.
.
,
y
n
,
y
n
+
1
]
T
\mathbf y=[y_1,y_2,...,y_n]^T\rightarrow\mathbf y=[y_1,y_2,...,y_n,y_{n+1}]^T
y=[y1,y2,...,yn]T→y′=[y1,y2,...,y创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!