AI 技术在智能语音、图像识别、自然语言理解等领域,AI 都有大范围的落地。而应用得最早、最广泛的,还是 AI 在推荐领域的实践。
目前大部分主流 App 都集成了推荐系统,比如 58 同城 App 中推荐系统就不断通过对用户的兴趣的探索和开发,进行智能、精准推送,以此更好地为用户进行服务。除此之外,还有电商、资讯、长短视频、社交等 App,也都非常依赖推荐系统。
而在推荐领域中,如果系统只是针对用户已存在兴趣的物品进行推荐,过不了多长时间,用户就会感觉腻,此时推荐算法本身需要不断探索和开发用户新的兴趣才行。
因此这一期我们就主要围绕用户的兴趣探索和开发的问题进行讨论。关于兴趣探索和开发的问题,我们可以这样理解:如果我们需要将平台的物品进行分类,那么推荐算法应该把物品分为用户"喜欢"和"不喜欢"这两大类。
然而对于推荐系统来说,它并不确切知道用户的兴趣,因为用户大部分兴趣只能通过隐式反馈来捕获,也就是说兴趣没有表现出来的行为。
在这种情况下,推荐系统存在以下两种选择。
-
按照已捕获的兴趣进行推荐:这种形式会产生"信息茧房",推荐出来的结果缺乏新颖性和多样性;
-
不按照兴趣,随机推荐:这种形式推荐出来的结果往往用户不满意,准确率会下降。
此时,如果我们完全按照当前的最优解,则意味着放弃了潜在的更优解,而为了潜在的更优解继续探索可能会导致短期收益降低。
由此可见,推荐系统偏重任意一个选择都行不通,因此我们需要多方综合、权衡考虑。这就是推荐算法中经典的探索与开发 Exploration & Exploitation(EE)问题。
多臂老虎机(MAB)问题
在解决这样的问题时,历史悠久的赌博学中有一个多臂老虎机(Multi-Armed Bandit,MAB)的解法,可以为我们所用。
多臂老虎机的使用场景:在多个老虎机中,赌徒随机选择其一进行下注,经过多次探索,最终选择收益最大的那台。这估计是大多数玩家的选择,这种选择方式比完全随机要强一些,但是如果想不亏本,就得靠运气了。
解决这种问题的算法,我们就统称为老虎机算法。在推荐领域,常见的老虎机算法有很多,这里就不一一例举了,下面我们主要看两个收益较高的算法模型。
置信区间上界(UCB)模型
置信区间上界(Upper Confidence Bound,UCB)模型,与它的名字一样,简单来说就是它会根据老虎机置信区间上界,将现有老虎机进行排序,然后选择排最靠前的那一个。
如何获得老虎机的准确置信区间呢?每个老虎机都有其胜率的置信区间,根据统计学原理,随着被下注次数的增加,老虎机的胜率置信区间会逐渐缩窄,最后达到逐渐确信的状态。
一般来说,置信区间上界较大的是那些很少被下注的老虎机,这也说明 UCB 模型是一种偏向冒险的模型。
【UCB 模型的操作步骤】
- 模型初始化:也就是把每台老虎机都试一下。
下注策略:按照如下公式更新每台老虎机的得分。
-
其中,左边为当前老虎机的收益均值,右边为加成收益,t 为下注总次数,T it为当前老虎机的下注次数。
-
更新分数后,选择分数最高的老虎机下注,并更新公式中的参数。
实验证明:UCB 模型在 MAB 问题上应用广泛,但是它没有充分利用上下文信息,从而影响了预测准确率。
这如何理解呢?比如 58 同城 App 租车业务中存在玛莎拉蒂、法拉利、保时捷等豪车,虽然大部分用户都喜欢这些豪车,但是并不意味着这些用户具备同等的消费能力。如果我们系统忽视这些上下文信息,则会导致预测上的偏差。
而这样的问题,是基于 UCB 的算法上改进的 LinUCB 模型需要考虑的,下面我们就具体来说说。
线性置信区间上界(LinUCB)模型
线性置信区间上界(Linear Upper Confidence Bound,LinUCB)模型则是在 UCB 模型的基础上引入了特征信息,用以加强 UCB 模型。
关于 LinUCB 模型流程伪码如下图所示:LinUCB 模型分为以下两种:
-
左图为各个老虎机不共享参数的 LinUCB 模型(Disjoint);
-
右图为各个老虎机共享参数的 LinUCB 模型(Hybird)。
由于 UCB 模型没有利用上下文信息,故而在模型初始化时,我们需要将每一台老虎机都试一遍,而在实际应用中往往不具备这样的条件。
因此,LinUCB 模型利用用户和物品的原始信息进行聚类降维,从而拿到隐向量表,再利用它来预估每个用户和物品组合的期望回报。
LinUCB 模型具体的算式如下:
-
不共享参数 LinUCB 模型下,每个老虎机收益的数学期望
-
共享参数 LinUCB 模型下,每个老虎机收益的数学期望
从公式中我们可以看到:每个老虎机的收益与用户和物品组合特征线性相关,这就是 LinUCB 模型假设前提条件和模型名称的来历。
限于篇幅,这一期我们不赘述整个模型参数的推导过程,而只举一个具体的例子来描述一下整个模型的思想。
58 同城租车业务案例
在 58 同城 App 的租车业务中,不同车的应用场景存在差异,比如货车、轿车、SUV、跑车等。
-
在特定场景下,如果是家庭出游,那么用户多会选择大容量 SUV;
-
如果是搬家拉货,那么用户一定会选货车;
-
如果是婚庆,那么用户多会选择跑车。
这时,我们就获得了用户和物品的一个组合特征,即用途和车型组合特征;据此,我们就可以将用途和车型组合,再结合其他特征(如性别、年龄等)进行聚合降维,从而得到隐向量表征。
这个隐向量表征,可以视情况是共享还是不共享,然后再应用上"LinUCB 模型公式"计算收益,并选择相对收益最大的物品进行推荐。
LinUCB 模型 pk UCB 模型
由此我们可以看出:LinUCB 模型比 UCB 模型更贴近实践。
-
比如用户的性别、年龄、用途等属性,能够从用户画像中获得,使用线性回归预测收益,这与人类做决策时的思路非常相似;
-
再比如车的车型、品牌、车系等属性,可以从物品画像中获得,且不同车系的用途大部分是重叠的。这就使得模型不需要对所有车系进行计算,这一点就是 UCB 模型无法做到的。
UCB 模型和 LinUCB 模型,都是假设用户行为不会改变环境状态的算法。简单来说,就是用户当前的行为获得的收益,不会影响后续行为获得的收益。
然而,这种假设实际上并不存在。
Q 学习(Q-Learning)
1.为什么需要 Q 学习?
为什么说这种假设实际上并不存在呢?比如在 58 同城 App 宠物推荐中,如果用户想买一只泰迪狗,而推荐系统根据 EE 算法推荐了英国短毛猫。
用户看后,觉得短毛猫还挺漂亮的,大小也跟泰迪狗差不多,毛短还容易打理,而且遛狗也比较麻烦,于是把宠物需求改为了短毛猫。
而这时系统再次推荐狗时,可能就入不了用户的法眼了,反倒是美国短毛猫更符合用户需求。为了解决这一问题,Q 学习就发挥作用了。
2.什么是 Q 学习?
Q 学习(Q-Learning)既不是模型,也不是面向某种目标的算法。它是使用 Q 表(Q-Table)记录不同状态,并在这个状态下采取某些行为的预期收益。
这里我们需要重点讲讲什么是 Q 表,及其如何记录不同转状态,Q 表如下图所示:
在 S0 状态下,如果采取 A0 动作(或者选择 A0 老虎机),那么预期收益是 0.25。
注意:不一定会有 0.25 的收益,因为整个 Q 表的参数会在不断尝试中进行更新,所以此时的值只是选择下一步动作的基础。
Q 表更新公式如下:
其中,r(s,a) 表示当前动作的实际收益,image.png表示下一状态的最大收益,r 为平衡参数表示一种下一状态收益的贴现比率。
然而在现实场景下,大多数时候我们并不知道下一状态是什么样。通过使用状态转移概率来描述状态到状态之间的转换,这就是马尔科夫决策过程(Markov Decision Process,MDP)。
以上讲述了 Q 表中"状态"和"动作"的关系,状态和动作是离散的,如果状态和动作是连续变量,则参数就会过于庞大,使得参数多到无法使用 Q 表记录的情况。这时,我们可以使用神经网络代替 Q 表,来记录状态和动作的对应关系。
这就是所谓的深度 Q 网络(Deep Q Network,DQN)模型,接下来我们就讲解一下它。
深度强化学习模型
1.深度 Q 网络(Deep Q Network,DQN)模型
深度 Q 网络(Deep Q Network,DQN)模型是深度学习与强化学习结合的产物。
在线广告领域中存在三大灵魂拷问:到底插不插广告?插什么广告?在哪插广告?这三大拷问之间相互关联,所以模型需要统一处理这三个问题。
为了一次性解决这三个问题,我们将这个问题描述为一个强化学习问题。我们将"状态 state"定义为当前推荐列表中的普通推荐和广告,"行为 action"以三大灵魂拷问为三个基本动作,"收益 reward"定义为实际收益和体验收益。
在实际场景中,虽然插广告可以为企业带来实际收益,但是插入太多广告则会让用户反感。因此插广告时,我们需要权衡"收益"和"用户体验"来决策插入还是不插入广告。
针对在线广告领域的这类问题,DQN 模型给出了具体的解法。
DQN 模型框架图如下:输出为所有动作-状态对应的 Q 表,虽然此时给出了具体在哪插广告,但无法确定插什么广告。图右侧(b)输出为单个动作-状态对应的 Q 表,此时虽然给出了具体插什么广告,但是无法确定在哪插广告。
这意味着 DQN 结构只能解决一个问题。
2.DEAR 模型
因此在这个基础上,又提出了可以一次处理多个问题的改进方法,这就是 DEAR 模型(框架图如下):
实际上, DEAR 模型是改进型的 DQN 模型,主要用于在线广告推荐领域。
DEAR(DEep reinforcement learning framework with a novel DQN architecture for online Advertising in Recommender systems,DEAR)模型使用深度模型(如 RNN、CNN、MLP),将传统的两种 DQN 模型统一起来。如状态image.png中包含用户浏览历史、当前推荐列表、环境信息image.png等。
这里使用 RNN 中的 GRU 模型,将浏览推荐和广告的历史转化为隐向量表征,然后使用 CNN 或 MLP 将当前请求的推荐列表转化为隐向量表征image.png,再将三者连接起来作为状态表征image.png。
从上图中可以看到,DEAR 模型的输入为状态image.png和候选广告image.png,输出为具有 L+1 个位置的 Q 表。DEAR 模型采用了类似双塔的结构,分为左右两部分:
-
左边是由状态决定的image.png函数,表示用户对推荐的满意程度;
-
右边是由状态和动作同时决定的image.png函数,表示当前上下文与是否插入广告之间的关系。
然后模型将二者进行结合,给出了最终的 Q 表。
本节小结
这一讲我们介绍了探索与开发问题解决方法,从 MAB 策略到 UCB 模型,再到 LinUCB 模型、Q-learning、DQN 模型、DEAR 模型等,模型复杂度逐步提高。最终,将强化学习算法与深度学习算法结合在一起,实现了泾渭合流。
你可以根据下图,再次回顾、学习此次课程。
通过深度强化学习模型的演化过程,我们能够看到应用场景和待解决的问题是推动算法模型向前发展变革的根本动力。
这就是道家所说的"势",就像道德经中"道生之,德畜之,物形之,势成之"给我们的启示------顺势而为,则大有作为。
而跟着这个智能时代,了解一下 AI 和推荐技术,就是一种顺势而为的学习行为。今天的课程内容,你可能会觉得深奥、隐晦。但这没关系,你可以根据我的讲解,再去探索学习。我觉得更重要的"不是一次性学会",而是你通过学习,涉猎了新的领域,对 AI 与推荐算法模型有了更深一步的认识。