proximal Algorithm

Proximal Algorithm 入门

正则化是机器学习方法实践中用于避免overfitting的主要方法,给优化目标加上基于L1、L2的正则项是常用的正则化方法。之前自己在实现一些机器学习方法时一直是使用L2的方法,因为L2正则项有连续可微的性质,在求导时特别方便,而基于L1的正则项(lasso)并不是处处连续的,因此在优化时有一定的难度。

虽然L1解起来有一定的难度,但是它的好处也比较明显,L1能够产生稀疏解(sparsity),而通常稀疏解的泛化能力会比较好,之前也听说过Proximal Algorithm是求解L1的很好的方法,粗看了一次也没能搞懂,后面就偷懒一直没有去学习这个方法,前段时间有机会参加CCF-ADL70的学习班,听了James Kwok的报告,讲的非常清楚,收获颇丰,Proximal Algorithm方法也在报告的内容之中,查阅一些文献总结一些粗浅认识,成了此文。

为什么L1能够产生稀疏解

为了追求更好的模型效果,往往使用更复杂的模型,模型的维度都是非常大的,非常容易造成过拟合(overfitting)的现象,实践中发现使用L1可以产生稀疏解,而稀疏解的模型不容易过拟合,泛化能力更好。

那么为什么使用L1就可以产生稀疏的解,而使用L2就不会呢,可以看下面一个小例子:

minzRL=λ|z|+γ2(zx)2minz∈RL=λ|z|+γ2(z−x)2

z>0z>0时有:

Lz=λ+γ(zx)=0∂L∂z=λ+γ(z−x)=0

z=xλγ(z>0)z=x−λγ(z>0)

z<0z<0时有:

Lz=λ+γ(zx)∂L∂z=−λ+γ(z−x)

z=x+λγ(z<0)z=x+λγ(z<0)

综上,当x>λγx>λγ,可见L1容易产生稀疏解。

那么,如果这里的优化目标不采用L1的正则项,而是采用L2正则项会怎么样呢?

minzRL=12λz2+γ2(zx)2minz∈RL=12λz2+γ2(z−x)2

可直接求导:

Lz=λz+γ(zx)=0∂L∂z=λz+γ(z−x)=0

z=γλ+γxz=γλ+γx

可见L2的正则项,即使x是很接近0的数,z也只是变成了比x更接近0而已,并不能变成0,而L1的正则项可以得到0。

理解Proximal Algorithm

为什么使用Proximal Algorithm

对于目标函数不是处处连续可微的情况,通常是使用次梯度(subgradient)来进行优化,由于次梯度自身的原因会导致两方面问题:

  • 求解慢
  • 通常不会产生稀疏解

Proximal Algorithm 自然肩负了要解决这两个问题的使命。

Proximal Algorithm

是时候揭开Proximal Algorithm的什么面纱了,首先先定义算法的核心部分proximal operator:

proxλf(v)=argminx(f(x)+12λ||xv||2)proxλf(v)=argminx(f(x)+12λ||x−v||2)

从上面这个式子可以看出,上式是在寻找一个距离v点不要太远的一个x,使得f(x)尽可能小,显然f(x)<=f(v)f(x)<=f(v)

image

图片来自《Proximal Algorithms in Statistics and Machine Learning》2,这张图形象的表示了上面式子的几何意义,其中加粗的黑线表示作用域,浅色的黑线表示函数f的等高线,蓝色的点对应上面式子的v点,红色点表示最终求得的x点。

接下来介绍使用Proximal Gradient Method优化,上面提到的prox式子仿佛在优化算法里常用的迭代优化的步骤,从v点出发,找到一个更好的点x,使得f(x)<=f(v)f(x)<=f(v)

设待优化目标函数为F(x)=l(x)+ϕ(x)F(x)=l(x)+ϕ(x)表示L1正则化因子用于产生稀疏解。

Proximal Gradient Algorithm

for t = 1,2…n

1) Gradient Step,定义vtvt梯度方向找到的一个点:

vt=xtγl(xt)vt=xt−γ▽l(xt)

2) Proximal Operator Step,使用prox式子优化phi(x)phi(x)

xt+1=proxλϕ(vt)xt+1=proxλϕ(vt)

直到收敛或达到最大迭代次数

这里有一个没有提到的是参数λλ 即可,若L的取值未知,可以使用line search的方法去找:

repeat

  1. z=proxλϕ(vt)z=proxλϕ(vt)

return xt+1=zxt+1=z

Proximal Algorithm和SGD

可能会有人和我一样觉得上面算法第二步直接应用proximal operator觉得有些生硬,通常情况下大家已经习惯使用Stochastic Gradient Descent(sgd)直接优化满足处处可微的目标函数,这二者之间有哪些关系呢?

SGD是把目标函数进行一阶泰勒展开,Proximal Algorithm也是同样的,只不过Proximal Aglorithm更为严格,要求目标函数F(x)=l(x)+ϕ(x)F(x)=l(x)+ϕ(x)满足Lipschitz continuity,有:

F(x)=l(x)+ϕ(x)l(x0)+(xx0)Tl(x0)+12γ||xx0||2+ϕ(x)F(x)=l(x)+ϕ(x)⩽l(x0)+(x−x0)T▽l(x0)+12γ||x−x0||2+ϕ(x)

whereγ(0,1L]whereγ∈(0,1L]

寻找可以使F(x)最小化的x,因为直接求解F(x)不容易求解,所以转为求使得F(x)上确界的最小的x,即

x=argminxl(x0)+(xx0)Tl(x0)+12γ||xx0||2+ϕ(x)x=argminxl(x0)+(x−x0)T▽l(x0)+12γ||x−x0||2+ϕ(x)

凑方并增减常数项,得:

x=argminx(f(x)+12λ||xu||2)x=argminx(f(x)+12λ||x−u||2)

whereu=x0γl(x0)whereu=x0−γ▽l(x0)

由此可见,Proximal Aglorithm是在目标函数F不满足处处可微条件时,可以转而去优化目标函数的上界的自然结果。

Proximal Algorithm和Trust Region

最小化目标函数的优化方法中,SGD的思路是,先找到目标函数的梯度方向,然后沿着梯度方向去寻找一个步长,使得在新的坐标点上目标函数值降低。除了SGD,还有一种做最优化的基本方法,是Trust Region方法,因为在实战中泰勒公式通常只展开到一阶或二阶,高阶项被丢弃,要使得被丢弃的高阶项不至于对优化造成太大影响,下一个坐标点必须不能离原坐标点距离太大,因此Trust Region先在当前坐标点附近寻找一个小的信赖区域(类比SGD中的步长),然后在这个区域内寻找使目标函数最小的坐标点。

proxλf(v)=argminx(f(x)+12λ||xv||2)proxλf(v)=argminx(f(x)+12λ||x−v||2)

Proximal Algorithm的式子里也体现着这种思想,最小化f(x)且要求新求得的x点不能和上一轮迭代得到的v点距离太远。

加速Proximal Algorithm和ADMM

最后这两个话题超过这篇小文想要介绍的范围了,以后或许会再写文章介绍这两个话题,这里只提一下。

有不少研究是想让Proximal Algorithm更快,提高收敛速度,最简单的引入神经网络中常用的“冲量”即可以加速这个算法,其他更多改进算法需要去查阅更多资料了(PS,张潼老师也做相关研究)。

使用Proximal Algorithm 求解一些lasso的问题的根本原因是Proximal Algorithm用起来很方便,求解很快。但Proximal Algorithm也不是对所有问题都是很方便的,比如它对L1这种,ϕ(x)=|xi|ϕ(x)=∑|xi| non-overlapping的很容易求解,对于一些其他的正则项如Group lasso就没有这么方便求解了,因此又提出了Alternating Direction Method of Multipliers(ADMM)算法用来求解这种问题。

Ref

1 《Big Machine Learning》 James Kwok, CCF ADL70

2 《Proximal Algorithms in Statistics and Machine Learning》 Nicholas G. Polson, James G. Scott, Brandon T. Willard

3 《Proximal Algorithms》 Neal Parikh,Stephen Boyd

联系我:image

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值