假设我们要求解以下的最小化问题: $min_xf(x)$

如果$f(x)$可导,那么一个简单的方法是使用Gradient Descent (GD)方法,也即使用以下的式子进行迭代求解:

$x_{k+1} = x_k - a\Delta f(x_k)$

如果$\Delta f(x)$满足L-Lipschitz,即:

那么我们可以在点$x_k$附近把$f(x)$近似为:

把上面式子中各项重新排列下,可以得到:

这里$\varphi (x_k)$不依赖于x,因此可以忽略。

显然,$\hat f(x, x_k)$的最小值在

获得。所以,从这个角度看的话,GD的每次迭代是在最小化原目标函数的一个二次近似函数.(梯度下降的由来的推导,这里说的不好,参考这里: http://www.cnblogs.com/ljygoodgoodstudydaydayup/p/7274943.html)

在很多最小化问题中,我们往往会加入非光滑的惩罚项$g(x)$, 比如常见的L1惩罚: $g(x) = ||x||_1$ .这个时候,GD就不好直接推广了。但上面的二次近似思想却可以推广到这种情况:

这就是所谓的Proximal Gradient Descent (PGD)算法,即目标函数由损失项和正则项组成。对于上式,可先计算$z = x_k - \frac{1}{L}\Delta f(x_k)$, 然后求解


软阈值(SoftThresholding)可以求解如下优化问题:

其中:

根据范数的定义,可以将上面优化问题的目标函数拆开:

也就是说,我们可以通过求解N个独立的形如函数

的优化问题,来求解这个问题。由中学时代学过的求极值方法知道,可以求函数f(x)导数:

令函数f(x)导数等于0,得:

这个结果等号两端都有变量x,需要再化简一下。下面分三种情况讨论:

(1)当b>λ/2时

假设x<0,则sgn(x)=-1,所以x=b+λ/2>0,与假设x<0矛盾;(λ > 0)

假设x>0,则sgn(x)=1,所以x=b-λ/2>0,成立;

所以此时在x=b-λ/2>0处取得极小值:

即此时极小值小于f(0),而当x<0时

即当x<0时函数f(x)为单调降函数(对任意△x<0,f(0)<f(△x))。因此,函数在x=b-λ/2>0处取得最小值。

(2)当b<-λ/2时

假设x<0,则sgn(x)=-1,所以x=b+λ/2<0,成立;

假设x>0,则sgn(x)=1,所以x=b-λ/2<0,与假设x>0矛盾;

所以此时在x=b+λ/2<0处取得极小值:

即此时极小值小于f(0),而当x>0时

即当x>0时函数f(x)为单调升函数(对任意△x>0,f(△x)>f(0))。因此,函数在x=b+λ/2<0处取得最小值。

(3)当-λ/2<b<λ/2时(即|b|<λ/2时)

假设x<0,则sgn(x)=-1,所以x=b+λ/2>0,与假设x<0矛盾;

假设x>0,则sgn(x)=1,所以x=b-λ/2<0,与假设x<0矛盾;

即无论x为大于0还是小于0均没有极值点,那么x=0是否为函数f(x)的极值点呢?

对于△x≠0,

当△x >0时,利用条件b<λ/2可得

当△x <0时,利用条件b<λ/2可得(注:此时|△x |=-△x)

因此,函数在x=0处取得极小值,也是最小值。

综合以上三种情况,f(x)的最小值在以下位置取得:

至此,我们可以得到优化问题

的解为

http://blog.csdn.net/bingecuilab/article/details/50628634

http://blog.csdn.net/jbb0523/article/details/52103257

Proximal Gradient Descent for L1 Regularization(近端梯度下降求解L1正则化问题)的更多相关文章

  1. 机器学习算法整理(二)梯度下降求解逻辑回归 python实现

    逻辑回归(Logistic regression) 以下均为自己看视频做的笔记,自用,侵删! 还参考了:http://www.ai-start.com/ml2014/ 用梯度下降求解逻辑回归 Logi ...

  2. Proximal Gradient Descent for L1 Regularization

    [本文链接:http://www.cnblogs.com/breezedeus/p/3426757.html,转载请注明出处] 假设我们要求解以下的最小化问题:                     ...

  3. 近端梯度算法(Proximal Gradient Descent)

    L1正则化是一种常用的获取稀疏解的手段,同时L1范数也是L0范数的松弛范数.求解L1正则化问题最常用的手段就是通过加速近端梯度算法来实现的. 考虑一个这样的问题: minx  f(x)+λg(x) x ...

  4. 采用梯度下降优化器(Gradient Descent optimizer)结合禁忌搜索(Tabu Search)求解矩阵的全部特征值和特征向量

    [前言] 对于矩阵(Matrix)的特征值(Eigens)求解,采用数值分析(Number Analysis)的方法有一些,我熟知的是针对实对称矩阵(Real Symmetric Matrix)的特征 ...

  5. [Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类

    ps:本博客内容根据唐宇迪的的机器学习经典算法  学习视频复制总结而来 http://www.abcplus.com.cn/course/83/tasks 逻辑回归 问题描述:我们将建立一个逻辑回归模 ...

  6. 关于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 ...

  7. 线性回归、梯度下降(Linear Regression、Gradient Descent)

    转载请注明出自BYRans博客:http://www.cnblogs.com/BYRans/ 实例 首先举个例子,假设我们有一个二手房交易记录的数据集,已知房屋面积.卧室数量和房屋的交易价格,如下表: ...

  8. 机器学习_线性回归和逻辑回归_案例实战:Python实现逻辑回归与梯度下降策略_项目实战:使用逻辑回归判断信用卡欺诈检测

    线性回归: 注:为偏置项,这一项的x的值假设为[1,1,1,1,1....] 注:为使似然函数越大,则需要最小二乘法函数越小越好 线性回归中为什么选用平方和作为误差函数?假设模型结果与测量值 误差满足 ...

  9. 批量梯度下降(BGD)、随机梯度下降(SGD)以及小批量梯度下降(MBGD)的理解

      梯度下降法作为机器学习中较常使用的优化算法,其有着三种不同的形式:批量梯度下降(Batch Gradient Descent).随机梯度下降(Stochastic Gradient Descent ...

随机推荐

  1. centos7内核优化

    #sysctl -p 参数: net.ipv6.conf.all.disable_ipv6 = 1net.ipv6.conf.default.disable_ipv6 = 1net.ipv4.icmp ...

  2. 使用Hexo+Github搭建属于自己的博客

    工具:Visual Studio Code/MarkdownPad技术:Hexo+Github 创建Github项目 Github账户注册和新建项目,项目必须要遵守格式:账户名.github.io,不 ...

  3. int (*a)[10] 和 int *a[10] 的区别

    int *a[10] :指针数组.数组a里存放的是10个int型指针 int (*a)[10] :数组指针.a是指针,指向一个数组.此数组有10个int型元素 int *a[10] 先找到声明符a,然 ...

  4. cifar-10 图片可视化

    保存cifar-10 数据集 图片 python3 #用于将cifar10的数据可视化 import pickle as p import numpy as np import matplotlib. ...

  5. Java中IO流讲解(一)

    一.概念 IO流用来处理设备之间的数据传输 Java对数据的操作是通过流的方式 Java用于操作流的类都在IO包中 流按流向分为两种:输入流,输出流 流按操作类型分为两种: 字节流 : 字节流可以操作 ...

  6. Hibernate 框架理解

    Hibernate框架简化了java应用程序与数据库交互的开发.Hibernate是一个开源,轻量级的ORM(对象关系映射)工具. ORM工具简化浏览数据的创建,数据处理和数据访问.它是将对象映射到数 ...

  7. NYOJ 469 擅长排列的小明 II

    擅长排列的小明 II 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 小明十分聪明,而且十分擅长排列计算. 有一天小明心血来潮想考考你,他给了你一个正整数n,序列1, ...

  8. python3--__getattr__和__setattr__捕捉属性的一个引用

    __getattr__和__setattr__捕捉属性的一个引用 __getattr__方法是拦截属性点号运算.更确切地说,当通过对未定义(不存在)属性名称和实例进行点号运算时,就会用属性名称为字符串 ...

  9. ER模型图工具:PowerDesigner

    导读:开始是想一个阶段一个阶段的写文档,再写了可行性分析报告之后,发现这种方法整体性不强,写出来的文档也总是有考虑不周的地方.后来,就看完了全部的软工视频再写.现在该写项目开发总结报告了.在写文档的过 ...

  10. shell的while循环

    while循环用于不断执行一系列命令,也用于从输入文件中读取数据:命令通常为测试条件.其格式为: while command do    Statement(s) to be executed if ...