次梯度法matlab代码,实例:连续化次梯度法解 LASSO 问题

实例:连续化次梯度法解 LASSO 问题

我们将在此页面中构造一个 LASSO 问题

b5d6b80b170c66c2ae0a4bcd1df2d27e.png

并且展示连续化次梯度方法在其中的应用。

目录

构造LASSO优化问题

设定随机种子。clear;

seed = 97006855;

ss = RandStream('mt19937ar','Seed',seed);

RandStream.setGlobalStream(ss);

构造 LASSO 优化问题

359134a9c671df43de98cfd9bf8ac0f6.png

生成随机的矩阵 31b7a8539b32546a74734a949eb86565.png 和向量 238bf4184185194e982a6f4b2706601e.png 以使得 4d04bb98abf5b1b9441538279e378117.png。第一次实验,给定正则化系数为 1e-3 。m = 512;

n = 1024;

A = randn(m, n);

u = sprandn(n, 1, 0.1);

b = A * u;

x0 = randn(n, 1);

mu = 1e-3;

求解 LASSO 优化问题

固定步长为 b94ddf8d998ef6cd4692f77745639dc5.png。AA = A' * A;

L = eigs(AA, 1);

首先在更严格的停机准则下进行试验,将收敛时得到的函数值作为真实的最优值的参考 d5a1c46e2f427b75fb9b6ac0525d57db.png。opts = struct();

opts.maxit = 5000;

opts.maxit_inn = 500;

opts.opts1 = struct();

opts.method = 'subgrad';

opts.opts1.step_type = 'diminishing';

opts.verbose = 0;

opts.alpha0 = 1/L;

opts.ftol = 1e-12;

opts.ftol0 = 1e4;

opts.etag = 1;

addpath('../LASSO_con')

[x, out] = LASSO_con(x0, A, b, mu, opts);

f_star = out.fvec(end);

求解 LASSO 问题,记录输出。opts.maxit = 3000;

opts.maxit_inn = 200;

opts.opts1.step_type = 'diminishing';

opts.verbose = 0;

opts.ftol = 1e-8;

[x, out] = LASSO_con(x0, A, b, mu, opts);

data1 = (out.fvec - f_star) / f_star;

k1 = length(data1);

a39f58ee769034fc073c423818a0440b.png 修改为 1e-2 重复实验。mu = 1e-2;

opts.maxit = 5000;

opts.maxit_inn = 500;

opts.opts1.step_type = 'fixed';

opts.ftol = 1e-10;

[x, out] = LASSO_con(x0, A, b, mu, opts);

f_star = out.fvec(end);

opts.maxit = 3000;

opts.maxit_inn = 200;

opts.ftol = 1e-8;

opts.opts1.step_type = 'fixed';

[x, out] = LASSO_con(x0, A, b, mu, opts);

data2 = (out.fvec - f_star) / f_star;

k2 = length(data2);

结果可视化

可视化优化过程:观察目标函数值随迭代次数的变化。fig = figure;

semilogy(1:k1, max(data1,0), '-', 'Color',[0.2 0.1 0.99], 'LineWidth',2);

hold on

semilogy(1:k2, max(data2,0), '-.','Color',[0.99 0.1 0.2], 'LineWidth',1.5);

legend('\mu = 10^{-3}', '\mu = 10^{-2}');

ylabel('$(f(x^k) - f^*)/f^*$', 'fontsize', 14, 'interpreter', 'latex');

xlabel('迭代步');

print(fig, '-depsc','subgrad.eps');

20bd43171e31d7e350ce32f85047445e.png

结果分析

于固定正则化系数 a39f58ee769034fc073c423818a0440b.png 和步长时不同,采取连续化策略之后,次梯度法在固定步长下收敛到了最小值。 注意到在 a39f58ee769034fc073c423818a0440b.png 减小到 1e-2 之前,两次优化的过程是完全相同的 (图像不重合而是平行是由于对应的最小值不同),并且在每次 a39f58ee769034fc073c423818a0440b.png 减小后,函数值都有迅速的下降。 最终在 87443fe031d00ee1eb47a14e2961b8a9.png 次迭代左右最终收敛,比之采取相同的连续化策略的光滑化梯度法稍慢。

参考页面

此页面的源代码请见: demo_cont.m。

版权声明

此页面为《最优化:建模、算法与理论》、《最优化计算方法》配套代码。 代码作者:文再文、刘浩洋、户将,代码整理与页面制作:杨昊桐。

著作权所有 (C) 2020 文再文、刘浩洋、户将

  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值