论文阅读-Multi-gate Mixture-of-Experts(MMOE)

MMOE

  1. Tittle

image

  • 总结:

  1. 针对的问题:
  2. 多任务学习,目的是通过构建一个模型,能够用在不同目标或者任务上。但是这种模型的预测质量往往对于任务之间的关系很敏感。
  3. 产生的新想法:
  4. 提出了Multi-gate Mixture-of-Experts(MMoE), 多门控制的混合专家网络。在MoE(专家网络)的基础上,通过在任务间共享专家网络的子模型,来使MoE适应多任务学习。

例如,在电影推荐系统中,通常需要同时优化多个目标,例如同时预测用户的购买率、用户的打分等。

研究表明迁移学习可以通过利用正则化(regularization)和迁移学习(transfer learning)来提升在所有任务上的表现。但是实际上,多任务学习模型往往不如单任务模型表现得好。因为基于DNN的多任务模型对于数据分布和任务之间的关系是很敏感的。对于任务之间的内在的冲突实际上对于预测在一些任务上是有影响的,特别是模型广泛共享的时候。

现状:

  • 通过给每个任务生成数据来训练,来衡量任务之间的差异,作为多任务学习的一个信息。但是实际任务通常很负责,很难去衡量任务之间的不同性。
  • 使用建模的方法去衡量任务间的不同性,而不是产出明显的差异。引入的更多的参数,在大规模推荐系统中不是很实用。
  • 论文中提出新的MMoE框架。

细节:

模型结构:

image

C为论文中提出的架构。

增加了很多的Expert,而且对于每一个训练任务(Tower),都会训练处一个单独的Gate,通过自己的Gate来确定使用不同的Expert.

公式细节:

b图中的one-gate MoE 模型:

image

n个expert, 每个expert前面乘以1个系数再累加。每个expert输出都是多维的,所以y也是多维的。 g ( x ) i g(x)_i g(x)i 是一个系数,累加和为1.

对于多个门:

image

区别在于有k个任务时,我们有k个gate,每个gate参数不共享。

image

值得学习的实验思路:

皮尔逊相关系数:

image

cosine相似度:

image

论文中有一段为了验证任务相关程度越大,模型的表现越好。所以人工生成了一些可以控制相关性的任务,生成方法如下:

  1. 理论基础:

image

上述可以通过给定一个p,来生成一个Label y相似度为p的两个任务。

注意在2式中,给定的p不是皮尔逊相关系数,利用的余弦相似度去近似的皮尔逊相似度。在线性的情况下,皮尔逊相似度就是给定的p,在非线性的情况下(生成的任务就是非线性的),**也是有正相关的。**正相关如下图(横轴是余弦相似度,纵轴是皮尔逊相关系数。):

image

接下是验证模型相关性对于多任务模型的影响,通过控制不同的相关系数p来训练模型看表现:

image

image

上图可以验证了相似度越大,多任务模型的表现效果就会越好。

### 面向方面的多头混合专家模型在顺序推荐系统中的实现与应用 #### 模型概述 面向方面(Facet-Aware)的多头混合专家(Mixture-of-Experts, MoE)模型旨在通过捕捉不同用户行为模式下的特定偏好来提高个性化推荐的效果。该方法利用多个子网络(即专家),每个专注于处理不同类型的信息片段或特征集,从而能够更细致地区分用户的兴趣点[^1]。 #### 架构设计 此架构由以下几个主要组件构成: - **输入层**: 接收来自序列化交互数据流作为输入; - **嵌入层(Embedding Layer)**: 将离散特征转换成连续空间内的低维表示形式; - **MoE 层 (Mixture of Experts Layers)** : 包含若干并行工作的专家模块以及一个门控机制(Gate Mechanism),用于决定哪些专家应该被激活参与预测过程;值得注意的是,在这里引入了aspect-aware的概念,意味着不同的专家可以针对具体的应用场景学习到更加专业的知识; - **融合层(Aggregation Layer)** :负责汇总各个活跃状态下的专家输出结果,并最终形成整体性的评分估计值; - **损失函数(Loss Function)** 和优化器(Optimizer): 定义目标并通过反向传播调整参数以最小化误差。 ```python import torch.nn as nn from transformers import BertModel class FacetAwareMHMoERecommender(nn.Module): def __init__(self, num_experts=8, hidden_size=768, aspect_embeddings=None): super().__init__() self.bert = BertModel.from_pretrained('bert-base-uncased') self.expert_layers = nn.ModuleList([nn.Linear(hidden_size, hidden_size) for _ in range(num_experts)]) self.gate_layer = nn.Linear(hidden_size, num_experts) self.aspect_embedding = nn.Embedding(len(aspect_embeddings), hidden_size) def forward(self, input_ids, attention_mask, aspects): bert_output = self.bert(input_ids=input_ids, attention_mask=attention_mask)[0][:, 0, :] gate_weights = nn.functional.softmax(self.gate_layer(bert_output), dim=-1) expert_outputs = [expert(bert_output + self.aspect_embedding(aspects)) for expert in self.expert_layers] output = sum(w * o for w, o in zip(gate_weights.unbind(-1), expert_outputs)) return output ``` 上述代码展示了如何构建这样一个基于BERT预训练语言模型初始化编码部分,并结合自定义的MoE结构来进行物品推荐的任务实例。其中`aspects`代表了当前会话所涉及的具体领域或者话题类别信息,这有助于增强系统的理解和响应能力。 #### 使用说明 为了有效部署这个框架,开发者需要准备如下资源: - 用户历史记录及其对应的标签/评价分数; - 文本描述或者其他辅助材料帮助理解上下文环境; - 明确划分好的方面列表,以便于指导各路专家的学习方向。 完成准备工作之后,按照常规机器学习项目流程执行即可——先对全量样本做初步探索分析,接着依据业务需求选取合适的评估指标体系开展实验验证工作直至找到最优配置方案为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值