zoukankan      html  css  js  c++  java
  • 次梯度方法

    次梯度方法

    次梯度方法(subgradient method)是传统的梯度下降方法的拓展,用来处理不可导的凸函数。它的优势是比传统方法处理问题范围大,劣势是算法收敛速度慢。但是,由于它对不可导函数有很好的处理方法,所以学习它还是很有必要的。

    次梯度(subgradient

    1.定义

    所谓次梯度,定义是这样的:

    [partial f= { [g|f(x)ge f(x_0)+g^T(x-x_0),forall x in domf,f:R^n o R ] } ]

    ps.花括号不知道为什么打不出来,,用中括号代替吧。

    用图片表示,即为

    也就是,在(x_0)处所有的支撑超平面的超平面的法向量(g^T)的转置(g)构成的集合。即(g in partial f)

    一维次梯度称为次导数,通过求函数在点的每一分量的次导数可以求出函数在该点的次梯度。

    可以证明,在点(x_0)的次导数的集合是一个非空闭区间([a,b]),其中a和b是单侧极限,(a = lim limits_{x o x_0^-} {{f(x) - f(x_0)} over {x - x_0}},b = lim limits_{x o x_0^+} {{f(x) - f(x_0)} over {x - x_0}}) ,它们一定存在,且满足(a≤b)。所有次导数的集合([a,b])称为函数(f)(x_0)的次导数。

    举例:(y=|x|)(x=0)的次梯度为([-1,1])

    注: 如果(f)可导,那么它的次梯度等于它的梯度。如果不可导,在最优点处,(0 in partial f)

    2. 性质

    • 数乘不变性。(forall alpha ge 0,partial (alpha f)(x)=alpha partial f(x))
    • 加法不变性。(f=f_1+ldots+f_m,partial f(x)=partial f_1(x)+ldots+partial f_m(x))
    • 仿射特性。如果(f)是凸函数,那么(partial f(Ax+b)=A^T partial f(Ax+b))

    3. 扩展

    对于一个凸优化问题,

    [min f_0(z),s.t. f_i(z) le x,Ax=y ]

    对偶问题为

    [max g(lambda)-x^Tlambda-y^T v ]

    那么,由全局扰动不等式,我们有

    [f(x,y) ge f(hat x,hat y)-{lambda^ * }^T(x-hat x)-{v^ * }^T(y-hat y) ]

    其中,假设Slater条件成立,且在(x=hat x,y=hat y)处满足强对偶性。

    从上式可以看出,(-(lambda^ * ,v^ * )in partial f(hat x,hat y))

    也就是说((lambda^ * ,v^ * )^T)((hat x,hat y))处的一个支持超平面的法线。

    次梯度方法

    首先,我们想到的方法是推广一下梯度下降法。

    [x^{(k+1)}=x^{(k)}-alpha_k g^{(k)} ]

    其中,(g^{(k)} in partial f(x^{(k)}))

    然而,(-g^{(k)})可能不再是下降方向。所以常用的方式是一直保留最小的函数值,直到结果收敛。

    [f_{best}^{(k)} = min { ( f_{best}^{(k)},f({x^{(k)}}) )} ]

    注:步长选择和收敛性分析在这里不再赘述。(回头有精力再写)

    应用(duality+subgradient method)

    用法1

    对于凸优化问题

    [min f_0(z),s.t. f_i(z) le x ]

    对偶问题为

    [max g(lambda),s.t. lambda ge 0 ]

    其中,(g(lambda)=inf limits_x L(x,lambda)=f_0(x^ * (lambda))+sum limits_{i=1}^{m} lambda_i f_i(x^ * (lambda)))
    假设Slater条件成立,那么我们可以通过解决对偶问题求得原问题的解。

    那么,使用次梯度方法时,需要使得

    [lambda^{(k+1)}=(lambda^{(k)}-alpha_k h),h in partial (-g)(lambda^{(k)}) ]

    也就是,

    [h=-(f_1(x^ * (lambda)),ldots,f_m(x^ * (lambda))) in partial (-g)(lambda^{(k)}) ]

    用法2

    对比原来的$ abla L(x,lambda ^ * ) = 0 $
    这里经常用的是 $0 in abla L(x,lambda ^ * ) $

  • 相关阅读:
    java Thread和Runnable区别
    java sleep() 、yield()
    Java Thread.join()方法
    内存管理_深入剖析volatile关键字
    内存管理_JAVA内存管理
    内存管理_原子性、可见性、有序性
    小程序wx.showToast()方法实现文字换行
    常用表单校验(手机号、固话、身份证、真是姓名、邮箱、银行卡)
    通过CSS实现 文字渐变色 的两种方式
    substring和substr的区别
  • 原文地址:https://www.cnblogs.com/connorzx/p/4797194.html
Copyright © 2011-2022 走看看