在线学习算法(Online Learning)理论与实践

您所在的位置:网站首页 河南在线教育平台有哪些 在线学习算法(Online Learning)理论与实践

在线学习算法(Online Learning)理论与实践

2024-07-17 01:25| 来源: 网络整理| 查看: 265

背景

Online Learning是工业界比较常用的机器学习算法,在很多场景下都能有很好的效果。本文主要介绍Online Learning的基本原理和两种常用的Online Learning算法:FTRL(Follow The Regularized Leader)[1]和BPR(Bayesian Probit Regression)[2],以及Online Learning在美团移动端推荐重排序的应用。

什么是在线学习(Online Learning)

准确地说,Online Learning并不是一种模型,而是一种模型的训练方法,Online Learning能够根据线上反馈数据,实时快速地进行模型调整,使得模型及时反映线上的变化,提高线上预测的准确率。Online Learning的流程包括:将模型的预测结果展现给用户,然后收集用户的反馈数据,再用来训练模型,形成闭环的系统。如下图所示:

                                        

Online Learning有点像自动控制系统,但又不尽相同,二者的区别是:Online Learning的优化目标是整体的损失函数最小化,而自动控制系统要求最终结果与期望值的偏差最小。

传统的训练方法,模型上线后,更新的周期会比较长(一般是一天,效率高的时候为一小时),这种模型上线后,一般是静态的(一段时间内不会改变),不会与线上的状况有任何互动,假设预测错了,只能在下一次更新的时候完成更正。Online Learning训练方法不同,会根据线上预测的结果动态调整模型。如果模型预测错误,会及时做出修正。因此,Online Learning能够更加及时地反映线上变化。

Online Learning的优化目标

                                                                  

如上图所示,Online Learning训练过程也需要优化一个目标函数(红框标注的),但是和其他的训练方法不同,Online Learning要求快速求出目标函数的最优解,最好是能有解析解。

怎样实现Online Learning

前面说到Online Learning要求快速求出目标函数的最优解。要满足这个要求,一般的做法有两种:Bayesian Online Learning和Follow The Regularized Leader。下面就详细介绍这两种做法的思路。

Bayesian Online Learning

贝叶斯方法能够比较自然地导出Online Learning的训练方法:给定参数先验,根据反馈计算后验,将其作为下一次预测的先验,然后再根据反馈计算后验,如此进行下去,就是一个Online Learning的过程,如下图所示。

                                                               

举个例子, 我们做一个抛硬币实验,估算硬币正面的概率\mu。我们假设\mu的先验满足

                                                                  p\left(\mu \right) = \operatorname{Beta}(\alpha, \beta) 对于观测值Y=1,代表是正面,我们可以算的后验:

                                                                  p\left( \mu | Y=1 \right) = \operatorname{Beta}(\alpha+1, \beta) 对于观测值Y=0,代表是反面,我们可以算的后验:

                                                                p\left(\mu \right | Y=0) = \operatorname{Beta}(\alpha, \beta+1) 按照上面的Bayesian Online Learning流程,我们可以得到估算\mu的Online Learning算法:

初始化 \alpha, \beta for i = 0 ... n 

如果 Y_{i}是正面\alpha =\alpha+1 如果 YiYi是反面\beta =\beta+1

最终: \mu \sim \operatorname{Beta}(\alpha, \beta),可以取\mu的期望,

                                                                         \mu = \frac{\alpha}{\alpha+\beta} 假设抛了N次硬币,正面出现H次,反面出现T次,按照上面的算法,可以算得:

                                                                       \mu = \frac{ \alpha + H}{\alpha + \beta + N} 和最大化似然函数:

                                                \mathrm{log}\left[ p\left(\mu \mid \alpha,\beta \right) \cdot p \left( Y = 1 \mid \mu \right)^{H} \cdot p \left( Y = 0 \mid \mu \right)^{T} \right] 得到的解是一样的。

上面的例子是针对离散分布的,我们可以再看一个连续分布的例子。

有一种测量仪器,测量的方差\sigma^2是已知的, 测量结果为:Y_1 , Y_2 , Y_3 , ... , Y_n, 求真实值\mu的分布。 仪器的方差是\sigma^2, 所以观测值Y满足高斯分布:

                                                                   p\left(Y \mid \mu\right) = N\left( Y \mid \mu,\sigma^2 \right) 观测到 Y_1 , Y_2 , Y_3 , ... , Y_n 估计参数 \mu 。 假设参数 \mu 满足高斯分布:

                                                                  p\left( \mu \right) = N\left( \mu \mid m ,v ^2 \right) 观测到Y_{i}, 可以计算的后验:

                                                 p \left( \mu \mid Y_i \right) = N\left( \mu \mid \frac{Y_i v^{2}+m\sigma^{2}}{\sigma^{2}+v^{2}} , \frac{\sigma^{2}v^{2}}{\sigma^{2}+v^{2}} \right) 可以得到以下的Online Learning算法:

初始化 m,v_{2} for i = 0 ... n

观测值为Y_{i} 更新

m = \frac{Y_i v^{2} + m \sigma^{2}}{\sigma^{2} + v^{2}} v^{2} = \frac{\sigma^{2} v^{2}}{\sigma^{2} + v^{2} }

 

上面的两个结果都是后验跟先验是同一分布的(一般取共轭先验,就会有这样的效果),这个后验很自然的作为后面参数估计的先验。假设后验分布和先验不一样,我们该怎么办呢?

举个例子:假设上面的测量仪器只能观测到Y,是大于0,还是小于0,即Y_{i} \in \{-1,1\}Y_{i} = -1代表观测值小于0,Y_{i} = 1代表观测值大于0。 此时,我们仍然可以计算后验分布:

                                                               p(\mu |Y_{i} =1 ) = \frac{ I(\mu 0 )p(\mu)}{ \int_{0}^{+\infty} p(\mu)\mathrm{d}u}

                                                              p( \mu | Y_i =-1) = \frac{ I(\mu 0) p(\mu)}{ \int_{-\infty}^{0} p(\mu)\mathrm{d}u}

但是后验分布显然不是高斯分布(是截断高斯分布),这种情况下,我们可以用和上面分布KL距离最近的高斯分布代替。 观测到Y_{i}=1

                                                           KL( p(\mu \mid Y_i =1) || N(\mu \mid \tilde m ,\tilde v^{2})) 可以求得:

                                                                   \tilde m = m + v \cdot \upsilon\left(\frac{m}{v}\right)

                                                                   \tilde v^{2} = v^2\left(1 - \omega\left(\frac{m}{v}\right)\right)

观测到Y_{i} = -1

                                                         KL( p(\mu \mid Y_i =-1) || N(\mu \mid \tilde \mu ,\tilde v^{2})) 可以求得:

                                                                \tilde m = m - v \cdot \upsilon\left(-\frac{m}{v}\right)

                                                                \tilde v^{2} = v^2\left(1 - \omega\left(-\frac{m}{v}\right)\right)

两者综合起来,可以求得:

                                                             \tilde m = m + Y_{i} v \cdot \upsilon\left(Y_{i}\frac{m}{v}\right)

                                                             \tilde v^{2} = v^2\left(1 - \omega\left(Y_{i}\frac{m}{v}\right)\right) 其中:

                                                                      \upsilon(t) = \frac{\phi(t)}{\Phi(t)}

                                                                \phi(t) = \frac{1}{2\pi} \mathrm{exp} \left(-\frac{1}{2} t^2\right)

                                                                   \Phi(t)=\int_{-\infty}^{t} \phi(t)\mathrm{d}t

                                                                 \omega(t) = \upsilon(t)*(t-\upsilon(t))

有了后验我们可以得到Online Bayesian Learning流程:

初始化 m,v^{2} for i = 0 ... n

观测值为Y_{i} 更新

m = m + Y_{i} \cdot v \cdot \upsilon\left(Y_{i} \cdot \frac{m}{v}\right)

v^{2} = v^2\left(1 - \omega\left(Y_{i} \cdot \frac{m}{v}\right)\right)

Bayesian Online Learning最常见的应用就是BPR(Bayesian Probit Regression)。

BPR

在看Online BPR前,我们先了解以下Linear Gaussian System(具体可以参考[3]的4.4节)。x是满足多维高斯分布:

                                                                    p \left( x \right) = N \left(x \mid \mu_x, \Sigma_x \right)yx通过线性变换加入随机扰动\Sigma_y得到的变量:

                                                           p \left(y \mid x \right) = N \left(y \mid Ax+b ,\Sigma_y \right)

已知x,我们可以得到y的分布:

                                                      p \left( y \right) = N \left( y \mid A\mu_X +b, \Sigma_y + A \Sigma_x A^{T} \right)

上面这个结论的具体的推导过程可以参考[3]的4.4节,这里我们直接拿来用。

我们可以假设特征权重 w 满足独立高斯分布,即

                                                               p(w) = N\left( w \mid \mu ,\Sigma \right)

                                                              :

                                                               \mu = \left[ \mu_1,\mu_2,...,\mu_D\right]^{\mathrm{T}}

                                                             \Sigma = \left[ \begin{matrix} \sigma_1^{2} & 0 & \ldots & 0 \\\newline 0 & \sigma_2^{2} & \ldots & 0\\ \newline \vdots &\vdots & \ddots & \vdots \\\newline 0 & 0 & \ldots & \sigma_D^{2} \newline \end{matrix} \right]

Y是一维变量,是w与特征向量x的内积,加入方差为\beta _{2}的扰动:

                                                          p\left( y \mid w\right) = N(y \mid x^Tw, \beta^2) 根据上面的式子可以得出:

                                                      p\left( y \mid w\right) = N(y \mid x^T\mu, x^T\Sigma x +\beta^2)

由于我们只能观测到Y,是大于0,还是小于0,即Y_{i} \in \{-1,1\}Y_{i} = -1代表观测值小于0,Y_{i} =1代表观测值大于0。

对于观测值,我们可以先用KL距离近似y的分布,我们可以算出后验:

                                                            p\left(y\mid Y_i\right) = N\left(y\mid \tilde m, \tilde v^2 \right)

                                                  \tilde m = x^T\mu + Y_{i}\upsilon \left(Y_{i} \cdot \frac{x^T\mu}{\sqrt{x^T\Sigma x +\beta^2}}\right)

                                            \tilde v^2 = \left(x^T\Sigma x +\beta^2\right)\left(1-\omega\left(Y_{i} \cdot \frac{x^T\mu}{\sqrt{x^T\Sigma x +\beta^2}} \right)\right) 有了y的近似分布,我们可以计算出后验:

                                                             p\left(w \mid y \right) \propto p\left(y \mid w \right) p\left(w\right)

可以求得:

                                                           p\left( w_{d} \mid y \right) = N\left( w_{d} \mid \tilde \mu_{d},\tilde \sigma_{d} \right)

                                 \tilde \mu_{d} = \mu_{d} + Y_{i} x_{i,d}\cdot \frac {\sigma_{d}^{2} }{\sqrt{x^T\Sigma x +\beta^2}} \cdot \upsilon \left(Y_{i} \cdot \frac{x^T\mu}{\sqrt{x^T\Sigma x +\beta^2}}\right)

                                 \tilde \sigma_{d} = \sigma_{d} \cdot \left[ 1 - x_{i,d} \cdot \frac{\sigma_{d}^{2}}{x^T\Sigma x +\beta^2} \omega\left(Y_{i} \cdot \frac{x^T\mu}{\sqrt{x^T\Sigma x +\beta^2}} \right) \right]

Online Bayesian Probit Regression 训练流程如下:

初始化 \mu _{1},\sigma _{1}^{2},\mu_{2},\sigma _{2}^{2},\cdots ,\mu _{D},\sigma _{D}^{2} for i = 1 ... n

观测值为YiYi for d = 1 ... D 更新\mu_{d} = \mu_{d} + Y_{i} x_{i,d}\cdot \frac {\sigma_{d}^{2} }{\sqrt{x_{i}^T\Sigma x_{i} +\beta^2}} \cdot \upsilon \left(Y_{i} \cdot \frac{x_{i}^T\mu}{\sqrt{x_{i}^T\Sigma x_{i} +\beta^2}}\right)\sigma_{d} = \sigma_{d} \cdot \left[ 1 - x_{i,d} \cdot \frac{\sigma_{d}^{2}}{x_{i}^T\Sigma x_{i} +\beta^2} \omega\left(Y_{i} \cdot \frac{x_{i}^T\mu}{\sqrt{x_{i}^T\Sigma x +\beta^2}} \right) \right]

FTRL

除了Online Bayesian Learning,还有一种做法就是FTRL(Follow The Regularized Leader)。FTRL的网上资料很多,但是大部分介绍怎么样产生稀疏化解,而往往忽略了FTRL的基本原理。顾名思义,FTRL和稀疏化并没有关系,它只是一种做Online Learning的思想。

先说说FTL(Follow The Leader)算法,FTL思想就是每次找到让之前所有损失函数之和最小的参数。流程如下:

初始化 w for t = 1 ... n

损失函数 f_{t} 更新

w = argmin_{w} \sum_{i=1}^{t} f_i \left (w \right)

FTRL算法就是在FTL的优化目标的基础上,加入了正规化,防止过拟合:

                                                       w = argmin_{w} \sum_{i=1}^{t} f_i \left (w \right) + R(w)

其中,R(w)是正规化项。

FTRL算法的损失函数,一般也不是能够很快求解的,这种情况下,一般需要找一个代理的损失函数。

代理损失函数需要满足几个要求:

代理损失函数比较容易求解,最好是有解析解优化代理损失函数求的解,和优化原函数得到的解差距不能太大

为了衡量条件2中的两个解的差距,这里需要引入regret的概念。

假设每一步用的代理函数是h_t \left( w \right) 每次取

                                                                w_{t} = argmin_{w} h_{t-1} \left (w \right)

                                                         Regret_{t} =\sum_{t=1}^{T}f_{t}\left(w_{t}\right) - \sum_{t=1}^{T}f_{t}\left(w^{*}\right)

其中w^{*} = argmin_{w} \sum_{i=1}^{t}f_i\left(w\right),是原函数的最优解。就是我们每次代理函数求出解,离真正损失函数求出解的损失差距。当然这个损失必须满足一定的条件,Online Learning才可以有效,就是:

                                                                       \lim_{t \rightarrow \infty } \frac{Regret_t}{t} = 0

随着训练样本的增多,这两个优化目标优化出的参数的实际损失值差距越来越小。

代理函数 h_t(w)应该该怎么选呢? 如果f_t(w)是凸函数,我们可以用下面的代理损失函数:

                                                      h_{t} = \sum_{i=1}^{t} g_{i}\cdot w + \sum_{i=1}^{t} \left(\frac{1}{2 \eta_{t}} - \frac{1}{2 \eta_{t-1}} \right)||w - w_{t}||^{2}

其中g_{i}f_i( w_i)次梯度(如果f_i( w_i)是可导的,次梯度就是梯度)。\eta_{t}满足:

                                                                           \eta_{t} = \frac{\alpha}{\sqrt{\sum_{i=1}^{t} g_{t}^{2}}}

为了产生稀疏的效果,我们也可以加入L1正规化:

                                              h_{t} = \sum_{i=1}^{t} g_{i}\cdot w +\sum_{i=1}^{t} \left ( \frac{1}{2 \eta_{t}}-\frac{1}{2 \eta_{t-1}} \right )\left \| w - w_{t} \right \|^{2} +\lambda_{1}|w|

只要f_t(w)是凸函数,上面的代理函数一定满足:

                                                                         \lim_{t \rightarrow \infty } \frac{Regret_t}{t} = 0

上面的式子我们可以得出w的解析解:

                                                 w_{t+1,i} = \left\{ \begin{array}{ll} 0 & |z_{t,i}| \lambda_{1}\\ \newline -\eta_{t}(z_{t,i} - sgn(z_{t,i})\lambda_{1}) ) & otherwise \end{array} \right.

wt+1,i={0−ηt(zt,i−sgn(zt,i)λ1))|zt,i|



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3