IRLS (迭代重加权最小二乘)优化算法理解
最近在阅读去模糊算法中,在估计模糊核过程中经常提到IRLS算法,决定好好理解一下!
以下理解来自论文《Iterative Reweighted Least Squares》
对于线性方程组的最优近似解问题:
写成矩阵形式,
A
x
=
b
,
A
∈
R
M
×
N
{\bf Ax=b,A\in }\mathbb R^{M\times N}
Ax=b,A∈RM×N
等价于最小化误差向量
e
=
A
x
−
b
\bf e=Ax-b
e=Ax−b的范数。
最小平方误差近似
使用二范数作为误差度量: ∥ e ∥ 2 2 = ∑ i e i 2 = e T e {\bf \Vert e\Vert_2^2}=\sum_i e_i^2=\bf e^Te ∥e∥22=∑iei2=eTe,
如果A为方正且是非奇异的,即 M = N M=N M=N,有精确解: x = A − 1 b \bf x=A^{-1}b x=A−1b;
如果 M > N M>N M>N,即Overdetermined,近似解为: x = [ A T A ] − 1 A T b \bf x={[A^TA]}^{-1}A^Tb x=[ATA]−1ATb;
如果 M < N M<N M<N,即Underdetermined,近似解为: x = A T [ A T A ] − 1 b \bf x=A^T{[A^TA]}^{-1}b x=AT[ATA]−1b;
加权最小平方误差近似
即使用加权的二范数来强调或不强调方程组中的某些分量:
一般范数作为误差度量
前面都只是铺垫,基于二范数实现的近似解。对于更一般的p范数而言:
∥
e
∥
p
=
(
∑
i
∣
e
i
∣
p
)
1
/
p
,
{\bf \Vert e\Vert}_p=(\sum_i|e_i|^p)^{1/p},
∥e∥p=(i∑∣ei∣p)1/p,
等价于优化:
∥
e
∥
p
p
=
∑
i
∣
e
i
∣
p
{\bf \Vert e\Vert}_p^p=\sum_i|e_i|^p
∥e∥pp=∑i∣ei∣p。
p=0.2(p=1)时对小值依然有较大的惩罚,使它们趋于零,可以实现解的稀疏性。
因此在某些场景,比如去模糊过程中常使用1范数作为解约束。
接下来说本文主题IRLS 算法。
∥
e
∥
p
p
=
∑
i
∣
e
i
∣
p
=
∑
i
∣
e
i
∣
(
p
−
2
)
∣
e
i
∣
2
=
∑
i
w
n
2
∣
e
i
∣
2
=
∥
W
e
∥
2
2
{\bf \Vert e\Vert}_p^p=\sum_i|e_i|^p=\sum_i|e_i|^{(p-2)}|e_i|^2=\sum_iw_n^2|e_i|^2={\bf \Vert We\Vert}^2_2
∥e∥pp=i∑∣ei∣p=i∑∣ei∣(p−2)∣ei∣2=i∑wn2∣ei∣2=∥We∥22
通过上式即可明白该算法的核心:等价于解加权最小平方误差近似问题,只是权值
W
\bf W
W在迭代过程中不断变化(更新,reweighted):
w
n
=
e
i
(
p
−
2
)
/
2
w_n=e_i^{(p-2)/2}
wn=ei(p−2)/2。因为对角阵
W
\bf W
W根据上次误差
e
\bf e
e计算得到,因此会不断变化。
Matlab算法实现如下:
% minimizing the L_p norm ||Ax-b||_p, using basic IRLS.
% csb 11/10/2012
function x = IRLS0(A,b,p,KK)
if nargin < 4, KK=10; end;
x = pinv(A)*b; % Initial L_2 solution W为单位阵I得到初始解
E = [];
for k = 1:KK % Iterate
e = A*x - b; % Error vector
w = abs(e).^((p-2)/2); % Error weights for IRLS 重加权
W = diag(w/sum(w)); % Normalize weight matrix
WA = W*A; % apply weights
x = (WA'*WA)\(WA'*W)*b; % weighted L_2 sol.
ee = norm(e,p); E = [E ee]; % Error at each iteration
end
plot(E)
可以参考:https://blog.csdn.net/lzp_k2/article/details/88042874