深度学习推荐系统实战_41_32_强化学习案例美团是如何在推荐系统中落地强化学习的
你好,我是王哲。
今天我我们来聊聊美团的强化学习落地案例。
我们呢在第二十二课中学过强化学习的基本原理、优点,以及微软的强化学习模型DRN.但我们也说了,强化学习呢在推荐系统中落地的时候啊,会有一个难点。
就是因为强化学习,涉及模型训练、线上服务、数据收集、实时模型更新等几乎推荐系统的所有工程的环节。
啊,所以啊强化学习整个落地过程的工程量啊非常的大,需要工程和研究部门的通力合作才能实现。
那其实很难啊,但业界呢依然有成功落地强化学习的案例。
典型的呢就是美团和猜你喜欢功能中的应用。
美团啊曾经在官方的博客中啊详细介绍过这个落地方案的环节。
那我们这节课啊就借助这个落地方案来好好学习一下,强化学习的实践。
我也希望呢你能通过这个案例串联起我们学过的所有的推荐系统的知识。
猜你喜欢啊,是美团这个团购app中流量最大的推展展产品,品态呢是信息流。
从文稿中图一的app截图中,你可以看到啊,猜你截图列表中推荐的用户可能喜欢的餐厅。
用户呢可以通过下滑和翻页的方式啊实现与app的多轮交互。
在这个过程中呢,用户还可能发生点击购买这样的行为。
强化学习的应用场景呢,就藏在用户和美团app的多轮交互之中。
如果推荐系统能够在用户每次翻页的时候啊,都能够考虑到用户刚刚发生的行为,就能够提供实时性更强的推荐体验。
那文稿中的图二呢,就是美团的同学啊统计用户翻页次数的分布图。
我们可以看到多轮交互确实是美团app中非常常见的用户场景。
这也说明了强化学习还是非常有用武之地的那清楚了,美团为什么要使用强化学习?我们就要开始思考,强化学习是怎么被应用到这样的场景上的。
通过第二十二课的学习啊,我们知道的强化学习有六个要素,分别是智能体环境行动、奖励目标和状态清楚。
这六个要素在猜你喜欢功能中的具体含义以及建模的过程呢,我们就能知道美团app是怎么应用强化学习了。
那接下来啊我就带你依次看一看美团是怎么针对这六个要素呢进行建模的。
首先啊是智能体,它指的就是美团的的推系系统。
其中啊最重要的部分自然就是强强化习习模型。
这个我们等会儿详细讲环境。
我们刚才介绍过了,指的是美团app这个猜你喜欢的推荐场景行动呢也不难理解,就是推荐系统选出商铺的列表,然后推荐给用户的这个动作。
接下来的三个要素呢是指整个系统的重点,就是奖励目标和状态行面啊,我们一一来看他们具体的含义。
奖励呢指的是推荐系统啊,把推荐列表推送给用户之后,用户在这个列表之上的反馈。
对于美团来说呢,猜你喜欢展位,核心优化指标啊是点击率和下单率。
这里的奖励呢就可以被定义为是推荐列表中物品的点击次数以及下单次数的加权和具体的求解公式啊。
你可以看一下文稿,有了奖励的定义啊,那整个强化学习过程的目标就很好定义了,就是多轮交互后的奖励期望之和最大。
同样的,我也把这个公式呢放在了文稿中,你可以去看看。
然后呢,我们再来说状态的定义,在推荐系统的强化学习模型中,啊,状态实质是代表了用户的意图、兴趣和所处的场景。
所以啊它在整个搭建过程中非常的重要。
那怎么来表达这个要素呢?美态设计的一个网络结构来提取状态的embedding表达这个状态embedding就是当前推荐系统所处的状态。
它的结构图啊我放在了文稿中。
这个网络啊主要可以分为两个部分。
第一个部分呢是把用户的实时行为序列的item embedding作为输入使用一维的CNN层学习用户实时意图的表达。
然后呢,中中的彩色部分,另一部分呢是传统的特征。
工程使用了特征值组成的稠密向量来表示,用户所处的时间、地点、场景以及使用兴趣embedding来代表更长时间周期内用户的行为习惯。
这里比较有意思的是,第一个部分啊,它采用了单层CNN,也就是卷积神经网络来学习用户的实时意图表达。
这是我们之前都没有遇到过的处理手法,那它是怎么做的呢?它首先啊是把用户交互获得的item embedding组成了一个矩阵。
然后呢,在这个矩阵之上使用了两个不同尺度的卷积层,再对卷积层中每个行向量进行池化操作,生成两个代表的用户实时意图的embedding,把它们与第二部分的场景特征向量连接后,再经过全连接层啊,生成最终代表状态的state embedding强化学习。
这六大要素是什么?怎么实现?我们已经搞清楚了。
但是呢我们之前还留了一个问题,就是智能体部分的强化学习模型的结构到底什么样。
那下面啊我们就来解决这个疑问。
文稿中的图四呢就是这个强化学习模型的框图。
那我们可以看到啊,这个模型跟强化学习模型的DRN一样,都采用了DQN的模型框架,也都分成了两个部分。
一个部分叫advantage函数,部分它与状态动作都相关。
另一个部分叫value net,它只与状态相关。
最终模型输出得分呢就是把这两部分的得分呢融合起来。
这个框图中的状态网络啊是预训练好的。
也就是说啊在线上推荐的过程中啊,状态网络是不会进行在线学习的那强化学习。
动态学习的参数到底是什么呢?它学习的其实是VS和ASA这两个部分的融合参数,以及跟action相关的相数。
这里的VS和ASA这两个参数的具体细节啊,美团呢并没有透露。
但是啊一种典型的做法呢,就是采用便于学习的线性模型来构建这两个函数。
比如说啊对于VS这部分来说呢,输入是状态embedding向量。
那么我们就可以使用一个学r的结构呢,生成value net的得分。
同理啊,ASA也是一样,我们可以用过另一个LR结构,把状态向量和动作相关的特征呢结合起来,生成一个advantage函数得分。
最后呢通过加权和的方式,把value net的得分和advantage的函数得分的加起来。
总的来说啊,整个美团强化学习方案的执行过程啊,可以分为四步。
第一步,根据历史训练数据的预训练、state embedding的网络初始化value net和advantage函数的相关参数。
第二步,在用户打开app的时候,根据初始化模型来生成推荐列表。
第三步,随着用户的不断交互呢,产生了一些实时的交互数据。
这些数据经过state embedding网络的在线推断过程生成用户实时的state embedding,从而实施的影响用户每一轮交互的结果。
最后一步啊,state embedding络络进行的过程。
这些advnet和adadvtage函数部分进行行数学方式更更新相关的参数。
让强化学习框架呢具备一个实时学习的能力。
好了,这就是美团强化学习方案的理论部分。
但我们知道啊,强化学习落地最难的地方呢在于工程与模型的紧密结合。
接下来我再带你看看美团是怎么落地这套方案的。
文稿中的图五呢就是美团强化学习方案相关的工程架构。
从整体上一看啊,它确实像一整个推荐系统的框图,跟我们的spiral reaccess的项目一样,包含了线上部分,进线部分和离线的部分。
其中的模块呢也非常的复杂,包含了数据流模型、训练、模型服务、线上推荐等多个模块。
它虽然它很复杂,但你也不用着急,它里面的每个模块之间呢都有着很强的逻辑关系。
接下来你就和我随着数据的整体流向,一起来过一遍这个架构图吧。
我们从最上方的log collector开始,它收集了推荐系统产生的各种日志,包括曝光、点击、下单以及和这些行为相关的特征的这些数据。
啊,经过消息缓存系统,卡夫卡收集之后呢,会形成数据流来到online journal模块。
那么online journal正是卡夫卡数据流中实时收集的特征和用户反馈处理,成了包含特征和标签的样本,再分别把样本输出到下游的卡夫卡和离线的HDFS来分别支持模型的在线和离线处表。
那对于在线的部分呢,卡夫卡中的数据会继续流向一个叫experience collector的模块。
这个模块呢是对样本进行一个进一步处理的,主要是把离散开的一个个样本点啊进一步做整合,生成app中展现的推荐列表。
然后以列表的形式呢未给模型进行训练。
那到这里啊,数据流的部分我们基本就讲完了。
不过熟悉flink部分知识的同学呢肯定会说,这部分基于数据流的处理过程,不就是flink最擅长的吗?没错,online、 journal、 experience、 collector这些模块啊,确实是最适合运行在flink这类流处理平台之上的。
虽然美团没有具体透露它们的流处理平台,但我们只需要知道啊,这些进线的数据流操作呢都会运行在flink spark、 streaming这类流处理平台就可以了。
那再说回到整个流程中啊,生成好的样本数据啊,就来到了训练这个环节。
而且使使用NNRF flow作为深度学习模型的训练平台。
但是整个模型的训练呢也分为两个部分,一部分是离线的训练。
上一小节提到的state网络item embedding都是通过离线训练生成的一部分呢需要在线的训练。
比如说advantage和value是函数相关的参数啊,这部分呢并不是在TNRFL low中中训练的,而是利用实时数据流中的样本进行一个在线的学习,并且呢实时去调整相关的参数值。
虽然说啊TNRFL flow的度模型型部分是在离线中预训练好的,当是啊深度学习模型的线上服务效率问题一直是工程的难点。
那美团是怎么解决的呢?和我们的项目一样啊,美团呢同样采用了TNNF flow servver作为模型服务的方式,但它呢进行了两优化。
首先是玻璃的state模型的embedding层,它采取预训练模式的方式啊,生成item embedding,减小模型的整体体积,方便上线。
这些预训练的embedding会预存在内存库tell中美tell的具体使用方法呢,你不用特别的关心,只要你知道它的类似RDIS的key value内存数据库就可以了。
其次呢是优化的模型更新过程。
你可以看到啊vision controller模块啊,它是负责深度学习模型的版本管理的。
在训练好一个新的模型之后,就需要把新模型进行上线。
但是在模型上线的时候啊,TNNF flow serving往往会在一两分钟内产生响应时间骤然增加的现象。
产生这种现象的原因啊有两点。
第一点呢是TNNF flow serving的模型加载和请求共用一个线程池,导致呢分换模型阻塞请求的处理。
第二点呢是TNNFLOW模型的计算图初始化要等到新模型接收到第一次请求后呢,才开始始。
每次呢分针对对两点点进行了优化。
针对第一点呢,美团切分了模型加载部分和请求部分的线程池,让它们互不干扰。
针对第二点啊,采用了warm up,也就是预热初始化的方式呢进行解决。
在真实请求到来之前呢,先用一些预热的请求,让模型完成计算图加载的过程。
那到这里啊,我们就讲完了美团的整个强化学习的解决方案。
从数据流的产生进线的数据处理,到离线的模型训练,在线的模型学习、更新模型服务,强化学习啊,需要整个系统通盘配合才能够完成落地。
那通过今天的讲解呢,我相信你对强化学习的落地难点应该有了更深刻的理解。
如果之后遇到这样的考验呢,也希望你能够好好利用这些内容。
好了,今天的内容呢我们就讲完了,我们一起来做个总结。
这节课呢我们一起学习了美团的强化学习方案,详细学习了它建模的方法和工程架构。
在美团的建模方法中啊,我们要关注强化学习的六要素。
其中呢智能体指的是美团的强化学习推荐模型环境呢是猜你喜欢这个推荐场景,然后呢指的是强化学习模型生成的推荐列表。
奖励呢是由点击和下单共同组成的这个奖励函数啊,目标呢是最大化多轮交互过程的奖励。
综合状态呢是由深度学习网络生成的状态embedding.在工程落地的方案中啊,我们要清除整个数据流的流向推荐系统。
产生日志之后啊,它首先呢会被日志流系统卡夫卡收集,然后呢依次流经online的模块进行一个数据处理,生成训练样本,再由joinexperience collector生成推荐列表的样本。
接着TENSOFOW模型会根据列表的样本呢进行一个离线的函,以以及advantage函数和value函数利用相关参数啊进行一个在线的学习。
后后等tensl flow模型训练完成后,通通过f进行模模型的更新和服务。
同时啊针对serservt f serving延迟大、更新时效率低的特点,美团呢采取取了很多的改进措施,比如玻璃embedding层切分线程池以及模型预热等等等等。
最后啊,我们再来思考一个问题,你觉得我们在离线训练中使用的随机梯度下降之类的方法能用到在线学习上吗?除此之外,你还知道哪些在线学习的方法吗?欢迎把你的经验和思考写在留言区,我们下节课见。