加速梯度下降的关键问题是penalty,如果penalty简单,那么模型一定有解细节,如果penalty复杂,那么模型会很复杂,每一步的cost会很大,当L1norm时,或者trace-norm都可以将其转化为一个proximal操作,存在一个很好的解析解,从而使得模型的解稀疏或者低秩。
最后讲一下screen,刚刚讲了很多优化的解法,比如说CD ADMM GD 等等,这些可以解小到中型的问题,非常有效,但是对于大规模的数据,做交叉检验,训练,就会有很高的代价。那么我们动机就是如何使用稀疏加快我们的算法,加快的原因主要有,模型的特征非常多,模型可能复杂,可能需要很多次交叉严重,并且需要对很多特征进行统计上的验证。都会非常复杂,因此我们需要加快我们的算法。
自然的想法就是对数据进行约减,将该问题压缩,从而有效的加快算法,把大问题变为小问题,最近有很多这方面的研究,比如说随机的选择特征,或者做heuridtic,通过将相关性大的特征选择出来,从而达到数据压缩,但这种方法都不能达到一个精确的结果。所以有一些方向是尽可能的保证与精确解的误差最小,这里我要介绍一种方法,这种方法没有误差,核心思想是将维度约减之后,保证和不screen之前的解一样,我们用lasso做一个例子,data是需要约减,假设系数稀疏,这里我们假设大部分的数据系数是等于零的,那么我们可以直接去掉这些数据,从而有效的实现对数据的约见,screen的核心是在不求解lasso的情况下,尽可能找到系数为零的参数,实现对数据约减。核心方法是是第一步找到对偶解,Lasso的对偶问题有很好的几何解释,也就是对数据做一个投影,有时有些对偶解,可能不好求解,但是可以通过一个近似解,来对数据进行screen,第二补在将系数可能为零特征screen掉,第三步最后在小的数据上进行训练,这样就可以非常快速求解。
大家知道从primal到duel有一个KKT,我们给定一个KTT θ是对偶变量,xi是特征,在不同sample的值,我们需要关心的是那些β等于0,从而能够有效screen数据,我们发现,当θx<1时,βi一定等于0,这也是我们需要利用到的核心,但是这里的θ是不知道的,因此我们需要找到一个近似解。当在一个邻域内,max θx<1,那么最优解一定给在这个邻域内。这个区域需要越简单越小越好。实验发现模型,在不加入新的资源的情况下,运算加速可以有几百倍,而精度几乎不变化。而且该screen方法可以用在别的模型上,对其进行加速。
刚刚我们讲的是特征很大,对其进行压缩,更加流行的问题是样本是无穷大,但是特征并不多,因此需要对样本的数量进行screen,比如说SVM,我们需要进行分类,需要找到一个超平面,吧两类分开,最重要的是如何找到支持向量,问题是如何在没有求解svm的时候找到支持向量,因此我们可以用screen找到支持向量,去掉对问题没有影响的点,从而对数据进行压缩,快速找到超平面。LASSO是在挑样本,SVM是用来挑样本,都是通过一个screen操作,去掉无用样本或者特征,问题减少,从而速度加快。与lasso类似,我们首先对对偶问题进行预估,再接两个优化问题,找到一个邻域,从而找到解得判断,从而加快速度。当然也会遇到一些特征和样本都大的问题,我们可以同时对样本和特征都进行压缩的情况下,同时保证解一样,同时这个方法很容易推广。