推荐系统的经典问题之一,利用(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算法将推荐策略分为两类:利用策略和探索策略,算法的过程如下:
- 以概率 ϵ ∈ ( 0 , 1 ) \epsilon \in (0,1) ϵ∈(0,1)选择探索策略,跳至过程2;以概率 1 − ϵ 1-\epsilon 1−ϵ选择利用策略,跳至过程3。
- 探索(Exploration)策略:随机选择n个物品中的一个进行推荐,也就是每个物品被选中的概率为 1 n \frac{1}{n} n1,并记录此次推荐的结果收益,比如 r = 1 r=1 r=1表示用户喜欢, r = 0 r=0 r=0表示用户不喜欢。
- 利用(Exploitation)策略:选择目前为止收益值期望最大的物品进行推荐。物品的收益值期望可以用物品的历史收益值来估计: E ( r ) = ∑ k = 1 K r k K E(r) = \frac{\sum_{k=1}^{K}r_k}{K} E(r)=K∑k=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=n∑i=1nri
那么如何确定置信区间呢?答案是:
[Chernoff-Hoeffding Bound] 对于n个独立同分布的随机变量 x i ∈ [ 0 , 1 ] , i = 1 , 2 , . . . , n x_i\in[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^{-2n\delta^2} P(∣E(x)−x∣≤δ)≤1−2e−2nδ2
回到UCB算法,则有下面不等式成立:
P ( ∣ E ( r ) − r ∣ ≤ δ ) ≥ 1 − 2 e − 2 n δ 2 P(|E(r) - r| \leq \delta)\geq 1-2e^{-2n\delta^2} P(∣E(r)−r∣≤δ)≥1−2e−2nδ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)−r∣≤n2lnT)≥1−T42
可以取 Δ = 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=n∑i=1nri+n2lnT
LinUCB
LinUCB算法的核心同样是对物品收益值的估计,同样是以收益置信区间上限值作为标准,选择收益上限值最大的物品进行推荐,不同的是在估计收益值的时候,考虑特征:
R = x T θ + Δ R = x^T\theta + \Delta R=xTθ+Δ
其中 x x x表示特征向量,包含物品特征、用户特征以及上下文特征, θ \theta θ为待学习的参数,参数的学习目标为最小化下面的损失函数:
L o s s ( θ ) = ∣ X θ − r ∣ 2 + ∣ I θ ∣ 2 Loss(\theta)=|X\theta - r|^2 + |I\theta|^2 Loss(θ)=∣Xθ−r∣2+∣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^T\theta-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^T\theta + (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)
贝叶斯推断
NeuralUCB
Thompson Sampling
Thompson Sampling for Contextual Bandits with Linear Payoffs
Sample Average Uncertainty (SAU)
Deep Bandits Show-Off: Simple and Efficient Exploration with Deep Networks
LinUCB variant
https://openreview.net/forum?id=jCxDyge46t2