IRLS(迭代重加权最小二乘)学习笔记

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_30074301/article/details/78894927

IRLS(Iterative Reweighted Least Squares)迭代重加权最小二乘

 

Reference:

【1】Rick Chartrand, Wotao Yin. Iteratively reweighted algorithmsfor compressive sensing[J]. 2008:3869-3872.

【2】iterative-reweighted-least-squares-12.pdf

【3】http://blog.csdn.net/hjxzb/article/details/51077309

 

主要思想:通过权重迭代,利用二范数来实现 的最小范数解 在是非凸问题


关于(5)的推导:


下面是关于(3.35)的推导

 

Step1:根据(3.33)式有:(因为W为正定对角阵)


Step2:将(1)式代入(3.32)式可得:(因为对称)


Step3: (2)式对求导,并令其等于0:

规则如下:





注意的部分:

 

1.    在看文献【1】的时候,错误理解了第三部分的第一段,以为是每次迭代都需要减少10倍,后面师兄说我理解错了,最后参考了文献【3】,将

 

标黄的部分作为的触发条件。

 

2.    还有一个小收获,是matlab当中尽量用左除,不要用inv和右除,原因如下:

矩阵的除是用高斯消去法来做的,A\b就等效于用消去法解Ax=b,A\B等效于用消去法解AX=B,就多解了很多次

3.     P=1时,相对BP而言,IRLS的速度要慢许多~其他还未比较

代码如下:

IRLS 函数

functionu=IRLS(Phi,b,p)

%aim to solve nonconvex ||x||p s.t Phi*a=b 0<=p<1

%min sum(wi ui^2)  Phi*u=b

%u(n)=Qn*Phi'*inv(Phi*Qn*Phi')*b

%u(n)=1/wi=|ui(n-1)|^(2-p)

%referencence: Iteratively reweighted algorithms for compressive sensing RickChartrand

%Phi-->M*N  M<<N

%written by Palace Wangle 2017/12/25

epsilon= 1;%initial large value

u= pinv(Phi)*b;

m= norm(u);

Em=[];%储存迭代

%  for i = 1:100

 while epsilon>1e-8

    w=(u.^2+epsilon).^(p/2-1);

    Q  =diag(1./w);

    t = u;

    u = (Q * Phi') *((Phi*Q*Phi') \ b);

%     u = Q * Phi' /(Phi*Q*Phi') * b;

    if m<=(sqrt(epsilon)/100)  % 二范数的差改变小于sqrt(epsilon)/100  

         epsilon = epsilon/10;

    end

    m=norm(t-u);

    Em = [Em;m];

 end

epsilon


CS单次重构:

%%compressive sensing test

 

clearall

clc

M= 64;

N= 256;

K= 10;

Index_K= randperm(N);

x= zeros(N,1);

x(Index_K(1:K))= 5*randn(K,1);

Psi= eye(N);

Phi= randn(M,N);

A= Phi * Psi;

y= Phi *x;

tic

theta= IRLS(A,y,1/2);

x_r= Psi * theta;

toc

 

figure

plot(x_r,'k.-')

holdon

plot(x,'r')

holdoff

legend('Recovery','Original');

fprintf('\n恢复残差:');

norm(x_r-x)

展开阅读全文

没有更多推荐了,返回首页