非凸非光滑优化的惯性块镜像下降方法(Matlab代码实现)

 💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码及文章


💥1 概述

文献来源:

在本文中,我们提出了块坐标下降方法的惯性版本,用于解决非凸非光滑复合优化问题。我们利用Bregman距离函数的一般框架来计算近端映射。我们的方法不仅允许使用两个不同的外推点来评估梯度并添加惯性力,还利用随机选择要更新的变量块。此外,我们的方法不需要重新启动步骤,因此不是一个单调递减的方法。为了证明整个生成序列收敛到临界点,我们修改了Bolte、Sabach和Teboulle的收敛证明方法(非凸非光滑问题的近端交替线性化最小化,数学规划146(1):459-494,2014),并结合辅助函数。我们使用所提出的方法来解决非负矩阵分解(NMF)问题,并展示它们与最先进的NMF算法竞争优势。

📚2 运行结果

主函数代码:

clear all; close all; clc;
% Options and parameters
options.maxiter =inf;
options.timemax =2;
options.display=0;
% Dimensions of input matrix and rank
m = 200;
n = 200;
r = 20;
% Generation of synthetic data set
Vtrue = rand(r,n);
Utrue = rand(m,r);
X = Utrue*Vtrue;
% Initialization
U0 = rand(m,r);
V0 = rand(r,n);
% initial
options.init.W = U0;
options.init.H = V0;
% Run NMF Algorithms
% A-HALS
disp('Running A-HALS (Gillis & Glineur, 2012)...')
options.beta0 = 0;
options.NMFalgo = 'HALS';
[W,H,e0,t,e] = NMFextrapol(X,r,options);
fprintf('Final relative error of A-HALS   = %2.2d\n', e(end));
vAHALS=e;
tAHALS=t;
lAHALS=length(e);
% Andersen E-A-HALS (hp=3)
disp('Running E-A-HALS (Ang & Gillis, 2019)...');
options.beta0 = 0.5;
options.gammabeta = 1.01;
options.gammabetabar = 1.005;
options.extrapolprojH = 3;
options.NMFalgo = 'HALS';
[W,H,e0,t,e] = NMFextrapol(X,r,options);
fprintf('Final relative error of E-A-HALS = %2.2d\n', e(end));
vAnd=e;
tAnd=t;
% XuYin
disp('Running APGC (Xu & Yin, 2013)...');
[W,H,e,t] = APGMF(X,r,options);
fprintf('Final relative error of APGC     = %2.2d\n', e(end));
vXuYin=e;
tXuYin=t;
% Inertial matrix proximal gradient method with repeating update
disp('Running iMPG...');
[W,H,e,t] = iMPG(X,r,options);
fprintf('Final relative error of A-iMPG   = %2.2d\n', e(end));
viMPG=e;
tiMPG=t;
% Inertial column wise proximal method with repeating update
disp('Running iCP...');
[W,H,e,t] = iCP(X,r,0.001,1.01,0.6,options);
fprintf('Final relative error of A-iCP    = %2.2d\n', e(end));
viCP=e;
tiCP=t;
% iMPG cyclic
disp('Running iMPG (cyclic)...');
options.inneriter=1;
[W,H,e,t] = iMPG_cyclic(X,r,options);
fprintf('Final relative error of iMPG     = %2.2d\n', e(end));
viMPG_cyclic=e;
tiMPG_cyclic=t;
% Remove smallest value among relative errors obtained
vmin=min([min(vAHALS),min(vAnd),min(viMPG),min(viCP),min(vXuYin),min(viMPG_cyclic)]);
vAHALS=vAHALS-vmin;
vAnd=vAnd-vmin;
viMPG=viMPG-vmin;
viCP=viCP-vmin;
vXuYin=vXuYin-vmin;
viMPG_cyclic=viMPG_cyclic-vmin;
% Display results
set(0, 'DefaultAxesFontSize', 18);
set(0, 'DefaultLineLineWidth', 2);
figure;
surf(peaks);
grid('on');
semilogy(tAHALS,vAHALS ,'g-.');hold on; %A-HALS
semilogy(tAnd,vAnd,'b-.');hold on; %E-A-HALS
semilogy(tXuYin,vXuYin,'c-.');hold on; %XuYin
semilogy(tiMPG,viMPG,'r--');hold on; %A-iMPG
semilogy(tiCP,viCP,'k--');hold on;   %A-iCP
semilogy(tiMPG_cyclic,viMPG_cyclic,'m--');hold on; %iMPG-cyclic
legend('A-HALS','E-A-HALS','APGC','A-iMPG','A-iCP','iMPG', 'Location', 'best');
ylabel('||X-WH||_F / ||X||_F');
xlabel('Time (s.)'); 
axis([0 2 1e-5 1e-1]);

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

🌈4 Matlab代码及文章