Online learning系列:从RDA、FOBOS到FTRL

前言

在一般的机器学习任务中,往往是通过batch的训练方法进行离线训练,然后线上进行预测,通常离线模型更新的时间在1天以上,这就使得模型不能及时学到实时的特征;另一方面,如果要进行实时训练的话,需要特征尽量稀疏,因为大规模的机器学习往往伴随着大量的参数,如果做不到特征计量稀疏的话,实时预估时延就会很大,这个时候就要用到online learning的一些方法,其目的是在提高训练参数稀疏性的同时,也提高训练精度。

梯度下降法

最原始的也是最简单的参数更新的方法是梯度下降法,即:
W ( t + 1 ) = W t − η t ∗ ℓ W ( W t , Z ) W_{(t+1)} = W_t - \eta_{t} *\ell_{W}(W_t,Z) W(t+1)=WtηtW(Wt,Z)
当然这里可以加batch进行梯度更新,这种更新方法存在的问题就是很难产生稀疏的特征,不适合online learning的场景。

l1正则

在机器学习任务中,我们知道,可以加l1正则来使得特征变的稀疏,如:
W ( t + 1 ) = W t − η t ∗ ( ℓ W ( W t , Z ) + λ s g n ( W t ) ) W_{(t+1)} = W_t - \eta_{t} *(\ell_{W}(W_t,Z) + \lambda sgn(W_t)) W(t+1)=Wtηt(W(Wt,Z)+λsgn(Wt))这样能保持参数更新尽量趋近0,这种方法可以一定程度上增大稀疏性

截断梯度法TG

梯度截断法是在l1的正则基础上提出的一种变体,其更新方式是:
W t + 1 = T 1 ( W t , η t ∗ ( ℓ W ( W t , Z ) , η t ∗ λ s g n ( W t ) ) W_{t+1} = T_1{(W_t, \eta_{t} *(\ell_{W}(W_t,Z),\eta_{t}* \lambda sgn(W_t))} Wt+1=T1(Wt,ηt(W(Wt,Z),ηtλsgn(Wt))其中 T 1 T_1 T1的表达式是
T 1 ( v , a , θ ) = { m a x ( 0 , v − a ) i f v ∈ [ 0 , θ ] m i n ( 0 , v + a ) i f v i n [ − θ , 0 ] v o t h e r w i s e T_1(v,a,\theta)=\left\{ \begin{aligned} & max(0,v- a) \quad if \quad v \in [0,\theta]\\ & min(0,v+a) \quad if \quad v in [-\theta,0] \\ & v \quad otherwise \end{aligned} \right. T1(v,a,θ)=max(0,va)ifv[0,θ]min(0,v+a)ifvin[θ,0]votherwise
TG和L1正则的对比图:
Online learning系列:从RDA、FOBOS到FTRL_第1张图片
可以看出的是,TG比L1正则更加柔和了一点,但是这两种方法还是非常的“武断”和“粗糙”

Regularized Dual Averaging Algorithm(RDA)

这里就有人提出了新的在线学习参数更新方法,特征权重更新方式是: W t + 1 = a r g m i n w { 1 t ∑ i = 1 t g i ⋅ w + ψ ( w ) + β t t h ( w ) } W_{t+1} = argmin_w\{ \frac{1}{t}\sum_{i=1}^{t}g_i \cdot w+\psi(w)+\frac{\beta_t}{t}h_(w) \} Wt+1=argminw{t1i=1tgiw+ψ(w)+tβth(w)}
其中 ψ ( w ) \psi(w) ψ(w)是正则项, h w h_w hw是一个严格凸函数。

RDA的l1正则化

这里我们讨论RDA的l1正则化,即更新方式为:
W t + 1 = a r g m i n w { 1 t ∑ i = 1 t g i ⋅ w + λ ∣ w ∣ + γ 2 t ∣ w ∣ 2 2 } W_{t+1} = argmin_w\{ \frac{1}{t}\sum_{i=1}^{t}g_i \cdot w+\lambda|w|+\frac{\gamma}{2\sqrt{t}}{|w|_2^2} \} Wt+1=argminw{t1i=1tgiw+λw+2t γw22}
现在我们去求解这个更新值
g 1 : t ˉ = 1 t ∑ i = 1 t g i \bar{g_{1:t}}=\frac{1}{t}\sum_{i=1}^{t}g_i g1:tˉ=t1i=1tgi
则原式变为:
W t + 1 = a r g m i n w { g 1 : t ˉ ⋅ w + λ ∣ w ∣ + γ 2 t ∣ w ∣ 2 2 } W_{t+1} = argmin_w\{\bar{g_{1:t}} \cdot w+\lambda|w|+\frac{\gamma}{2\sqrt{t}}{|w|_2^2} \} Wt+1=argminw{g1:tˉw+λw+2t γw22}
这里有结论: g 1 : t ˉ ⋅ w ≤ 0 \bar{g_{1:t}} \cdot w \leq0 g1:tˉw0 s g n ( g 1 : t ˉ ) = − s g n ( w ) sgn(\bar{g_{1:t}})=-sgn(w) sgn(g1:tˉ)=sgn(w)
证明:假如 w i w_i wi是上面的最优解且 g 1 : t ˉ ⋅ w > 0 \bar{g_{1:t}} \cdot w >0 g1:tˉw>0,那么可以肯定的是,存在 w = 0 w=0 w=0能够使得上式最优,这个和假设矛盾,因此可以证明 g 1 : t ˉ ⋅ ≤ 0 \bar{g_{1:t}} \cdot \leq0 g1:tˉ0,当 g 1 : t ˉ = 0 \bar{g_{1:t}}=0 g1:tˉ=0的时候,显然 w = 0 w=0 w=0
有了上面的结论,将求解式变成:
a r g m i n w ( γ 2 t { w + t γ ( λ s g n ( w ) + g 1 : t ˉ ) } 2 + c ) = a r g m i n w ( γ 2 t { w + t γ ( − λ s g n ( g 1 : t ˉ ) + g 1 : t ˉ ) } 2 + c ) = a r g m i n w ( γ 2 t { w + t γ s g n ( g 1 : t ˉ ) ( − λ + ∣ g 1 : t ˉ ∣ ) } 2 + c ) argmin_w(\frac{\gamma}{2\sqrt{t}}\{w+\frac{\sqrt t}{\gamma}(\lambda sgn(w)+\bar{g_{1:t}})\}^2+c)\\ = argmin_w(\frac{\gamma}{2\sqrt{t}}\{w+\frac{\sqrt t}{\gamma}(-\lambda sgn(\bar{g_{1:t}})+\bar{g_{1:t}})\}^2+c)\\=argmin_w(\frac{\gamma}{2\sqrt{t}}\{w+\frac{\sqrt t}{\gamma}sgn(\bar{g_{1:t}})(-\lambda+|\bar{g_{1:t}}|)\}^2+c) argminw(2t γ{w+γt (λsgn(w)+g1:tˉ)}2+c)=argminw(2t γ{w+γt (λsgn(g1:tˉ)+g1:tˉ)}2+c)=argminw(2t γ{w+γt sgn(g1:tˉ)(λ+g1:tˉ)}2+c)

其中 c c c为常量,可以得出:
W t + 1 = { 0 i f g 1 : t ˉ < λ − γ t ( − λ s g n ( g 1 : t ˉ ) + g 1 : t ˉ ) o t h e r w i s e W_{t+1}=\left\{ \begin{aligned} & 0 \quad if \quad \bar{g_{1:t}}<\lambda\\ & -\frac{\gamma}{\sqrt{t}}(-\lambda sgn(\bar{g_{1:t}})+\bar{g_{1:t}}) \quad otherwise \\ \end{aligned} \right. Wt+1=0ifg1:tˉ<λt γ(λsgn(g1:tˉ)+g1:tˉ)otherwise
RDA其实是考虑了历史的梯度关系,在更新当前的梯度的时候,会考虑历史上的更新梯度对当先的影响。

Forward Backward Splitting

FOBOS的方式和RDA有所不同,其参数更新方式是:
W t + 0.5 = W t − η t ∗ g t w = a r g m i n w { 1 2 ∣ w − W t + 0.5 ∣ 2 2 + η t + 0.5 ψ ( w ) } W_{t+0.5} = W_t - \eta_t*g_t \\w = argmin_w\{{\frac{1}{2}|w-W_{t+0.5}|_2^2}+ \eta_{t+0.5} \psi(w)\} Wt+0.5=Wtηtgtw=argminw{21wWt+0.522+ηt+0.5ψ(w)}
第一个式子是求当前的梯度下降更新值,第二个式子是求FOBOS更新值,其本意是希望 W t + 1 W_{t+1} Wt+1不会距离梯度下降值太远,同时加入正则项保持其稀疏的特性

FOBOS的l1正则化

FOBOS-l1的更新公式是:
w = a r g m i n w { 1 2 ∣ w − W t + 0.5 ∣ 2 2 + λ ^ ∣ w ∣ } w= argmin_w\{{\frac{1}{2}|w-W_{t+0.5}|_2^2}+ \hat{\lambda}|w| \} w=argminw{21wWt+0.522+λ^w}
其中 λ ^ = η t + 0.5 ∗ λ \hat {\lambda} = \eta_{t+0.5}*\lambda λ^=ηt+0.5λ W t + 0.5 = v t W_{t+0.5}=v_t Wt+0.5=vt
和RDA一样反证法可以得出 w ⋅ v t ≥ 0 w \cdot v_t \geq 0 wvt0
求解式子可以得出:
1 2 ( w − ( v t − λ ^ s g n ( w ) ) ) 2 + c = 1 2 ( w − ( v t − λ ^ s g n ( v t ) ) ) 2 + c {\frac{1}{2}(w-(v_t - \hat {\lambda} sgn(w) ))^2}+ c \\= {\frac{1}{2}(w-(v_t - \hat {\lambda} sgn(v_t) ))^2}+ c 21(w(vtλ^sgn(w)))2+c=21(w(vtλ^sgn(vt)))2+c
因此可以得出结论:
W t + 1 = { 0 i f v t ≤ λ ^ s g n ( v t ) − λ ^ s g n ( v t ) + v t o t h e r w i s e W_{t+1}=\left\{ \begin{aligned} & 0 \quad if \quad v_t \leq \hat {\lambda} sgn(v_t)\\ & -\hat {\lambda} sgn(v_t)+v_t \quad otherwise \\ \end{aligned} \right. Wt+1={0ifvtλ^sgn(vt)λ^sgn(vt)+vtotherwise
整理一下可以得到 W t + 1 = m a x ( 0 , v t − λ ^ s g n ( v t ) ) W_{t+1}=max(0,v_t - \hat {\lambda} sgn(v_t)) Wt+1=max(0,vtλ^sgn(vt))

Follow the Regularized Leader(FTRL)

ftrl总体上是结合了RDA和FOBOS的优点,其参数更新方法如下:
W t + 1 = a r g m i n w ( G 1 : t ∗ w + λ 1 ∣ ∣ w ∣ ∣ 1 + 1 2 ∑ s = 1 t σ s ∣ ∣ w − w s ∣ ∣ 2 2 + λ 2 1 2 ∣ ∣ w ∣ ∣ 2 2 ) W_{t+1} = argmin_w(G_{1:t}*w+\lambda_1||w||_1+\frac{1}{2}\sum_{s=1}^{t}\sigma_s||w-w_s||_2^2 + \lambda_2\frac{1}{2}||w||_2^2) Wt+1=argminw(G1:tw+λ1w1+21s=1tσswws22+λ221w22)
其中 G 1 : t = ∑ s = 1 t g s G_{1:t} = \sum_{s=1}^{t}g_s G1:t=s=1tgs也就是前面时刻梯度的和
σ 1 : t = 1 η t \sigma_{1:t} = \frac{1}{\eta_t} σ1:t=ηt1其中 η t \eta_t ηt是当前时刻的学习率
将上面的式子改写成: W t + 1 = a r g m i n w { ( G 1 : t − σ s w s ) ⋅ w + 1 2 ( 1 η t + λ 2 ) ∣ ∣ w ∣ ∣ 2 2 + λ 1 ∣ ∣ w ∣ ∣ 1 + c } W_{t+1}=argmin_w\{(G_{1:t}-\sigma_sw_s)\cdot w + \frac{1}{2}(\frac{1}{\eta_t}+\lambda_2) ||w||_2^2+\lambda_1||w||_1+c\} Wt+1=argminw{(G1:tσsws)w+21(ηt1+λ2)w22+λ1w1+c}
z t = G 1 : t − ∑ s = 1 t σ s w s z_t = G_{1:t} - \sum_{s=1}^{t}\sigma_s w_s zt=G1:ts=1tσsws有: z t = z t − 1 + g t − σ t w t = z t − 1 + g t − ( 1 η t − 1 η t − 1 ) w t z_{t} = z_{t-1}+g_t-\sigma_tw_t = z_{t-1}+g_t - (\frac{1}{\eta_t}- \frac{1}{\eta_{t-1}})w_t zt=zt1+gtσtwt=zt1+gt(ηt1ηt11)wt
原式可以写成:
a r g m i n w { z t w + 1 2 ( 1 η t + λ 2 ) ∣ ∣ w ∣ ∣ 2 2 + λ 1 ∣ ∣ w ∣ ∣ 1 } argmin_w \{ z_t w + \frac{1}{2}(\frac{1}{\eta_t}+\lambda_2) ||w||_2^2+\lambda_1 ||w||_1 \} argminw{ztw+21(ηt1+λ2)w22+λ1w1}
按照之间的求解方法,可以知道 z t w ≤ 0 z_t w\leq 0 ztw0,将其改写成:
W t + 1 = a r g m i n w { 1 2 ( 1 η t + λ 2 ) ( w + 1 2 ( 1 η t + λ 2 ) − 1 ( − λ 1 s g n ( z t ) + z t ) 2 + c ) } W_{t+1} = argmin_w\{ \frac{1}{2}(\frac{1}{\eta_t}+\lambda_2) (w+ \frac{1}{2}(\frac{1}{\eta_t}+\lambda_2)^{-1}(-\lambda_1sgn(z_t)+z_t)^2+c)\} Wt+1=argminw{21(ηt1+λ2)(w+21(ηt1+λ2)1(λ1sgn(zt)+zt)2+c)}
由此可以得到:

W t + 1 = { 0 i f z t ≥ λ 1 s g n ( z t ) ( 即 ∣ z t ∣ ≥ λ 1 ) − 1 2 ( 1 η t + λ 2 ) − 1 ( − λ 1 s g n ( z t ) + z t ) o t h e r w i s e W_{t+1}=\left\{ \begin{aligned} & 0 \quad if \quad z_t \geq \lambda_1sgn(z_t) (即|z_t| \geq\lambda_1)\\ & - \frac{1}{2}(\frac{1}{\eta_t}+\lambda_2)^{-1} (-\lambda_1sgn(z_t)+z_t) \quad otherwise \\ \end{aligned} \right. Wt+1=0ifztλ1sgn(zt)ztλ121(ηt1+λ2)1(λ1sgn(zt)+zt)otherwise
我们令 η t = α β + ∑ s = 1 t ( g s ) 2 \eta_t =\frac{\alpha}{\beta+\sqrt{\sum_{s=1}^{t}(g_s)^2}} ηt=β+s=1t(gs)2 α
可以得到ftrl的更新步骤:
Online learning系列:从RDA、FOBOS到FTRL_第2张图片

关于ftrl使用的经验

  1. 对训练数据顺序敏感,对正负比例敏感
  2. 因为ftrl参数更新的时候,会考虑到历史的参数,如历史的梯度和历史的参数更新值,因此ftrl对数据顺序和正负样本个数非常敏感,ftrl更新公式的 G 1 : t w G_{1:t}w G1:tw考虑的是历史的梯度更新值,而后面 ∣ ∣ w − w s ∣ ∣ 2 2 ||w-w_s||_2^2 wws22考虑的是历史的参数更新值,因此可以对数据分布不均的进行适当的梯度 g i g_i gi或者 σ s \sigma_s σs进行打压,能够一定程度上起到upsampling或者downsampling的效果
  3. 参数beta和alpha根本上是在调整学习率,其中alpha越大学习率越大,beta影响的是开始学习率,beta越大初始学习率越小(论文建议是1)

FTRL实践

可以参考这位大神的代码里面附了详细的实现

——记于北京

你可能感兴趣的:(机器学习,算法学习)