sgd 是 online learning 最基本的模式。由于 sgd 的训练出来的特征参数不具备稀疏性,从工程的角度占用内存过大。不少特征的权重其实很小,但由于是非0的也会占用内存空间。因此,须要更好的正则项来找到这些非0项。函数
正则化的出现开始是为了防止过拟合的: 防止特征系数过大太小,泛华的效果变差。咱们容易google 到为何l1 产生稀疏解。那为何在 online learning 中 l1 不 work?优化
(这块我并无理解)由于在 online 中,梯度的方向不是全局的方向。而是沿着样本的方向.... 那就会形成每次没有被充分训练的样本被错误的将系数归0了。google
能够看到online 的一个主要的问题是去得到稀疏解。得到稀疏解最直接的方法是进行截断: 小于必定阈值就干掉。这么作的优势是容易得到稀疏解,弊端是会将一些原本系数比较小(由于训练不足)的特征给干掉。spa
$$W^{(t+1)}=W^{t} - \eta^{(t)}G^{(t)} - \eta^{(t)}\lambda sgn(W^{(t)})$$.net
描述起来也很简单,t/k不为整数的时候采用sgd,为整数的时候进行以下更新(说白了就是每隔 t 个进行一次归0):
$$W^{(t+1)} = T_{0} (W^{t} - \eta^{t}G^{t},\theta)$$翻译
$$T_0(v_i,theta) = begin{cases}
0, & mbox{if } v_i leqslant theta \
v_i, & mbox{otherwise }
end{cases}$$图片
截断梯度ip
在 简单截断上作了更新。
$$
W^{(t+1)} = T_{1} (W^{t} - eta^{t}G^{t},eta^{t}lambda,theta)
$$内存
$$
T_1(v_i,alpha,theta) = begin{cases}
max(0,v_i- alpha), & mbox{if } v_i in [0,theta] \
max(0,v_i+ alpha), & mbox{if } v_i in [-theta,0] \
v_i, & mbox{otherwise }
end{cases}
$$
B60F8C94-439A-4DC5-A0BB-2AF02C61DAFC.pngit
这样看起来更得劲。
l1就是k =1 的简单截断, 简单截断就是$keta^tlambda=theta$ 的状况下的截断梯度。
这块说看懂了吧,也够呛....
留个迭代公式吧。大概的思路是先进行sgd,而后将这个问题转化为一个最优化的问题(好蛋疼…). 这样后半部分的主要功能是1. 保证微调发生在梯度降低的附近。 2.得到稀疏性。
B60F8C94-439A-4DC5-A0BB-2AF02C61DAFC.png
![图片上传中...]
这里的l1 正则化就是令$psi(W) = lambda|W| $ ,用 $v_i$ 表示 $W^{(t+1/2)} $, 用标量$lambda = eta ^{(t+1/2)}lambda$ ,获得。
B60F8C94-439A-4DC5-A0BB-2AF02C61DAFC.png
这个后续的分析不是特别有帮助。就不列这了。大意是由于求和的部分是全正的。因此求单项的最小值。证实获得$w*v>=0$ 。获得结果
![图片上传中...]
这个结果看起来有点乱,其实挺好解读的,实际上 l1-fobos 在每次更新 w的时候对 w 的每一个维度都会断定(就是每一个 i 走一遍。) 能够看到至关于$|w_i^{(t)} - eta^{(t)}g_i^{(t)}| - eta^{(t+1/2)}lambda <= 0$的时候进行截断,令 $w_i^{(t+1)} = 0$ 。说白了就是$|w_i^{(t)} - eta^{(t)}g_i^{(t)}| <= eta^{(t+1/2)}lambda$ 的时候进行截断。这个与 TG中有类似的地方。 翻译过来就是当每次样本产生的梯度变化足够大的时候才进行更新,这个区别于每隔 k次进行更新。能够理解为令 TG 中,$theta = 0 , k =1 , lambda^{(t)}_{TG}=eta^{(t+1/2)}lambda$ 时候,l1-fobos 与 TG 彻底一致。
区别fobos 和 tg 的sgd 的思路,rda 的思路是使用正则对偶平均。迭代公式为
拆解下这个公式,1. 线性函数$frac{1}{t}sum_{r=1}^{t} <G^{(r)},W>$ 是指以前全部梯度的平均值。2. 正则项$psi(W) $ 3. 额外的正则项 $frac{beta^{(t)}}{t}h(W)$ 这是一个严格的凸函数。
仍是看一个例子吧...
这令$psi(W) = lambda||W||$ , $h(W) = 1/2||W||^2$ $beta^{(t)} = gamma sqrt{t} $ 有:
最后的更新方式
能够看到当梯度积累的平均值小于阈值$lambda$的时候就归0了。
… 看原文吧,说的太清楚。
为啥搞这个呢? 由于实验说fobos 的精度高,而 rda 的稀疏性好。 因此要再搞一把。
写不动了... 贴一下原文。(1) 前者对计算的是累加梯度以及 L1 正则项只考虑当前模的贡献,然后者采用了累加的处理方式;
(2) 前者的第三项限制?的变化不能离已迭代过的解太远,然后者则限制?不能离 0 点太远。
接着就是 ftrl 了:
这里跟以前相似的推导过程,获得。
咱们也来理解下$z_i^{(t)}< lambda_1$ ,考虑了 $g_i$的中值,也考虑每次梯度的变化。最后为啥ftrl 能够比以前两个更好呢,能够看到ftrl 在累加梯度、稀疏项使用的是rda, 也就是考虑了累加的处理方式;2️而l2项使用的是 fobos , 也就是说不能离迭代过的太远,而不是0,因此提升了准确率和稀疏性。