在一般的机器学习任务中,往往是通过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−ηt∗ℓW(Wt,Z)
当然这里可以加batch进行梯度更新,这种更新方法存在的问题就是很难产生稀疏的特征,不适合online learning的场景。
在机器学习任务中,我们知道,可以加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,这种方法可以一定程度上增大稀疏性
梯度截断法是在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,v−a)ifv∈[0,θ]min(0,v+a)ifvin[−θ,0]votherwise
TG和L1正则的对比图:
可以看出的是,TG比L1正则更加柔和了一点,但是这两种方法还是非常的“武断”和“粗糙”
这里就有人提出了新的在线学习参数更新方法,特征权重更新方式是: 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=1∑tgi⋅w+ψ(w)+tβth(w)}
其中 ψ ( w ) \psi(w) ψ(w)是正则项, h w h_w hw是一个严格凸函数。
这里我们讨论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=1∑tgi⋅w+λ∣w∣+2tγ∣w∣22}
现在我们去求解这个更新值
令 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=1∑tgi
则原式变为:
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γ∣w∣22}
这里有结论: g 1 : t ˉ ⋅ w ≤ 0 \bar{g_{1:t}} \cdot w \leq0 g1:tˉ⋅w≤0且 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+γtsgn(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其实是考虑了历史的梯度关系,在更新当前的梯度的时候,会考虑历史上的更新梯度对当先的影响。
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−ηt∗gtw=argminw{21∣w−Wt+0.5∣22+ηt+0.5ψ(w)}
第一个式子是求当前的梯度下降更新值,第二个式子是求FOBOS更新值,其本意是希望 W t + 1 W_{t+1} Wt+1不会距离梯度下降值太远,同时加入正则项保持其稀疏的特性
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{21∣w−Wt+0.5∣22+λ^∣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 w⋅vt≥0
求解式子可以得出:
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))
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:t∗w+λ1∣∣w∣∣1+21s=1∑tσs∣∣w−ws∣∣22+λ221∣∣w∣∣22)
其中 G 1 : t = ∑ s = 1 t g s G_{1:t} = \sum_{s=1}^{t}g_s G1:t=s=1∑tgs也就是前面时刻梯度的和
σ 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)∣∣w∣∣22+λ1∣∣w∣∣1+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:t−s=1∑tσ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=zt−1+gt−σtwt=zt−1+gt−(ηt1−ηt−11)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)∣∣w∣∣22+λ1∣∣w∣∣1}
按照之间的求解方法,可以知道 z t w ≤ 0 z_t w\leq 0 ztw≤0,将其改写成:
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∣≥λ1)−21(η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的更新步骤:
可以参考这位大神的代码里面附了详细的实现
——记于北京