近端梯度下降是什么?处理不可导正则项的优化方法
近端梯度下降(Proximal Gradient Descent,PGD)是一种用来求解特定类型优化问题的算法:要最小化的目标函数由两部分组成,一部分是光滑、可以求导的函数,另一部分是不光滑、在某些点不能求导、但结构比较简单的函数。这类问题在机器学习中非常常见,最典型的就是带有 L1 正则化的模型,比如 Lasso 回归。
为什么需要它
在机器学习中,我们常常在损失函数后面加上一个 L1 正则化项,也就是所有参数绝对值之和,它能让很多参数恰好变成零,得到一个稀疏的模型,相当于自动地进行了特征选择。但问题在于,绝对值函数在零点处有一个尖角,导数不存在。普通的梯度下降需要计算导数,遇到这种不可导的情况就会遇到麻烦;即使勉强用次梯度来代替,收敛也很慢,而且得到的参数很难恰好等于零,失去了 L1 正则化产生稀疏解的优点。
它是怎么做的
近端梯度下降的思路是把两部分分开处理,每一次迭代分为两步。第一步,梯度下降:只针对光滑的那部分函数,按照普通的梯度下降走一步,得到一个中间结果。第二步,近端映射:针对不光滑的那部分函数,对中间结果应用一个叫作“近端算子”的操作。近端算子的含义是:在离中间结果不太远的地方,找一个能让不光滑函数的值尽量小的点,在“靠近当前位置”和“减小不光滑项”之间取得平衡。对于很多常见的不光滑函数,这个近端算子都有简单的公式解,可以直接计算。
L1 正则化的例子:软阈值
对于 L1 正则化,近端算子正好是一个非常简单的操作,叫作软阈值:对于每一个参数,如果它的绝对值小于某个阈值,就直接把它设为零;如果大于这个阈值,就把它朝着零的方向缩小一个阈值的量。正是这个“小于阈值就置零”的操作,让近端梯度下降能够自然地得到稀疏的解。用近端梯度下降求解 Lasso 回归的算法叫作迭代收缩阈值算法,简称 ISTA。
2009 年,Amir Beck 和 Marc Teboulle 提出了它的加速版本 FISTA,借鉴了涅斯捷罗夫的动量加速思想,在每一步中利用前两步的信息进行外推,大大加快了收敛的速度,被广泛用于信号处理和图像复原中。
它的通用性
近端梯度下降是一个通用的框架,适用于很多问题:如果不光滑的部分是 L1 范数,近端算子是软阈值;如果是对参数取值范围的限制,比如要求参数非负或位于某个区域内,近端算子就是把参数投影回允许的范围内,这时它就变成了投影梯度下降;如果是矩阵的核范数,它可以用来求解低秩矩阵补全问题,比如推荐系统中根据部分评分推测完整的评分矩阵;还有组稀疏正则化等。近端梯度下降在压缩感知、稀疏编码、图像去噪和去模糊、低秩矩阵恢复等领域都有广泛的应用,是现代优化理论中的一个重要工具。