我是靠谱客的博主 光亮小土豆,最近开发中收集的这篇文章主要介绍推荐系统实践笔记(二):利用与探索问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

推荐系统的经典问题之一,利用(Exploitation) 与 探索(Exploration)问题

  • Exploitation:满足已知的用户需求
  • Exploration:探索未知的用户需求

Exploitation的必要性比较容易理解,通过满足用户已知的需求,产生用户价值,这也是推荐系统存在的意义。Exploration的价值怎么理解呢?首先,对于新用户而言,系统并不知道用户的需求,这时必须通过Exploration探索和发现用户的需求。其次,对于老用户而言,兴趣点也是在不断变化中的,这时也需要通过Exploration不断发现用户的新产生需求。

Exploration必然会导致短期用户价值一定程度的牺牲,目标是为了长期的用户价值;Exploitation满足了短期的用户需求,但仅仅满足短期的需求并非是最优的选择。如何做好利用与探索,以及二者之间的权衡,下面介绍的几个算法在这些方面各有自己的特点。

ϵ − g r e e d y epsilon-greedy ϵgreedy

ϵ − g r e e d y epsilon-greedy ϵgreedy算法将推荐策略分为两类:利用策略和探索策略,算法的过程如下:

  1. 以概率 ϵ ∈ ( 0 , 1 ) epsilon in (0,1) ϵ(0,1)选择探索策略,跳至过程2;以概率 1 − ϵ 1-epsilon 1ϵ选择利用策略,跳至过程3。
  2. 探索(Exploration)策略:随机选择n个物品中的一个进行推荐,也就是每个物品被选中的概率为 1 n frac{1}{n} n1,并记录此次推荐的结果收益,比如 r = 1 r=1 r=1表示用户喜欢, r = 0 r=0 r=0表示用户不喜欢。
  3. 利用(Exploitation)策略:选择目前为止收益值期望最大的物品进行推荐。物品的收益值期望可以用物品的历史收益值来估计: E ( r ) = ∑ k = 1 K r k K E(r) = frac{sum_{k=1}^{K}r_k}{K} E(r)=Kk=1Krk. 其中 K i K_i Ki表示物品i历史上被推荐的次数, r i k r_i^k rik表示物品i第k次推荐的收益值。

UCB(Upper Confidence Bound)

UCB算法的核心是对候选物品估计收益值 R R R。对

于一个随机变量的估计值,一般同时可以同时确定一个置信区间。UCB算法对物品收益的估计值以物品的收益上限为准,即选择收益上限值最大的物品进行推荐:

R = r + Δ R = r + Delta R=r+Δ

其中 r r r表示收益估计值, Δ Delta Δ 表示真实值与估计值之间的差异,这里我们取置信区间上限值。收益的估计值 r r r用历史收益值的均值来估计,当采样数n越大,估计值越接近真实值:

r = ∑ i = 1 n r i n r=frac{sum_{i=1}^nr_i}{n} r=ni=1nri

那么如何确定置信区间呢?答案是:

[Chernoff-Hoeffding Bound] 对于n个独立同分布的随机变量 x i ∈ [ 0 , 1 ] , i = 1 , 2 , . . . , n x_iin[0,1],i=1,2,...,n xi[0,1],i=1,2,...,n,设 x = ∑ i = 1 n x i x=sum_{i=1}^nx_i x=i=1nxi,则:

P ( ∣ E ( x ) − x ∣ ≤ δ ) ≤ 1 − 2 e − 2 n δ 2 P(|E(x)-x| leq delta)leq 1- 2e^{-2ndelta^2} P(E(x)xδ)12e2nδ2

回到UCB算法,则有下面不等式成立:

P ( ∣ E ( r ) − r ∣ ≤ δ ) ≥ 1 − 2 e − 2 n δ 2 P(|E(r) - r| leq delta)geq 1-2e^{-2ndelta^2} P(E(r)rδ)12e2nδ2

δ = 2 l n T n delta = sqrt{frac{2lnT}{n}} δ=n2lnT ,则:

P ( ∣ E ( r ) − r ∣ ≤ 2 l n T n ) ≥ 1 − 2 T 4 P(|E(r)-r|leq sqrt{frac{2lnT}{n}})geq1-frac{2}{T^4} P(E(r)rn2lnT )1T42

可以取 Δ = 2 l n T / n Delta=sqrt{2lnT/n} Δ=2lnT/n 。最后,UCB是收益估计值计算方式为:

R = ∑ i = 1 n r i n + 2 l n T n R=frac{sum_{i=1}^nr_i}{n} + sqrt{frac{2lnT}{n}} R=ni=1nri+n2lnT

LinUCB

LinUCB算法的核心同样是对物品收益值的估计,同样是以收益置信区间上限值作为标准,选择收益上限值最大的物品进行推荐,不同的是在估计收益值的时候,考虑特征:

R = x T θ + Δ R = x^Ttheta + Delta R=xTθ+Δ

其中 x x x表示特征向量,包含物品特征、用户特征以及上下文特征, θ theta θ为待学习的参数,参数的学习目标为最小化下面的损失函数:

L o s s ( θ ) = ∣ X θ − r ∣ 2 + ∣ I θ ∣ 2 Loss(theta)=|Xtheta - r|^2 + |Itheta|^2 Loss(θ)=Xθr2+Iθ2

可以看出LinUCB采用线性模型估计物品的收益值。

下面 Δ Delta Δ的估计,原文中对上界的推到过程比较麻烦,这里不展开介绍了,直接使用结果:

P ( ∣ x T θ − p ∣ ≤ ( 1 + l n ( 2 / δ ) / 2 ) x T ( X T X + I T I ) − 1 x ) ≤ 1 − δ P(|x^Ttheta-p|leq (1 + sqrt{ln(2/delta)/2})sqrt{x^T(X^TX+I^TI)^{-1}x}) leq 1- delta P(xTθp(1+ln(2/δ)/2 )xT(XTX+ITI)1x )1δ

我们采用 Δ = 1 + l n ( 2 / δ ) / 2 ) x T ( X T X + I T I ) − 1 x Delta=1 + sqrt{ln(2/delta)/2})sqrt{x^T(X^TX+I^TI)^{-1}x} Δ=1+ln(2/δ)/2 )xT(XTX+ITI)1x ,其中 δ delta δ为超参。

最终LinUCB的收益值计算法方式为:

R = x T θ + ( 1 + l n ( 2 / δ ) / 2 ) x T ( X T X + I T I ) − 1 x ) R = x^Ttheta + (1 + sqrt{ln(2/delta)/2})sqrt{x^T(X^TX+I^TI)^{-1}x}) R=xTθ+(1+ln(2/δ)/2 )xT(XTX+ITI)1x )

最后

以上就是光亮小土豆为你收集整理的推荐系统实践笔记(二):利用与探索问题的全部内容,希望文章能够帮你解决推荐系统实践笔记(二):利用与探索问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(33)

评论列表共有 0 条评论

立即
投稿
返回
顶部