LinUCB算法
回到推荐列表的场景,推荐系统为用户推荐物品。user和item都可以用一系列特征表示。用户特征包括用户的统计历史行为、人口学属性信息;物品特征包括描述信息、类别信息等等。在这种场景下,探索和利用也必须是个体用户级别上实施,因为不同用户看到相同的物品的反馈差异较大。
LinUCB算法是一种基于上下文特征(用户特征、物品特征)的UCB算法,基于特征进行探索和利用。该算法结合上下文特征,选择给用户的推荐物品,同时利用用户反馈及时修正选择策略,以达到最大化收益(提升点击率)的目标。
使用互斥线性模型的LinUCB
LinUCB算法假设推荐item的每次展现收益(是否点击)是和上下文特征成线性关系的,即:
E[rt,a|xt,a]=xTt,aθ∗a
其中
xt,a
表示用户特征和物品特征的合集,
rt,a
表示第t次尝试的收益,a表示item,
θ∗a
表示物品a的位置系数向量。可以看出各个item的模型参数是相互独立的(互斥)。
设
Da
(d*m)表示为m个训练上下文,
ca
表示每个上下文的实际收益,对训练数据
(Da,ca)
使用岭回归训练出的物品a的参数为:
θ̂ a=(DTaDa+Id)−1∗DTa∗ca
其中
Id
表示d*d的单位矩阵。其中在置信度
1−δ
下,模型收益与期望收益满足:
∣∣xTt,aθ̂ a−E[rt,a|xt,a]∣∣≤αxTt,a(DTaDa+Id)−1xt,a‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾√
其中
δ>0
,
α=1+ln(2δ)/2‾‾‾‾‾‾‾‾√
。
上述等式给出了物品a期望收益的一个UCB,因此也就引申出了UCB的选择策略,对于第t次试验,选择以下式中最大值的物品,
at=argmaxa∈A(xTt,aθ̂ a+αxTt,a(Aa)−1xt,a‾‾‾‾‾‾‾‾‾‾‾‾√)
其中
Aa=DTaDa+Id
。上述模型中预期收益
xTt,aθ∗a
的方差为
xTt,a(Aa)−1xt,a
,即
xTt,a(Aa)−1xt,a‾‾‾‾‾‾‾‾‾‾‾‾√)
为标准差。
以上为互斥线性模型LinUCB的基本算法流程,其中结合上述内容,第一行
α
参数控制了explore的程度,即
α
越大,置信区间上限也就越大,也就加大了explore的程度;4-7行对于新物品,使用单位阵和01向量进行参数初始化;8-9行计算item a的置信区间上限;11行选择最优item;12-13行更新选择item的模型参数。
思想上LinUCB算法类似于对召回结果重排序的方法,也是考虑用户和item的特征,来计算出收益最大的item,不同的是LinUCB借鉴了UCB的置信区间的方法来平衡exploit和explore问题,同时从LinUCB算法是一个在线的学习算法,与一般离线算法需要离线训练不同,LinUCB随着每次展示和反馈会不断优化我们的模型参数和收益。
关于LinUCB算法的介绍请参考论文
CLUB算法
CLUB(online clustering bandits)算法假设将全部用户划分成若干个用户群,每个用户群对相同推荐内容的反馈是一致的,同时自适应的调整用户群。与liner bandit一样,CLUB算法也是根据特征计算收益,不同的是CLUB算法中相同群体用户共享相同的参数向量,即第i个用户对item a的收益为:
ai(x)=uTj(i)x+∈j(i)(x)
其中i表示第i个user,
j(i)
表示第i个user所属的用户群编号,
u
表示每个用户群的参数向量,x表示上文下特征,
∈
表示噪声项。
该算法在时刻t,对于用户i,维护一个向量
ui
的估计值
wi,t
。与liner bandit算法相似,
wi,t
根据收益反馈不断更新。与LinUCB算法类似的,
wi,t−1
可以根据协方差矩阵
Mi,t−1
(d*d维,初始化为单位阵)的逆和向量
bi,t−1
(d维向量,初始化为0向量)计算得出。
除此之外,算法需要维护一个无向图
Gt=(V,Et)
,每个节点表示一个user。算法首先从完全图开始,根据
wi,t
的演化逐步移除节点之间的边。定义第t时刻的用户群个数为
mt
,
v̂ 1,t,v̂ 2,t
,……
v̂ 1,mt
表示时刻t的用户划分群。显然初始状态下
m1
=1,
v̂ 1,1=V
(全部用户)。
在每个时刻t
(1,2,...)
,用户
it
,相关上下文特征向量集合为
(xt,1,xt,2,……xt,ct)
,用户
it
所属的群为
v̂ jt^,t
。CLUB算法根据收益选择item的式如下:
kt=argmink=1,2,…,ct (w⎯Tjt^,t−1∗xt,k+CBjt^,t−1∗xt,k)
其中
w⎯jt^,t−1
是通过同用户群内各个节点通过最小方差逼近拟合计算得出的聚合权重向量,CB为
w⎯jt^,t−1
向量的置信区间上限。
CLUB算法观察到item的收益
at
后,更新协方差矩阵
Mit,t−1→Mit,t
,更新
bit,t−1→bit,t
;虽然不会更新其他节点的M和b,但是会隐式的影响下一轮的聚合权重向量
w⎯jt^,t+1
;接下来判断节点
it
与相邻节点的参数向量(
wi,t−1
)距离,如果足够大,则将该边移除。
CLUB算法的完整流程如下:
其中
α
控制探索的程度,
α2
是用户关系是否删除的控制参数。上述算法流程包含了删除关系边的条件,其中
Ti,t−1
是t时刻前历史上i用户被选中的次数。
CLUB算法首先提出了基于协同概念的bandit算法,即每次用户预测对item收益是由这个所属的群体的聚合权重向量参数所决定的,同时根据个人反馈更新个人参数,个人参数又隐式的影响群体参数和用户群体的划分。据CLUB算法论文介绍,在一些公共数据集中,取得了比LinUCB更好的效果。
关于CLUB算法的更多细节请参考原论文
结束语
本文简单介绍了推荐系统中一直存在的两大问题:冷启动和EE问题,并简单阐述了业界解决这两大问题的一些常见解决方法和算法。正如前文所说,EE问题某种程度中一直以矛盾共同体存在,在实际场景中,需要平衡两者。
本文时间有限,难免有偏颇之处,欢迎大家共同探讨。