标签:它的 jsb 遍历 线性回归 设置 根据 个数 输入 范数
逻辑回归,相对于线性回归是用来处理目标函数是离散数值的情况。它的映射函数和损失函数分别为:
(1) (2)
使用梯度下降法进行求解,得到迭代公式:
逻辑回归的优缺点:
简单, 易于并行、速度快,需要复杂的特征工程, 输入特征需要离散化
对于如上LR的迭代公式来说,我们可以得到GD(Gradient Descent)的求解算法。(W为求解的参数,l(w, z)为损失函数):
可是如果对参数做一轮迭代求解,都需要遍历所有的样本,这在实际应用中迭代速度太慢,模型更新速度也太慢。而且做机器学习的时候往往更多的数据意味着更好的效果,我们能把线上实时的数据和样本标注也利用进来么?答案是 Yes。仔细研究参数的迭代我们可以发现,都是给定一个初始的参数W,通过迭代逐步求解出当前W下降的方向并更新W直到损失函数稳定在最小点。那么我们是不是可以取部分训练集作为原训练集的子集,使用这些子集做迭代,并逐步求解W的下降方向,逐步对W进行更新。特别地,如果每次取原训练样本的一个训练样本,对W值逐步进行更新,那么我们就得到了SGD算法。
与SGD比较,GD需要每次扫描所有的样本以计算一个全局梯度,SGD则每次只针对一个观测到的样本进行更新。通常情况下SGD可以更快逼近最优值,而且SGD每次更新只需一个样本,使得它很适合进行增量或者在线计算(也就是所谓的Online learning)。
特别的,迭代和选取模型的时候,经常希望得到更加稀疏的模型,这不仅仅起到了特征选择的作用,也降低了预测计算的复杂度。在实际使用LR的时候,我们会使用L1或者L2正则,避免模型过拟合和增加模型的鲁棒性。在GD算法下,L1正则化通常能得到更加稀疏的解;可是在SGD算法下模型迭代并不是沿着全局梯度下降,而是沿着某个样本的梯度进行下降,这样即使是L1正则也不一定能得到稀疏解。在后面的优化算法中,稀疏性是一个主要追求的目标。
由于L1正则项在0处不可导,往往会造成平滑的凸优化问题变成非平滑的凸优化问题,因此可以采用次梯度(Subgradient)来计算L1正则项的梯度。权重更新方式为:
其中是一个标量,为L1正则化的参数;v是一个向量,sgn(v)为符号函数;称为学习率,通常将其设置为的函数;代表第t次迭代中损失函数的梯度。
既然L1正则化在Online learning模式下也不能产生更好的稀疏性,而稀疏性对于高维特征向量以及大数据集又特别的重要,我们应该如何处理的呢?
简单粗暴的方法是设置一个阀值,当W的某纬度的系数小于这个阀值的时候,将其直接设置为0。这样我们就得到了简单截断法。简单截断法以k为窗口,当t/k不为整数时采用标准的SGD进行迭代,当t/k为整数时,权重更新方式如下:
这里是一个正数;V是一个向量.
简单截断法法简单且易于理解,但是在实际训练过程中的某一步,W的某个特征系数可能因为该特征训练不足引起的,简单的截断过于简单粗暴(too aggresive),会造成该特征的缺失。那么我们有没有其他的方法,使得权重的归零和截断处理稍微温柔一些呢?对,这就是梯度截断法,简单截断法和梯度截断法对特征权重的处理映射图对比如下:
梯度截断法的迭代公式如下:
(3)
同样的梯度截断法也是以k为窗口,每k步进行一次截断。当t/k不为整数时,当t/k为整数时。从公式(3)可以看出和决定了截断的区域,也决定了W的稀疏程度。这两个数值越大,截断区域越大,稀疏性也越强。尤其这两个值相等的时候,只需要调节一个参数就能控制稀疏性。根据公式(3),得到TG的算法逻辑如下:
FOBOS(Forward-Backward Splitting)是由John Duchi和Yoram Singer提出的。FOBOS算法把正则化的梯度下降问题分成一个经验损失梯度下降迭代和一个最优化问题。其中第二个最优化问题有两项:第一项2范数那项表示不能离loss损失迭代结果太远,第二项是正则化项,用来限定模型复杂度、抑制过拟合和做稀疏化等:
之前的算法都是在SGD的基础上,属于梯度下降类型的方法,这类型方法的优点是精度比较高,并且TG、FOBOS也能在稀疏性上得到提升。但是RDA却从另一个方面进行在线求解,并且有效提升了特征权重的稀疏性。RDA是Simple Dual Averaging Scheme的一个扩展,由Lin Xiao发表与2010年。
标签:它的 jsb 遍历 线性回归 设置 根据 个数 输入 范数
原文地址:https://www.cnblogs.com/wzdLY/p/10118219.html