0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

浅析LinUCB算法的流程和优点

lviY_AI_shequ 来源:未知 作者:工程师飞燕 2018-10-21 09:59 次阅读

。今天的文章就来介绍一种结合上下文信息的Bandit方法,LinUCB,它是Contextual bandits算法框架的一种。

本文的原文是雅虎的新闻推荐算法,里面公式是真的挺多的,而且涉及到了两种linUCB算法,本文只介绍第一种方法。感兴趣的同学可以阅读原文。

LinUCB浅析

这里只简单介绍一下LinUCB算法的流程,真的是浅析,浅析!

在推荐系统中,通常把待推荐的商品作为MAB问题的arm。UCB是context-free类的算法,没有充分利用推荐场景的上下文信息,为所有用户的选择展现商品的策略都是相同的,忽略了用户作为一个个活生生的个性本身的兴趣点、偏好、购买力等因素,因而,同一个商品在不同的用户、不同的情景下接受程度是不同的。故在实际的推荐系统中,context-free的MAB算法基本都不会被采用。

与context-free MAB算法对应的是Contextual Bandit算法,顾名思义,这类算法在实现E&E时考虑了上下文信息,因而更加适合实际的个性化推荐场景。

在LinUCB中,每一个arm维护一组参数,用户和每一个arm的组合可以形成一个上下文特征(上下文特征的特征维度为d),那么对于一个用户来说,在每个arm上所能够获得的期望收益如下:

对于一个老虎机来说,假设手机到了m次反馈,特征向量可以写作Da(维度为md),假设我们收到的反馈为Ca(维度为m1),那么通过求解下面的loss,我们可以得到当前每个老虎机的参数的最优解:

这其实就是岭回归嘛,我们很容易得到最优解为:

既然是UCB方法的扩展,我们除了得到期望值外,我们还需要一个置信上界,但是,我们没法继续用Chernoff-Hoeffding Bound的定理来量化这个上界,幸运的是,这个上界已经被人找到了:

因此,我们推荐的item就能够确定了:

可以看到,我们在计算参数及最后推荐结果的时候,用到了以下几部分的信息:上下文特征x,用户的反馈c。而这些信息都是可以每次都存储下来的,因此在收集到了一定的信息之后,参数都可以动态更新,因此我们说LinUCB是一种在线学习方法。

什么是在线学习?个人简单的理解就是模型的训练和更新是在线进行的,能够实时的根据在线上的反馈更新模型的参数。

好了,我们来看一下linUCB算法的流程吧:

上面的ba可以理解为特征向量x和反馈r的乘积。

是否觉得一头雾水,不用着急,我们通过代码来一步步解析上面的流程。

2、linUCB代码实战

本文的代码地址为:

https://github.com/princewen/tensorflow_practice/blob/master/recommendation/Basic-Bandit-Demo/Basic-LinUCB.py

设定超参数和矩阵

首先我们设定一些超参数,比如α,正反馈和负反馈的奖励程度r1,r0,上下文特征的长度d


	

self.alpha = 0.25self.r1 = 0.6self.r0 = -16self.d = 6# dimension of user features

接下来,我们设定我们的几个矩阵,比如A和A的逆矩阵,b(x和r的乘积),以及参数矩阵:


	

self.Aa = {} # Aa : collection of matrix to compute disjoint part for each article a, d*dself.AaI = {} # AaI : store the inverse of all Aa matrixself.ba = {} # ba : collection of vectors to compute disjoin part, d*1self.theta = {}

初始化矩阵

初始化矩阵对应上面的4-7步,A设置为单位矩阵,b设置为0矩阵,参数也设置为0矩阵,注意的是,每个arm都有这么一套矩阵:


	

def set_articles(self,art): for key in art: self.Aa[key] = np.identity(self.d) # 创建单位矩阵 self.ba[key] = np.zeros((self.d,1)) self.AaI[key] = np.identity(self.d) self.theta[key] = np.zeros((self.d,1))

计算推荐结果

计算推荐结果对应于上面的8-11步,我们直接根据公式计算当前的最优参数和置信上界,并选择最大的arm作为推荐结果。代码中有个小trick,及对所有的arm来说,共同使用一个特征,而不是每一个arm单独使用不同的特征


	

def recommend(self,timestamp,user_features,articles): xaT = np.array([user_features]) # d * 1 xa = np.transpose(xaT) AaI_tmp = np.array([self.AaI[article] for article in articles]) theta_tmp = np.array([self.theta[article] for article in articles]) art_max = articles[np.argmax(np.dot(xaT,theta_tmp) + self.alpha * np.sqrt(np.dot(np.dot(xaT,AaI_tmp),xa)))] self.x = xa self.xT = xaT self.a_max = art_max return self.a_max

更新矩阵信息

这对应于上面的12-13步,根据选择的最优arm,以及得到的用户反馈,我们更新A和b矩阵:


	

def update(self,reward): if reward == -1: pass elif reward == 1or reward == 0: if reward == 1: r = self.r1 else: r = self.r0 self.Aa[self.a_max] += np.dot(self.x,self.xT) self.ba[self.a_max] += r * self.x self.AaI[self.a_max] = np.linalg.inv(self.Aa[self.a_max]) self.theta[self.a_max] = np.dot(self.AaI[self.a_max],self.ba[self.a_max]) else: # error

写到这里,本来应该就要结束了,可是脑子里又想到一个问题,为什么可以直接通过加法来更新A矩阵?其实是个很简单的问题,试着写出A矩阵中每个元素的计算公式来,问题就迎刃而解了!

结语

总结一下LinUCB算法,有以下优点(来自参考文献3,自己又增加了一条):1)由于加入了特征,所以收敛比UCB更快(论文有证明);2)特征构建是效果的关键,也是工程上最麻烦和值的发挥的地方;3)由于参与计算的是特征,所以可以处理动态的推荐候选池,编辑可以增删文章;4)特征降维很有必要,关系到计算效率。5)是一种在线学习算法。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 算法
    +关注

    关注

    23

    文章

    4599

    浏览量

    92642
  • LinUCB
    +关注

    关注

    0

    文章

    1

    浏览量

    1601

原文标题:推荐系统遇上深度学习(十三)--linUCB方法浅析及实现

文章出处:【微信号:AI_shequ,微信公众号:人工智能爱好者社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    浅析智能天线

    浅析智能天线智能天线的基本概念智能天线综合了自适应天线和阵列天线的优点,以自适应信号处理算法为基础,并引入了人工智能的处理方法。智能天线不再是一个简单的单元,它已成为一个具有智能的系统。其具体定义为
    发表于 06-15 09:06

    指纹识别算法流程介绍

    本帖最后由 mr.pengyongche 于 2013-4-30 03:26 编辑 指纹识别算法流程介绍指纹识别算法在特征量的选择方法和任意角度旋转时不变的特征量照算法上具有鲜明
    发表于 11-09 17:31

    RJMU401国密算法应用流程

    的过程中被篡改;3、 使用非对称算法SM2的私钥签名来保证数据的不可抵赖性,确保数据是从某一个确定的车载用户端发出;4、 具体流程如下:a、 用户数据使用SM3进行散列运算得到数据摘要,再使用非对称
    发表于 01-02 14:55

    HMAC的算法及计算流程

    HMAC算法及计算流程介绍
    发表于 12-22 07:42

    物理综合与优化的优点有哪些?流程是怎样的?

    物理综合与优化的优点有哪些物理综合与优化流程看了就知道物理综合与优化示例
    发表于 04-08 06:18

    关于ADPCM压缩算法流程介绍

    关于ADPCM压缩算法流程介绍
    发表于 06-03 06:44

    视频压缩算法的特点和处理流程是怎样的?

    在本文中,我们将着重探讨视频压缩算法的特点和处理流程,我们将对基本的视频压缩算法进行解释,包括静态图像压缩、运动估计、图像去噪, 以及色彩空间转换,同时我们还将讨论视频压缩算法对处理器
    发表于 06-08 06:49

    浅析几种电机控制算法

    BLDC电机控制算法有哪几项功能?AC电机算法的功能有哪些?步进电机控制算法有何优点及其缺点?
    发表于 09-18 07:02

    PID算法基本原理及其执行流程

    ,却也需要下一定功夫。首先我们从PID算法最基本的原理开始分析和设计这一经典命题。PID算法的执行流程是非
    发表于 12-21 08:22

    浅析算法引起的serialno值相同

    1、浅析算法引起的serialno值相同  Platform: RK3288  OS: Android 6.0  Kernel: 3.10.92  现象:  在前面已经解决了缓存文件引起值相同
    发表于 11-16 17:33

    卡尔曼滤波算法对比其他的滤波算法有什么优点

    卡尔曼滤波算法对比其他的滤波算法有什么优点
    发表于 10-11 06:42

    浅析仿行星运行装置的功能与优点

    浅析仿行星运行装置的功能与优点 1前言随着元件封装的飞速发展,越来越多的PBGA、CCGA、0201阻容元件等得到广泛使用,表面贴装技术也快
    发表于 01-25 09:15 685次阅读

    粒子群算法的原理和流程及用于天线阵的设计分析

    粒子群优化算法是基于一群粒子的智能运动而产生的随机进化计算方法,其优点算法非常利于理解和应用。本文首先介绍了粒子群算法的原理和流程,研究了
    发表于 10-28 17:50 9次下载
    粒子群<b class='flag-5'>算法</b>的原理和<b class='flag-5'>流程</b>及用于天线阵的设计分析

    卷积神经网络算法流程 卷积神经网络模型工作流程

    卷积神经网络算法流程 卷积神经网络模型工作流程  卷积神经网络(Convolutional Neural Network,CNN)是一种广泛应用于目标跟踪、图像识别和语音识别等领域的深度学习模型,其
    的头像 发表于 08-21 16:50 2747次阅读

    FPGA图像处理_ISP算法DPC流程

    DPC通常作为ISP算法流程里面的第一个模块,原理也很简单。
    的头像 发表于 11-25 10:04 1720次阅读
    FPGA图像处理_ISP<b class='flag-5'>算法</b>DPC<b class='flag-5'>流程</b>