新闻详情

新闻详情

首页 / 资讯中心 / 详情

DeepCTR MMOE 多任务学习模型实战指南:源码解析、参数详解与完整训练示例

发布时间:2026/9/27 11:09:26来源:尧图网络
DeepCTR MMOE 多任务学习模型实战指南:源码解析、参数详解与完整训练示例
人工智能深度学习机器学习【免费下载链接】DeepCTREasy-to-use,Modular and Extendible package of deep-learning based CTR models .项目地址https://gitcode.com/gh_mirrors/de/DeepCTR点击查看免费下载本文聚焦 DeepCTR 开源仓库中deepctr.models.multitask.mmoe模块对应 Sphinx 文档 deepctr.models.multitask.mmoe.rst完整讲解基于 Multi-gate Mixture-of-Experts多门控专家混合架构的多任务 CTR/CVR 建模方案。你将掌握 MMOE 的函数签名与全部参数语义、底层实现细节、参数约束校验逻辑以及基于 examples/run_mtl.py 的端到端可运行训练评估流程。一、MMOE 是什么多任务学习中处理任务相关性的经典方案在真实的推荐、广告、搜索业务中模型往往需要同时预测多个目标例如电商场景下的 CTR点击率与 CVR转化率、Census 收入预测场景下的是否高收入与是否未婚等。多任务学习Multi-Task Learning, MTL通过共享底层表示来提升数据利用率与泛化能力但不同任务之间可能存在负迁移negative transfer——共享过深反而互相干扰。MMOEMulti-gate Mixture-of-Experts由 Ma 等人在 KDD 2018 论文Modeling task relationships in multi-task learning with multi-gate mixture-of-experts中提出其核心思想是用多个并行的专家网络Experts共享输入表示再为每个任务配备一个独立的门控网络Gate由门控网络按任务动态地对各专家输出做加权求和。这样每个任务都能学到适合自己的专家组合方式从而在共享表示与任务独立性之间取得平衡。DeepCTR 将该架构实现为可直接调用的 Keras 模型工厂函数MMOE()。二、架构与源码实现一条调用链看懂 MMOEMMOE 的完整实现位于 deepctr/models/multitask/mmoe.py模型名MMOE与SharedBottom、ESMM、PLE一同在 deepctr/models/init.py 中导出因此可以直接from deepctr.models import MMOE。从源码结构看MMOE()的构建流程可以拆解为如下四个阶段输入与特征处理通过build_input_features(dnn_feature_columns)建立特征输入层再经input_from_feature_columns(features, dnn_feature_columns, l2_reg_embedding, seed)将稀疏特征SparseFeat映射为嵌入向量、稠密特征DenseFeat归一化后由combined_dnn_input拼接为统一的 DNN 输入张量dnn_input。构建专家层Expertsfor i in range(num_experts)循环中每个专家都是一个独立的DNN(expert_dnn_hidden_units, ...)全连接网络输出被tf.stack沿axis1堆叠成形状为(None, num_experts, dim)的张量expert_concat。源码片段如下expert_outs [] for i in range(num_experts): expert_network DNN(expert_dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout, dnn_use_bn, seedseed, nameexpert_ str(i))(dnn_input) expert_outs.append(expert_network) expert_concat Lambda(lambda x: tf.stack(x, axis1))(expert_outs) # None,num_experts,dim构建门控网络Gates并加权融合循环次数等于任务数num_tasks即一个 MMOE 层对应num_tasks个门。每个任务的 Gate 先经过一个可选的DNN(gate_dnn_hidden_units, ...)默认()表示直接使用输入再通过一个Dense(num_experts, use_biasFalse, activationsoftmax)输出num_experts维的归一化权重随后用reduce_sum(x[0] * x[1], axis1)将专家堆叠张量与门权重逐元素相乘并按专家轴求和得到该任务专属的融合表示gate_mul_expertfor i in range(num_tasks): # one mmoe layer: nums_tasks num_gates gate_input DNN(gate_dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout, dnn_use_bn, seedseed, namegate_ task_names[i])(dnn_input) gate_out Dense(num_experts, use_biasFalse, activationsoftmax, namegate_softmax_ task_names[i])(gate_input) gate_out Lambda(lambda x: tf.expand_dims(x, axis-1))(gate_out) gate_mul_expert Lambda(lambda x: reduce_sum(x[0] * x[1], axis1, keep_dimsFalse), namegate_mul_expert_ task_names[i])([expert_concat, gate_out]) mmoe_outs.append(gate_mul_expert)构建任务塔Towers与输出每个任务从自己的 MMOE 融合表示出发经过任务专属的DNN(tower_dnn_hidden_units, ...)再接一个无偏置的Dense(1, use_biasFalse)产生 logit最后经PredictionLayer(task_type, nametask_name)输出。PredictionLayer的实现位于 deepctr/layers/core.pybinary任务会施加 sigmoid 得到概率regression任务则直接输出回归值。最终Model(inputsinputs_list, outputstask_outs)返回一个多输入多输出的 Keras 模型。从源码结构可以推断MMOE 的门控权重完全由数据驱动、按任务学习不同任务的 Gate 可以给同一批专家分配截然不同的权重这正是它相比所有任务共享同一底层的 SharedBottom 更能缓解负迁移的原因。三、API 参数详解13 个参数的语义、默认值与取值范围MMOE()的完整函数签名与默认值如下来自 deepctr/models/multitask/mmoe.pyMMOE(dnn_feature_columns, num_experts3, expert_dnn_hidden_units(256, 128), tower_dnn_hidden_units(64,), gate_dnn_hidden_units(), l2_reg_embedding0.00001, l2_reg_dnn0, seed1024, dnn_dropout0, dnn_activationrelu, dnn_use_bnFalse, task_types(binary, binary), task_names(ctr, ctcvr))各参数含义整理如下参数类型默认值说明dnn_feature_columnsiterable必填深度部分使用的全部特征由SparseFeat/DenseFeat构成与input_from_feature_columns直接对接num_expertsint3专家网络个数必须大于 1否则抛出ValueError(num_experts must be greater than 1)expert_dnn_hidden_unitslist(256, 128)每个专家 DNN 的层数与各层神经元数可为空列表tower_dnn_hidden_unitslist(64,)任务专属 DNN塔的层数与各层神经元数可为空列表示例中即设为[]直接由 MMOE 融合结果产出 logitgate_dnn_hidden_unitslist()门控 DNN 的层数与各层神经元数默认空表示门控直接从拼接输入做 softmax 加权l2_reg_embeddingfloat0.00001施加在嵌入向量上的 L2 正则强度l2_reg_dnnfloat0施加在 DNN 权重上的 L2 正则强度seedint1024随机种子用于保证权重初始化与 dropout 的可复现性dnn_dropoutfloat0DNN 的 dropout 概率取值范围[0, 1)dnn_activationstrreluDNN 使用的激活函数dnn_use_bnboolFalse是否在激活前使用 BatchNormalizationtask_typeslist of str(binary, binary)每个任务的损失类型binary表示二分类 loglossregression表示回归损失例如[binary, regression]task_nameslist of str(ctr, ctcvr)每个任务的预测目标名同时作为输出层与门控层的命名前缀返回值——一个多输入多输出的 KerasModel实例输出数量等于任务数从 deepctr/layers/core.py 的DNN层实现看dnn_dropout、dnn_use_bn、l2_reg_dnn、seed等参数最终都会透传给每一个专家、门控和任务塔 DNN因此它们对模型的三类子网络是一致生效的。四、参数约束与校验逻辑写错会立即报错MMOE()在建模前有一组显式的合法性校验mmoe.py任务数必须大于 1num_tasks len(task_names)若num_tasks 1抛出ValueError(num_tasks must be greater than 1)——MMOE 天然面向多任务单任务请改用 DeepFM 等单目标模型专家数必须大于 1num_experts 1时抛出ValueError(num_experts must be greater than 1)任务类型与任务名数量一致len(task_types) ! num_tasks时抛出ValueError(num_tasks must be equal to the length of task_types)任务类型仅支持binary与regression传入其他值如multiclass会抛出ValueError(task must be binary or regression, ... is illegal)。这些校验意味着与 ESMM 强制要求恰好两个任务见 esmm.py不同MMOE 理论上支持 2 个及以上的任意数量任务只需保证task_names、task_types一一对应。五、完整可运行示例Census 收入数据双任务训练仓库提供了 MMOE 的开箱即用示例 examples/run_mtl.py使用 Census Income 样本census-income.sample同时预测年收入是否超过 5 万美元label_income与是否未婚label_marital两个二分类任务。核心流程如下1. 数据预处理读取census-income.sample将income_50k映射为二值标签、由marital_stat构造未婚标签稀疏特征用fillna(-1)填充并做LabelEncoder编码稠密特征用MinMaxScaler归一化到[0, 1]。2. 构造特征列稀疏特征封装为SparseFeat(feat, data[feat].max() 1, embedding_dim4)稠密特征封装为DenseFeat(feat, 1)通过get_feature_names得到模型输入名列表。3. 定义并训练模型关键代码model MMOE(dnn_feature_columns, tower_dnn_hidden_units[], task_types[binary, binary], task_names[label_income, label_marital]) model.compile(adam, loss[binary_crossentropy, binary_crossentropy], metrics[binary_crossentropy], ) history model.fit(train_model_input, [train[label_income].values, train[label_marital].values], batch_size256, epochs10, verbose2, validation_split0.2) pred_ans model.predict(test_model_input, batch_size256) print(test income AUC, round(roc_auc_score(test[label_income], pred_ans[0]), 4)) print(test marital AUC, round(roc_auc_score(test[label_marital], pred_ans[1]), 4))注意两个多任务建模要点损失必须是列表compile时loss传入与任务数等长的列表这里是两个binary_crossentropymetrics同理标签必须是列表fit的y传入[train[label_income].values, train[label_marital].values]predict返回的pred_ans也是一个列表pred_ans[0]、pred_ans[1]分别对应两个任务的预测概率因此需要用roc_auc_score(test[label_income], pred_ans[0])与roc_auc_score(test[label_marital], pred_ans[1])分别评估两个任务的 AUC。回归任务的适配方式同理把对应位置的task_type改为regressionloss改为mean_squared_error标签换成连续值即可该约定与测试工具 tests/utils_mtl.py 中binary→binary_crossentropy、regression→mean_squared_error的映射一致。六、测试验证MMOE 的可用性如何被保证仓库的 tests/models/MTL_test.py 专门覆盖了 MMOEmodel MMOE(dnn_feature_columns, num_experts3, expert_dnn_hidden_units(8,), tower_dnn_hidden_units(8,), gate_dnn_hidden_units(), task_types[binary, binary], task_names[income, marital]) check_mtl_model(model, model_name, x, y_list, task_types[binary, binary])check_mtl_model定义于 tests/utils_mtl.py会依次验证模型能否compileadam 逐任务 loss 列表、能否fit一个 epoch、能否save_weights/load_weights往返、能否save_model/load_model加载时需传入custom_objects完整保存。这一测试链说明 MMOE 是可训练、可保存、可加载的完整 Keras 模型可直接接入线上推理流程。七、与其他多任务模型的定位差异DeepCTR 的deepctr.models.multitask子包deepctr/models/multitask/init.py共提供四种多任务模型SharedBottom所有任务共享同一个底层 DNN结构最简单适合任务高度相关的场景MMOE本文主角多专家 每任务独立门控用数据驱动方式学习任务相关性PLE在 MMOE 基础上进一步引入任务专属专家 共享专家与多层门控num_levels、gate_dnn_hidden_units均可配置针对性缓解负迁移ESMM专为 CTR/CVR 全空间建模设计强制两个binary任务并通过ctcvr ctr * cvr相乘建模转化链路见 esmm.py。架构示意可参考仓库 docs/pics/multitaskmodels/MMOE.png直观展示了多专家experts经多门控gates加权后分别接入各任务塔的拓扑结构。选型建议基于源码结构的推断非官方结论当多个业务目标间相关性较弱、或单个共享塔效果明显不均衡时MMOE 是性价比很高的折中方案若任务间负迁移严重可进一步尝试 PLE。八、使用注意事项小结任务数约束task_names长度必须 ≥ 2且与task_types等长每个task_type只能是binary或regression专家数约束num_experts必须 ≥ 2默认 3 个专家是平衡容量与训练成本的常用起点多输出约定compile/fit/predict均使用与任务数等长的列表评估时逐个任务计算指标如 AUC特征列复用dnn_feature_columns与单任务 Deep 模型如 DeepFM完全一致SparseFeat的embedding_dim、DenseFeat的transform_fn等用法通用可通过deepctr.feature_column的SparseFeat/DenseFeat/get_feature_names直接复用模型持久化加载保存的模型文件时需要传入deepctr.layers提供的custom_objects测试中可见 tests/utils_mtl.py。综上DeepCTR 的MMOE()以约百行源码完整实现了 KDD 2018 的多门控专家混合架构配合run_mtl.py示例与MTL_test.py测试是快速上手多任务 CTR 建模的低门槛入口只需准备特征列与任务标签即可在同一模型内同时输出多个任务概率并逐个任务评估与调参。赞分享人工智能深度学习机器学习【免费下载链接】DeepCTREasy-to-use,Modular and Extendible package of deep-learning based CTR models .项目地址https://gitcode.com/gh_mirrors/de/DeepCTR点击查看免费下载相关推荐DeepCTR SharedBottom 多任务学习模型架构解析、参数详解与实战DeepCTR SharedBottom 多任务学习模型架构解析、参数详解与实战 导读 本文围绕 DeepCTR 开源仓库中 deepctr.models.m人工智能深度学习机器学习Extism Go SDK 实战指南在 Go 宿主应用中加载与调用 WebAssembly 插件Extism Go SDK 实战指南在 Go 宿主应用中加载与调用 WebAssembly 插件 Extism 是一套跨语言的插件运行时体系其 Go SDK人工智能深度学习机器学习DeepCTR Examples 实战指南从 Criteo 分类、MovieLens 回归到多任务学习的完整示例解析DeepCTR Examples 实战指南从 Criteo 分类、MovieLens 回归到多任务学习的完整示例解析 本文是 DeepCTR 仓库中 exam人工智能深度学习机器学习上一篇Draco 压缩一篇讲透从参数到验证下一篇Kimi K2MuonClip 优化器如何稳训出 1 万亿参数的 MoE 模型创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

探索 BMS 动力电池管理系统仿真:从 Simulink 控制策略模型到 TaoToken 配置实践 2026/9/27 16:28:59

探索 BMS 动力电池管理系统仿真:从 Simulink 控制策略模型到 TaoToken 配置实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
BBWEYY、Codex+亚马逊AWS、比文云与Dreamweaver四种建站方式成本测评——基于建设费用、维护成本与总拥有成本的评价,含零代码SAAS、AI编程、源码定制交付 2026/9/27 16:28:59

BBWEYY、Codex+亚马逊AWS、比文云与Dreamweaver四种建站方式成本测评——基于建设费用、维护成本与总拥有成本的评价,含零代码SAAS、AI编程、源码定制交付

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Intel Arc Pro B70/B65 本地 AI 推理实战:TaoToken 统一 Key 接入 Cline 配置指南 2026/9/27 16:28:40

Intel Arc Pro B70/B65 本地 AI 推理实战:TaoToken 统一 Key 接入 Cline 配置指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
集团公司网站源码避坑指南:从被黑到安全的完整流程 2026/9/27 16:28:08

集团公司网站源码避坑指南:从被黑到安全的完整流程

集团公司网站源码避坑指南:从被黑到安全的完整流程 网站被黑挂马,后台登录不了,首页变成赌博广告,你慌不慌?很多集团老板第一反应是找运维骂人,但骂完没卵用。真正的麻烦在于,你根本不知道源码里哪个环节漏了风,导致攻击者能随意篡改文件。解决这个问…

阅读更多 →
毕业生论文全流程AI写作辅助网站推荐:TaoToken统一Key接入DeepSeek与Grammarly的配置指南 2026/9/27 16:27:56

毕业生论文全流程AI写作辅助网站推荐:TaoToken统一Key接入DeepSeek与Grammarly的配置指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
网络正常网页打不开是什么原因?从零搭建避坑指南 2026/9/27 16:27:43

网络正常网页打不开是什么原因?从零搭建避坑指南

网络正常网页打不开是什么原因?从零搭建避坑指南 找建站公司怕被坑高价?别慌。很多甲方对接人第一反应是“是不是我钱没给够”,其实八成是技术底层出了幺蛾子。当你觉得网络正常但网页死活打不开时,往往意味着你的网站在 从零搭建…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉