前言
在一般的机器学习任务中,往往是通过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正则
在机器学习任务中,我们知道,可以加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,v−a)ifv∈[0,θ]min(0,v+a)ifvin[−θ,0]votherwise
TG和L1正则的对比图:
可以看出的是,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=1∑tgi⋅w+ψ(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=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其实是考虑了历史的梯度关系,在更新当前的梯度的时候,会考虑历史上的更新梯度对当先的影响。
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−ηt∗gtw=argminw{21∣w−Wt+0.5∣22+η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{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))
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: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的更新步骤:
关于ftrl使用的经验
- 对训练数据顺序敏感,对正负比例敏感
- 因为ftrl参数更新的时候,会考虑到历史的参数,如历史的梯度和历史的参数更新值,因此ftrl对数据顺序和正负样本个数非常敏感,ftrl更新公式的 G 1 : t w G_{1:t}w G1:tw考虑的是历史的梯度更新值,而后面 ∣ ∣ w − w s ∣ ∣ 2 2 ||w-w_s||_2^2 ∣∣w−ws∣∣22考虑的是历史的参数更新值,因此可以对数据分布不均的进行适当的梯度 g i g_i gi或者 σ s \sigma_s σs进行打压,能够一定程度上起到upsampling或者downsampling的效果
- 参数beta和alpha根本上是在调整学习率,其中alpha越大学习率越大,beta影响的是开始学习率,beta越大初始学习率越小(论文建议是1)
FTRL实践
可以参考这位大神的代码里面附了详细的实现
——记于北京