Subgradient是一种可以优化不可微的凸函数的方法.

首先回顾凸函数的定义:

$f(y) \geq f(x) + \nabla f(x)^T(y-x), all \hspace{2 pt} x, y$

凸函数的subgradient的定义为满足以下条件的$g\in \mathcal{R}^n$

$f(y) \geq f(x) + g^T(y-x), all \hspace{2 pt} y$

subgradient具有以下特性:

  • 永远存在
  • 如果$f$在$x$处可微, 那么$g=\nabla f(x)$
  • 对于非凸函数也有类似的定义, 但是非凸函数的subgradient并不需要存在

几个例子:

例1. $f: \mathcal{R} \to \mathcal{R}, f(x) = |x|$

对于$x\neq 0, g=sign(x)$

对于$x=0, g$是$[-1, 1]$中的任一元素

例2. $f: \mathcal{R}^n \to \mathcal{R}, f(x) = \|x\|$

对于$x\neq 0, g=\frac{x}{\|x\|}$

对于$x=0, g$是${z: \|z\|\geq1}$中的任一元素

例3. $f: \mathcal{R}^n \to \mathcal{R}, f(x) = \|x\|_1$

对于$x\neq 0, g_i=sign(x_i)$

对于$x=0, g$是$[-1, 1]$中的任一元素

Subdifferential

凸函数$f$在某一点$x$的所有subgradient称为在该点的subdifferential.

subdifferential的特性:

  • $\partial f(x)$是凸的(即使对于非凸函数$f$)
  • 非空(低于非凸函数$f$可能是空的)
  • 如果$f$在$x$是可微的, 则$\partial f(x)={\nabla f(x)}$
  • 如果$\partial f(x)={g}$, 那么f是科委的, 并且$\nabla f(x)=g$

优化条件

对于凸函数$f$,

$f(x^*) = \min_{x \in \mathcal{R}^n} \iff 0 \in \partial f(x^*)$

亦即, $x$是$f$的最小点当且仅当$0$是$f$在$x^*$的subgradient

因为如果$g=0$, 则对于所有的$y$: $f(y) \geq f(x^*) + o^T(y-x^*)=f(x^*)$

Soft-thresholding

考虑如下的lasso问题

$\min_x \frac{1}{2}\|y-Ax\|^2 + \lambda\|x\|_1$, 其中$\lambda \geq 0$

简化一下上述问题, 令$A=I$:

$\min_x \frac{1}{2}\|y-x\|^2 + \lambda\|x\|_1$

上式的subgradient为:

$g=x-y+\lambda s$

其中

令$g=0$, 可以得到$x^*=S_{\lambda}(y)$:

$S_{\lambda}(y)= \begin{cases}y_i-\lambda & if y_i > \lambda \\ 0& if -\lambda\leq y_i \leq \lambda \\ y_i + \lambda & if y_i < -\lambda \end{cases}$

Subgradient method

对于凸函数(不一定可微)$f: \mathcal{R}^n \to \mathcal{R}$, 在优化时将梯度替换为subgradient既是subgradient method:

$x^{(k)}=x^{(k-1)} - t_k \cdot g^{(k-1)}, k=1,2,3,...$

其中$g^{(k-1)}$是$f$在$x^{(k-1)}$的任意subgradient

subgradient method不一定是一个descent method, 所以需要取所有迭代中最小的那个(而不是最后一个)

$f(x_{best}^{(k)})=\min_{i=1,...,k}f(x^{(i)})$

参考文献

[1]. Subgradient method. Geoff Gordon, Ryan Tibshirani

226 total views, 1 views today

Subgradient Algorithm的更多相关文章

  1. Pegasos: Primal Estimated sub-GrAdient Solver for SVM

    Abstract We describe and analyze a simple and effective iterative algorithm for solving the optimiza ...

  2. 挑子学习笔记:两步聚类算法(TwoStep Cluster Algorithm)——改进的BIRCH算法

    转载请标明出处:http://www.cnblogs.com/tiaozistudy/p/twostep_cluster_algorithm.html 两步聚类算法是在SPSS Modeler中使用的 ...

  3. PE Checksum Algorithm的较简实现

    这篇BLOG是我很早以前写的,因为现在搬移到CNBLOGS了,经过整理后重新发出来. 工作之前的几年一直都在搞计算机安全/病毒相关的东西(纯学习,不作恶),其中PE文件格式是必须知识.有些PE文件,比 ...

  4. [异常解决] windows用SSH和linux同步文件&linux开启SSH&ssh client 报 algorithm negotiation failed的解决方法之一

    1.安装.配置与启动 SSH分客户端openssh-client和openssh-server 如果你只是想登陆别的机器的SSH只需要安装openssh-client(ubuntu有默认安装,如果没有 ...

  5. [Algorithm] 使用SimHash进行海量文本去重

    在之前的两篇博文分别介绍了常用的hash方法([Data Structure & Algorithm] Hash那点事儿)以及局部敏感hash算法([Algorithm] 局部敏感哈希算法(L ...

  6. Backtracking algorithm: rat in maze

    Sept. 10, 2015 Study again the back tracking algorithm using recursive solution, rat in maze, a clas ...

  7. [Algorithm & NLP] 文本深度表示模型——word2vec&doc2vec词向量模型

    深度学习掀开了机器学习的新篇章,目前深度学习应用于图像和语音已经产生了突破性的研究进展.深度学习一直被人们推崇为一种类似于人脑结构的人工智能算法,那为什么深度学习在语义分析领域仍然没有实质性的进展呢? ...

  8. [Algorithm] 群体智能优化算法之粒子群优化算法

    同进化算法(见博客<[Evolutionary Algorithm] 进化算法简介>,进化算法是受生物进化机制启发而产生的一系列算法)和人工神经网络算法(Neural Networks,简 ...

  9. [Evolutionary Algorithm] 进化算法简介

    进化算法,也被成为是演化算法(evolutionary algorithms,简称EAs),它不是一个具体的算法,而是一个“算法簇”.进化算法的产生的灵感借鉴了大自然中生物的进化操作,它一般包括基因编 ...

随机推荐

  1. VR快速发展下,从业者如何把握机会?

      美国科技博客VentureBeat周末刊登赛斯·沙赫纳(Seth Schachner)的文章,分析了在虚拟现实快速发展的情况下,业内所面临的机会,以及如何把握这些机会.   沙赫纳是资深的数字战略 ...

  2. 修改Oracle并行度的方法

    Oracle并行度默认为1,适当修改并行度对提高性能有很大帮助 1.查看并行度 select table_name,degree from user_tables; --并行度按照用户表分别设置 2. ...

  3. web前端基础——jQuery编程基础

    1 jQuery简介 jQuery是一个兼容多浏览器的JavaScript库,核心理念是write less,do more(写得更少,做得更多).它对JavaScript进行了封装,使开发更便捷,并 ...

  4. SVN仓库删除最近的提交,还原到某日期以前的版本(svn仓库 删除最近几次更改)

    由于某日删除了SVN仓库的大量内容,现在突然想恢复,又要保留LOG的连贯性(恢复出来的已删除文件,会是新增,没有之前的历史Log了),所以才有了这需求. Dump版本库的版本(457以后版本不要) - ...

  5. NEWS - InstallShield 2013 SP1发布

    2013的这个国庆假期期间,InstallShield厂商Flexerasoftware(中文名:福莱睿)发布了最新版本InstallShield 2013的SP1,由于这个升级包带来一些新的技术支持 ...

  6. Windows出现BOOT\BCD错误的解决办法

    这篇文章主要介绍了Windows出现BOOT\BCD错误的解决办法,本文讲解使用命令的方式解决这个问题,需要的朋友可以参考下 一般碰到 Boot Record Error 问题用系统盘自动修复一下就可 ...

  7. java中获取比毫秒更为精确的时间

    所以这里提醒做非常精确的时间统计的朋友,谨慎使用System.currentTimeMillis() . 在Java中可以通过System.currentTimeMillis()或者System.na ...

  8. Python 内置彩蛋

    The Zen of Python, by Tim Peters Beautiful is better than ugly.Explicit is better than implicit.Simp ...

  9. angular学习资源

    angular学习资源   angularjs库: https://developers.google.com/speed/libraries/devguide?hl=zh-CN#angularjs ...

  10. Linux Futex的设计与实现(转)

    引子在编译2.6内核的时候,你会在编译选项中看到[*] Enable futex support这一项,上网查,有的资料会告诉你"不选这个内核不一定能正确的运行使用glibc的程序" ...