关于subGradent descent和Proximal gradient descent的迭代速度
clc;clear;
D=1000;N=10000;thre=10e-8;zeroRatio=0.6;
X = randn(N,D);
r=rand(1,D);
r=sign(1-2*r).*(2+2*r);
perm=randperm(D);r(perm(1:floor(D*zeroRatio)))=0;
Y = X*r' + randn(N,1)*.1; % small added noise
lamda=1;stepsize=10e-5;
%%% y=x*beta'
%%% Loss=0.5*(y-x*beta')_2++lamda|beta| %%%% GD
%%% al_y/al_beta=sigma(x_i*(x_i*beta'-y_i)+fabs(lamda))
beta=zeros(size(r)); pre_error=inf;new_error=0;
count=1;tic;
while abs(pre_error-new_error)>thre
pre_error=new_error;
tmp=0;
for j=1:length(Y)
tmp=tmp+X(j,:)*(X(j,:)*beta'-Y(j,:));
end
beta=beta-stepsize*(tmp+lamda);
new_error=lamda*norm(beta,1);
for j=1:length(Y)
new_error=new_error+(Y(j,:)-X(j,:)*beta')*(Y(j,:)-X(j,:)*beta');
end
fprintf('%d..%f\n',count,new_error);
count=count+1;
end
toc; % %%%% Proximal GD
% Loss=0.5*(y-x*beta')_2++lamda|beta|=g(x)+h(x)
% 左边可导 x_{t+1}=x_{t}-stepsize*sigma(x_i*(x_i*beta'-y_i)
% X_{t+1}=prox_{l1-norm ball}(x_{t+1})= disp('pgd')
beta_pgd=zeros(size(r));
pre_error=inf;new_error=0;count=1;tic;
while abs(pre_error-new_error)>thre
pre_error=new_error;
tmp=0;
for j=1:length(Y)
tmp=tmp+X(j,:)*(X(j,:)*beta_pgd'-Y(j,:));
end
newbeta=beta_pgd-stepsize*(tmp+lamda); add=stepsize*lamda;
pidx=newbeta>add;beta_pgd(pidx)=newbeta(pidx)-add;
zeroidx=newbeta<abs(add);beta_pgd(zeroidx)=0;
nidx=newbeta+add<0;beta_pgd(nidx)=newbeta(nidx)+add; new_error=lamda*norm(beta_pgd,1);
for j=1:length(Y)
new_error=new_error+(Y(j,:)-X(j,:)*beta_pgd')*(Y(j,:)-X(j,:)*beta_pgd');
end
fprintf('%d..%f\n',count,new_error);
count=count+1;
end
toc;
PGD的代码说明见下图

PGD主要是projection那一步有解析解,速度快
subGradent收敛速度O(1/sqrt(T))
速度提升不明显可能是因为步长的原因。。。
关于subGradent descent和Proximal gradient descent的迭代速度的更多相关文章
- Proximal Gradient Descent for L1 Regularization
[本文链接:http://www.cnblogs.com/breezedeus/p/3426757.html,转载请注明出处] 假设我们要求解以下的最小化问题: ...
- Proximal Gradient Descent for L1 Regularization(近端梯度下降求解L1正则化问题)
假设我们要求解以下的最小化问题: $min_xf(x)$ 如果$f(x)$可导,那么一个简单的方法是使用Gradient Descent (GD)方法,也即使用以下的式子进行迭代求解: $x_{k+1 ...
- FITTING A MODEL VIA CLOSED-FORM EQUATIONS VS. GRADIENT DESCENT VS STOCHASTIC GRADIENT DESCENT VS MINI-BATCH LEARNING. WHAT IS THE DIFFERENCE?
FITTING A MODEL VIA CLOSED-FORM EQUATIONS VS. GRADIENT DESCENT VS STOCHASTIC GRADIENT DESCENT VS MIN ...
- 几种梯度下降方法对比(Batch gradient descent、Mini-batch gradient descent 和 stochastic gradient descent)
https://blog.csdn.net/u012328159/article/details/80252012 我们在训练神经网络模型时,最常用的就是梯度下降,这篇博客主要介绍下几种梯度下降的变种 ...
- Gradient Descent 和 Stochastic Gradient Descent(随机梯度下降法)
Gradient Descent(Batch Gradient)也就是梯度下降法是一种常用的的寻找局域最小值的方法.其主要思想就是计算当前位置的梯度,取梯度反方向并结合合适步长使其向最小值移动.通过柯 ...
- Batch Gradient Descent vs. Stochastic Gradient Descent
梯度下降法(Gradient Descent)是用于最小化代价函数的方法. When $a \ne 0$, there are two solutions to \(ax^2 + bx + c = 0 ...
- 近端梯度算法(Proximal Gradient Descent)
L1正则化是一种常用的获取稀疏解的手段,同时L1范数也是L0范数的松弛范数.求解L1正则化问题最常用的手段就是通过加速近端梯度算法来实现的. 考虑一个这样的问题: minx f(x)+λg(x) x ...
- (转) An overview of gradient descent optimization algorithms
An overview of gradient descent optimization algorithms Table of contents: Gradient descent variants ...
- An overview of gradient descent optimization algorithms
原文地址:An overview of gradient descent optimization algorithms An overview of gradient descent optimiz ...
随机推荐
- C#读写锁ReaderWriterLockSlim的使用
读写锁的概念很简单,允许多个线程同时获取读锁,但同一时间只允许一个线程获得写锁,因此也称作共享-独占锁.在C#中,推荐使用ReaderWriterLockSlim类来完成读写锁的功能. 某些场合下,对 ...
- C#实现略缩图
public class GenerateThumbnail { private Image imageFrom; /// <summary> /// 源图的路径(含文件名及扩展名 /// ...
- javascript序列化和反序列化
一. JavaScript中的对象序列化(Serialize)和反序列化(Deserialize),简单实例: var obj = {id: 1, name: 'yoyo', age: undefin ...
- NC57银行档案和客商银行账号为建行04 UPDATE
第二步 银行档案 update bd_bankdoc set bankdoccode='04N'|| bankdoccode , pk_banktype='0001ZZ1000000001OCUD' ...
- 扩展AuthorizeAttribute
MVC中经常会用到关于设置访问权限的问题: 如果我们扩展了AuthorizeAttribute,那么我们只需要在类或方法前加上此attribute,即可实现权限问题. AttributeTargets ...
- (C++) System return error codes.
https://msdn.microsoft.com/en-us/library/windows/desktop/ms681385(v=vs.85).aspx
- css3 flex盒子布局
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- java安全沙箱(一)之ClassLoader双亲委派机制
java是一种类型安全的语言,它有四类称为安全沙箱机制的安全机制来保证语言的安全性,这四类安全沙箱分别是: 类加载体系 .class文件检验器 内置于Java虚拟机(及语言)的安全特性 安全管理器及J ...
- Android开发资料学习(转载/链接)
http://www.devdiv.com/android_-forum-102-1.html 各种开源控件集合 http://www.cnblogs.com/android-blogs/p/5342 ...
- [AS3.0] Error #1069: Property onBWDone not found on flash.net.NetConnection and there is no default value.解决办法
在运用FMS录制视频时,假如出现这个错误,最直接的解决办法如下: _netConnection.client = { onBWDone: function():void{ trace("on ...