type
status
date
slug
summary
tags
category
icon
password
MMOE
1️⃣论文出处
2️⃣论文解读
3️⃣模型结构
4️⃣解决问题
MMoE模型刻画了任务相关性,基于共享表示来学习特定任务的函数,避免了明显增加参数的缺点。
多任务模型通过学习不同任务的联系和差异,可提高每个任务的学习效率和质量。多任务学习的的框架广泛采用shared-bottom的结构,不同任务间共用底部的隐层。这种结构本质上可以减少过拟合的风险,但是效果上可能受到任务差异和数据分布带来的影响。也有一些其他结构,比如两个任务的参数不共用,但是通过对不同任务的参数增加L2范数的限制;也有一些对每个任务分别学习一套隐层然后学习所有隐层的组合。和shared-bottom结构相比,这些模型对增加了针对任务的特定参数,在任务差异会影响公共参数的情况下对最终效果有提升。缺点就是模型增加了参数量所以需要更大的数据量来训练模型,而且模型更复杂并不利于在真实生产环境中实际部署使用。
5️⃣损失函数 | 目标函数 | 公式推导
6️⃣代码实现
7️⃣论文细节
1.如何描述多个专家模型对于不同任务的差别和有效性?
在一个足够大的数据集上,打印每个gate网络 softmax后的分布,这里直接体现的就是每个专家系统对于当前子任务的权重。
2.如何确定超参,如expert数和专家模型的实现方案?
当gate网络由一层fc升级为3层fc(gate网络参数增大,expert网络参数减少)时效果有明显提升。
expert专家数量根据我们的对比实验(expert数量增大时,每个expert网络模型参数减少),一般呈现中间高两头低的现象,最佳的实验结果是expert专家数量在gate数量(子任务个数)1-2倍区间。
3.新加子任务时的热启解决方案?
- 完全冷启训练。这种适用于收敛较快,模型改动特别大的场景,尤其是对于sparse部分的修改。
- 只热启sparse部分(embedding)。这是最常见的方式,一般增加目标的场景或者修改上层模型的场景下,sparse都是共享的,所以直接热启线上训练好的sparse表可以快速收敛,稳定性也更好。
- 热启sparse部分和部分dense模型。比如只增加目标,不修改expert数量的场景下,直接热启expert专家模型的参数。这个在部分场景下适用,但不建议这样热启,因为当新增加一个任务或者修改上层模型后,整体的分布会改变,从之前的专家模型参数开始重新收敛并不一定比完全冷启expert专家模型效果更好,有可能会出现局部收敛陷阱,这个需要具体场景下的多组实验对比。
- Author:liamtech
- URL:https://liamtech.top/article/10f9746b-4e13-80e8-9ce2-d981f44b4dab
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!