指南:本文将简要介绍推荐模型的开发历史,现状以及下一个研究趋势,并关注模型培训和嵌入数据模型的优化。都包括以下主要部分:
------
首先,简要介绍了推荐模型的开发。在2006年开始于2006年,通过协作过滤过滤更建议。它还包括最近最近的邻居,矩阵分解-MF)和主题模型的矩阵分解-mf)。
十年后,许多公司开始介绍使用一系列通用线性模型的模型,包括逻辑回归,诸如分解机等低级别模型和基于域信息的信息。- 意识分解计算机)和一些学习排名的方法,例如BPR,RankSVM,Lambda等级等。
十五年后,美国有线电视新闻网(CNN)在视觉任务方面取得了一些突破性的进步。深度学习模型在行业中引起了很多关注,并提出了许多模型。
18年后,研究开始倾向于开发推荐模型,例如增强学习。18年前,它被用作多臂插槽机器,但Alphago击败了Go World Championship。
总体发展趋势是该模型逐渐从人工体验到自动化,而深度模型的骨干越来越集中在某个模型上。预计自适应模型有望解决业务问题。
点击率预测模型是建议系统中的核心问题。例如,如上图所示,网页上有一些内容,网页上有一些内容,并且一些位置留给广告。广告是网站的相对较大的收入来源。要向用户展示广告,您需要预测用户单击特定页面上的广告的可能性。单击预测是执行此类任务。预测的准确性决定了整个建议系统或广告系统和用户体验的收入。
在2021年,IJCAI有这样的调查文件。这是上海Jiaotong大学老师Zhang Weinan和华为Noah的实验的联合作品。
①用户行为挖掘
从本文的角度来看,Ali的某些工作,包括Ali的母队,在2017 - 2018年进行了基于DNN的深层兴趣网络 - 一些建模。这可以反映出该模型中用户的历史兴趣,为了获得更好的预测结果。在2019年,阿里的母队添加了一个基于DIN的RNN模块来启动Dien模型。DIN只能以相同的方式对待用户行为,并以相同的方式对待所有历史行为,而无需注意序列因此,行为之间的历史之间的关系。因此,Dien模型为用户建模添加了RNN模型,该模型可以适合序列关系。同年,另一个Ali团队启动了BST模型,使用用户行为模型中的变压器使用Transformer。目前,许多公司也在使用它,包括去年Kuaishou发布的万亿参数模型。它还使用变压器适合用户对用户长期期限的长期长期。
②结合特征挖掘
另一个是一个组合特征的采矿模型。我个人认为它可以分为三类。第一类就像宽阔的模型。Google首先建议他们在模型中添加了显示的显示,即特征特征的特征的新特征,以及线性的线性。部分,该模型会记住这些特征。当当前的组合特征出现时,它将直接将其重量作为预测。第二种模型是诸如DeepFM之类的模型,该模型可以称为双茶塔模型,双茶塔结构,例如DCN,XDEEPFM,XDEEPFM,和背后的许多模型。分解模块的组合用于构建模块的两个特征。这两个特征的组合关系是适合向量或某些复杂结构的乘法。在建模这种关系之后,输出将直接输入最终输出而无需进入神经网络。相反,第三种网络(例如PNN)也将使用分解模式来建立特征之间的合并关系,但是建立组合关系后,输出将被馈入模型MLP,并将允许MLP再次让MLP再次出现。与这些特征的关系。
如上图所示,华为Noah的实验室在20 - 21年的工作中显示了一些实验结果。它已经公开发表(Fuxitr:点击率预测的开放式标记[J]。arxiv Preprint Arxiv:2009.05794,2020。)。该论文复制了更具代表性的深度学习点击率的预测模型 -从15年中学习,并在几个开放数据集中进行调整和加强。实验结果表明,结构创新所带来的模型创新和收入越来越小。公共数据集的结果表明,结果并不大。当然,并不是说这些年模型没有发展。当行业使用模型进行实验时,他们多次使用自己的私人数据集。数据组件具有不同的特征。该模型在这样的私人数据组装中具有好处。规范化的修改模型。例如,在17年内,许多模型在截断的三重奏没有找到它。现在将这些旅行带入17年的培训模型中,以弥补以前模型的缺点,因此他们看不到差异以模型创新,如何结合数据设计模型以及如何找到一些普遍的东西 -用于推荐搜索和其他方案的参考策略是一个很好的突破点。
基于合并的特征建模和用户行为建模,提供了两个方向。在过去两年中,这些作业也已在KDD和Sigir上发布。
首先是组合特征建模的方向。当许多深度模型建模时,显示功能被用作输入。这是将人工功能工程带来的。但是,运河运河模型不使用显示功能,而是将显示的互动特征(组合功能)馈入模型,并且显示屏的改进也很明显。设计功能或如何选择显示哪些功能,以及哪个隐藏的十字也是一个研究方向。此外,许多基于交叉组成的模型中的许多类型的建模在所有特征的中间是交叉模型,但并非全部特征适合此交叉。可以交叉的,在交叉后会带来负面效果,这需要模型自动选择或人为地尝试。
上图显示了华为Noah's Ark Lab在2020年发布的Autofis模型。该模型添加了一组参数,用于自动学习哪些特征和哪些功能并不重要。通过搜索的第一个阶段,筛选了重要的功能。,并将其删除,然后重新输入模型。这种效果得到了显着改善。
第二个方向是用户行为建模。如何使数据更有效?实际上,也提到了许多任务,也就是说,使用较长的循环行为数据。但是使用更长的循环行为数据将带来两个问题。第一个问题是数据序列将很长。建模时,其参数将非常大,并且训练也不容易。另一个问题是,只有少数用户行为序列可能很长,而大多数其他用户行为序列稀疏,导致模型培训的困难。
为了应对这些问题,上海Jiotong大学的Ali和老师Zhang Weinan发表了类似的工作:SIM和UBR。这些工作的想法相似:将检索模块添加到行为数据中。如上图所示,用户行为之后进来,它将对模块进行建模,例如RNN或Transformer,并将嵌入用户的嵌入,然后将其注入模型中,并以其他功能进行预测。此处的检索基于目标,即预测目标是筛选或权衡用户的行为。基于此操作,该模型将得到显着改进。此外,鉴于如何制作更有效的数据,该报告将介绍如何处理连续特性和更好的建模组合特性。
推荐的模型研究和一个方向是如何处理大嵌入。在两个方面,一方面,如何使嵌入较小的嵌入,即压缩嵌入;另一方面,如何使用更新的分布式体系结构以更高效,更低的成本训练大型嵌入。
也有几类用于压缩方法。这里有一些有趣的工作。第一个是Twitter在Recsys 2021中发表的双重哈希方法。该方法首先将特征分为高频和低频,因为高频特征的相对比例相对较小,分配了每个高频分配的独立嵌入一个独立的嵌入,并且它的空间不是很大。对于低频特征,双哈希方法用于压缩,哈希方法是尽可能减少冲突。第二作业是BAIDU在Sigmod2021中发布的嵌入参数在INT16培训上。基于低位参数直接挑战培训模型。第三个工作相对偏见。这是Google在KDD2021上发布的DHE模型,它删除了嵌入式表。
如上图所示,该模型的左侧是传统的嵌入处理方法,编码功能,获得ID,然后使用ID在大嵌入式表中检查表以获取其相应的嵌入。大嵌入。假定特征为1亿,然后该表可能是数百GB。很难维护这种嵌入式表和训练模型。Google的DHE基于原始输入,并使用1024哈希功能来制作硬编码的数据,但是如何设计(未提及)对功能进行了简短的指导。。基于其硬编码的1024尺寸输出,它将再次进行。多层网络用于恢复嵌入式,这意味着他相信他认为1024维哈希函数已编码,并且多层层神经网络可以还原嵌入表的参数。它在某些矩阵分解模型上进行了实验,并且实验效应显示精度并没有损失太多。
另一个方向是新的大型分布式训练体系结构。我们最熟悉的是,最常用的是基于Horovod的数据同步GPU.Tencencent在Sigir2020中发布的DES已通过与硬件结合的模型设计了分布式解决方案。当然,还有许多其他任务。后者的第四部分将介绍华为Noah的方舟实验室的ScaleFreectr模型,以简要介绍其中一些培训方法。
------
以下介绍了华为的自动,这项工作已在KDD2021中发布。熟悉深层模型的学生可能非常清楚。我们的模型基本上是遵守嵌入+MLP。现有工作更专注于如何设计网络体系结构,并且设计体系结构在功能组合部分中设计。嵌入较少的研究。这里是现有的相关工作。
如上图所示,它是离散功能的处理方法。它是一hot的代码,然后是嵌入查找的代码。对于连续特征的处理方法,研究和开发主要分为三类。第一类是他们不使用嵌入。对原始值进行一些更改,或在归一化之后输入模型。第二类是字段嵌入,这是每个域的嵌入。第三类是离散的连续特征,然后将其视为离散特征。
第一种方法是不嵌入。在这里使用了几种模型。第一个是宽而深的。在引入中,使用原始值。另一个是Google的YouTubitent。另一个是Facebook DLRM模型。连续性的处理方法是将所有连续性输入到神经网络,然后将其压缩到通过神经网络的嵌入维度的向量中。然后,嵌入和其他离散特性嵌入了concat,根据其模型进行不同的计算。此方法代表弱功能,因为它不能很好地表示此处的原始延续功能。
处理连续性的第二种方法是字段嵌入,每个域都有一个嵌入。在域中安装是该域的连续值,该域是由其域启用的。该方法的问题是该能力是弱,然后是弱点。不同值之间的线性关系。
第三种方法是离散的。有许多离散的方法,例如,相等频率,等效和额外的日志或基于树的模型进行预训练。但是,这种方法中有两个问题:首先,它是两个阶段,离散性的过程无法优化到最后。此外,如下图所示,存在一些边界问题,假设我们将我们压入Press40、41分,我们被称为40岁以下的青年,而超过41分为中间。,可以学到的嵌入是具有很大差异的嵌入。
为了应对这些问题,华为提出了一种连续的嵌入方法自动。它分为三个模块。第一个模块是元装置。假设有几桶。每个枪管都有一个场嵌入。可以学习这种嵌入。要学习,还有一个称为自动离散化的模块。该模块是将原始值映射到HD矢量。该功能是了解将连续性分配给H桶的概率,然后根据分布概率和元嵌入,您将获得最终的连续性嵌入。
为了验证该模型是否有效,我在这里已经尝试了两个公共数据集和一个私人数据集。与前面提到的几种不同的嵌入方法相比,您可以查看是否使用此离散器。在该方法的时间中,与这种嵌入或嵌入的嵌入相比,其效果相对显着改善。
相对于离散方法,自动方法将进一步改进。本文还试图在不同模型中添加自动模块,以查看自动对普通模型是否有效。在这里,您可以看到它(上图的一部分)。实际上,实际上是实际上是一些改进。本文还试图将模型设置为华为内部的业务。基线组的连续特征是专门设计的。通过许多音调人参来选择离散策略,实验组使用原始连续性,然后将自动派添加到模型中,以在线查看在线查看在线查看在线以查看在线。效果具有百分比点击率和ECPM的两个指标的改进。
------
这部分介绍了华为Noah的ARK实验室的第二个作业 - 交叉 - 特征模型。这项工作尚未发布,但我们已经将其放在Arxiv上。
如上图所示,组合特征建模方法分为三类,即天真,记忆和分解。
第一种类型就像FNN模型一样,即,不是建模,每个功能都有一个嵌入。在嵌入的所有特征之后,concat剪接到网络中。在网络本身学习之后,您要学习的是您想要的。
第二类就像宽阔的模型。这是一种基于内存的方法的方法,它是显示结构和组合特征。该特征的特征是交叉 - 到descartes的积累,然后是新结构特征输入模型。该模型将记住此功能,并且该信号相对强。
第三种方法是分解方法,例如IPNN模型,不同域之间的交叉关系以及对乘法方法进行建模的乘法方法。结合起来。如果我们尝试一下,我们需要进行很多实验。它可以自动确定是否要组合的特征以及它们之间应使用哪种组合。学习关系,这是我们工作的动机。
基于此目标,我们提出了optlnter。如上图所示,顶部有一个分类器,然后中间有一个特征交互层,然后是一个嵌入层。一方面,将建立每个功能的原始方法来构建其嵌入输出(原点嵌入表),另一件事是通过交叉产品转换模块学习跨性别嵌入。如上图所示,转换模式扩展。您可以看到该图中的蓝色模块是一个选择模块。通过选择模块,在两个域中的交叉嵌入最终输出这两个域。有三个输入选择模块:第一个是使用分解方法嵌入的嵌入,一种基于这两个功能的乘法方法,基于这两个功能,然后获得的输出;然后,第二个输入是根据业务选择的特征直接输入xiaobai。它并使用空嵌入。然后,第三个输入是通过十字或笛卡尔分配功能以分配此功能的独立嵌入。此类输入,输入选择模块,选择模块最终将选择一个嵌入。选择模块是一个软磁性函数(如上图所示)。该功能中有一些参数可以学习,最终它将学习一个结构参数。基于此框架,训练分为两个阶段。第一阶段是搜索,第二阶段是重新培训。如果您搜索,则不会展开此具体细节。实际上,您需要学习一个参数。此参数是结构的参数。对于每个特征,他们使用xiaobai,内存, 或使用分解来建模。通过训练,他们将获得一个最佳参数,然后在阶段到达再培训。我们将根据最佳参数重建我们的网络,然后根据重建的网络重新培训模型。
对于上述方法,实验是在包括三个公共数据集的多个数据集中进行的。这三个数据集是用于CTR预测的常用数据集,并在私有数据集中进行了实验;这是多个数据集的实验结果。在此的比较是LR的比较,该比较不会构建任何功能,分解方法和内存方法方法。
------
第四部分也是对华为作品的分布培训 - 大型嵌入模型。这项工作发表在Sigir2021中。
如上图所示,推荐的模型通常包括两个部分,一个是参数嵌入,部分是MLP。两个部分在数据和存储方面具有不同的特征。安装参数很大且相对较小。GPU的存储器的内存相对较小。显然还不足以保存嵌入。如上所述,有数百个G,诸如V100之类的图形卡具有32 G。明显不切实际。MLP的第二部分,其参数相对较小,但是计算量相对较大。如果您训练MLP,则使用CPU的效率远低于GPU。在这里,我们简要介绍了训练模型的特征。
这是一个简短的提及,为什么要嵌入大。这是因为建议中有许多高维的稀疏输入。什么是高纬度和稀疏性?例如,上图中的示例,样品具有三个域的特征。只有一定位置值得。此示例中特征的尺寸相对较低。实际上,像用户或某些交叉功能一样,其尺寸将非常高,并且功能的数量也很大。在建议中,稀疏输入映射到低维和密集的载体。当我们的稀疏功能变得大,达到数十亿甚至数百亿美元时,其嵌入桌也将变得非常好。如上图的右下部分所示,这是Kuaishou上次发布的模型一年,比大型Google大型模型大。这是因为它在嵌入式表中具有许多功能。
简要介绍几种现有的并行培训方法:
第一类是数据并行的数据,例如基于All-Reduce的HOROVOD。此方法将完整的型号副本保存在每张GPU卡中。它需要存储在模型中。不足以保存完整的模型,即使可以存储模型,例如,基于这样的尺寸模型,当它是通信时,有十几个G沟通延迟可能与其计算带相比其计算带的比较。缩短时间更多,这意味着您可以增加节点以提高性能。
第二类是由Nvidia提出的。先前的计划是多卡 - 切割方案,但现在它支持了CPU嵌入的存储。他们将此方法切成多个部分,然后在每张卡的每张卡中都切成多个部分。有存储器的一部分,MLP在每个节点上都有一个完整的模型。通过全部通信与所有通信和MLP通信,并通过全减少通信。该解决方案存在一个问题,即当它的模型很大时,有很多GPU卡,其成本将非常高。
第三种方法是使用CPU的内存来保存嵌入,然后使用GPU保存MLP。CPU负责存储负责,MLP负责计算上一段和反向梯度。对于此方法,,如果我们使用同步训练,则存在问题,因为嵌入具有CPU侧,需要从CPU传输到GPU。梯度需要从GPU传输到CPU。
为了应对这些问题,华为提出了一个自己的分布式培训框架,称为ScaleFreectr。该框架分为三个部分。第一部分是主机经理。它是嵌入式单元和缓存的维护。在模块中,数据加载器负责从硬盘到内存的数据读取数据,并进行一些重型操作。第三部分是GPU工人。它是负责人的正向计算和反向训练,然后将梯度更新为缓存的嵌入。在这里,嵌入参数的释放,GPU缓存的维护以及主机管理器的嵌入参数更新。由于缓存,我们可以实现数据阅读,参数头发和模型训练。它尽可能提高资源利用率的效率,从而改善最终吞吐量。
如上所示,这是一个更详细的图片。在这里,您可以看到CPU侧存在于嵌入中。如果有多个节点,则每个节点负责嵌入的存储,然后更改主机管理器,则负责绿色缓存与嵌入之间的相互作用。主机管理器将根据当前数据进行下一批数据。提前起床后,也就是说,在GPUWorker完成了先前的批次培训后,您可以直接从缓存中获取所需的参数。因此,GPU相对较高。使用全减MLP之间的通信。
------
最后,简单地摘要。从算法和培训方法的角度来看,有三个有趣的方向:
如何使用数据设计设计更好的模型以使模型更具针对性。如何进一步提高培训效率,包括如何使用更多数据以及更快的模型的迭代效率。如何增强数据处理的自动化程度,选择和模型调整,从而解放业务或算法学生,以便他们更多地关注模型数据,算法和策略。
这就是今天的分享,谢谢。
本文最初发表在微信公共帐户“ DataFuntalk”中。欢迎转载分享。请留言或评论。