点击率预测算法:FTRL

文章目录

  • 1、逻辑回归
    • 1.1 sigmoid函数
    • 1.2 极大似然估计MLE与损失函数
    • 1.3 梯度下降
    • 1.4 另一种形式的损失函数及其梯度
  • 2、FOBOS与RDA
    • 2.1 FOBOS基本原理
    • 2.2 L1-FOBOS
    • 2.3 RDA基本原理
    • 2.4 L1-RDA
  • 3、FTRL
    • 3.1 从L1-FOBOS和L1-RDA推导FTRL
    • 3.2 FTRL权重更新的最终形式
    • 3.3 学习率
    • 3.4 工程实现计算过程
      • 3.4.1 一些定义
      • 3.4.2 FTRL算法
  • 4、FTRL的工程应用

1、逻辑回归

FTRL本质上是一种优化方法,最早由google提出并用于CTR预估。常被用于逻辑回归的优化,因此先简单介绍一下逻辑回归的内容。

1.1 sigmoid函数

由于二分类结果是1或者0,这与数学的阶跃函数很类似,但是阶跃函数在x=0的位置会发生突变,这个突变在数学上很难处理。所以一般使用sigmoid函数来拟合:

g ( z ) = 1 1 + e − z ( 1 ) g(z)={\frac 1{1+e^{-z}}} \qquad(1) g(z)=1+ez1(1)

具体应用到逻辑回归算法中:

z = ω 0 + ω 1 x 1 + ω 2 x 2 + . . . . . . + ω n x n = ∑ i = 0 n ω i x i = ω T X ( 2 ) z={\omega}_0+{\omega}_1x_1+{\omega}_2x_2+......+{\omega}_nx_n=\sum_{i=0}^n{\omega}_ix_i=\mathbf{\omega^TX} \qquad(2) z=ω0+ω1x1+ω2x2+......+ωnxn=i=0nωixi=ωTX(2)

其中 x i x_i xi表示样本属性(对于我们而言,就是标签IP)的值, ω i \omega_i ωi表示这个属性对应的系数(也就是算法需要计算的内容)。注意这里将 x 0 x_0 x0 ω 0 \omega_0 ω0也代入了上述公式,其中前者恒为1。于是问题就变成了在训练样本中,已知属性x与最终分类结果y(1或者0)时,如何求得这些系数 ω i \omega_i ωi,使得损失最小。

1.2 极大似然估计MLE与损失函数

在机器学习理论中,损失函数(loss function)是用来衡量模型的预测值 f ( x ) f(x) f(x)与真实值 Y Y Y的不一致程度,它是一个非负实值函数,损失函数越小,模型越优(还需考虑过拟合等问题)。损失函数是经验风险函数的核心部分,也是结构风险函数重要组成部分。模型的结构风险函数包括了经验风险项和正则项,通常可以表示成如下式子

ω ∗ = arg ⁡ min ⁡ ω 1 m ∑ i = 1 m L ( y i , f ( x i ; ω ) ) + λ   Φ ( ω ) ( 3 ) \omega^* = \arg \min_\omega \frac{1}{m}{}\sum_{i=1}^{m} L(y_i, f(x_i; \omega)) + \lambda\ \Phi(\omega) \qquad(3) ω=argωminm1i=1mL(yi,f(xi;ω))+λ Φ(ω)(3)

其中m表示样本的数量。对于逻辑回归,其loss function是log损失,这可以通过极大似然估计进行推导得到。

首先,给定一个样本 x x x,可以使用一个线性函数对自变量进行线性组合,即上述的(2)式子:
z = ω 0 + ω 1 x 1 + ω 2 x 2 + . . . . . . + ω n x n = ∑ i = 0 n ω i x i = ω T X ( 4 ) z={\omega}_0+{\omega}_1x_1+{\omega}_2x_2+......+{\omega}_nx_n=\sum_{i=0}^n{\omega}_ix_i=\mathbf{\omega^TX} \qquad(4) z=ω0+ω1x1+ω2x2+......+ωnxn=i=0nωixi=ωTX(4)

根据sigmoid函数,我们可以得出预测函数的表达式为:
h ω ( x ) = g ( ω T x ) = 1 1 + e − ω T x ( 5 ) h_{\omega}(x) = g(\omega^Tx) = \frac{1}{1 + e^{-\omega^Tx}} \qquad(5) hω(x)=g(ωTx)=1+eωTx1(5)
上式表示 y = 1 y=1 y=1的预测函数为 h ω ( x ) h_{\omega}(x) hω(x)。在这里,假设因变量 y y y服从伯努利分布,那么可以得到下列两个式子:

p ( y = 1 ∣ x ) = h ω ( x ) ( 6 ) p ( y = 0 ∣ x ) = 1 − h ω ( x ) ( 7 ) \begin{aligned} p(y=1 | x) &= h_{\omega} (x) \quad\qquad(6)\\ p(y=0 | x) &= 1 - h_{\omega} (x) \qquad(7) \end{aligned} p(y=1x)p(y=0x)=hω(x)(6)=1hω(x)(7)
而对于上面的两个表达式,通过观察,我们发现,可以将其合并为以下表达式:
p ( y ∣ x ) = h ω ( x ) y ( 1 − h ω ( x ) ) 1 − y ( 8 ) p(y | x) = h_{\omega} (x)^y (1-h_{\omega} (x))^{1-y} \qquad(8) p(yx)=hω(x)y(1hω(x))1y(8)
根据上面的式子,给定一定的样本之后,我们可以构造出似然函数,然后可以使用极大似然估计MLE的思想来求解参数。但是,为了满足最小化风险理论,我们可以将MLE的思想转化为最小化风险化理论,最大化似然函数其实就等价于最小化负的似然函数。对于MLE,就是利用已知的样本分布,找到最有可能(即最大概率)导致这种分布的参数值;或者说是什么样的参数才能使我们观测到目前这组数据的概率最大。使用MLE推导LR的loss function的过程如下。
首先,根据上面的假设,写出相应的极大似然函数(假定有 m m m个样本):
L ( ω ) = ∏ i = 1 m p ( y i ∣ x i ; ω ) = ∏ i = 1 m h ω ( x i ) y i ( 1 − h ω ( x i ) 1 − y i ( 9 ) \begin{aligned} L(\omega)&= \prod_{i=1}^{m} p(y_i | x_i; \omega) \\ &= \prod_{i=1}^{m} h_{\omega} (x_i)^{y_i} (1-h_{\omega} (x_i)^{1-y_i} \\ \end{aligned} \qquad(9) L(ω)=i=1mp(yixi;ω)=i=1mhω(xi)yi(1hω(xi)1yi(9)

上述式子中的 ω \omega ω x i x_i xi均为向量,并未显示其转置。

直接对上面的式子求导会不方便,因此,为了便于计算,我们可以对似然函数取对数,经过化简可以得到下式的推导结果:
log ⁡ L ( ω ) = ∑ i = 1 m log ⁡ [ ( h ω ( x i ) y i ( 1 − h ω ( x i ) ) 1 − y i ) ] = ∑ i = 1 m [ y i log ⁡ h ω ( x i ) + ( 1 − y i ) log ⁡ ( 1 − h ω ( x i ) ) ] ( 10 ) \begin{aligned} \log L(\omega)&= \sum_{i=1}^{m} \log \left [ (h_{\omega} (x_i)^{y_i} (1-h_{\omega} (x_i))^{1-y_i}) \right ] \\ &= \sum_{i=1}^{m} \left [ y_i \log h_{\omega} (x_i) + (1-y_i) \log(1-h_{\omega} (x_i)) \right ] \\ \end{aligned} \qquad(10) logL(ω)=i=1mlog[(hω(xi)yi(1hω(xi))1yi)]=i=1m[yiloghω(xi)+(1yi)log(1hω(xi))](10)

因此,损失函数可以通过最小化负的似然函数得到,即下式:

J ( ω ) = − 1 m ∑ i = 1 m [ y i log ⁡ h ω ( x i ) + ( 1 − y i ) log ⁡ ( 1 − h ω ( x i ) ] ( 11 ) J(\omega) = - \frac{1}{m} \sum_{i=1}^m \left [ y_i \log h_{\omega}(x_i) + (1-y_i) \log(1-h_{\omega}(x_i) \right ] \qquad(11) J(ω)=m1i=1m[yiloghω(xi)+(1yi)log(1hω(xi)](11)

在周志华版的机器学习中,将sigmiod函数代入 h ω ( x i ) h_{\omega}(x_i) hω(xi),并使用ln代替log,上述公式表示为:

J ( ω ) = − 1 m ∑ i = 1 m [ y i ln ⁡ h ω ( x i ) + ( 1 − y i ) ln ⁡ ( 1 − h ω ( x i ) ] = − 1 m ∑ i = 1 m [ y i ln ⁡ 1 1 + e − ω x i + ( 1 − y i ) ln ⁡ e − ω x i 1 + e − ω x i ] = − 1 m ∑ i = 1 m [ ln ⁡ 1 1 + e ω x i + y i ln ⁡ 1 e − ω x i ] = 1 m ∑ i = 1 m [ − y i w x i + ln ⁡ ( 1 + e ω x i ) ] ( 12 ) \begin{aligned} J(\omega) &= - \frac{1}{m} \sum_{i=1}^m \left [ y_i \ln h_{\omega}(x_i) + (1-y_i) \ln(1-h_{\omega}(x_i) \right ]\\ &=- \frac{1}{m} \sum_{i=1}^m \left [ y_i\ln \frac{1}{1+e^{-\omega x_i}}+(1-y_i)\ln \frac{e^{-\omega x_i}}{1+e^{-\omega x_i}}\right ]\\ &=- \frac{1}{m} \sum_{i=1}^m \left [ \ln \frac{1}{1+e^{\omega x_i}} + y_i \ln \frac{1}{e^{-\omega x_i}}\right ]\\ &= \frac{1}{m} \sum_{i=1}^m \left [ -y_iwx_i + \ln(1+e^{\omega x_i})\right ] \end{aligned} \qquad(12) J(ω)=m1i=1m[yilnhω(xi)+(1yi)ln(1hω(xi)]=m1i=1m[yiln1+eωxi1+(1yi)ln1+eωxieωxi]=m1i=1m[ln1+eωxi1+yilneωxi1]=m1i=1m[yiwxi+ln(1+eωxi)](12)

在某些资料上,还有另一种损失函数的表达形式,但本质是一样的,如下【推导见下面1.4】:
J ( ω ) = 1 m ∑ i = 1 m l o g ( 1 + e − y i ω x ) ( 13 ) J(\omega) = \frac{1}{m} \sum_{i=1}^m log(1 + e^{-y_i \omega x}) \qquad(13) J(ω)=m1i=1mlog(1+eyiωx)(13)

1.3 梯度下降

这里就以梯度下降为例对逻辑回归进行求解,其迭代公式的推导过程如下:

∂ J ( ω ) ∂ ω j = − 1 m ∑ i m [ y i ( 1 − h ω ( x i ) ) ⋅ ( − x i , j ) + ( 1 − y i ) h ω ( x i ) ⋅ ( x i , j ) ] = − 1 m ∑ i m ( − y i ⋅ x i , j + h ω ( x i ) ⋅ x i , j ) = − 1 m ∑ i m ( h ω ( x i ) − y i ) x i , j ( 14 ) \begin{aligned} \frac{ \partial J(\omega)} {\partial \omega_j}&= -\frac{1}{m} \sum_{i}^{m} \left [ y_i(1 - h_{\omega}(x_i)) \cdot (-x_{i,j}) + (1 - y_i) h_{\omega} (x_i) \cdot (x_{i,j}) \right ]\\ & = - \frac{1}{m} \sum_{i}^{m} (-y_i \cdot x_{i,j} + h_{\omega}(x_i) \cdot x_{i,j}) \\ & = -\frac{1}{m} \sum_{i}^{m} (h_{\omega}(x_i) - y_i) x_{i,j} \end{aligned} \qquad(14) ωjJ(ω)=m1im[yi(1hω(xi))(xi,j)+(1yi)hω(xi)(xi,j)]=m1im(yixi,j+hω(xi)xi,j)=m1im(hω(xi)yi)xi,j(14)

上述中 x i , j x_{i,j} xi,j表示第 i i i个样本的第 j j j个属性的取值。
于是, ω \omega ω的更新方式为:

ω j + 1 = ω j − α ∑ i = 1 m ( h ω ( x i ) − y i ) x x , j \omega_{j+1} = \omega_j - \alpha \sum_{i=1}^{m} (h_{\omega}(x_i) - y_i) x_{x,j} ωj+1=ωjαi=1m(hω(xi)yi)xx,j

对于随机梯度下降,每次只取一个样本,则 ω \omega ω的更新方式为:

ω j + 1 = ω j − α ( h ω ( x ) − y ) x j \omega_{j+1} = \omega_j - \alpha (h_{\omega}(x)- y) x_{j} ωj+1=ωjα(hω(x)y)xj

其中 x x x为这个样本的特征值, y y y为这个样本的真实值, x j x_j xj为这个样本第 j j j个属性的值。

这使用周志华版的损失函数更容易得出这个结论。

1.4 另一种形式的损失函数及其梯度

与上面相同,根据sigmoid函数,我们可以得出预测函数的表达式为:
h ω ( x ) = g ( ω T x ) = 1 1 + e − ω T x h_{\omega}(x) = g(\omega^Tx) = \frac{1}{1 + e^{-\omega^Tx}} hω(x)=g(ωTx)=1+eωTx1
上式表示 y = 1 y=1 y=1的预测函数为 h ω ( x ) h_{\omega}(x) hω(x)
但与上面不同,我们假设样本的分布为{-1,1},则
p ( y = 1 ∣ x ) = h ω ( x ) p(y=1 | x) = h_{\omega} (x) p(y=1x)=hω(x)

p ( y = − 1 ∣ x ) = 1 − h ω ( x ) p(y=-1 | x) = 1 - h_{\omega} (x) p(y=1x)=1hω(x)
对于sigmoid函数,有以下特性(简单推导一下就可以得到):
h ( − x ) = 1 − h ( x ) h(-x) = 1 - h(x) h(x)=1h(x)

于是(14)(15)式可以表示为:
p ( y ∣ x ) = h ω ( y x ) p(y|x) = h_\omega(yx) p(yx)=hω(yx)

同样,我们使用MLE作估计,
L ( ω ) = ∏ i = 1 m p ( y i ∣ x i ; ω ) = ∏ i = 1 m h ω ( y i x i ) = ∏ i = 1 m 1 1 + e − y i w x i \begin{aligned} L(\omega)&= \prod_{i=1}^{m} p(y_i | x_i; \omega) \\ &= \prod_{i=1}^{m} h_\omega(y_i x_i)\\ &= \prod_{i=1}^{m} \frac{1}{1+e^{-y_iwx_i}} \end{aligned} L(ω)=i=1mp(yixi;ω)=i=1mhω(yixi)=i=1m1+eyiwxi1

对上式取对数及负值,得到损失为:
− log ⁡ L ( ω ) = − log ⁡ ∏ i = 1 m p ( y i ∣ x i ; ω ) = − ∑ i = 1 m log ⁡ p ( y i ∣ x i ; ω ) = − ∑ i = 1 m log ⁡ 1 1 + e − y i w x i = ∑ i = 1 m log ⁡ ( 1 + e − y i w x i ) \begin{aligned} -\log L(\omega)&= -\log \prod_{i=1}^{m} p(y_i | x_i; \omega) \\ &= -\sum_{i=1}^{m} \log p(y_i | x_i; \omega) \\ &= -\sum_{i=1}^{m} \log \frac{1}{1+e^{-y_iwx_i}}\\ &= \sum_{i=1}^{m} \log(1+e^{-y_iwx_i})\\ \end{aligned} logL(ω)=logi=1mp(yixi;ω)=i=1mlogp(yixi;ω)=i=1mlog1+eyiwxi1=i=1mlog(1+eyiwxi)
即对于每一个样本,损失函数为:
L ( ω ) = log ⁡ ( 1 + e − y i w x i ) L(\omega)=\log(1+e^{-y_iwx_i}) L(ω)=log(1+eyiwxi)
对上式求梯度,容易得到:
∂ J ( ω ) ∂ ω j = − y i x i 1 + e y i ω x i \begin{aligned} \frac{ \partial J(\omega)} {\partial \omega_j}&= \frac{-y_i x_i}{1+e^{y_i \omega x_i}} \end{aligned} ωjJ(ω)=1+eyiωxiyixi

2、FOBOS与RDA

2.1 FOBOS基本原理

FOBOS算法由John Duchi和Yoram Singer提出,是梯度下降的一个变种。
与梯度下降不同,它将权重的更新分为2个步骤:
W t + 1 2 = W t − η t G t n W t + 1 = arg ⁡ min ⁡ { 1 2 ∥ W − W t + 1 2 ∥ 2 + η ( t + 1 2 ) ψ ( W ) } \begin{aligned} W_{t+\frac{1}{2}}&=W_t-\eta_tG_t \\n W_{t+1}&=\arg\min\{\frac{1}{2}\|W-W_{t+\frac{1}{2}}\|^2+\eta_{(t+\frac{1}{2})}\psi(W)\} \end{aligned} Wt+21nWt+1=WtηtGt=argmin{21WWt+212+η(t+21)ψ(W)}

从上面的2个步骤可以看出:
第一个步骤是一个标准的梯度下降。
第二个步骤是对梯度下降的结果进行微调。这里可以分为2部分:(1)前半部分保证了微调发生在第一个步骤结果(取梯度下降结果)的附近。(2)后半部分用于处理正则化,产生稀疏性。

** 根据次梯度理论的推断,可以得出 W ( t + 1 ) W_{(t+1)} W(t+1)不仅仅与迭代前的状态 W t W_t Wt有关,而且与迭代后的$$相关**

2.2 L1-FOBOS

FOBOS在L1正则化条件下,特征权重的更新方式为:(推导过程暂略)
ω t + 1 , i = s g n ( ω t , i − η t g t , i ) m a x { 0 , ∣ ω t , i − η t g t , i ∣ − η t + 1 2 λ } \omega_{t+1,i}=sgn(\omega_{t,i}-\eta_tg_{t,i})max\{0,|\omega_{t,i}-\eta_tg_{t,i}|-\eta_{t+\frac{1}{2}}\lambda\} ωt+1,i=sgn(ωt,iηtgt,i)max{0,ωt,iηtgt,iηt+21λ}

其中 g t , i g_{t,i} gt,i为梯度在维度i上的取值

2.3 RDA基本原理

简单截断、TG、FOBOS都是建立在SGD基础上的一个变种,属于梯度下降类型的方法,这类方法的精度比较高,同时也能得到一定的稀疏性。而RDA是从另一个方面来求解,它的精度比FOBOS等略差,但它更有效的提升了稀疏性。

在RDA中,特征权重的更新策略为:

W t + 1 = arg ⁡ min ⁡ { 1 t ∑ r = 1 t < G r , W > + ψ ( W ) + β t t h ( W ) } W_{t+1}=\arg\min\{\frac{1}{t}\sum_{r=1}^{t}<G^{r},W>+\psi(W)+\frac{\beta_t}{t}h(W)\} Wt+1=argmin{t1r=1t<Gr,W>+ψ(W)+tβth(W)}

其中 < G r , W > <G^{r},W> <Gr,W>表示梯度 G r G^r Gr对W的积分平均值(积分中值); ψ ( W ) \psi(W) ψ(W)为正则项; h ( W ) h(W) h(W)为一个辅助的严格的凸函数; β t ∣ t ≥ 1 {\beta_t|t\ge1} βtt1是一个非负且非自减序列。

2.4 L1-RDA

在L1正则化条件下,RDA的各个维度的权重更新方式为:
ω t + 1 , i = { 0 , if  ∣ g ‾ t , i ∣ < λ − ( t r ( g ‾ t , i − λ s g n ( g ‾ t , i ) ) , otherwise \omega_{t+1,i} = \begin{cases} 0, & \text{if $|\overline g_{t,i}|<\lambda$} \\ -(\frac{\sqrt{t}}{r}(\overline g_{t,i}-\lambda sgn(\overline g_{t,i})), & \text{otherwise} \\ \end{cases} ωt+1,i={0,(rt (gt,iλsgn(gt,i)),if ∣gt,i<λotherwise
亦即当某个维度上的累积梯度平均值的绝对值 ∣ g ‾ t , i ∣ |\overline g_{t,i}| gt,i小于阈值 λ \lambda λ时,该维度权重被置为0。

3、FTRL

理论及实验均证明,L1-FOBOS这类基于梯度下降的算法有比较高的精度,但L1-RDA却能在损失一定精度的情况下产生更好的稀疏性。
把这二者的优点结合成一个算法,这就是FTRL算法的来源。

3.1 从L1-FOBOS和L1-RDA推导FTRL

我们令 η t + 1 2 = η t = Θ ( 1 t ) \eta_{t+\frac{1}{2}}=\eta_t=\Theta(\frac{1}{\sqrt{t}}) ηt+21=ηt=Θ(t 1)是一个非增正序列,同时代入L1正则项,得到L1-FOBOS的形式如下:
W t + 1 2 = W t − η t G t W t + 1 = arg ⁡ min ⁡ { 1 2 ∥ W − W t + 1 2 ∥ 2 + η t λ ∥ W ∥ 1 } \begin{aligned} W_{t+\frac{1}{2}}&=W_t-\eta_tG_t \\ W_{t+1}&=\arg\min\{\frac{1}{2}\|W-W_{t+\frac{1}{2}}\|^2+\eta_{t}\lambda\|W\|_1\} \end{aligned} Wt+21Wt+1=WtηtGt=argmin{21WWt+212+ηtλW1}

将这2个公式合并到一起,得到L1-FOBOS的形式如下:
W t + 1 = arg ⁡ min ⁡ { 1 2 ∥ W − W t + η t G t ∥ 2 + η t λ ∥ W ∥ 1 } W_{t+1}=\arg\min\{\frac{1}{2}\|W-W_t+\eta_tG_t\|^2+\eta_{t}\lambda\|W\|_1\} Wt+1=argmin{21WWt+ηtGt2+ηtλW1}

将上式分解为N个独立的维度进行最优化求解:
w i = arg ⁡ min ⁡ { 1 2 ∥ w i − w t , i + η t g t , i ∥ 2 + η t λ ∣ w t , i ∣ 1 } = arg ⁡ min ⁡ { 1 2 ( w i − w t , i ) 2 + 1 2 ( η t g t , i ) 2 + w i η t g t , i − w t , i η t g t , i + η t λ ∣ w i ∣ } = arg ⁡ min ⁡ { w i g t , i + λ ∣ w i ∣ + 1 2 η t ( w i − w t , i ) 2 + ∣ η t 2 g t , i 2 − w t , i g t , i ∣ } \begin{aligned} w_i&=\arg\min\{\frac{1}{2}\|w_i-w_{t,i}+\eta_tg_{t,i}\|^2+\eta_{t}\lambda|w_{t,i}|_1\} \\ &=\arg\min\{\frac{1}{2}(w_i-w_{t,i})^2+\frac{1}{2}(\eta_t g_{t,i})^2+w_i\eta_tg_{t,i}-w_{t,i}\eta_tg_{t,i}+\eta_t\lambda|w_i|\}\\ &=\arg\min\{w_ig_{t,i}+\lambda|w_i|+\frac{1}{2\eta_t}(w_i-w_{t,i})^2+|\frac{\eta_t}{2}g_{t,i}^2-w_{t,i}g_{t,i}|\} \end{aligned} wi=argmin{21wiwt,i+ηtgt,i2+ηtλwt,i1}=argmin{21(wiwt,i)2+21(ηtgt,i)2+wiηtgt,iwt,iηtgt,i+ηtλwi}=argmin{wigt,i+λwi+2ηt1(wiwt,i)2+2ηtgt,i2wt,igt,i}

  • 上述推导的最后一步是通过除以 η t \eta_t ηt得到的。
    由于上式中的最后一项 ∣ η t 2 g t , i 2 − w t , i g t , i ∣ |\frac{\eta_t}{2}g_{t,i}^2-w_{t,i}g_{t,i}| 2ηtgt,i2wt,igt,i是一个与 w i w_i wi无关的量,因此上式可简化为:
    w i = arg ⁡ min ⁡ { w i g t , i + λ ∣ w i ∣ + 1 2 η t ( w i − w t , i ) 2 } w_i=\arg\min\{w_ig_{t,i}+\lambda|w_i|+\frac{1}{2\eta_t}(w_i-w_{t,i})^2\} wi=argmin{wigt,i+λwi+2ηt1(wiwt,i)2}
    把N个独立优化的维度重新合并,L1-FOBOS可写成以下形式:
    W t + 1 = arg ⁡ min ⁡ { G t W + λ ∥ W ∥ 1 + 1 2 η t ∥ W − W t ∥ 2 2 } W_{t+1}=\arg\min\{G_tW+\lambda\|W\|_1+\frac{1}{2\eta_t}\|W-W_t\|_2^2\} Wt+1=argmin{GtW+λW1+2ηt1WWt22}

另一方面,L1-RDA可以表达为:
W t + 1 = arg ⁡ min ⁡ { G ( 1 : t ) W + t λ ∥ W ∥ 1 + 1 2 η t ∥ W − 0 ∥ 2 2 } W_{t+1}=\arg\min\{G_{(1:t)}W+t\lambda\|W\|_1+\frac{1}{2\eta_t}\|W-0\|_2^2\} Wt+1=argmin{G(1:t)W+tλW1+2ηt1W022}
其中 G ( 1 : t ) = ∑ s = 1 t G s G_{(1:t)}=\sum_{s=1}{t}G_s G(1:t)=s=1tGs
我们令 σ s = 1 η s − 1 η s − 1 \sigma_s=\frac{1}{\eta_s}-\frac{1}{\eta_{s-1}} σs=ηs1ηs11,可以得到 σ ( 1 : t ) = 1 η t \sigma_{(1:t)}=\frac{1}{\eta_t} σ(1:t)=ηt1。那么L1-FOBOS与L1-RDA可以写为以下格式:
W t + 1 = arg ⁡ min ⁡ { G t W + λ ∥ W ∥ 1 + 1 2 σ ( 1 : t ) ∥ W − W t ∥ 2 2 } W t + 1 = arg ⁡ min ⁡ { G ( 1 : t ) W + t λ ∥ W ∥ 1 + 1 2 σ ( 1 : t ) ∥ W − 0 ∥ 2 2 } \begin{aligned} W_{t+1}&=\arg\min\{G_tW+\lambda\|W\|_1+\frac{1}{2}\sigma_{(1:t)}\|W-W_t\|_2^2\}\\ W_{t+1}&=\arg\min\{G_{(1:t)}W+t\lambda\|W\|_1+\frac{1}{2}\sigma_{(1:t)}\|W-0\|_2^2\} \end{aligned} Wt+1Wt+1=argmin{GtW+λW1+21σ(1:t)WWt22}=argmin{G(1:t)W+tλW1+21σ(1:t)W022}

比较以上2式的区别:

  • (1)L1-FOBOS考虑的是当前梯度的影响,L1-RDA则考虑了累积影响。
  • (2)L1-FOBOS限制 W t + 1 W_{t+1} Wt+1不能离 W t W_t Wt太远,而L1-RDA的W则不能离0太远,因此后者更容易产生稀疏性。

3.2 FTRL权重更新的最终形式

在google2010公布的理论文章中并没有使用L2正则项,但在2013年公布工程实施方案时引入了L2。
因此,综合上述的L1-FOBOS及L1-RDA,FTRL算法的权重更新方式为:
W t + 1 = arg ⁡ min ⁡ { G ( 1 : t ) W + λ 1 ∥ W ∥ 1 + λ 2 ∥ W ∥ 2 2 + 1 2 ∑ s = 1 t ( σ s ∥ W − W s ∥ 2 2 ) } W_{t+1}=\arg\min\{G_{(1:t)}W+\lambda_1\|W\|_1+\lambda_2\|W\|_2^2+\frac{1}{2}\sum_{s=1}^t(\sigma_s\|W-W_s\|_2^2)\} Wt+1=argmin{G(1:t)W+λ1W1+λ2W22+21s=1t(σsWWs22)}
将上式展开,得到
W t + 1 = arg ⁡ min ⁡ { ( G ( 1 : t ) − ∑ s = 1 t σ s W s ) W + λ 1 ∥ W ∥ 1 + 1 2 ( λ 2 + ∑ s = 1 t σ s ) ∥ W ∥ 2 + 1 2 ∑ s = 1 t σ s ∥ W s ∥ 2 2 } W_{t+1}=\arg\min\{(G_{(1:t)}-\sum_{s=1}^t\sigma_sW_s)W+\lambda_1\|W\|_1+\frac{1}{2}(\lambda_2+\sum_{s=1}^t\sigma_s)\|W\|^2+\frac{1}{2}\sum_{s=1}^{t}\sigma_s\|W_s\|_2^2\} Wt+1=argmin{(G(1:t)s=1tσsWs)W+λ1W1+21(λ2+s=1tσs)W2+21s=1tσsWs22}
由于上式的最后一项相对于W来说是一个常数,同时令 Z t = G ( 1 : t ) − ∑ ( s = 1 ) t σ s W s Z_t=G_{(1:t)}-\sum_{(s=1)}^t\sigma_sW_s Zt=G(1:t)(s=1)tσsWs,上式可表示为:
W t + 1 = arg ⁡ min ⁡ { Z t W + λ 1 ∥ W ∥ 1 + 1 2 ( λ 2 + ∑ s = 1 t σ s ) ∥ W ∥ 2 } W_{t+1}=\arg\min\{Z_tW+\lambda_1\|W\|_1+\frac{1}{2}(\lambda_2+\sum_{s=1}^t\sigma_s)\|W\|^2\} Wt+1=argmin{ZtW+λ1W1+21(λ2+s=1tσs)W2}
各个维度可以独立表示为:
w i + 1 = arg ⁡ min ⁡ { z t , i w i + λ 1 ∣ w i ∣ + 1 2 ( λ 2 + ∑ s = 1 t σ s ) w i 2 } w_{i+1}=\arg\min\{z_{t,i}w_i+\lambda_1|w_i|+\frac{1}{2}(\lambda_2+\sum_{s=1}^{t}\sigma_s)w_i^2\} wi+1=argmin{zt,iwi+λ1wi+21(λ2+s=1tσs)wi2}

使用与L1-FOBOS相同的分析方法可以得到:
ω t + 1 , i = { 0 , if  ∣ z i ∣ < λ 1 − ( λ 2 + ∑ s = 1 t σ s ) − 1 ( z t , i − s g n ( z t , i ) λ 1 ) , otherwise \omega_{t+1,i} = \begin{cases} 0, & \text{if $|z_i|<\lambda_1$} \\ -(\lambda_2+\sum_{s=1}^t\sigma_s)^{-1}(z_{t,i}-sgn(z_{t,i})\lambda_1), & \text{otherwise} \\ \end{cases} ωt+1,i={0,(λ2+s=1tσs)1(zt,isgn(zt,i)λ1),if ∣zi<λ1otherwise

根据上面的定义:
σ ( 1 : t ) = ∑ s = 1 t σ s = 1 η t \sigma_{(1:t)}=\sum_{s=1}^t\sigma_s=\frac{1}{\eta_t} σ(1:t)=s=1tσs=ηt1

我们使用下面介绍的学习率,以及令 n i = ∑ g i 2 n_i=\sum g_i^2 ni=gi2,则可以得到FTRL的最终形式:
ω i = { 0 , if  ∣ z i ∣ < λ 1 − ( β + n I α + λ 2 ) − 1 ( z i − s g n ( z i ) λ 1 ) , otherwise \omega_i = \begin{cases} 0, & \text{if $|z_i|<\lambda_1$} \\ -(\frac{\beta+\sqrt{n_I}}{\alpha}+\lambda_2)^{-1}(z_i-sgn(z_i)\lambda_1), & \text{otherwise} \\ \end{cases} ωi={0,(αβ+nI +λ2)1(zisgn(zi)λ1),if ∣zi<λ1otherwise

3.3 学习率

1、per-coordinate learning rate
在FTRL中,学习率的定义如下:
η t , i = α β + ∑ s = 1 t g s , i 2 \eta_{t,i}=\frac{\alpha}{\beta+\sqrt{\sum_{s=1}^tg_{s,i}^2}} ηt,i=β+s=1tgs,i2 α
其中 α β \alpha\beta αβ是自定义的参数。

在一般梯度下降算法中,使用的是一个全局的学习率策略: η t = 1 t \eta_t=\frac{1}{\sqrt{t}} ηt=t 1。这个策略保证了学习率是一个正的非增序列,这个值对于每一个特征都是一样的。

考虑一个极端的情况,我们有多个稀疏特征,其中一个特征 x 1 x_1 x1出现非常频繁,而另一个特征 x 2 x_2 x2很少出现。比如第一个样本, x 1 x_1 x1 x 2 x_2 x2同时出现了,但接下来的99个样本都只出现了 x 1 x_1 x1,然后第100个样本 x 2 x_2 x2又出来了,由于此时的学习率为 1 100 \frac{1}{\sqrt{100}} 100 1,远小于第一个样的影响了。也就是说假如第一个样本是正样本,第10个样本是负样本,此时由于学习率的不同,模型会认为 x 2 x_2 x2会是一个有用的正相关的特征,即 ω > 0 \omega>0 ω>0。但事实上,这个特征只出现了2次,而且一正一负,因此这应该是一个无用的特征,即 ω = 0 \omega=0 ω=0

在FTRL中,我们会使用一个特征的累积梯度,由于中间的99个数据没有这个特征,因此其对应的梯度为0,因此第二次的负样本对应的学习率只是略小于第一个正样本。

3.4 工程实现计算过程

3.4.1 一些定义

对于每一个样本,我们计算以下数值。

(1) p t p_t pt

使用当前的 ω \omega ω代入sigmoid函数得出的预测值,即:
p = 1 1 + e − ( ∑ i = 1 n ω i x i ) p=\frac{1}{1+e^{-(\sum_{i=1}^n\omega_ix_i)}} p=1+e(i=1nωixi)1

(2) g i g_i gi

损失函数在某一个维度上的梯度,对于逻辑回归而言:
g i = ( p − y ) x i g_i=(p-y)x_i gi=(py)xi
其中y为当前样本的实际值,即0或者1。

(3) n i n_i ni

这是该维度梯度 g i 2 g_i^2 gi2的累积值,即:
n i = n i + g i 2 n_i=n_i+g_i^2 ni=ni+gi2

(4) η i \eta_i ηi

这是该维度的学习率,它与累积梯度有关。定义为:
η i = α β + ∑ s = 1 t ( g i s ) 2 = α β + n i \eta_i=\frac{\alpha}{\beta+\sqrt{\sum_{s=1}^t(g_i^s)^2}}=\frac{\alpha}{\beta+\sqrt{n_i}} ηi=β+s=1t(gis)2 α=β+ni α
其中 α β \alpha\beta αβ为用户定义的2个参数。

(5) σ i \sigma_i σi

σ i \sigma_i σi是一个中间计算值,没有实际含义,其定义为:
σ i = 1 η t , i − 1 η t − 1 , i = 1 α ( n i + g i 2 − n i ) \sigma_i=\frac{1}{\eta_{t,i}}-\frac{1}{\eta_{t-1,i}}=\frac{1}{\alpha}(\sqrt{n_i+g_i^2}-\sqrt{n_i}) σi=ηt,i1ηt1,i1=α1(ni+gi2 ni )

(6) z i z_i zi

z i z_i zi也是一个辅助计算的中间值,它的定义为:
z t , i = g ( 1 : t ) − ∑ s = 1 t σ s , i ω s , i z_{t,i}=g^{(1:t)}-\sum_{s=1}^t{\sigma_{s,i}\omega_{s,i}} zt,i=g(1:t)s=1tσs,iωs,i
于是 z i z_i zi的更新为:
z t − z t − 1 = g t − σ t ω t z_t-z_{t-1}=g_t-\sigma_{t}\omega_{t} ztzt1=gtσtωt
即:
z i = z i + g t − σ i ω i z_i=z_i+g_t-\sigma_i\omega_i zi=zi+gtσiωi

3.4.2 FTRL算法

(1)设定以下4个输入参数,这些参数根据经验而定,可以参考以下数据:
α = 0.1 , β = 1 , λ 1 = 1 , λ 2 = 1 \alpha=0.1,\beta=1,\lambda_1=1,\lambda_2=1 α=0.1,β=1,λ1=1,λ2=1

(2)初始化以下数值:
z i = 0 , n i = 0 z_i=0,n_i=0 zi=0,ni=0

(3)对于每一个样本的所带的每一个维度,更新 ω \omega ω
ω i = { 0 , if  ∣ z i ∣ < λ 1 − ( β + n I α + λ 2 ) − 1 ( z i − s g n ( z i ) λ 1 ) , otherwise \omega_i = \begin{cases} 0, & \text{if $|z_i|<\lambda_1$} \\ -(\frac{\beta+\sqrt{n_I}}{\alpha}+\lambda_2)^{-1}(z_i-sgn(z_i)\lambda_1), & \text{otherwise} \\ \end{cases} ωi={0,(αβ+nI +λ2)1(zisgn(zi)λ1),if ∣zi<λ1otherwise

(4)使用上面更新后的 ω \omega ω,预测这个样本的值,即代入sigmoid函数计算 p t p_t pt
p = 1 1 + e − ( ∑ i = 1 n ω i x i ) p=\frac{1}{1+e^{-(\sum_{i=1}^n\omega_ix_i)}} p=1+e(i=1nωixi)1

(5)对于每一个样本每一个维度,更新 g i , σ i , z i , n i g_i,\sigma_i,z_i,n_i gi,σi,zi,ni,即上面所说的:
g i = ( p − y ) x i σ i = 1 α ( n i + g i 2 − n i ) z i = z i + g t − σ i ω i n i = n i + g i 2 \begin{aligned} g_i&=(p-y)x_i \\ \sigma_i&=\frac{1}{\alpha}(\sqrt{n_i+g_i^2}-\sqrt{n_i})\\ z_i&=z_i+g_t-\sigma_i\omega_i\\ n_i&=n_i+g_i^2 \end{aligned} giσizini=(py)xi=α1(ni+gi2 ni )=zi+gtσiωi=ni+gi2

4、FTRL的工程应用

这里只列出了google提供的一些建议,我们自身的工程应用并不包含在内。
(1)减少样本的数量

  • Poisson Inclusion:以p的概率接受样本
  • Bloom Filter Inclusion:只有当特征出现次数达到一定数量后,特征才会被加入模型

(2)使用更少的位来进行浮点数编码
一般而言,特征对应的 ω \omega ω在(-2,2)之间,所以我们可以将32,或者64位的浮点数编码规则改为q2.13编码方式,即2位整数,1位小数点,13位小数。

(3)多个类似的模型
把多个同类型/相似的模型放在一起保存,可以不需要记录多个key,只需要记录一次Key,以及各个模型中的 ω \omega ω。这可以节省内存、带宽、CPU、存储。

(4)只保存一个模型
在上面的基础上更进一步,所有模型共用一份 ω \omega ω,以及以一个bit来记录本模型有哪些特征。当模型更新某个 ω \omega ω后,取它与之前那个值的平均值。
与共用一个模型对比,好处是记录了这个模型有哪些有效特征,共用模型就无法区分了。

(5)近似计算学习率
只使用正样本P与负样本数据N来近似估计梯度的平方和,前提是假设特征有类似的分布。
∑ g i 2 = P N P + N \sum{g_i^2}=\frac{PN}{P+N} gi2=P+NPN

(6)减少负样本数量
减少负样本数量,然后在训练时弥补其损失。

你可能感兴趣的:(1.1,CTR,&,广告)