Proximal Gradient Method近端梯度算法
本文参考文献附在最后。是对参考文献的理解。
1:此算法解决凸优化问题模型如下:
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如下:
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)对于凸优化模型,则有
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)
=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近端梯度算法相关推荐
- APG(Accelerate Proximal Gradient)加速近端梯度算法 和 NAG(Nesterov accelerated gradient)优化器原理 (二)
文章目录 前言 NAG优化器 APG 与 NAG的结合 Pytorch 代码实现 总结 附录 公式(11)推导 引用 前言 近期在阅读Data-Driven Sparse Structure Sele ...
- APG(Accelerate Proximal Gradient)加速近端梯度算法 和 NAG(Nesterov accelerated gradient)优化器原理 (一)
文章目录 前言 APG(Accelerate Proximal Gradient)加速近端梯度算法[^1] PGD (Proximal Gradient Descent)近端梯度下降法推导[^2] E ...
- 近端算法:近端最小化(Proximal minimization)、近端梯度(PG)、加速近端梯度(APG)、ADMM
近端算法 基本介绍及定义 定义 工作原理 性质 近端算子解释 Moreau-Yosida正则化 次微分算子的预解 修正梯度步长 信任区域问题 近端算法(Proximal Algorithms) 近端最 ...
- Proximal Algorithms--Accelerated proximal gradient method
4.3 Accelerated proximal gradient method: 加速近端梯度方法: 基本的近端梯度方法的所谓的"加速"版本,就是在算法中包含了一个外推(extr ...
- 【优化】近端梯度下降(Proximal Gradient Descent)求解Lasso线性回归问题
文章目录 近端梯度下降的背景 常见线性回归问题 近端算子(Proximal Operator) 近端梯度下降迭代递推方法 以Lasso线性回归问题为例 参考资料 近端梯度下降的背景 近端梯度下降(Pr ...
- LASSO近端梯度下降法Proximal Gradient Descent公式推导及代码
文章目录 LASSO by Proximal Gradient Descent Proximal Gradient Descent Framework近端梯度下降算法框架 Proximal Gradi ...
- UA MATH567 高维统计专题3 含L1-norm的凸优化2 Proximal Gradient Descent
UA MATH567 高维统计专题3 含L1-norm的凸优化2 Proximal Gradient Descent Proximal Gradient Descent的公式推导 Proximal O ...
- python实现次梯度(subgradient)和近端梯度下降法 (proximal gradient descent)方法求解L1正则化
l1范数最小化 考虑函数,显然其在零点不可微,其对应的的次微分为: 注意,的取值为一个区间. 两个重要定理: 1)一个凸函数,当且仅当,为全局最小值,即 为最小值点 : 2)为函数(不一定是凸函数) ...
- 近端梯度下降法 (proximal gradient descent)
本文参考了知乎的文章 机器学习 | 近端梯度下降法 (proximal gradient descent), 写的非常棒,但感觉有些微的赘余, 因此以这篇博客,希望更精简地介绍 近端梯度下降法 这种略 ...
最新文章
- osg中实现HUD(OSG初级篇1)
- VC2008 忽然无法调试DLL的解决方法
- 匹配正则_Day233:正则表达式匹配方法 match()
- Nginx代理webSocket经常中断的解决方案, 如何保持长连接
- 【CodeForces - 1038A 】Equality (思维水题,预处理字符串)
- Anaconda安装新模块
- python中reshape_python numpy reshape用法及代码示例
- python机器学习之数据集(查看数据,划分训练集、测试集)
- c语言宠物管理系统,请用C语言编出一个简单的宠物管理系统。
- 测试远程服务器udp端口,测试远程udp端口
- 未来五年你永远不会忘记的最佳GameCube仿真器
- 彻底修改 Windows 系统用户名
- Kotlin学习系列之:协程的取消和超时
- 《东周列国志》第八十回 夫差违谏释越 勾践竭力事吴
- 倾斜模型精细化处理_浅谈几个倾斜摄影三维模型的修补软件 - 纳金网
- ZigBee智能节水灌溉系统
- “../28004x_generic_ram_lnk.cmd“,遇到RAM内存不够,需重新配置。
- CF1631F. Flipping Range dp **
- nginx 正向代理http和https
- 十大著名的思想实验(程序员应该会读喜欢这些)
热门文章
- react-antd项目,一个多tab页面,共用一个title相同的table表格,并且在切换tab时实现数据更新
- FDX协议 #pragma comment(lib,“ws2_32.lib“)
- mklink 创建链接(当文件已存在时,无法创建该文件||位置不可用)
- linux下让cp2102支持高于921600bps波特率的方法
- HashMap中put方法详解
- 数美科技 | “双十一”全网狂欢,防“黑产”刻不容缓
- windows系统重装后重新使用之前的oracle
- 两种内存池管理方法对比
- 计算机等级考access,计算机等级考试二级ACCESS窗体
- Pandas入门详细教程