在之前的相关文章中笔者给出了一般回归的补充,即岭回归和LASSO回归,它们都是为了解决在回归过程中的过拟合问题,其具体解决方案就分别是在目标函数后增加2范数和1范数以限定参数的表现,对于岭回归而言,由于2使用范数的原因,这个目标函数仍是可导的,但对于LASSO回归而言,就没有那么幸运了,因为1范数是不可导的,故没法直接求解这个目标函数。

   而这个1范数求解的问题,在前面的文章中提到应使用FISTFast Iterative Shrinkage Thresholding,即快速收缩阈值,又可简写为FISTA,这是针对另外一种求解方法而言的,因为其被称为迭代收缩方法,简称ISTA)方法,但并没有具体解释其原因(即为什么需要进行)和算法本身的运作过程,现在本文中给出。因为FIST方法也在字典学习及稀疏表示中被使用。

   本文将比较具体的给出这个FIST方法的由来和算法流程,以对其为什需要如此操作和稀疏性进行解释。

软阈收缩算子

   在之前讨论如何求解LASSO回归的时候,最终笔者给出了一个所谓软阈收缩算子(或称作软阈收缩算法)的东西,通过这个来求解目标函数的一个变型。这里需要讨论一个问题:为什么需要使用这个东西来求解含有绝对值的目标函数?

   因为如果读者还记得之前的原始目标函数应为:

0a7b47c0b518c5dfd82b60b2e51b8522.png-wh_

   先不论公式2和公式3范数平方中常数部分的内容有所不同(因为这个和求导问题没什么关系),关键是我们所求参数向量w在公式2中还有样本矩阵X与其相乘,正是由于这个原因造成我们无法对公式2直接求解,其直接原因是我们实在无法确定其符号(也有的文章解释为对向量进行了旋转,我想这个也可以解释的通吧),即导数的相关方向,而软阈收缩算子恰能解决这个问题,所以通过一些变换(主要是使用类似泰勒公式的展开方法以及利用拉普拉斯连续等)将公式2变换成公式3,然后再求解,所以整体求解过程被分成了两步走,而第二步就是上面提到的迭代收缩阈值(ISTA)。

   在解释具体原因之前,再把这个经过变形的目标函数列出:

2325f233e11cff6f3604b438d4d76777.png-wh_

   其实上式和公式3仅在左半部分相差一个1/2,这个只不是过是为了在求导后消除系数而已。

 

              现我们对公式3进行一般意义上的求导(在某一维度,如第i维),可得:

8a92f30ba308889342747e20a9956dd3.png-wh_

    其中sign(x)是符号函数,若x为正数,则返回1,否则返回-1;如wi > 0,则令上式等于0,可得

c5ac5579aee92f4b901406f2eb01d3b3.png-wh_

    

    而其它情况则均为0

   这个简单的推导就说明了软阈这个含义(可以理解spacer.gif其实就是这个所谓的阈值),实际上笔者理解的这个方法恰恰就是将求导在绝对值这个超越函数上的推广,这个导函数的图形正是中间部分为零(在区间[-spacer.gif]上;读者可以画出上述函数的图形,就能明白,当然这是在某一维度下进行的),而两头才为非零值(一次分段的函数)。这种函数图形上的表现也解释了为什么LASSO回归的系数会较为稀疏,究其根本原因就是其导函数的取值有较多机会为零,而岭回归的导函数就是一个基本的一次函数,故其和坐标轴的交点有且仅有一个交点,所以值稀疏的机会不大,这也从另一个方面解释了稀疏性,而一般文档都是从图形的表现上来说明的。

快速迭代收缩阈值算法

   在之前论述LASSO回归的相关解法的文章中,实际上给出的求解内容就是基于递归收缩阈值算法(Iterative ShrinkageThresholding)的,而本节给出一个更为快速的解法,即快速迭代收缩阈值算法,既然是被称为快速,当然其相关复杂度要低一些。

   算法会引入一个辅助变量,在每次迭代中都会先计算这个辅助变量a,然后再利用这个变量计算系数w,之后再利用本次得到的系数计算辅助变量,具体过程如下:

4e79384742eaab07d69caf31daa4ba47.png-wh_

 end while

 输出:系数w