本文参考文献附在最后。是对参考文献的理解。
1:此算法解决凸优化问题模型如下:

minF(x)=g(x)+h(x)

min F(x)=g(x)+h(x)其中 g(x) g(x)凸的,可微的。 h(x) h(x) 闭的凸的。其中 g(x),h(x)是由F(x) g(x),h(x)是由F(x) 分离出来的两项,当 F(x) F(x) 分离的结果不同,即使是同一个问题,算法的实现方式也不尽相同,
2:算法的实现
1)对于凸函数 h(x) h(x)的proximal map如下:

proxh(x)=argminu(h(u)+1/2||u−x||22)

prox_{h}(x)=argmin_{u}(h(u)+1/2||u-x||_{2}^2)
当 h(x)=0 h(x)=0,则 proxh(x)=argminu(1/2||u−x||22)=x prox_{h}(x)=argmin_{u}(1/2||u-x||_{2}^2)=x;
当 h(x)=Ic h(x)=I_c,则 proxh(x)=argminu∈c(1/2||u−x||22)=Pc(x) prox_{h}(x)=argmin_{u\in c}(1/2||u-x||_{2}^2)=P_c(x);
当 h(x)=t||X||1 h(x)=t||X||_1,则 proxh(x) prox_{h}(x) 为软阈值算法。
2)对于凸优化模型,则有

xk=proxtkh(xk−1−tk∇g(xk−1))

x^k=prox_{t_kh}(x^{k-1}-t_k\nabla g(x^{k-1}))也即是 xk=argminu(h(u)+1/2tk||u−xk−1−tk∇g(xk−1||22) x^k=argmin_u(h(u)+1/2t_k||u-x^{k-1}-t_k\nabla g(x^{k-1}||_{2}^2)

=argminu(h(u)+g(xk+1)+∇g(xk−1)(u−xk−1)+1/2tk||u−xk−1||22)

=argmin_u(h(u)+g(x^{k+1})+\nabla g(x^{k-1})(u-x^{k-1})+1/2t_k||u-x^{k-1}||_{2}^2) 在第二步运算过程中,分别加了一项和减去一项仅和 x x 有关的项。
由上式可以看出,h(x)h(x)函数不变, g(x) g(x)变为在 x <script type="math/tex" id="MathJax-Element-260">x</script> 的二阶近似。
同样的有如下特例:

3)近端梯度法的算法:

3:总结

此代码参考下面参考文献提供的代码,此为固定步长的近端梯度算法,经过简单修改:把while那一块取消注释即为线性搜索确定步长。
其中先搜索确定步长的算法如下:

function [x]=proximalGradient(A,b,gamma)
%%解决  1/2||AX-b||2_{2}+gamma*||X||1
%% A:m*n   X:n*1
MAX_ITER =400;
ABSTOL   = 1e-4;
RELTOL   = 1e-2;f = @(u) 0.5*norm(A*u-b)^2;%%为了确定线搜索步长
lambda = 1;
beta = 0.5;
[~,n]=size(A);
x = zeros(n,1);
xprev = x;
AtA = A'*A;
Atb = A'*b;
for k = 1:MAX_ITER
%     while 1grad_x = AtA*x - Atb;z = soft_threshold(x - lambda*grad_x, lambda*gamma);%%迭代更新x
%         if f(z) <= f(x) + grad_x'*(z - x) + (1/(2*lambda))*(norm(z - x))^2
%             break;
%         end
%         lambda = beta*lambda;endxprev = x;x = z;h.prox_optval(k) = objective(A, b, gamma, x, x);if k > 1 && abs(h.prox_optval(k) - h.prox_optval(k-1)) < ABSTOLbreak;end
endh.x_prox = x;
h.p_prox = h.prox_optval(end);% h.prox_grad_toc = toc;
%
% fprintf('Proximal gradient time elapsed: %.2f seconds.\n', h.prox_grad_toc);
% h.prox_iter = length(h.prox_optval);
% K = h.prox_iter;
% h.prox_optval = padarray(h.prox_optval', K-h.prox_iter, h.p_prox, 'post');
%
% plot( 1:K, h.prox_optval, 'r-');
% xlim([0 75]);endfunction p = objective(A, b, gamma, x, z)p = 0.5*(norm(A*x - b))^2 + gamma*norm(z,1);
endfunction [X]=soft_threshold(b,lambda)X=sign(b).*max(abs(b) - lambda,0);
end

参考文献如下:
Proximal gradient method近端梯度算法

Proximal Gradient Method近端梯度算法相关推荐

  1. APG(Accelerate Proximal Gradient)加速近端梯度算法 和 NAG(Nesterov accelerated gradient)优化器原理 (二)

    文章目录 前言 NAG优化器 APG 与 NAG的结合 Pytorch 代码实现 总结 附录 公式(11)推导 引用 前言 近期在阅读Data-Driven Sparse Structure Sele ...

  2. APG(Accelerate Proximal Gradient)加速近端梯度算法 和 NAG(Nesterov accelerated gradient)优化器原理 (一)

    文章目录 前言 APG(Accelerate Proximal Gradient)加速近端梯度算法[^1] PGD (Proximal Gradient Descent)近端梯度下降法推导[^2] E ...

  3. 近端算法:近端最小化(Proximal minimization)、近端梯度(PG)、加速近端梯度(APG)、ADMM

    近端算法 基本介绍及定义 定义 工作原理 性质 近端算子解释 Moreau-Yosida正则化 次微分算子的预解 修正梯度步长 信任区域问题 近端算法(Proximal Algorithms) 近端最 ...

  4. Proximal Algorithms--Accelerated proximal gradient method

    4.3 Accelerated proximal gradient method: 加速近端梯度方法: 基本的近端梯度方法的所谓的"加速"版本,就是在算法中包含了一个外推(extr ...

  5. 【优化】近端梯度下降(Proximal Gradient Descent)求解Lasso线性回归问题

    文章目录 近端梯度下降的背景 常见线性回归问题 近端算子(Proximal Operator) 近端梯度下降迭代递推方法 以Lasso线性回归问题为例 参考资料 近端梯度下降的背景 近端梯度下降(Pr ...

  6. LASSO近端梯度下降法Proximal Gradient Descent公式推导及代码

    文章目录 LASSO by Proximal Gradient Descent Proximal Gradient Descent Framework近端梯度下降算法框架 Proximal Gradi ...

  7. UA MATH567 高维统计专题3 含L1-norm的凸优化2 Proximal Gradient Descent

    UA MATH567 高维统计专题3 含L1-norm的凸优化2 Proximal Gradient Descent Proximal Gradient Descent的公式推导 Proximal O ...

  8. python实现次梯度(subgradient)和近端梯度下降法 (proximal gradient descent)方法求解L1正则化

    l1范数最小化 考虑函数,显然其在零点不可微,其对应的的次微分为: 注意,的取值为一个区间. 两个重要定理: 1)一个凸函数,当且仅当,为全局最小值,即 为最小值点  : 2)为函数(不一定是凸函数) ...

  9. 近端梯度下降法 (proximal gradient descent)

    本文参考了知乎的文章 机器学习 | 近端梯度下降法 (proximal gradient descent), 写的非常棒,但感觉有些微的赘余, 因此以这篇博客,希望更精简地介绍 近端梯度下降法 这种略 ...

最新文章

  1. osg中实现HUD(OSG初级篇1)
  2. VC2008 忽然无法调试DLL的解决方法
  3. 匹配正则_Day233:正则表达式匹配方法 match()
  4. Nginx代理webSocket经常中断的解决方案, 如何保持长连接
  5. 【CodeForces - 1038A 】Equality (思维水题,预处理字符串)
  6. Anaconda安装新模块
  7. python中reshape_python numpy reshape用法及代码示例
  8. python机器学习之数据集(查看数据,划分训练集、测试集)
  9. c语言宠物管理系统,请用C语言编出一个简单的宠物管理系统。
  10. 测试远程服务器udp端口,测试远程udp端口
  11. 未来五年你永远不会忘记的最佳GameCube仿真器
  12. 彻底修改 Windows 系统用户名
  13. Kotlin学习系列之:协程的取消和超时
  14. 《东周列国志》第八十回 夫差违谏释越 勾践竭力事吴
  15. 倾斜模型精细化处理_浅谈几个倾斜摄影三维模型的修补软件 - 纳金网
  16. ZigBee智能节水灌溉系统
  17. “../28004x_generic_ram_lnk.cmd“,遇到RAM内存不够,需重新配置。
  18. CF1631F. Flipping Range dp **
  19. nginx 正向代理http和https
  20. 十大著名的思想实验(程序员应该会读喜欢这些)

热门文章

  1. react-antd项目,一个多tab页面,共用一个title相同的table表格,并且在切换tab时实现数据更新
  2. FDX协议 #pragma comment(lib,“ws2_32.lib“)
  3. mklink 创建链接(当文件已存在时,无法创建该文件||位置不可用)
  4. linux下让cp2102支持高于921600bps波特率的方法
  5. HashMap中put方法详解
  6. 数美科技 | “双十一”全网狂欢,防“黑产”刻不容缓
  7. windows系统重装后重新使用之前的oracle
  8. 两种内存池管理方法对比
  9. 计算机等级考access,计算机等级考试二级ACCESS窗体
  10. Pandas入门详细教程