1.9万亿参数量,快手落地业界首个万亿参数推荐精排模型

来,走近快手业界首个万亿参数推荐精排模型的内部构造。

个性化推荐系统旨在根据用户的行为数据提供「定制化」的产品体验,精准的推荐系统模型也是很多互联网产品的核心竞争力。作为一款国民级短视频 App,快手每天都会为数亿用户推荐上百亿的视频,这就涉及到一个挑战:推荐系统模型如何精准地描述与捕捉用户的兴趣?


如今业内采用的解决方案通常为结合大量数据集和拟合参数来训练深度学习模型,如此一来让模型更加逼近现实情况。Google 日前发布了首个万亿级模型 Switch Transformer,参数量达到 1.6 万亿,其速度是 Google 之前开发的最大语言模型(T5-XXL)的 4 倍。

实际上,快手万亿参数精排模型总的参数量超过 1.9 万亿,规模更大,且已经投入实践。这篇文章将正式介绍快手精排模型的发展史。


先看一张对比图,从左到右分别为:

  • Google BERT-large NLP 预训练模型: 3.4 亿参数

  • Google Meena 开域聊天机器人:26 亿参数

  • Google T5 预训练模型:110 亿参数

  • OpenAI GPT3 语言模型:1750 亿参数

  • Google Switch Transformer 语言模型: 16000 亿参数

  • 快手精排排序模型:19000 亿参数


参数个性化 CTR 模型 - PPNet

2019 年之前,快手 App 主要以双列的瀑布流玩法为主,用户同视频的交互与点击,观看双阶段来区分。在这种形式下, CTR 预估模型变得尤为关键,因为它将直接决定用户是否愿意点击展示给他们的视频。彼时业界主流的推荐模型还是以 DNN、DeepFM 等简单的全连接深度学习模型为主。但考虑到某用户个体和视频的共建语义模式在全局用户的共建语义模式基础上会有个性化的偏差,如何在 DNN 网络参数上为不同用户学习一个独有的个性化偏差成为了快手推荐团队优化的方向。

语音识别领域中,2014 年和 2016 年提出的 LHUC 算法(learning hidden unit contributions)核心思想是做说话人自适应(speaker adaptation),其中一个关键突破是在 DNN 网络中,为每个说话人学习一个特定的隐式单位贡献(hidden unit contributions),来提升不同说话人的语音识别效果。借鉴 LHUC 的思想,快手推荐团队在精排模型上展开了尝试。经过多次迭代优化,推荐团队设计出一种 gating 机制,可以增加 DNN 网络参数个性化并能够让模型快速收敛。快手把这种模型叫做 PPNet(Parameter Personalized Net)。据快手介绍,PPNet 于 2019 年全量上线后,显著的提升了模型的 CTR 目标预估能力。

PPNet 结构图

如上图所示,PPNet 的左侧是目前常见的 DNN 网络结构,由稀疏特征(sparse features)、嵌入层(embedding layer)、多神经网络层(neural layer)组成。右侧是 PPNet 特有的模块,包括 Gate NN 和只给 Gate NN 作为输入的 id 特征。其中 uid,pid,aid 分别表示 user id,photo id,author id。左侧的所有特征的 embedding 会同这 3 个 id 特征的 embedding 拼接到一起作为所有 Gate NN 的输入。需要注意的是,左侧所有特征的 embedding 并不接受 Gate NN 的反传梯度,这样操作的目的是减少 Gate NN 对现有特征 embedding 收敛产生的影响。Gate NN 的数量同左侧神经网络的层数一致,其输出同每一层神经网络的输入做 element-wise product 来做用户的个性化偏置。Gate NN 是一个 2 层神经网络,其中第二层网络的激活函数是 2 * sigmoid,目的是约束其输出的每一项在 [0, 2] 范围内,并且默认值为 1。当 Gate NN 输出是默认值时,PPNet 同左侧部分网络是等价的。经实验对比,通过 Gate NN 为神经网络层输入增加个性化偏置项,可以显著提升模型的目标预估能力。PPNet 通过 Gate NN 来支持 DNN 网络参数的个性化能力,来提升目标的预估能力,理论上来讲,可以用到所有基于 DNN 模型的预估场景,如个性化推荐,广告,基于 DNN 的强化学习场景等。

多目标预估优化 - 基于 MMoE 的多任务学习框架

随着短视频用户的需求不断升级,2020 年 9 月,快手推出了 8.0 版本。这个版本里增加了底部导航栏,在此基础上增加了一个「精选」tab,支持单列上下滑的形式。这个兼容双列点选和单列上下滑的版本,旨在为用户提供更好的消费体验,加入更多元的消费方式。在新的界面下,有相当一部分用户会既使用双列也使用单列。用户在这两种页面上的消费方式和交互形式都有很大的不同,因此在数据层面表示出来的分布也非常不同。如何将两部分数据都用在模型建模里,而且用好,成为了快手推荐团队一个亟待解决的问题。

快手团队发现,当单列业务的场景增多后,多任务学习更加重要。因为在单列场景下,用户的交互行为都是基于 show 给用户的视频发生,并没有像双列交互那样有非常重要的点击行为。这些交互行为相对平等,而且这些行为数量多达几十个(时长相关预估目标、喜欢、关注、转发等)。

精排模型预估目标(部分)

随着单列业务数据量越来越大,从模型层面,推荐团队尝试拆离出针对单列业务单独优化的模型。具体表现在特征层面,可以完全复用双列模型特征,只是针对单列的目标,额外添加个性化偏置特征和部分统计值特征。在 Embedding 层面,因为前期单列数据量少,不能保证 embedding 收敛,最初使用双列数据 click 行为主导训练,后面改用单双列用户视频观看行为(有效播放、长播放、短播放)主导训练 embedding。在网络结构层面,主要基于 shared-bottom 网络结构训练,不相关目标独占一个 tower,相关目标共享同一 tower 顶层输出,这能在一定程度上提升目标预估效果。这个模型上线后,起初有一定的效果,但很快暴露出了一些问题。首先,它没有考虑到单双列业务中 embedding 分布差异,造成了 embedding 学习不充分。其次,在多任务学习层面,单列场景下,用户的交互都是基于当前视频 show 的单阶段行为,各个目标之间互相影响,模型单个目标的提升,不一定能带来线上的整体收益。

因此,如何设计一个好的多任务学习算法框架,让所有预估目标都能提升变得非常关键。这个算法框架必须考虑数据、特征、embedding、网络结构以及单列用户交互特点。经过充分的调研和实践,推荐团队决定采用 MMoE 模型(Multi-gate Mixture-of-Experts)来改进当前模型。

MMoE 是 Google 提出的一种经典多任务学习算法,其核心思想是把 shared-bottom 网络替换为 Expert 层,通过多个门控网络在多个专家网络上上分别针对每个目标学习不同专家网络权重进行融合表征,在此融合表征的基础上通过 task 网络学习每个任务。
通过参考 MMoE 算法和上面提到的快手推荐场景难点,推荐团队改造了 MMoE 算法并设计了一套新的多任务学习算法框架。具体体现在,在特征层面,进行了语义统一,修正在单双列业务中语义不一致特征,添加针对用户在单列相关特征。在 Embedding 层面,进行了空间重新映射,设计了 embedding transform layer,直接学习单双列 embedding 映射关系,帮助单双列 embedding 映射到统一空间分布。在特征重要性层面,设计了 slot-gating layer,为不同业务做特征重要性选择。

通过以上 3 点的改动,模型将输入层的 embedding 表示从特征语义,embedding 在不同业务分布,特征在不同业务重要性三个层面做了归一化和正则化,重新映射到统一的特征表征空间,使得 MMoE 网络在此空间上更好的捕捉多个任务之间后验概率分布关系。通过此项对 MMoE 的改进,模型所有的目标提升非常显著。

短期行为序列建模 - Transformer 模型

在快手的精排模型中,用户历史行为特征非常重要,对刻画用户兴趣的动态变化有很好的表征。在快手的推荐场景下,用户的行为特征非常丰富并且多变,其复杂度远远超过视频类特征或者上下文的特征,因此设计一个能够针对用户行为序列有效建模的算法很有必要。

目前业界上对于用户行为序列建模主要分为两种模式,一是对于用户的历史行为进行 weighted sum,二是通过 RNN 之类的模型进行时序建模。在快手前期的双列精排模型里,用户行为序列只是简单做 sum pooling 作为模型输入。而在单列场景下,用户被动接收快手推荐视频,而且丢失掉封面信息后,用户需要观看视频一段时间再做反馈,因此主动视频选择权降低,更加适合推荐系统对用户的兴趣做 E&E(Exploit & Explore)。

快手的序列建模灵感来自于 Transformer 模型。Transformer 模型是 Google 在 2017 年提出的经典神经网络翻译模型,后来火爆的 BERT 和 GPT-3 也是基于此模型部分结构。Transformer 主要包括 Encoder 跟 Decoder 两部分,其中 Encoder 部分对输入语言序列进行建模,这部分跟用户行为序列建模目标是非常类似的,因此快手借鉴其中算法结构并对计算量进行了优化。

MMoE 结合 Transformer 建模用户兴趣序列

首先,快手推荐团队使用用户的视频播放历史作为行为序列。候选的序列有用户长播历史序列,短播历史序列,用户点击历史序列等,此类列表详尽地记录了用户观看视频 id,作者 id,视频时长,视频 tag,视频观看时长,视频观看时间等内容,完整描述用户的观看历史。其次,对视频观看距今时间做 log 变换代替 position embedding。在快手的推荐场景下,用户短期的观看行为跟当次预估更相关,长时间观看行为更多体现用户的多兴趣分布,使用 log 变换更能体现这种相关性。最后,替换 multi-head self-attention 为 multi-head target attention,并且使用当前 embedding 层的输入作为 query。这样设计的目的有两点,首先当前用户特征,预估视频特征和 context 特征比单独的用户行为序列提供更多信息。其次可以简化计算量,从 O(d*n*n*h)变换为 O(d*n*h + e*d),其中 d 为 attention 的维度,n 为 list 长度,h 为 head 个数,e*d 表征的是 embedding 层维度变换为 attention 维度所需的复杂度。

改造后的 Transformer 网络能显著提升模型的预估能力,在离线评估上,用户观看时长类预估提升非常明显,线上用户观看时长也显著提升。

长期兴趣建模

长期以来,快手的精排模型都比较偏向于使用用户最近的行为。上面已经说到,通过采用 transformer 和 MMoE 模型,快手的精排模型对用户的短期兴趣进行了精确的建模,取得了非常大的收益。之前的模型里,采用了用户最近几十个历史行为进行建模。由于短视频行业的特点,最近几十个历史行为通常只能表示用户很短一段时间内的兴趣。这就造成了模型过度依赖用户的短期行为,而导致了对用户中长期兴趣建模的缺失。

针对快手的业务特点,快手推荐团队对于用户长期兴趣也进行了建模,使得模型能对于用户长期的历史记录都有感知能力。快手推荐团队发现,将用户的交互历史序列(播放、点赞、关注、转发等)扩长之后,模型能够更好的捕捉到一些潜在的用户兴趣,即使此类行为相对稀疏。针对该特点,推荐团队在之前的模型基础上设计并改进了用户超长期兴趣建模模块,能够对用户几个月到一年的行为进行全面的建模,用户行为序列长度能达到万级。此模型已经在全量业务推全并且取得了巨大的线上收益。
 

快手用户长期兴趣精排模型结构示意图

千亿特征,万亿参数

随着模型的迭代,深度学习网络的复杂度越来越高,模型中添加的特征数量也越来越多,模型特征规模的大小也制约了精排模型的迭代。这不仅会限制模型特征的规模,使得一部分特征被逐出,带来模型收敛的不稳定性,同时还会导致模型更容易逐出低频的特征,造成线上冷启动效果变差(新视频、新用户),对于长尾的视频或者新用户不够友好。

为了解决这个问题,快手推荐和架构的同学针对训练引擎和线上 serving 进行改进,做到离线训练和线上 serving 的服务根据配置的特征量灵活扩展,可以支持精排模型离线跟线上有千亿特征,万亿参数的规模。特别的,新模型对于新视频跟新用户的流量分发更加友好,在新用户和新视频的指标上有显著的提升,践行了快手推荐」普惠「的理念。目前快手的精排模型,总特征量超过 1000 亿,模型总的参数量超过 19000 亿。

在线训练和预估服务

为了支撑推荐场景下千亿特征模型的在线训练和实时预估,推荐团队针对训练框架和线上预估服务的参数服务器 (Parameter Server) 进行了修改。在推荐模型的在线学习中,存储 Embedding 的参数服务器需要能够精准的控制内存的使用,提升训练和预估的效率。为了解决这一问题,推荐团队提出了无冲突且内存高效的全局共享嵌入表(Global Shared Embedding Table, GSET)的参数服务器设计。


每个 ID 单独映射一个 Embedding 向量很快就会占满机器的内存资源,为了确保系统可以长期执行,GSET 使用定制的 feature score 淘汰策略以控制内存占用量可以始终低于预设阈值。传统的缓存淘汰策略如 LFU、LRU 只考虑了实体出现的频率信息,主要用以最大化缓存的命中率。feature score 策略考虑了机器学习场景下额外的信息来辅助进行特征淘汰。

推荐系统在线学习过程中,会有大量低频 ID 进入系统,这些低频 ID 通常在未来的预估中根本不会出现,系统接收了这些特征后可能很快又会再次淘汰他们。为了防止低频 ID 无意义的进入和逐出对系统性能产生影响,GSET 中支持一些特征准入策略来过滤低频特征。同时为了提升 GSET 的效率和降低成本,快手还采用了新的存储器件 -- 非易失内存 (Intel AEP)。非易失内存能提供单机达到若干 TB 的近似内存级别访问速度。为了适配这种硬件,推荐团队实现了底层 KV 引擎 NVMKV 来支撑 GSET,从而很好的确保了万亿参数模型的线上稳定性。

展望未来

据快手推荐算法负责人,曾在 Google Research 担任 Staff Research Manager 的宋洋博士介绍,短视频行业有其独特的挑战,表现在用户量多,视频上传量大,作品生命周期短,用户兴趣变化快等多个方面。因此短视频推荐很难照搬传统视频行业精细化运营的做法,而需要依靠推荐算法对视频进行及时、精确的分发。快手推荐算法团队一直针对短视频业务进行深度定制和积极创新,提出了很多业界首创的推荐模型和想法,同时也给推荐工程架构团队带来了很多系统和硬件层面的挑战。

宋洋博士认为,快手精排万亿参数模型是推荐系统一个里程碑式的突破,它结合了序列模型,长短期兴趣模型,门控模型,专家模型等各个方面的优点,是至今为止工业界最全面,最有效的推荐模型之一。该模型已在快手的主要业务上全量上线为用户服务。在未来「算法 - 系统 - 硬件」三位一体的挑战和机遇可能会有更多,希望这将更进一步推动快手推荐系统在技术上的创新和突破,为用户增进体验和创造价值。

产业快手个性化推荐PPNet
1
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

激活函数技术

在 计算网络中, 一个节点的激活函数定义了该节点在给定的输入或输入的集合下的输出。标准的计算机芯片电路可以看作是根据输入得到"开"(1)或"关"(0)输出的数字网络激活函数。这与神经网络中的线性感知机的行为类似。 一种函数(例如 ReLU 或 S 型函数),用于对上一层的所有输入求加权和,然后生成一个输出值(通常为非线性值),并将其传递给下一层。

权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

感知技术

知觉或感知是外界刺激作用于感官时,脑对外界的整体的看法和理解,为我们对外界的感官信息进行组织和解释。在认知科学中,也可看作一组程序,包括获取信息、理解信息、筛选信息、组织信息。与感觉不同,知觉反映的是由对象的各样属性及关系构成的整体。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

收敛技术

在数学,计算机科学和逻辑学中,收敛指的是不同的变换序列在有限的时间内达到一个结论(变换终止),并且得出的结论是独立于达到它的路径(他们是融合的)。 通俗来说,收敛通常是指在训练期间达到的一种状态,即经过一定次数的迭代之后,训练损失和验证损失在每次迭代中的变化都非常小或根本没有变化。也就是说,如果采用当前数据进行额外的训练将无法改进模型,模型即达到收敛状态。在深度学习中,损失值有时会在最终下降之前的多次迭代中保持不变或几乎保持不变,暂时形成收敛的假象。

后验概率技术

在贝叶斯统计中,一个随机事件或者一个不确定事件的后验概率是在考虑和给出相关证据或数据后所得到的条件概率。同样,后验概率分布是一个未知量(视为随机变量)基于试验和调查后得到的概率分布。“后验”在本文中代表考虑了被测试事件的相关证据。

推荐系统技术

推荐系统(RS)主要是指应用协同智能(collaborative intelligence)做推荐的技术。推荐系统的两大主流类型是基于内容的推荐系统和协同过滤(Collaborative Filtering)。另外还有基于知识的推荐系统(包括基于本体和基于案例的推荐系统)是一类特殊的推荐系统,这类系统更加注重知识表征和推理。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

映射技术

映射指的是具有某种特殊结构的函数,或泛指类函数思想的范畴论中的态射。 逻辑和图论中也有一些不太常规的用法。其数学定义为:两个非空集合A与B间存在着对应关系f,而且对于A中的每一个元素x,B中总有有唯一的一个元素y与它对应,就这种对应为从A到B的映射,记作f:A→B。其中,y称为元素x在映射f下的象,记作:y=f(x)。x称为y关于映射f的原象*。*集合A中所有元素的象的集合称为映射f的值域,记作f(A)。同样的,在机器学习中,映射就是输入与输出之间的对应关系。

专家网络技术

专家网络建立在专家系统(expert system)的基础之上,它的本质是一个事件驱动性的(event-driven)神经网络。与普通神经网络不同,专家网络的线性和非线性处理更加复杂,因为它以知识库(knowledge base)和推理机(inference machine)为基础。根据知识库构造一个推理网络,用专家系统的推理规则(inference rule)定义网络节点的线性和非线性处理函数。知识库系统的主要工作是搜集人类的知识,将之有系统地表达或模块化,使计算机可以进行推论、解决问题。推理机是由算法或决策策略来进行与知识库内各项专门知识的推论,依据使用者的问题来推得正确的答案。因此,专家网络初始的拓朴结构由知识库确定,网络的动态性则由推理机确定。

聊天机器人技术

聊天机器人是经由对话或文字进行交谈的计算机程序。能够模拟人类对话,通过图灵测试。 聊天机器人可用于实用的目的,如客户服务或资讯获取。有些聊天机器人会搭载自然语言处理系统,但大多简单的系统只会撷取输入的关键字,再从数据库中找寻最合适的应答句。

语音识别技术

自动语音识别是一种将口头语音转换为实时可读文本的技术。自动语音识别也称为语音识别(Speech Recognition)或计算机语音识别(Computer Speech Recognition)。自动语音识别是一个多学科交叉的领域,它与声学、语音学、语言学、数字信号处理理论、信息论、计算机科学等众多学科紧密相连。由于语音信号的多样性和复杂性,目前的语音识别系统只能在一定的限制条件下获得满意的性能,或者说只能应用于某些特定的场合。自动语音识别在人工智能领域占据着极其重要的位置。

正则化技术

当模型的复杂度增大时,训练误差会逐渐减小并趋向于0;而测试误差会先减小,达到最小值后又增大。当选择的模型复杂度过大时,过拟合现象就会发生。这样,在学习时就要防止过拟合。进行最优模型的选择,即选择复杂度适当的模型,以达到使测试误差最小的学习目的。

参数模型技术

在统计学中,参数模型是可以使用有限数量的参数来描述的分布类型。 这些参数通常被收集在一起以形成单个k维参数矢量θ=(θ1,θ2,...,θk)。

在线学习技术

在计算机科学中,在线学习是一种机器学习方法。和立即对整个训练数据集进行学习的批处理学习技术相反,在线学习的数据按顺序可用,并在每个步骤使用未来数据更新最佳预测器。

强化学习技术

强化学习是一种试错方法,其目标是让软件智能体在特定环境中能够采取回报最大化的行为。强化学习在马尔可夫决策过程环境中主要使用的技术是动态规划(Dynamic Programming)。流行的强化学习方法包括自适应动态规划(ADP)、时间差分(TD)学习、状态-动作-回报-状态-动作(SARSA)算法、Q 学习、深度强化学习(DQN);其应用包括下棋类游戏、机器人控制和工作调度等。

语言模型技术

语言模型经常使用在许多自然语言处理方面的应用,如语音识别,机器翻译,词性标注,句法分析和资讯检索。由于字词与句子都是任意组合的长度,因此在训练过的语言模型中会出现未曾出现的字串(资料稀疏的问题),也使得在语料库中估算字串的机率变得很困难,这也是要使用近似的平滑n元语法(N-gram)模型之原因。

OpenAI GPT技术

GPT 是“Generative Pre-Training”的简称,从名字看其含义是指的生成式的预训练。GPT 也采用两阶段过程,第一个阶段是利用语言模型进行预训练,第二阶段通过 Fine-tuning 的模式解决下游任务。它与ELMO 主要不同在于两点:特征抽取器不是用的 RNN,而是用的 Transformer;GPT 的预训练虽然仍然是以语言模型作为目标任务,但是采用的是单向的语言模型。

多任务学习技术

多任务学习是机器学习的一个子领域,在该子领域中,可以同时解决多个学习任务,同时可以利用任务之间的共同点和不同点。与单独训练模型相比,这可以提高特定于任务的模型的学习效率和预测准确性。

推荐文章
暂无评论
暂无评论~