Online Learning算法理论与实践

背景

  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的过程,如下图所示。
在这里插入图片描述

  举个例子, 我们做一个抛硬币实验,估算硬币正面的概率。我们假设的先验满足
在这里插入图片描述

  对于观测值 Y = 1 Y=1 Y1,代表是正面,我们可以算的后验:
在这里插入图片描述

  对于观测值 Y = 0 Y=0 Y0,代表是反面,我们可以算的后验:
在这里插入图片描述

  按照上面的Bayesian Online Learning流程,我们可以得到估算的Online Learning算法:

初始化 α 、 β \alpha 、\beta αβ

for i = 0... n i = 0 ... n i=0...n
如果 Y i Y_{i} Yi是正面
α = α + 1 \alpha =\alpha+1 α=α+1
如果 Y i Y_{i} Yi是反面
β = β + 1 \beta =\beta+1 β=β+1

最终: μ ∼ Beta ⁡ ( α , β ) \mu \sim \operatorname{Beta}(\alpha, \beta) μBeta(α,β),可以取 μ \mu μ的期望,
在这里插入图片描述
  假设抛了N次硬币,正面出现H次,反面出现T次,按照上面的算法,可以算得:
在这里插入图片描述
和最大化似然函数:
在这里插入图片描述
得到的解是一样的。

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

  有一种测量仪器,测量的方差 σ 2 \sigma^2 σ2是已知的, 测量结果为: Y 1 , Y 2 , Y 3 , … , Y n Y_1 , Y_2 , Y_3 , … , Y_n Y1,Y2,Y3,,Yn,求真实值 μ \mu μ的分布。 仪器的方差是 σ 2 \sigma^2 σ2, 所以观测值Y满足高斯分布:
在这里插入图片描述

  观测到 Y 1 , Y 2 , Y 3 , … , Y n Y_1 , Y_2 , Y_3 , … , Y_n Y1,Y2,Y3,,Yn , 估计参数 μ \mu μ 。 假设参数 μ \mu μ 满足高斯分布:
在这里插入图片描述
  观测到 Y i Y_i Yi,可以计算的后验:
p ( μ ∣ Y i ) = N ( μ ∣ Y i v 2 + m σ 2 σ 2 + v 2 , σ 2 v 2 σ 2 + v 2 ) p \left( \mu \mid Y_i \right) = N\left( \mu \mid \frac{Yi v^{2}+m\sigma^{2}}{\sigma^{2}+v^{2}} , \frac{\sigma^{2}v^{2}}{\sigma^{2}+v^{2}} \right) p(μYi)=N(μσ2+v2Yiv2+mσ2,σ2+v2σ2v2)
可以得到以下的Online Learning算法:

初始化 m , v 2 m, v ^{2} m,v2

for i = 0 … n

观测值为 Y i Y{i} Yi
更新
在这里插入图片描述
在这里插入图片描述

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

  举个例子:假设上面的测量仪器只能观测到 Y Y Y是大于0,还是小于0,即 Y i ∈ { − 1 , 1 } Y_{i} \in \{-1,1\} Yi{11} Y i = − 1 Y_{i} = -1 Yi=1代表观测值小于0, Y i = 1 Y_{i} = 1 Yi=1代表观测值大于0。 此时,我们仍然可以计算后验分布:
=
=
  但是后验分布显然不是高斯分布(是截断高斯分布),这种情况下,我们可以用和上面分布KL距离最近的高斯分布代替。
  观测到 Y i = 1 Y_{i} = 1 Yi=1
在这里插入图片描述
可以求得:
在这里插入图片描述
在这里插入图片描述
  观测到 Y i = − 1 Y_{i} = -1 Yi=1
在这里插入图片描述
  可以求得:
在这里插入图片描述
在这里插入图片描述

  两者综合起来,可以求得:
在这里插入图片描述
在这里插入图片描述
  其中:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  有了后验,我们就可以得到Online Bayesian Learning流程:

初始化 m , v 2 m,v_{2} m,v2

for i = 0 … n i = 0 … n i=0n

观测值为 Y i Y_{i} Yi
更新
在这里插入图片描述
在这里插入图片描述

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

BPR

  在看Online BPR前,我们先了解以下Linear Gaussian System(具体可以参考[3]的4.4节)。 x x x满足多维高斯分布:
在这里插入图片描述
   y y y x x x通过线性变换加入随机扰动 Σ y \Sigma_y Σy得到的变量:
在这里插入图片描述
  已知 x x x,我们可以得到 y y y的分布:
在这里插入图片描述
  上面这个结论的具体的推导过程可以参考[3]的4.4节,这里我们直接拿来用。

  我们可以假设特征权重 w w w 满足独立高斯分布,即
p ( w ) = N ( w ∣ μ , Σ ) p(w) = N\left( w \mid \mu ,\Sigma \right) p(w)=N(wμ,Σ)
μ = [ μ 1 , μ 2 , . . . , μ D ] T \mu = \left[ \mu_1,\mu_2,...,\mu_D\right]^{\mathrm{T}} μ=[μ1,μ2,...,μD]T
Σ = [ σ 1 2 0 … 0 0 σ 2 2 … 0 ⋮ ⋮ ⋱ ⋮ 0 0 … σ D 2 ] \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] Σ=σ12000σ22000σD2
   Y Y Y是一维变量,是 x x x与特征向量 w w w的内积,加入方差为 β 2 \beta _{2} β2的扰动:
p ( y ∣ w ) = N ( y ∣ x T w , β 2 ) p\left( y \mid w\right) = N(y \mid x^Tw, \beta^2) p(yw)=N(yxTw,β2)
根据上面的式子可以得出:
p ( y ∣ w ) = N ( y ∣ x T μ , x T Σ x + β 2 ) p\left( y \mid w\right) = N(y \mid x^T\mu, x^T\Sigma x +\beta^2) p(yw)=N(yxTμ,xTΣx+β2)
  由于我们只能观测到 Y Y Y是大于0还是小于0,即 Y i ∈ { − 1 , 1 } Y_{i} \in \{-1,1\} Yi{1,1}, Y i = − 1 Y_{i} = -1 Yi=1代表观测值小于0, Y i = 1 Y_{i} = 1 Yi=1代表观测值大于0。
  对于观测值,我们可以先用KL距离近似 y y y的分布,我们可以算出后验:
p ( y ∣ Y i ) = N ( y ∣ m ~ , v ~ 2 ) p\left(y\mid Y_i\right) = N\left(y\mid \tilde m, \tilde v^2 \right) p(yYi)=N(ym~,v~2)
m ~ = x T μ + Y i υ ( Y i ⋅ x T μ x T Σ x + β 2 ) \tilde m = x^T\mu + Y_{i}\upsilon \left(Y_{i} \cdot \frac{x^T\mu}{\sqrt{x^T\Sigma x +\beta^2}}\right) m~=xTμ+Yiυ(YixTΣx+β2 xTμ)
v ~ 2 = ( x T Σ x + β 2 ) ( 1 − ω ( Y i ⋅ x T μ x T Σ x + β 2 ) ) \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) v~2=(xTΣx+β2)(1ω(YixTΣx+β2 xTμ))
有了 y y y的近似分布,我们可以计算出后验:
p ( w ∣ y ) ∝ p ( y ∣ w ) p ( w ) p\left(w \mid y \right) \propto p\left(y \mid w \right) p\left(w\right) p(wy)p(yw)p(w)
可以求得:
p ( w d ∣ y ) = N ( w d ∣ μ ~ d , σ ~ d ) p\left( w_{d} \mid y \right) = N\left( w_{d} \mid \tilde \mu_{d},\tilde \sigma_{d} \right) p(wdy)=N(wdμ~d,σ~d)
μ ~ d = μ d + Y i x i , d ⋅ σ d 2 x T Σ x + β 2 ⋅ υ ( Y i ⋅ x T μ x T Σ x + β 2 ) \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) μ~d=μd+Yixi,dxTΣx+β2 σd2υ(YixTΣx+β2 xTμ)
σ ~ d = σ d ⋅ [ 1 − x i , d ⋅ σ d 2 x T Σ x + β 2 ω ( Y i ⋅ x T μ x T Σ x + β 2 ) ] \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] σ~d=σd[1xi,dxTΣx+β2σd2ω(YixTΣx+β2 xTμ)]
  Online Bayesian Probit Regression 训练流程如下:

初始化 μ 1 , σ 1 2 , μ 2 , σ 2 2 , ⋯   , μ D , σ D 2 \mu _{1},\sigma _{1}^{2},\mu_{2},\sigma _{2}^{2},\cdots ,\mu _{D},\sigma _{D}^{2} μ1,σ12,μ2,σ22,,μD,σD2

for i = 1 … n i = 1 … n i=1n

观测值为 Y i Y{i} Yi
for d = 1 … D d = 1 … D d=1D
更新
μ d = μ d + Y i x i , d ⋅ σ d 2 x i T Σ x i + β 2 ⋅ υ ( Y i ⋅ x i T μ x i T Σ x i + β 2 ) \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) μd=μd+Yixi,dxiTΣxi+β2 σd2υ(YixiTΣxi+β2 xiTμ)
σ d = σ d ⋅ [ 1 − x i , d ⋅ σ d 2 x i T Σ x i + β 2 ω ( Y i ⋅ x i T μ x i T Σ x + β 2 ) ] \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] σd=σd[1xi,dxiTΣxi+β2σd2ω(YixiTΣx+β2 xiTμ)]

FTRL

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

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

初始化 w w w

for t = 1 … n t = 1 … n t=1n
损失函数 f t f_{t} ft
更新
w = a r g m i n w ∑ i = 1 t f i ( w ) w = argmin_{w} \sum_{i=1}^{t} f_i \left (w \right) w=argminwi=1tfi(w)

  FTRL算法就是在FTL的优化目标的基础上,加入了正规化,防止过拟合:
w = a r g m i n w ∑ i = 1 t f i ( w ) + R ( w ) w = argmin_{w} \sum_{i=1}^{t} f_i \left (w \right) + R(w) w=argminwi=1tfi(w)+R(w)
其中, R ( w ) R(w) R(w)是正规化项。
  FTRL算法的损失函数,一般也不是能够很快求解的,这种情况下,一般需要找一个代理的损失函数。
  代理损失函数需要满足几个要求:

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

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

  假设每一步用的代理函数是 h t ( w ) h_t \left( w \right) ht(w),每次取
w t = a r g m i n w h t − 1 ( w ) w_{t} = argmin_{w} h_{t-1} \left (w \right) wt=argminwht1(w)
R e g r e t t = ∑ t = 1 T f t ( w t ) − ∑ t = 1 T f t ( w ∗ ) Regret_{t} =\sum_{t=1}^{T}f_{t}\left(w_{t}\right) - \sum_{t=1}^{T}f_{t}\left(w^{*}\right) Regrett=t=1Tft(wt)t=1Tft(w)

  其中 w ∗ = a r g m i n w ∑ i = 1 t f i ( w ) w^{*} = argmin_{w} \sum_{i=1}^{t}f_i\left(w\right) w=argminwi=1tfi(w),是原函数的最优解。就是我们每次代理函数求出解,离真正损失函数求出解的损失差距。当然这个损失必须满足一定的条件,Online Learning才可以有效,就是:
lim ⁡ t → ∞ R e g r e t t t = 0 \lim_{t \rightarrow \infty } \frac{Regret_t}{t} = 0 tlimtRegrett=0
  随着训练样本的增多,这两个优化目标优化出的参数的实际损失值差距越来越小。
  代理函数 h t ( w ) h_t(w) ht(w) 应该该怎么选呢? 如果 f t ( w ) f_t(w) ft(w)是凸函数,我们可以用下面的代理损失函数:
h t = ∑ i = 1 t g i ⋅ w + ∑ i = 1 t ( 1 2 η t − 1 2 η t − 1 ) ∣ ∣ w − w t ∣ ∣ 2 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} ht=i=1tgiw+i=1t(2ηt12ηt11)wwt2

  其中 g i g_{i} gi f i ( w i ) f_i( w_i) fi(wi)次梯度(如果 f i ( w i ) f_i( w_i) fi(wi)是可导的,次梯度就是梯度)。 η t \eta_{t} ηt满足:
η t = α ∑ i = 1 t g t 2 \eta_{t} = \frac{\alpha}{\sqrt{\sum_{i=1}^{t} g_{t}^{2}}} ηt=i=1tgt2 α

  为了产生稀疏的效果,我们也可以加入L1正规化:
h t = ∑ i = 1 t g i ⋅ w + ∑ i = 1 t ( 1 2 η t − 1 2 η t − 1 ) ∥ w − w t ∥ 2 + λ 1 ∣ 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 )\left \| w - w_{t} \right \|^{2} +\lambda_{1}|w| ht=i=1tgiw+i=1t(2ηt12ηt11)wwt2+λ1w

  只要 f t ( w ) f_t(w) ft(w)是凸函数,上面的代理函数一定满足:
lim ⁡ t → ∞ R e g r e t t t = 0 \lim_{t \rightarrow \infty } \frac{Regret_t}{t} = 0 tlimtRegrett=0

  上面的式子我们可以得出 w w w的解析解:
w t + 1 , i = { 0 ∣ z t , i ∣ < λ 1 − η t ( z t , i − s g n ( z t , i ) λ 1 ) ) o t h e r w i s e 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,isgn(zt,i)λ1))zt,i<λ1otherwise

其中
z t , i = ∑ s = 1 t g s , i + ∑ s = 1 t ( 1 η t , i − 1 η t − 1 , i ) w t , i z_{t,i} = \sum_{s=1}^{t}g_{s,i} + \sum_{s=1}^{t}\left( \frac{1}{ \eta_{t,i}} - \frac{1}{ \eta_{t-1,i}} \right) w_{t,i} zt,i=s=1tgs,i+s=1t(ηt,i1ηt1,i1)wt,i

  可以得到FTRL的更新流程如下:

输入 α , λ 1 \alpha ,\lambda _{1} α,λ1
初始化 w 1... N , z 1... N = 0 , n 1... N = 0 w_{1...N},z_{1...N}=0,n_{1...N}=0 w1...N,z1...N=0,n1...N=0
for t = 1... T t = 1 ... T t=1...T

损失函数 f t f_t ft
for i = 1.. N i = 1 ..N i=1..N
计算
g t , i = ∂ f i ( w t − 1 ) w t − 1 , i g_{t,i} = \frac{\partial f_{i}\left(w_{t-1}\right)}{w_{t-1,i}} gt,i=wt1,ifi(wt1)
z t + = g t , i + 1 α ( n i + g t , i 2 − n i ) w t , i z_{t} += g_{t,i} + \frac{1}{\alpha} \left( \sqrt{n_{i} + g_{t,i}^{2}} -\sqrt{ n_{i} } \right) w_{t,i} zt+=gt,i+α1(ni+gt,i2 ni )wt,i
n i + = g t , i 2 n_{i} += g_{t,i}^{2} ni+=gt,i2
更新
w t + 1 , i = { 0 ∣ z t , i ∣ < λ 1 − η t ( z t , i − s g n ( z t , i ) λ 1 ) ) o t h e r w i s e 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,isgn(zt,i)λ1))zt,i<λ1otherwise

Online Learning实践

  前面讲了Online Learning的基本原理,这里以移动端推荐重排序为例,介绍一下Online Learning在实际中的应用。

推荐重排序介绍

  目前的推荐系统,主要采用了两层架构,首先是触发层,会根据上下文条件和用户的历史行为,触发用户可能感兴趣的item,然后由排序模型对触发的item排序,如下图所示:
在这里插入图片描述
  推荐重排序既能融合不同触发策略,又能较大幅度提高推荐效果(我们这里主要是下单率)。在移动端,屏幕更加小,用户每次看到的item数目更加少,排序的作用更加突出。

美团重排序Online Learning架构

  美团Online Learning架构如下图所示:
在这里插入图片描述
  线上的展示日志,点击日志和下单日志会写入不同的Kafka流。读取Kafka流,以HBase为中间缓存,完成label match(下单和点击对映到相应的展示日志),在做label match的过成中,会对把同一个session的日志放在一起,方便后面做skip above:

训练数据生成

  移动端推荐的数据跟PC端不同,移动端一次会加载很多item,但是无法保证这些item会被用户看到。为了保证数据的准确性,我们采用了skip above的办法,如下图所示:
在这里插入图片描述
  假设用户点击了第i个位置,我们保留从第1条到第i+2条数据作为训练数据,其他的丢弃。这样能够最大程度的保证训练样本中的数据是被用户看到的。

特征

  用的特征如下图所示:
在这里插入图片描述

算法选择

  我们尝试了FTRL和BPR效果,线下实验效果如下表:

算法AUC模型参数个数
FTRL0.8432200W
BPR0.84411500W

  BPR的效果略好,但是我们线上选用了FTRL模型,主要原因是FTRL能够产生稀疏化的效果,训练出的模型会比较小。

模型训练

  训练算法不断地从HBase中读取数据,完成模型地训练,训练模型放在Medis(美团内部地Redis)中,线上会用Medis中的模型预测下单率,根据预测的下单率,完成排序。

线上效果

  上线后,最终的效果如下图所示,和base算法相比,下单率提高了5%。
在这里插入图片描述

参考资料

  • [1] McMahan H B, Holt G, Sculley D, et al. Ad Click Prediction: a View from the Trenches. Proceedings of the 19th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (KDD). 2013.
  • [2] Graepel T, Candela J Q, Borchert T,et al. Web-Scale Bayesian Click-Through Rate Prediction for Sponsored Search Advertising in Microsoft’s Bing Search Engine. Proceedings of the 27th International Conference on Machine Learning ICML. 2010.
  • [3] Murphy K P. Machine Learning: A Probabilistic Perspective. The MIT Press. 2012.
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
指数加权平均是一种在线学习中常用的技术,它可以将历史数据的影响进行加权,从而更好地适应数据的分布变化。在在线学习中,我们可以使用指数加权平均来计算模型参数的更新值,从而达到更好的性能。 具体来说,指数加权平均是一种将历史数据进行加权的技术,其中每个数据的权重呈指数级下降。在在线学习中,我们可以使用指数加权平均来计算模型参数的更新值,其中每个历史样本的权重呈指数级下降,越新的样本权重越大,越旧的样本权重越小。这样可以更好地适应数据的分布变化,提高模型的泛化性能。 具体来说,对于一个长度为 `t` 的历史样本序列,我们可以使用指数加权平均来计算模型参数的更新值: ``` theta_t = (1 - alpha) * theta_{t-1} + alpha * x_t ``` 其中,`theta_{t-1}` 是上一时刻的模型参数,`x_t` 是当前时刻的样本数据,`alpha` 是一个称为学习率(learning rate)的超参数,控制了历史样本的权重下降速度。一般来说,学习率越小,历史数据的影响就越大,模型参数的更新速度就越慢。 需要注意的是,指数加权平均只适用于序列数据,对于非序列数据,需要使用其他的加权平均方法。 下面是一个使用指数加权平均来计算在线学习的示例代码: ```python import numpy as np # 定义模型参数 theta = np.zeros(10) # 定义学习率 alpha = 0.1 # 定义损失函数 def loss_func(x, y, theta): return np.sum((np.dot(x, theta) - y) ** 2) # 定义在线学习算法 def online_learning(x, y, theta, alpha): # 预测当前样本的结果 y_hat = np.dot(x, theta) # 计算当前样本的损失值 loss = loss_func(x, y, theta) # 计算当前样本的“regret” regret = loss - np.min(loss_func(x, y, np.zeros(10))) # 使用指数加权平均来更新模型参数 theta = (1 - alpha) * theta + alpha * x * (y - y_hat) return theta # 生成样本数据 X = np.random.rand(1000, 10) y = np.random.rand(1000) # 在线学习过程 for i in range(1000): theta = online_learning(X[i], y[i], theta, alpha) # 输出最终的模型参数 print(theta) ``` 在这段代码中,我们使用了指数加权平均来更新模型参数 `theta`,其中学习率(`alpha`)控制了历史样本的权重下降速度。在每一步中,使用当前的样本数据来更新模型参数,然后计算当前的“regret”,最后再根据“regret”来调整模型参数。在整个学习过程中,模型会不断地根据新的数据进行更新,以适应数据的分布变化,从而达到更好的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值