Bandit算法学习与总结(二):Disjoint LinUCB、Hybrid LinUCB
关注我们,一起学习~
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次反馈,例如点击和未点击,可以表示为一个向量
。像常见的推荐方法或者机器学习模型一样,将反馈视为监督信息,有了参数和特征,就可以构建损失函数来更新对应的参数θ了,损失函数如下,
Q:为什么用这样一个损失函数
A:
- 可以基于岭回归得到参数,其作用是当样本数少于特征数时,可以对回归参数进行修正;
- 从形式上看,可以反映出bandit算法中遗憾的概念,即希望减小每个臂的遗憾或者说误差
对于这样的loss,可以直接计算得到对应的参数θ。
Q:我们的目标是要最小化该loss,那么对于这样的二次式,如何才能得到最小化的loss呢?
A:基于岭回归进行参数估计,通过对θ求导,使导数为0得到下式,
令
,
这就得到了伪代码中对应的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
相关文章
- 数据结构与算法 队列_数据结构中的排序算法
- java全排列递归算法_java排列组合代码实现
- 学大数据要学哪些算法_学习大数据需要掌握哪些知识?[通俗易懂]
- EK (Edmond-Karp) 算法 学习笔记
- python生兔子问题(递归算法)_java实现斐波那契数列
- 三维点云拼接的方法_图像拼接算法研究
- 机器学习经典算法:决策树(2)
- 基于深度学习的基准目标检测及其衍生算法
- 【最全总结】离线强化学习(Offline RL)数据集、Benchmarks、经典算法、软件、竞赛、落地应用、核心算法解读汇总
- 回溯算法 39. 组合总和
- 机器学习算法: Logistic 回归 详解
- 机器学习算法(九): 基于线性判别模型的LDA手写数字分类识别
- 推荐系统遇上深度学习(十二)--推荐系统中的EE问题及基本Bandit算法
- 少样本学习综述:技术、算法和模型
- 19位算法工程师总结:机器学习项目成功落地的三条秘诀
- 算法学习(一)——插入排序
- 用Python实现各种排序算法详解编程语言
- Java学习笔记之十一Java中常用的8大排序算法详解总结编程语言
- 海量数据处理系列之:用C++实现Bitmap算法
- 浅析java希尔排序(Shell)算法