一曲新词酒一杯,去年天气旧亭台。夕阳西下几时回?

无可奈何花落去,似曾相识燕归来。小园香径独徘徊。

———《浣溪沙·一曲新词酒一杯》——晏殊

更多精彩内容请关注微信公众号 “优化与算法

上一期介绍了低秩矩阵填充问题,这一期介绍一下低秩稀疏矩阵恢复问题。

1. 低秩矩阵恢复

将一个矩阵 \(\bf{D}~(\bf {D} = \bf {A_0} +\bf E_0)\) 分解为一个低秩矩阵部分 \(\bf{A}\) 和一个独立同分布的高斯矩阵 \(\bf{E}\) 的问题是经典的主成分分析(PCA)问题,可以通过对矩阵 \(\bf{D}\) 进行奇异值分解得到最优解。

然而,当矩阵 \(\bf{E_0}\) 为稀疏的噪声矩阵时,PCA不再适用于解决这个问题。此时 ,将一个矩阵 \(\bf{D}~(\bf {D} = \bf {A_0} +\bf E)\) 分解为一个低秩矩阵部分 \(\bf{A}\) 和一个稀疏矩阵部分 \(\bf{E}\) 的问题可以建模为下述优化问题:

\[\begin{array}{l}
\mathop {\min }\limits_{{\bf{A}},{\bf{E}}} ~~~rank({\bf{A}}) + \lambda {\left\| {\bf{E}} \right\|_0} \\
s.t.~~~{\bf{D}} = {\bf{A}} + {\bf{E}} \\
\end{array}~~~~~(1)\]

其中 \({\bf{D}},{\bf{A}},{\bf{E}},{{\bf{A}}_0},{{\bf{E}}_0}{ \in \mathbb{R}^{m \times n}}\),\(\bf D\) 是观测矩阵。(1)式中 \(rank(\bf A)\) 和 \({\left\| {\bf{E}} \right\|_0}\) 都是非线性且非凸的,优化起来非常困难,这个问题也被称为主成分追踪(Principal component pursuit, PCP)。幸运的是我们提前知道一些先验信息,即矩阵 \(\bf A\) 是低秩的且矩阵 \(\bf E\) 是稀疏的,从上一期介绍的关于矩阵填充理论中可知,矩阵的秩和 \(\ell_0\) 范数问题都可以进行凸松弛,从而为求解上述问题提供了途径。由于矩阵的核范数是矩阵秩的凸包络,矩阵的(1,1)范数是矩阵0范数的凸包络,因此可以将问题(1)松弛为如下凸优化问题:

\[\begin{array}{l}
\mathop {\min }\limits_{{\bf{A}},{\bf{E}}}~~~ {\left\| {\bf{A}} \right\|_*} + \lambda {\left\| {\bf{E}} \right\|_{1,1}} \\
s.t.~~~{\bf{D}} = {\bf{A}} + {\bf{E}} \\
\end{array}~~~~~~(2)\]

求解式(2)也称为鲁棒主成分分析(RPCA)。

文献[1]中指出,只要低秩矩阵 \(\bf{A_0}\) 的奇异值分布合理且稀疏矩阵的非零元素均匀分布,那么凸优化问题PCP就能够以接近1的概率从未知的任意误差中恢复出原始低秩矩阵 \(\bf A_0\) 来。

求解(2)式的算法可以分为如下几大类:

  1. 迭代阈值算法

    对于PCP问题时,迭代阈值算法(Iterative Thresholding, IT) 通过交替更新矩阵 \(\bf A\) 和 \(\bf E\) 来求解。IT算法的迭代形式简单且收敛,但它的收敛速度比较慢,且难以选取合适的步长。因此,IT算法具有有限的应用范围。
  2. 加速近端梯度算法

    加速近端梯度算法(Accelerated Proximal Gradient, APG)的主要思想是利用了Nesterov加速,使算法能够快速收敛。
  3. 对偶方法

    将原问题转化为其对偶问题(非线性、非光滑),并使用最速上升法等可以求解。对偶方法比APG算法具有更好的可扩展性,这是因为在每次迭代过程中对偶方法不需要矩阵的完全奇异值分解。
  4. 增广拉格朗日乘子法

这些方法都非常经典,这里不再细述,总的来说,只要将问题转化为凸问题,就有一大堆方法可以用来求解。这里仅介绍一种增广拉格朗日乘子算法,即交替方向方法(Alternating direction methods, ADM),也称为不精确拉格朗日乘子法(Inexact ALM, IALM)。

下面给出上述几种算法的比较(数据来源于网络)

2. 交替方向算法(ADM)

对于优化问题(2),首先构造增广拉格朗日函数:

\[L({\bf{A}},{\bf{E}},{\bf{Y}},u) = {\left\| {\bf{A}} \right\|_*} + \lambda {\left\| {\bf{E}} \right\|_{1,1}} + \left\langle {{\bf{Y}},{\bf{D}} - {\bf{A}} - {\bf{E}}} \right\rangle + \frac{u}{2}\left\| {{\bf{D}} - {\bf{A}} - {\bf{E}}} \right\|_F^2~~~(3)
\]

当 \({\bf{Y}} = {{\bf{Y}}_k},u = {u_k}\) 时,使用交替方法求解块优化问题:

\[\mathop {\min }\limits_{{\bf{A}},{\bf{E}}} L({\bf{A}},{\bf{E}},{{\bf{Y}}_k},{u_k})~~~(4)
\]

使用精确拉格朗日乘子法(Exact ALM, EALM)交替迭代矩阵 \(\bf A\) 和 \(\bf E\),直到满足终止条件为止。若 \({\bf{E}} = {\bf{E}}_{k + 1}^j\),则

\[\begin{array}{l}
{\bf{A}}_{k + 1}^{j + 1} = \arg \mathop {\min }\limits_{\bf{A}} L({\bf{A}},{\bf{E}}_{k + 1}^j,{{\bf{Y}}_k},{u_k}) \\
= \arg \mathop {\min }\limits_{\bf{A}} {\left\| {\bf{A}} \right\|_*} + \frac{{{u_k}}}{2}\left\| {{\bf{A}} - ({\bf{D}} - {\bf{E}}_{k + 1}^j + \frac{{{{\bf{Y}}_k}}}{{{u_k}}})} \right\|_F^2 \\
= {D_{\frac{1}{{{u_k}}}}}({\bf D} - {\bf{E}}_{k + 1}^j + \frac{{{{\bf{Y}}_k}}}{{{u_k}}}) \\
\end{array}~~~(5)\]

再根据 \({\bf{A}}_{k + 1}^{j + 1}\) 更新矩阵 \(\bf E\):

\[\begin{array}{l}
{\bf{E}}_{k + 1}^{j + 1} = \arg \mathop {\min }\limits_{\bf{E}} L({\bf{A}}_{k + 1}^{j + 1},{\bf{E}},{{\bf{Y}}_k},{u_k}) \\
= \arg \mathop {\min }\limits_{\bf{E}} \lambda {\left\| {\bf{E}} \right\|_{1,1}} + \frac{{{u_k}}}{2}\left\| {{\bf{E}} - ({\bf{D}} - {\bf{A}}_{k + 1}^{j + 1} + \frac{{{{\bf{Y}}_k}}}{{{u_k}}})} \right\|_F^2 \\
= {S_{\frac{\lambda }{{{u_k}}}}}({\bf D} - {\bf{A}}_{k + 1}^{j + 1} + \frac{{{{\bf{Y}}_k}}}{{{u_k}}}) \\
\end{array}~~~(6)\]

记 \({\bf{A}}_{k + 1}^{\rm{*}}\) 和 \({\bf{E}}_{k + 1}^{\rm{*}}\) 分别为 \({\bf{A}}_{k + 1}^{j + 1}\) 和 \({\bf{E}}_{k + 1}^{j + 1}\) 的精确值,则矩阵 \(\bf Y\) 的更新公式为:

\[{{\bf{Y}}_{k{\rm{ + }}1}}{\rm{ = }}{{\bf{Y}}_k}{\rm{ + }}{u_k}({\bf{D}} - {\bf{A}}_{k + 1}^{\rm{*}} - {\bf{E}}_{k + 1}^{\rm{*}})~~~(7)
\]

参数 \({u_k}\) 可以更新如下:

\[{u_{k + 1}} = \left\{ {\begin{array}{*{20}{c}}
{\rho {u_k}~~~\frac{{{u_k}{{\left\| {{\bf{E}}_{k + 1}^{\rm{*}}{\rm{ - }}{\bf{E}}_k^{\rm{*}}} \right\|}_F}}}{{{{\left\| {\bf{D}} \right\|}_F}}} < \varepsilon } \\
{{u_k}~~~~~~~~otherwise} \\
\end{array}} \right.~~~~(8)\]

其中 \(\rho>1\) 为常数,\(\varepsilon>0\) 为一个小的正数。

上述精确ALM方法在内循环中要多次更新,进行多次奇异值分解,为此文献[1]提出了非精确拉格朗日乘子法(Inecact ALM, IALM),它不需要在每次外循环开始之前要求 \(\mathop {\min }\limits_{{\bf{A}},{\bf{E}}} L({\bf{A}},{\bf{E}},{{\bf{Y}}_k},{u_k})\) 的精确解,也就是去掉了ALM方法的内循环,其更新公式变成了如下形式:

\[\begin{array}{l}
{{\bf{A}}_{k + 1}} = \arg \mathop {\min }\limits_{\bf{A}} L({\bf{A}},{{\bf{E}}_{k + 1}},{{\bf{Y}}_k},{u_k}) \\
~~~~~~~~~= {D_{\frac{1}{{{u_k}}}}}({\bf{D}} - {{\bf{E}}_{k + 1}} + \frac{{{{\bf{Y}}_k}}}{{{u_k}}}) \\
\end{array}~~~(9)\]

\[\begin{array}{l}
{{\bf{E}}_{k + 1}} = \arg \mathop {\min }\limits_{\bf{E}} L({{\bf{A}}_{k + 1}},{\bf{E}},{{\bf{Y}}_k},{u_k}) \\
{~~~~~~~~~=S_{\frac{\lambda }{{{u_k}}}}}({\bf{D}} - {{\bf{A}}_{k + 1}} + \frac{{{{\bf{Y}}_k}}}{{{u_k}}}) \\
\end{array}~~~~(10)\]

上面式子中的奇异值阈值算子 \({D_{\frac{1}{{{u_k}}}}}( \cdot )\) 和软阈值算子 \({S_{\frac{\lambda }{{{u_k}}}}}( \cdot )\) 的定义参见上一期<低秩矩阵填充|奇异值阈值算法>。

4. 低秩矩阵恢复的应用

低秩矩阵恢复技术是一个非常有研究价值和实用价值的技术,它的应用也非常广泛,比如说:

  1. 视频背景建模。

  2. 图像恢复(去光照、阴影等)

  3. 图像类别标签净化

  4. 文本主题分析

  5. 音乐词曲分离

  6. 图像矫正与去噪

  7. 图像对齐

5. 仿真

ADM算法matlab代码如下:

function [L,S] = pcp_ad(M,u,lambda,itemax,tol)
% solve PCP problem by ADM algorithm
% v1.0 2020-1-1
% function:solve the following optimization problem
% min ||X||*+lambda||E||_F
% s.t. M = A+E % initialize S0 and Y0 and L0
[m,n] = size(M) ;
S = zeros(m,n) ;
Y = S ;
L = S ; % the observed matrix can contain non number
unobserved = isnan(M);
M(unobserved) = 0; if nargin < 2
lambda = 1 / sqrt(max(m,n));
end
if nargin < 3
u = 10*lambda;
end
if nargin < 4
tol = 1e-6;
end
if nargin < 5
itemax = 1000;
end for ii = 1:itemax
L = sig_thre(M-S+(1/u)*Y,(1/u)) ;
S = soft_thre(M-L+(1/u)*Y, lambda/u) ;
Z = M-L-S ;
Y = Y+u*Z ;
error = norm(M-L-S,'fro')/norm(M,'fro') ;
if (ii == 1) || (mod(ii, 10) == 0) || (error < tol)
fprintf(1, 'iter: %04d\terr: %f\trank(L): %d\tcard(S): %d\n', ...
ii, error, rank(L), nnz(S));
end
if error<tol
break;
end
end

数值测试代码:



% solve PCP problem by alternating direction method
clear
clc m = 100 ;
n = 100 ;
r = 0.05*n ;
rate = 0.05 ;
% Generating a low rank matrix
LL = randn(m,r)/sqrt(m)*randn(r,n)/sqrt(n) ;
% Generating a large sparse noise matrix (Bernoulli matrix)
SS = randi([0,1],m,n) ;
SS(SS==0) = -1 ; % sampling
ss = SS(:) ;
index = sort(randperm(m*n,ceil(rate*n*m))) ;
ss1 = zeros(m*n,1) ;
ss1(index) = ss(index) ;
SS = reshape(ss1,m,n) ;
M = LL+SS ; lambda = 1/sqrt(max(m,n)) ;
u = 10*lambda ; % [L,S] = pcp_ad(M,u,lambda,1000) ;
[L,S] = RobustPCA(M,lambda,u);
% [L,S] = pcp_ad(M,u,lambda,500,1e-8);
% [L,S] = adm_lrr(M);
MM = M-L-S ; norm(M-MM,'fro')/norm(M,'fro')
norm(M-L-S,'fro')/norm(M,'fro')
norm(L-LL,'fro')/norm(LL,'fro')
norm(S-SS,'fro')/norm(SS,'fro')
function A = soft_thre(B,T)
A = sign(B).*max(abs(B)-T,0) ;
end
function [A] = sig_thre(B,T)

[s,v,d] = svd(B,'econ') ;
% v(v<T) = 0 ;
% A = s*v*d' ;
A = s*soft_thre(v,T)*d' ;
end

运行上面程序,显示结果norm(M-L-S,'fro')/norm(M,'fro')约为9e-7,norm(L-LL,'fro')/norm(LL,'fro')约为1e-5。

低秩图像恢复仿真程序:

% low rank and sparse noise image recovery
clear
clc A = imread('C:\xxx\xxx\xxx.bmp') ; WW = double(A) ;
a1 = double(A(:,:,1)) ;
a2 = double(A(:,:,2)) ;
a3 = double(A(:,:,3)) ;
[M,N] = size(a1);
X = zeros(M,N,3); for jj = 1:3
lambda = 1*1 / sqrt(max(M,N));
u = 1*lambda;
[ X(:,:,jj),S(:,:,jj)] = RobustPCA(WW(:,:,jj),lambda,u,1e-8,200) ;
end figure(1)
subplot(3,1,1)
imshow(A)
title("原图",'fontsize',12)
subplot(3,1,2)
imshow(uint8(X))
title("低秩图",'fontsize',12)
d = S ;
d(d<20) = 255 ;
subplot(3,1,3)
imshow(uint8(d))
title("噪声图",'fontsize',12)

低秩图像恢复结果如下:

从上面图像恢复结果来看,效果还不错。

参考文献

[1] Candès, E. J., Li, X., Ma, Y., & Wright, J. (2011). Robust principal component analysis?. Journal of the ACM (JACM), 58(3), 11.

[2] 史加荣, 郑秀云, 魏宗田, & 杨威. (2013). 低秩矩阵恢复算法综述. 计算机应用研究, 30(6), 1601-1605.

[3] Cui, X., Huang, J., Zhang, S., & Metaxas, D. N. (2012, October). Background subtraction using low rank and group sparsity constraints. In European Conference on Computer Vision (pp. 612-625). Springer, Berlin, Heidelberg.

[4] Wright, J., Ganesh, A., Rao, S., Peng, Y., & Ma, Y. (2009). Robust principal component analysis: Exact recovery of corrupted low-rank matrices via convex optimization. In Advances in neural information processing systems (pp. 2080-2088).

[5] Peng, Y., Ganesh, A., Wright, J., Xu, W., & Ma, Y. (2012). RASL: Robust alignment by sparse and low-rank decomposition for linearly correlated images. IEEE transactions on pattern analysis and machine intelligence, 34(11), 2233-2246.

更多精彩内容请关注订阅号优化与算法

更多精彩内容请关注微信公众号 “优化与算法

低秩稀疏矩阵恢复|ADM(IALM)算法的更多相关文章

  1. HAWQ + MADlib 玩转数据挖掘之(四)——低秩矩阵分解实现推荐算法

    一.潜在因子(Latent Factor)推荐算法 本算法整理自知乎上的回答@nick lee.应用领域:"网易云音乐歌单个性化推荐"."豆瓣电台音乐推荐"等. ...

  2. 吴恩达机器学习笔记59-向量化:低秩矩阵分解与均值归一化(Vectorization: Low Rank Matrix Factorization & Mean Normalization)

    一.向量化:低秩矩阵分解 之前我们介绍了协同过滤算法,本节介绍该算法的向量化实现,以及说说有关该算法可以做的其他事情. 举例:1.当给出一件产品时,你能否找到与之相关的其它产品.2.一位用户最近看上一 ...

  3. 【RS】Local Low-Rank Matrix Approximation - LLORMA :局部低秩矩阵近似

    [论文标题]Local Low-Rank Matrix Approximation (icml_2013 ) [论文作者]Joonseok Lee,Seungyeon Kim,Guy Lebanon  ...

  4. Oracle 高版本往低版本备份恢复的方法

    1. 高版本的数据库备份恢复到低版本的数据库 有时候回报错, 提示version版本不一致, 2. 其实方法是expdp 导出的时候 增加一个参数就可以了 参数 一般的类型是 version=11.2 ...

  5. 推荐系统(recommender systems):预测电影评分--构造推荐系统的一种方法:低秩矩阵分解(low rank matrix factorization)

    如上图中的predicted ratings矩阵可以分解成X与ΘT的乘积,这个叫做低秩矩阵分解. 我们先学习出product的特征参数向量,在实际应用中这些学习出来的参数向量可能比较难以理解,也很难可 ...

  6. 低秩近似 low-rank approximation

  7. HAWQ + MADlib 玩转数据挖掘之(五)——奇异值分解实现推荐算法

    一.奇异值分解简介 奇异值分解简称SVD(singular value decomposition),可以理解为:将一个比较复杂的矩阵用更小更简单的三个子矩阵的相乘来表示,这三个小矩阵描述了大矩阵重要 ...

  8. paper 127:机器学习中的范数规则化之(二)核范数与规则项参数选择

    机器学习中的范数规则化之(二)核范数与规则项参数选择 zouxy09@qq.com http://blog.csdn.net/zouxy09 上一篇博文,我们聊到了L0,L1和L2范数,这篇我们絮叨絮 ...

  9. L0、L1与L2范数、核范数(转)

    L0.L1与L2范数.核范数 今天我们聊聊机器学习中出现的非常频繁的问题:过拟合与规则化.我们先简单的来理解下常用的L0.L1.L2和核范数规则化.最后聊下规则化项参数的选择问题.这里因为篇幅比较庞大 ...

随机推荐

  1. insert语句让我学会的两个MySQL函数

    我们要保存数据到数据库,插入数据是必须的,但是在业务中可能会出于某种业务要求,要在数据库中设计唯一索引:这时如果不小心插入一条业务上已经存在同样key的数据时,就会出现异常. 大部分的需求要求我们出现 ...

  2. Spring Data Jpa一对多单向映射

    /** @author StormMaybin @date 2017-01-17 */ 生命不息,奋斗不止! 一对多映射关系 在JPA中,用@OneToMany来标识一对多的关系.实现一对多的单向关联 ...

  3. IP地址和物理地址有什么区别

    所谓IP地址就是给每个连接在Internet上的主机分配的一个32bit地址.简单地说就是你在整个互联网上的ID. MAC(Media Access Control,介质访问控制)地址 (物理地址)是 ...

  4. [转]爬虫 selenium + phantomjs / chrome

    目录 selenium 模块 安装 phantomjs 浏览器 安装 chromedriver 接口 安装 对比两个接口 整合使用 基本实例 常用属性方法 定位节点 节点操作 其他操作 实例解析 - ...

  5. chrome浏览器频繁卡死

    输入chrome:flag 把对应的GPU选项关掉 或者重装 ,从360软件管理器上装

  6. dynamic web module version

    Ser vlet 3十二月2009开发平台标准版6,6可插性,易于开发,异步ser vlet,安全,文件上传 Ser vlet 2.5九月2005开发平台标准版5,5需要平台标准版5,支持注释 Ser ...

  7. Linux 内核释放函数和 kobject 类型

    讨论中仍然缺失的一个重要事情是当一个 kobject 的引用计数到 0 时会发生什么. 创建 kobject 的代码通常不知道什么时候要发生这个情况; 如果它知道, 在第一位使用一个引 用计数就没有意 ...

  8. 【50.40%】【BZOJ 4553】[Tjoi2016&Heoi2016]序列

    Time Limit: 20 Sec  Memory Limit: 128 MB Submit: 371  Solved: 187 [Submit][Status][Discuss] Descript ...

  9. codeforces 600E E. Lomsat gelral (线段树合并)

    codeforces 600E E. Lomsat gelral 传送门:https://codeforces.com/contest/600/problem/E 题意: 给你一颗n个节点的树,树上的 ...

  10. SRTE测试

    网络拓扑: XRV1 ======================================================================= hostname XRV1expl ...