多任务学习:一鱼多吃

📅 发布时间:2026/7/5 14:21:21 👁️ 浏览次数:
多任务学习:一鱼多吃
Research Summary多任务学习Multi-Task Learning, MTL是一种让单个模型同时学习多个相关任务的学习范式。其核心思想是通过共享表示层让多个任务互相帮助、共同提升。常见方式包括硬参数共享共享底层网络和软参数共享各任务有独立参数但相互约束。 逻辑原点如果一个模型只能完成一个任务能否让它一鱼多吃同时完成多个相关任务答案是肯定的。多任务学习告诉我们任务之间是有联系的学到一个任务的经验可以帮助学习其他任务。 苏格拉底式对话1️⃣ 现状最原始的解法是什么如果不使用多任务学习每个任务怎么训练最朴素的方法是独立训练Independent Training为每个任务训练一个独立的模型每个模型只关注自己的目标任务之间完全隔离没有任何信息共享这就像为每种乐器都请一个独立的乐手——每个乐手只精通一种乐器无法协作资源浪费。2️⃣ 瓶颈规模扩大100倍时会有什么问题当需要完成100个任务时独立训练模型会怎样答案是模型数量爆炸、无法利用任务关联、资源浪费严重。需要训练和维护100个独立模型每个模型都需要大量数据容易过拟合任务之间可能有共通的知识但完全无法共享推理时需要加载100个模型资源消耗巨大独立训练在多任务场景下成本极高且忽略了任务间的关联性。3️⃣ 突破必须引入什么新维度如何让多个任务互帮互助共享知识答案共享表示层。多任务学习的核心思想不是每个任务独立学 - 而是让任务之间共享知识 不是训练N个模型 - 而是训练一个能完成多个任务的模型两种共享方式硬参数共享Hard Sharing底层网络所有任务共享只有顶层输出层任务专用最常用结构简单软参数共享Soft Sharing每个任务有自己的网络通过正则化如 L2让参数相似更灵活但参数量大 视觉骨架同时优化同时优化同时优化输入Input共享编码器Shared Encoder任务1头Task 1 Head任务2头Task 2 Head任务N头Task N Head输出1Output 1输出2Output 2输出NOutput N联合优化Joint Optimization多任务学习共享底层编码器每个任务有独立的输出头通过联合优化让多个任务互相帮助⚖️ 权衡模型公式多任务学习 解决了 知识孤岛问题 牺牲了 任务特异性 增加了 任务干扰风险代价分析✅解决一个模型完成多个任务降低存储和推理成本任务之间互相帮助提升泛化能力❌牺牲共享层可能无法充分捕捉每个任务的独特特征⚠️增加任务之间可能产生负迁移任务干扰需要精心设计损失权重 记忆锚点# 多任务学习一鱼多吃defmulti_task_learning(): 输入: 多个任务的训练数据 输出: 多个任务的预测 # 硬参数共享shared_encoderSharedEncoder()# 所有任务共享task1_headTaskHead1()task2_headTaskHead2()task3_headTaskHead3()# 联合优化多个任务losstask1_losstask2_losstask3_loss backpropagate(loss)# 实际例子# - BERT 同时做 MLM NSP 预训练# - 人脸识别 同时做分类 特征提取 人脸关键点# - 目标检测 同时做分类 定位一句话本质多任务学习是一鱼多吃——用一个模型同时学习多个任务通过共享底层表示让任务之间互帮互助既省资源又能提升效果。