MMOE(Multi-gate Mixture-of-Experts)

news2024/10/5 13:39:46

1.前提和动机

随着推荐技术的发展,目前越来越多的推荐场景,往往并不是单独的优化一个指标,比如:

视频推荐领域:推荐排序任务不仅需要考虑到用户点击率、完播率,也需要考虑到一些满意度指标,例如:对视频是否喜欢,用户观看后对视频的评分;

文章推荐领域:不仅希望用户点击阅读文章,还希望用户有更多的停留时长,互动,关注。

电商推荐领域:不仅希望用户更多对商品点击浏览,还希望用户看完商品后进行付费,点击率和转化率

所以,推荐系统做到后期,往往会朝着多目标学习进行演化,承担更多的业务目标,提高用户粘性。而多目标排序大致上有4种解决方案:

1.改变样本权重进行多目标优化:这是一种比较初始化的方式。比如主目标是点击率,分享功能是我们希望提高的功能。那么点击和分享都是正样本,分享的样本可以设置更高的样本权重。模型训练在计算梯度更新参数时,梯度乘以权重,对样本权重大的样本给予更大权重。通过这种方法,使得原始目标A会受到一定的损失以换取新增加目标B的增长,实现初级的多目标优化。

-优点:模型简单,不需要额外架构支持,没有增加算法复杂度

-缺点:没有对多目标建模,而是将多个目标折算成一个,折算权重不好确定

2.多模型分数融合:就是多个模型分别预测每个目标,最后的预测分数加权融合

-优点:模型简单

-缺点:线上服务时间开销大,部署困难,需要多个模型预测结果组合,并且不同目标难以量化评估重要性,如果样本部分特征稀疏,有的模型不好单独学习,模型融合的这几个超参数也不好确定

3.排序学习:同构预测两两物品之间相对顺序或物品序列之间顺序解决多目标学习的问题。比如:视频推荐为例,用户观看很长的i视频,点击了j视频,那么觉得观看比点击重要,假设u代表用户的偏好,则u_i>u_j。有了相对顺序,就可以使用排序学习的方式,融合多个目标,不需要序列多个模型。

-优点:优化目标顺序,不需要设计复杂超参,本身是单个模型的多个目标,线上服务压力小

-缺点:相对顺序不好构造,样本数量增大,训练速度慢,样本不平衡会被放大,比如有的用户有10次点击,有的只有1次点击,10次的会有更多机会训练

4.多任务学习:这个才是目前最常用的技术,多任务学习,可以简单的理解是用一个网络同时完成多个任务的优化,有很多优势,比如多个任务共享一个模型,占用内存少,计算速度快,并且关联任务还可以通过共享信息,互相补充,提升彼此的表现。但是,同样面临很多挑战,比如不同任务究竟如何融合呢?万一多个目标不怎么相关怎么办?目标的重要性不同,这个在训练模型的时候如何体现等等。

以下是多任务学习的经典论文。

MMOE是2018年谷歌提出来的,现在依然是非常常用的模型范式,MMOE的全称是Multi-gate Mixture-of-Experts,对于这个优化任务,引入了多个专家进行不同的决策和组合,最终完成多目标的预测。解决的是硬共享里面如果多个任务相似性不是很强,底层的embedding学习反而相互影响,最终都学不好的痛点。

2.MMOE?hard-parameter sharing

再看MMOE之前,我们先了解下多任务里面的hard-parameter sharing.

推荐系统中,即使同一个场景,常常也不只有一个业务目标。在youtube的视频推荐中,推荐排序任务不仅需要考虑用户点击率,完播率,也需要考虑到一些满意度指标,例如,对视频是否喜欢,用户观看后对视频的评分;在淘宝的信息流商品推荐张,需要考虑到点击率也需要考虑转化率;而在一些内容场景中,需要考虑到点击和互动、关注、停留时长等指标。

模型中,如果采用一个网络同时完成多个任务,就可以把这样的网络模型称为多任务模型,这种模型能在不同任务之间学习共性以及差异性,能够提高建模的质量以及效率。常见的多任务模型的设计范式大致可以分为三大类:

--hard parameter sharing的方法:这是非常经典的一种方式,底层是共享的隐藏层,学习各个任务的共同模式,上层用一些特定的全连接学习特定任务模式

这种方法目前用的也有,比如美团的猜你喜欢,知乎推荐的ranking等,这种方法最大的优势是task越多,单任务更加不可能过拟合,即可以减少任务之间过拟合的风险。但是劣势也非常明显,就是底层强制的shared layers难以学习到适用于所有任务的有效表达。尤其是任务之间存在冲突的时候。MMOE中给出了实验结论,当两个任务相关性没那么好(比如排序中的点击率与互动,点击与停留时长),此时这种结果会遭受训练困境,毕竟所有任务底层用的是同一组参数。

--soft parameter sharing:这个范式对应的结果从MOE->MMOE->PLE等。即底层不是使用共享的一个shared bottom,而是有多个tower,称为多个专家,而是有多个tower,称为多个专家,然后往往再有一个gating netwokrs在多任务学习时,给不同的tower分配不同的权重,那么这样对于不同的任务,可以允许使用底层不同的专家组合去进行预测,相较于上面所有任务共享底层,这个方式显得更加灵活。

--任务序列依赖关系建模:这种适合于不同任务之间有一定的序列依赖关系。比如电商场景里面的ctr和cvr,其中cvr这个行为只有在点击之后才会发生。所以这种依赖关系如果能加以利用,可以解决任务预估中的样本选择偏差(SSB)和数据稀疏性(DS)问题

样本选择偏差:后一阶段的模型基于上一阶段采样后的样本子集训练,但最终在全样本空间进行推理,带来严重泛化性问题

样本稀疏:后一阶段的模型训练样本小于前一阶段任务

ESSM是一种较为通用的任务序列依赖关系建模的方法,除此之外,阿里的DBMTL,ESSM2等工作都属于这一个范式。

通过上面的描述,能大体上对多任务模型方面的几种常见建模范式有所了解,然后也知道了hard parameter sharing存在的一些问题,即不能很好的权衡特定任务的目标与任务之间的冲突关系。

而这也就是MMOE模型提出的一个动机所在了。

上面这三张图分别是hard parameter sharing,OMOE,MMOE模型的结构图。

3. MMOE模型的理论以及相关细节

3.1 混合专家模型

我们知道共享的模型结构,会遭受任务之间冲突而导致可能无法很好的收敛,从而无法学习到任务之间的共同模式。这个结构也可以看成是多个任务共用了一个专家。

先抛开任务关系,我们发现一个专家在多任务学习上的表达能力很有限,于是乎,尝试引入多个专家,这就慢慢的演化出了混合专家模型。公式表达如下:

这里的y表示的是多个专家的汇总输出,接下来它要过特定的任务塔去得到特定任务的输出。这里还加了一个门控网络机制,就是一个注意力网络,来学习各个专家的重要性权重 \sum_{i=1}^{n}{​{g(x)}_i}=1f_i(x)就是每个专家的输出,而 g(x)_i就是每个专家对应的权重。虽然这个东西无非是单个专家的基础上多引入了几个全连接网络,然后又给这几个全连接网络加权,但还是蕴含了厉害的思路:

1.模型集成思想:这个东西很像bagging的思路,即训练多个模型进行决策,这个决策的有效性显然要比单独一个模型来的靠谱,不管是从泛化能力、表达能力、学习能力上,应该都强于一个模型。

2.注意力思想:为了增加灵活性,为不同的模型还学习了重要性权重,这可能考虑到了在学习任务的共性模式上,不同的模型学习的模式不同,那么聚合的时候,显然不能按照相同的重要度聚合,所以为各个专家学习权重,默认了不同专家的决策地位不一样。

3.multi-head机制:从另一个角度看,多个专家其实代表了多个不同head,而不同的head代表了不同的非线性空间,之所以表达能力增强了,是因为把输入特征映射到了不同的空间中去学习任务之间的共性模式。可以理解成从多个角度去捕捉任务之间的共性特征模式。

但是这种机制也存在问题,MOE使用了多个混合专家增加了各种表达能力,但是呢,一个门控并不是很灵活,因为这所有的任务,最终只能选定一组专家组合,即这个专家组合是在多个任务上综合衡量的结果,并没有针对性了。如果这些任务都比较相似,那就相当于用这一组专家组合确实可以应对这多个任务,学习到多个相似任务的共性。但如果任务之间差得很大,这种单门控控制的方式就不行了,因为此时底层的多个专家学习到特征模式相差可能会很大,毕竟任务不同,而单门控机制选择专家组合的时候,肯定是选择出那些有利于大多数任务的专家,而对应某些特殊任务,可能学习的一塌糊涂。

所以,这种方式的缺口很明显,这样,也更能理解为啥提出多门控控制的专家混合模型了。

3.2 MMOE结构

再单独放一下MMOE的网络结构图。

Multi-gate Mixture-of-Experts(MMOE)的魅力就在于在OMOE的基础上,对于每个任务都会涉及一个门控网络,这样,对于每个特定的任务,都能有一组对应的专家组合去进行预测。更关键的是,参数量还不会太多。公式如下:

这个改造看似简单,只是在OMOE上额外多加了几个门控网络,但是起到了杠杆般的效果,这里来看下大佬的理解:

  • 首先,就刚才分析的OMOE的问题,在专家组合选取上单门控会产生限制,此时如果多个任务产生了冲突,这种结构就无法进行很好的平衡。而MMOE就不一样了。MMOE是针对单个任务都单独有个门控选择专家组合,那么即使任务冲突了,也能根据不同的门控进行调整,选择出对当前任务有帮助的专家组合。所以,我觉得单门控做到了针对所有任务在专家选择上的解耦,而多门控做到了针对各个任务在专家组合选择上的解耦
  • 多门控机制能够建模任务之间的关系了。如果各个任务之间冲突,那么此时有多门控的帮助,此时让每个任务独享一个专家,如果任务之间能聚成几个相似的类,那么这几类之间应该对应的不同的专家组合,那么门控机制也可以选择出来。如果所有任务相似,那这几个门控网络学习到的权重也会相似,所以这种机制把任务的无关,部分相关和全部相关进行了一种统一。
  • 灵活的参数共享,这个可以和hard模式或者是针对每个任务单独建模的模型对比,对于hard模式,所有任务共享底层参数,而每个任务单独建模,是所有任务单独有一套参数,算是共享和不共享的两个极端,对于都共享的极端,害怕任务冲突,而对于一点都不共享的极端,无法利用迁移学习的优势,模型之间没法共享信息,互为补充,容易遭受过拟合的困境,另外还会增加计算量和参数量。而MMOE处于两者的中间,既兼顾了如果有相似任务,那就参数共享,模式共享,互为补充,如果没有相似任务,那就独立学习,互不影响。又把这两种极端给进行了统一。
  • 训练时能快速收敛,这是因为相似的任务对于特定的专家组合训练都会产生贡献,这样进行一轮epoch,相当于单独任务训练时的多轮epoch。

所以,在不产生太大的参数开销的同时,能通过一个小小的改动,既建模了任务关系,又灵活参数共享,又减少训练时间,是不是很powerful呢

MMOE整体结构不复杂,内容就整理这么多。

4.小结

最后,我们看下为什么多任务学习是有效的呢?这里看下一个别人还不错的答案:

多任务学习有效的原因是引入了归纳偏置,两个效果:

互相促进:可以把多任务模型之间的关系看作是互相先验知识,也称为归纳迁移,有了对模型的先验假设,可以更好提升模型的效果。解决数据稀疏性其实本身也是迁移学习的一个特性,多任务学习中也同样会体现。

泛化作用:不同模型学到的表征不同,可能A模型学到的是B模型所没有学好的,B模型也有其自身的特点,而这一点很可能A学不好,这样一来模型健壮性更强。

大佬的推荐算法导图。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/661610.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

优秀java实习报告范文5篇

优秀java实习报告范文(一) 一:实习介绍 1)实习题目 学生信息管理系统的设计与开发 2)实习目的 《Java程序设计》课程是电子商务专业的一门专业必修课程,特针对此课程进行为期三周的实践教学,旨在提升本专业学生对此课程中的理论知识的综合应用能力、提高…

微信研发体系下的分布式配置系统设计实践

腾小云导读 对很多的开发者而言,处理运营素材反复变更等需求场景不是一件轻松的事。开发者通常需要定制化地进行数据清理、格式转换和工具开发等等。在这个时候,建设分布式配置系统就显得尤为重要。本文旨在分析分布式配置系统的必要性、可行性及其关键…

SpringBoot的日志

SpringBoot的日志 🔎日志是什么🔎日志的作用🔎日志级别日志级别的作用日志级别的分类日志级别的设置 🔎打印日志打印日志具体内容划分 🔎常用的日志框架为什么这样设计对比System.out.ptintln()与日志框架 &#x1f50…

Kubernetes那点事儿——暴露服务之Ingress

Kubernetes那点事儿——暴露服务之Ingress 前言一、ingress负载均衡器Ingress Controller路由规则Ingress 二、Ingress Controller三、案例 前言 在 k8s 集群中,如果我们将服务暴露出来,提供访问,可以使用Nodeport方式,但是Nodepo…

SIG Mesh协议学习

1. 简介 Bluetooth SIG组织在2017年7月17日发布了蓝牙Mesh标准. 蓝牙Mesh不同于传统Bluetooth Low Energy(BLE)协议的1对1, 1对多的通信方式, 它实现了多对多的通信. 这使得mesh网络中的各个节点之间可以相互通信. 蓝牙Mesh协议建立在BLE的物理层和链路层之上, 也就是说它可以…

MachXO2系列 FPGA LCMXO2-7000HC-4TG144C-可编程逻辑器件介绍

莱迪思深力科MachXO2系列LCMXO2-7000HC-4TG144C是高度可配置的串行逻辑器件(PLD),具有低误差,具有和高系统集成等特性。MachXO2系列逻辑密度增加了3倍,嵌入存储增加了10倍,静态降低100倍,而成本…

动态获取项目根目录的两种方式

说明:如果项目上传的文件是存储在本地的,为了项目可以在其他电脑上也可能正常运行,可以将文件上传至项目的static文件夹里,并将文件路径保存至数据库中,前端显示时使用也可以通过该路径访问。要想获取到本地项目static…

如何评估大型语言模型(LLM)?

编者按:近期几乎每隔一段时间,就有新的大语言模型发布,但是当下仍然没有一个通用的标准来评估这些大型语言模型的质量,我们急需一个可靠的、综合的LLM评估框架。 本文说明了为什么我们需要一个全面的大模型评估框架,并…

DOCker安装(一)

DOCker的安装 1、简介 Docker使用客户端-服务器(C/S)架构模式,使用远程API来管理和创建Docker容器。 Docker容器通过Docker镜像来创建。 容器之间互不干扰 容器与镜像的关系类似于面向对象编程中的对象与类。 对象->容器 镜像->类 通过镜像来创建容器 …

如何用MarkDown轻松排版和格式化文档?

前言 大家好哦!我写作用的语言是MarkDown,真的非常好用,在本文中我将一字字的教你如何使用这个轻量化,容易上手的轻标记语言。 1. 什么是MarkDown MarkDown是一种轻量级的标记语言,它可以在文本中通过简单的标记实现…

基于Java+SpringBoot+Vue+uniapp微信小程序实现仓储管理系统

博主介绍:✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

OpenHarmony端云一体化应用开发快速入门练习(上)基础配置

一 、整体说明 SDK版本更新说明 二、开发流程 集成SDK (一)前提条件 安装HUAWEI DevEco Studio 3.1及以上版本,配置 SDK API Version 9及以上,Compile SDK Version 9及以上,Compatible SDK Version 9及以上。 &#…

mpi实现矩阵乘法,卷积,池化(gemm,covn,pooling)

矩阵乘法: 卷积: 池化: Mpi基本原理: 1.什么是MPI Massage Passing Interface:是消息传递函数库的标准规范,由MPI论坛开发。 一种新的库描述,不是一种语言。共有上百个函数调用接口,提供与C和F…

【Rust日报】2023-06-16 Rust在Stack Overflow上连续8年成为最受欢迎语言(文末有彩蛋)...

推荐23个Rust Top开源项目 根据LibHunt网站Rust主题下有关统计,这里列出前5个Rust Top开源项目:deno、rust、tauri、alacritty、rustdesk。 阅读更多:Top 23 Rust Open-Source Projects https://www.libhunt.com/topic/rust Tweets&#xff1…

微信小程序触底加载scroll-view

微信小程序触底加载 scroll-view 了解什么是触底加载? 需求:有个固定高度的容器,实现容器里面的内容触底加载 1、内容盒子的高度 2、盒子里内容的总高度 3、滚动条的scrollTop 触底加载的原理就是 当里面的容器触底的时候进行分页&#xff0…

【题解】[ABC306G] Return to 1(数论)

【题解】[ABC306G] Return to 1 题目链接 ABC306G - Return to 1 题意概述 本题多测,\(T\) 组数据。 对于每组数据,给定一个 \(n\) 个点 \(m\) 条边的有向图,无重边自环。 问从顶点 \(1\) 出发,能否恰好走 \({10^{10}}^{100}\) 步…

【八大排序(七)】归并排序初级篇-递归版

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:八大排序专栏⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习排序知识   🔝🔝 归并排序 1. 前言2. 归并排序基本思路3. …

在数组中各位置上计算该位置以前所有元素的累加结果(Nan值视为0)numpy.nancumsum()

【小白从小学Python、C、Java】 【等级考试500强双证书考研】 【Python-数据分析】 在数组中各位置上计算该位置以前 所有元素的累加结果(Nan值视为0) numpy.nancumsum() [太阳]选择题 以下说法错误的是: import numpy as np a np.array([[n…

使用兮克 2.5G 交换机将北京联通 EPON 改为 ODI 猫棒接入

使用兮克 2.5G 交换机将北京联通 EPON 改为 ODI 猫棒接入 最近入手了兮克2.5G交换机(兮克SKS1200-8GPY1XF),有 8 个 2.5G 电口和 1 个 10G SFP 光口;支持多种组网模式,其中一种是支持使用猫棒接入,由路由器…

聊聊微服务到底该如何划分

背景 现在动不动就是微服务架构,但是微服务划分的合理与否会极大的影响开发过程中的复杂度,划分的重要性不言而喻,但是在微服务划分这条路上并没有银弹,有的说DDD可以解决微服务的划分问题,吕哥想说的是那只是理论上的…