LinUCB算法理解

解决的问题

1、UCB的算法context-free:

没有充分利用推荐场景的上下文信息,为所有用户的选择展现商品的策略都是相同的,忽略了用户作为一个个活生生的个性本身的兴趣点、偏好、购买力等因素都是不同的,因而,同一个商品在不同的用户、不同的情景下接受程度是不同的

原理

1、每个arm维护一个特征向量:
θα \theta_{\alpha}

2、假设 : 每个arm的期望收益为arm特征向量的线性函数:
E[rt,axt,a]=xt,aTθa E[r_{t,a}|x_{t,a}] = x_{t,a}^{T}\theta_{a}

3、这里考虑单个arm上多次实验的总的损失函数:

  • m次实验,用户总特征矩阵称为:(D_a), 维度为m * n(用户特征维度)
  • m次实验,这个arm前m次的收益为:(c_a),维度为m*1

采用平方损失函数:
loss=(caDaθa)2+λθa2 loss = (c_a - D_a\theta_a)^2 + \lambda\theta_a^2

4、求损失函数的最小值,使损失函数对 (\theta_a) 求导,并且使导数为0,得到:
θa=(DaTDa+I)1DaTca \theta_a = (D_a^TD_a + I)^{-1}D_a^Tc_a

5、为了简洁+选取臂后方便更新数据,将两个乘积分别用A和b表示:
A=(DaTDa+I)1b=DaTca A = (D_a^TD_a + I)^{-1} \\ b = D_a^Tc_a

6、上面得到了单个arm使loss最小的参数更新规则,对于多个
arm而言,需要计算每个arm的最大上界,选择最大的arm(老实说,这块公式推导比较麻烦,后期再深入研究):
xt,aTθa+αxt,aTAa1xt,aαExploreExploitαarmExploit x_{t,a}^T\theta_a + \alpha\sqrt{x_{t,a}^TA_a^{-1}x_{t,a}} \\ 其中\alpha控制选择倾向于Explore还是Exploit\\ \alpha越小,arm的期望收益所占权重越大,选择越倾向于Exploit

实现流程

在这里插入图片描述

优点

  • 解决了UCB等MAB算法context-free的问题,考虑到用户的特征和物品的特征
  • 计算复杂度同arm的数量成线性关系
  • 支持动态变化的候选arm集合,有新的arm出来时,实时支持对新的arm进行初始化,并添加到分数选取中
  • 在线学习:在计算arm的参数和recommend的时候,用到了上下文的特征+用户反馈,每次信息
    都进行了保存更新到A和b中。A和b可以异步增量更新

引用

http://xudongyang.coding.me/linucb/

https://zhuanlan.zhihu.com/p/38875273

发布了16 篇原创文章 · 获赞 1 · 访问量 3282
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览