关注我们,一起学习~
1. 导读
在网上找了一些相关的博客,感觉写的多多少少不是很全,所以简单总结了一下笔记。
LinUCB是UCB的升级版,上一篇文章Bandit算法学习与总结(一)介绍的贪心方法,汤普森采样和UCB都是context-free的方法,即都是埋头苦干类型的,其他特征跟咱都没关系。而LinUCB是contextual bandit方法,即利用现有的相关特征(包括用户的特征,商品的特征等)对UCB的均值和上界进行估计,提升了整体的性能。
LinUCB的基本假设:商品被推荐给用户后,其期望收益和特征(context)线性相关。LinUCB主要包含两类:Disjoint LinUCB,Hybrid LinUCB。
2. Disjoint LinUCB
先上伪代码,伪代码中主要涉及了A,b,x等符号,将在下面内容中进行解释。
disjoint LinUCB的每个臂的参数不共享,即每条臂预测自己的,互不干扰。基于LinUCB的基本假设,可以得到一个基本的公式如下,其中E为期望收益,x为第t次第a条臂对应的特征,θ为第a条臂的参数。
上面公式中的x为一次实验中对应的特征,那么如果实验m次,则可以得到一个特征矩阵
,并且m次实验中可以得到m次反馈,例如点击和未点击,可以表示为一个向量
。像常见的推荐方法或者机器学习模型一样,将反馈视为监督信息,有了参数和特征,就可以构建损失函数来更新对应的参数θ了,损失函数如下,
对于这样的loss,可以直接计算得到对应的参数θ。
令
,
这就得到了伪代码中对应的A和b。有了A和b,则可以得到θ,则可以根据θ和对应的特征计算出每一条臂对应的期望收益,有了期望收益,还需要一个上界,来反映其不确定性。上界公式为
,其中
,δ为超参数。最后,选择所有臂中分数
最大的臂进行推荐。
3. Hybrid LinUCB
混合LinUCB相对于上述LinUCB的区别在于,臂与臂之间是相关的,不是完全独立的。则其每条臂的期望收益公式为下式,其中z为用户/商品的组合特征,β为所有臂的参数,公式整体相当于加号右边考虑局部的单独的臂,加号右边考虑臂之间的关系。
伪代码如下,其中除了A和b之外多了矩阵B,根据岭回归进行计算得到θ的计算方式(12行),A和b还是原来的含义,B表示和β相关的系数。其上界计算方式为13,14行。
4. 参考
https://blog.csdn.net/Gamer_gyt/article/details/103604188
以下两篇博客中有对应的代码,感兴趣的小伙伴可以查阅
https://zhuanlan.zhihu.com/p/38875273
https://zhuanlan.zhihu.com/p/21404922