多任务学习(Multi-Task Learning)
第一部分: 动机与概念
1. 单任务学习 vs 多任务学习
单任务学习(STL - Single Task Learning):
- 每个任务独立训练
- 各自有独立的模型和参数
- 不考虑任务之间的关系
多任务学习(MTL - Multi-Task Learning):
- 同时学习多个相关任务
- 共享知识来提升性能
- 利用任务之间的相关性
2. 实际案例: 人脸识别相关任务
场景: 人脸图像处理的三个任务
输入: 人脸图像
↓
[共享特征提取]
↙ ↓ ↘
任务1 任务2 任务3
人脸验证 情绪识别 年龄回归
(是/否) (笑/怒等)(2-35岁)
为什么要联合学习?
- 这三个任务都需要理解人脸特征
- 情绪识别和年龄估计都依赖于面部细节
- 共享底层特征可以让每个任务都受益
好处:
- 特征提取器通过多个任务的监督信号变得更鲁棒
- 数据利用更充分(三个任务的数据互相帮助)
- 避免过拟合(多任务作为正则化)
3. 核心概念与总体观点
定义:
多任务学习是一种同时学习多个相关问题的方法,通过利用问题之间的相关性来提升学习效果。
关键要素:
- 多个任务: 不是一个任务
- 相关性: 任务之间有某种联系
- 同时学习: 不是先后训练
- 互惠互利: 任务之间相互帮助
4. 任务之间的相关性
核心假设: 任务是相关的
经典例子: 垃圾邮件过滤
- 每个用户对垃圾邮件的定义略有不同
- 用户1可能认为广告邮件是垃圾
- 用户2可能能容忍某些广告
- 但是存在共同的特征(如"免费"、"中奖"等关键词)
目标: 学习这些共同特征,同时保留个性化部分
重要原则:
⚠️ 当任务彼此独立时,多任务学习没有优势!
5. 大数据时代的解读
问题场景:
在某些应用中,收集大量训练样本很困难,例如:
- 医学图像分析: 标注需要专业医生,成本高
- 罕见疾病诊断: 病例本身就很少
- 个性化推荐: 新用户没有历史数据
多任务学习的价值:
任务1: 50个样本 }
任务2: 60个样本 } → MTL → 每个任务实际上使用了
任务3: 40个样本 } 约150个样本的信息!
关键洞察:
- 虽然单个任务数据不足
- 但多个相关任务加起来有足够的数据
- 通过共享学到的知识,每个任务都能受益
第二部分: 问题设定
1. 形式化定义
给定:
m个学习任务- 所有任务或其中一部分是相关的
目标:
通过使用所有任务或部分任务中包含的知识,帮助改进任务 Tᵢ 的模型学习
数据表示:
- 第
i个任务配有训练集:Dᵢ = {(xⱼⁱ, yⱼⁱ)}ⱼ₌₁ⁿⁱ nᵢ: 任务i的样本数量xⱼⁱ: 第i个任务的第j个样本的特征yⱼⁱ: 对应的标签
任务:
学习假设函数 hᵢ,使其在任务 i 上表现良好,对于 i = 1,...,m
第三部分: 共享知识的多任务学习
1. 三个核心问题
多任务学习需要回答三个关键问题:
┌─────────────────────────────────┐
│ 1. 何时共享? (When to Share?) │
│ → 任务相关时 │
├─────────────────────────────────┤
│ 2. 共享什么? (What to Share?) │
│ → 参数 或 特征 │
├─────────────────────────────────┤
│ 3. 如何共享? (How to Share?) │
│ → 具体的模型设计 │
└─────────────────────────────────┘
2. 何时共享? (When to Share?)
答案: 当任务之间存在相关性时
判断标准:
- 任务是否解决相似的问题?
- 是否共享相似的输入特征?
- 是否有共同的底层结构?
注意: 如果强行共享不相关的任务,可能会负迁移(Negative Transfer),即性能下降!
3. 共享什么? (What to Share?)
两种主要方式:
(1) 共享参数 (Parameter Sharing)
- 不同任务的模型参数有共同部分
- 例如:
wᵢ = w₀ + Δwᵢw₀: 所有任务共享的基础参数Δwᵢ: 任务i特有的参数
(2) 共享特征 (Feature Sharing)
- 学习一个共同的特征表示
- 不同任务在这个特征空间上训练各自的分类器
4. 如何共享? (How to Share?)
经验风险最小化框架:
R(h)=(1/n)Σi=1nℓ(Xi,Yi,h)
R(h) = (1/n) Σᵢ₌₁ⁿ ℓ(Xᵢ, Yᵢ, h)
R(h)=(1/n)Σi=1nℓ(Xi,Yi,h)
两大类模型:
- 基于参数的MTL: 参数之间有约束或正则化
- 基于特征的MTL: 学习共享的特征表示
接下来我们详细分析这两类模型…
第四部分: 基于参数的MTL模型
1. 基础问题: 独立训练 vs 联合训练
独立训练(STL):
mini(1/ni)Σj=1niℓ(xji,yji,wi),i=1,...,m
min_wᵢ (1/nᵢ) Σⱼ₌₁ⁿⁱ ℓ(xⱼⁱ, yⱼⁱ, wᵢ), i = 1,...,m
mini(1/ni)Σj=1niℓ(xji,yji,wi),i=1,...,m
- 每个任务单独优化
- 任务之间没有信息交流
联合训练(初步MTL):
minW=[w1,...,wm](1/m)Σi=1m(1/ni)Σj=1niℓ(xji,yji,wi)
min_W=[w₁,...,wₘ] (1/m) Σᵢ₌₁ᵐ (1/nᵢ) Σⱼ₌₁ⁿⁱ ℓ(xⱼⁱ, yⱼⁱ, wᵢ)
minW=[w1,...,wm](1/m)Σi=1m(1/ni)Σj=1niℓ(xji,yji,wi)
问题: 这两个优化问题等价!
- 因为没有引入任何耦合项
- 参数
wᵢ之间相互独立
结论: 单纯的联合优化没有意义,必须引入参数相关性!
2. 模型1: 共享基础 + 任务特定偏移
模型假设:
wᵢ = w₀ + Δwᵢ
w₀: 所有任务共享的基础参数Δwᵢ: 任务i的特定偏移
优化目标:
min(w0,W=[Δw1,...,Δwm])(1/m)Σi=1m(1/ni)Σj=1niℓ(xji,yji,w0+Δwi)
min_(w₀,W=[Δw₁,...,Δwₘ]) (1/m) Σᵢ₌₁ᵐ (1/nᵢ) Σⱼ₌₁ⁿⁱ ℓ(xⱼⁱ, yⱼⁱ, w₀ + Δwᵢ)
min(w0,W=[Δw1,...,Δwm])(1/m)Σi=1m(1/ni)Σj=1niℓ(xji,yji,w0+Δwi)
对比:
独立训练: mini(1/ni)Σjℓ(xji,yji,wi)min_wᵢ (1/nᵢ) Σⱼ ℓ(xⱼⁱ, yⱼⁱ, wᵢ)mini(1/ni)Σjℓ(xji,yji,wi)
共享基础: min(w0,Δwi)(1/m)Σi(1/ni)Σjℓ(xji,yji,w0+Δwi)min_(w₀,Δwᵢ) (1/m) Σᵢ (1/nᵢ) Σⱼ ℓ(xⱼⁱ, yⱼⁱ, w₀ + Δwᵢ)min(w0,Δwi)(1/m)Σi(1/ni)Σjℓ(xji,yji,w0+Δwi)
优势:
w₀捕获所有任务的共性Δwᵢ保留每个任务的个性- 通过共享
w₀,数据利用更充分
3. 模型2: 添加正则化约束
改进的优化目标:
min(w0,W)(1/m)Σi=1m(1/ni)Σj=1niℓ(xji,yji,w0+Δwi)+λ∣∣W∣∣F2
min_(w₀,W) (1/m) Σᵢ₌₁ᵐ (1/nᵢ) Σⱼ₌₁ⁿⁱ ℓ(xⱼⁱ, yⱼⁱ, w₀ + Δwᵢ) + λ||W||²_F
min(w0,W)(1/m)Σi=1m(1/ni)Σj=1niℓ(xji,yji,w0+Δwi)+λ∣∣W∣∣F2
其中:
||W||²_F = Σᵢ ||Δwᵢ||²: Frobenius范数λ: 正则化系数
为什么更好?
- 惩罚任务特定偏移:
||W||²_F越小,Δwᵢ越小 - 鼓励参数相似性: 推动不同任务的参数接近
w₀ - 增强相关性: 强制多任务学习算法具有更强的相关性
- 防止过拟合: 作为正则化项,减少模型复杂度
直观理解:
无正则化: Δwᵢ 可以任意大 → 任务可能差异很大
有正则化: Δwᵢ 被约束 → 任务被拉向共同的 w₀
4. 模型3: 低秩矩阵约束 (I)
动机:
如果任务之间相关,参数矩阵 W 应该有低秩结构
矩阵秩的回顾:
- 矩阵的秩 = 线性独立的列的最大数量
- 例子:
S = [3 0 1] rank(S) = 2 [0 2 0] (第3列 = 1/3 × 第1列) [0 0 0]
低秩MTL模型:
minW=(w1,...,wm)(1/m)Σi=1m(1/ni)Σj=1niℓ(xji,yji,wi)+λrank(W)
min_W=(w₁,...,wₘ) (1/m) Σᵢ₌₁ᵐ (1/nᵢ) Σⱼ₌₁ⁿⁱ ℓ(xⱼⁱ, yⱼⁱ, wᵢ) + λ rank(W)
minW=(w1,...,wm)(1/m)Σi=1m(1/ni)Σj=1niℓ(xji,yji,wi)+λrank(W)
低秩意味着什么?
- 参数可以用少数几个基向量的线性组合表示
- 任务之间共享这些基向量(潜在结构)
- 减少了有效参数数量
问题: rank(W) 是非凸的,难以优化!
5. 模型4: 低秩矩阵约束 (II) - 可优化版本
参数分解假设:
wᵢ = uᵢ + Θᵀvᵢ, i = 1,...,m
其中:
uᵢ ∈ ℝᵈ: 任务特定部分Θ ∈ ℝʰˣᵈ: 共享的低秩子空间(所有任务共用)vᵢ ∈ ℝʰ: 任务在子空间中的坐标h << d: 子空间维度远小于特征维度
矩阵形式:
W = U + ΘᵀV
U = [u₁,...,uₘ]: 任务特定部分矩阵V = [v₁,...,vₘ]: 子空间坐标矩阵
优化问题:
min(U,V,Θ)(1/m)Σi=1m(1/ni)Σj=1niℓ(xji,yji,ui+ΘTvi)+λ∣∣U∣∣F2s.t.ΘTΘ=I
min_(U,V,Θ) (1/m) Σᵢ₌₁ᵐ (1/nᵢ) Σⱼ₌₁ⁿⁱ ℓ(xⱼⁱ, yⱼⁱ, uᵢ + Θᵀvᵢ) + λ||U||²_F
s.t. ΘᵀΘ = I
min(U,V,Θ)(1/m)Σi=1m(1/ni)Σj=1niℓ(xji,yji,ui+ΘTvi)+λ∣∣U∣∣F2s.t.ΘTΘ=I
约束解释:
ΘᵀΘ = I: 正交约束- 确保子空间的基向量非冗余(互相正交)
- 避免退化解(如所有基向量相同)
直观理解:
原始空间(d维)
↓ Θ投影
共享子空间(h维) → 所有任务在此空间学习共性
↓ vᵢ坐标
每个任务有自己的位置 + uᵢ偏移
参考文献: Ando & Zhang (2005) - 经典的多任务学习框架
第五部分: 基于特征的MTL模型
1. 核心思想
问题: 能否找到一个新的特征空间,使得任务在新空间中更相关?
原始特征空间:
任务1: w₁ → 在原始特征x上学习
任务2: w₂ → 可能差异很大
任务3: w₃
新特征空间:
学习投影P: x → Pᵀx
任务1: w₁ → 在新特征Pᵀx上学习
任务2: w₂ → 任务更相关!
任务3: w₃
关键:
- 原始数据:
Dᵢ = {(xⱼⁱ, yⱼⁱ)}ⱼ₌₁ⁿⁱ - 映射后:
Dᵢ' = {(Pᵀxⱼⁱ, yⱼⁱ)}ⱼ₌₁ⁿⁱ - 在新特征空间训练各任务的假设
2. 可视化理解

目标: 找到投影 P,使得:
- 保留重要信息(不丢失判别力)
- 增强任务相关性
- 降低维度(可选)
3. 模型1: 特征投影 + 低秩约束
优化目标:
min(W,P)(1/m)Σi=1m(1/ni)Σj=1niℓ(PTxji,yji,wi)+λrank(W)s.t.PPT=I
min_(W,P) (1/m) Σᵢ₌₁ᵐ (1/nᵢ) Σⱼ₌₁ⁿⁱ ℓ(Pᵀxⱼⁱ, yⱼⁱ, wᵢ) + λ rank(W)
s.t. PPᵀ = I
min(W,P)(1/m)Σi=1m(1/ni)Σj=1niℓ(PTxji,yji,wi)+λrank(W)s.t.PPT=I
变量解释:
P ∈ ℝᵈˣᵏ: 投影矩阵 (d: 原始维度, k: 新维度)PPᵀ = I: 保证P的列是正交的W = [w₁,...,wₘ]: 所有任务的参数矩阵rank(W): 鼓励参数矩阵低秩(任务相关)
两层优化:
- 特征层: 学习共享特征表示
P - 任务层: 在新特征空间学习任务参数
W,且参数相关(低秩)
4. 模型2: 神经网络中的共享隐藏层
架构:

关键点:
- 共享隐藏层: 充当特征提取器
- 任务特定输出层: 每个任务有独立的最后几层
- 神经网络自动学习有用的特征表示
训练方式:
总损失=Σi=1mαi×Li(任务i的损失)
总损失 = Σᵢ₌₁ᵐ αᵢ × Lᵢ(任务i的损失)
总损失=Σi=1mαi×Li(任务i的损失)
αᵢ: 任务权重(可调节任务重要性)- 反向传播同时更新共享层和任务特定层
深度学习中的MTL:
- 硬参数共享: 完全共享隐藏层(如上图)
- 软参数共享: 每个任务有自己的网络,但参数通过正则化拉近
第六部分: 特征和参数联合学习
1. 综合模型架构
结合两种共享方式:

两层共享:
- 特征层: 学习投影
P,将所有任务映射到共享特征空间 - 参数层: 学习共享基础
w₀和任务偏移Δwᵢ
2. 联合优化模型
完整优化目标:
min(w0,W,P)(1/m)Σi=1m(1/ni)Σj=1niℓ(PTxji,yji,w0+Δwi)+λ∣∣W∣∣F2s.t.PPT=I
min_(w₀,W,P) (1/m) Σᵢ₌₁ᵐ (1/nᵢ) Σⱼ₌₁ⁿⁱ ℓ(Pᵀxⱼⁱ, yⱼⁱ, w₀ + Δwᵢ) + λ||W||²_F
s.t. PPᵀ = I
min(w0,W,P)(1/m)Σi=1m(1/ni)Σj=1niℓ(PTxji,yji,w0+Δwi)+λ∣∣W∣∣F2s.t.PPT=I
变量:
P: 特征投影矩阵w₀: 共享基础参数W = [Δw₁,...,Δwₘ]: 任务偏移矩阵
正则化:
λ||W||²_F: 鼓励任务参数接近w₀
3. 模型优势
同时增强相关性:
- 特征空间:
P使得任务在新空间更相关 - 参数空间:
w₀和正则化使得参数更相关
互补作用:
P处理特征层面的差异w₀ + Δwᵢ处理决策层面的共性和个性
实际效果:
- 比单独使用特征共享或参数共享更强大
- 更好地利用任务间的相关性
参考文献: Li et al. (2015) - IJCAI
第七部分: 多任务学习为什么有效?
1. 核心问题
疑问1: 与单任务学习相比,所有任务的性能都会提升吗?
疑问2: 是否可能某个任务会损害其他任务的性能? (像害群之马)
2. MTL有效的原因
(1) 数据增强效应
任务1: 100个样本
任务2: 150个样本 } → 通过共享,每个任务
任务3: 120个样本 实际利用了更多信息
- 相当于增加了有效训练数据
(2) 隐式正则化
- 多任务约束防止过拟合
- 类似于正则化项的作用
- 提高泛化能力
(3) 特征选择
- 共享机制突出重要特征
- 抑制噪声特征
- 学到更鲁棒的表示
(4) 注意力机制
- 强迫模型关注共性
- 而不是过度拟合单个任务的特异性
3. 潜在风险
(1) 负迁移(Negative Transfer)
场景: 任务实际上不相关或冲突
例如:
任务1: 识别猫狗 }
任务2: 识别汽车 } 相关性弱
任务3: 股票预测 } 完全不相关!
结果:
- 共享可能引入噪声
- 某些任务性能下降
解决方案:
- 任务选择(只组合相关任务)
- 任务分组(聚类相关任务)
- 自适应权重(动态调整任务重要性)
(2) 任务不平衡
- 某个任务样本量大,主导训练
- 其他任务样本少,得不到充分训练
解决方案:
- 加权损失函数
- 动态任务抽样
4. 实践建议
何时使用MTL:
✓ 任务有明确的相关性
✓ 单任务数据不足
✓ 任务共享相似的输入/输出结构
何时谨慎:
✗ 任务完全独立
✗ 某个任务非常特殊
✗ 计算资源受限(MTL训练更复杂)
调试技巧:
- 先验证任务相关性(如相关系数分析)
- 逐步添加任务(观察性能变化)
- 可视化共享表示(如t-SNE)
- 消融实验(对比单任务baseline)
第八部分: 迁移学习 vs 多任务学习
1. 核心区别
多任务学习(MTL):
任务1 ←→ 共享知识 ←→ 任务2 ←→ 任务3
↕ ↕
目标: 提升所有任务性能
- 所有任务地位平等
- 目标是提升所有任务的性能
- 同时训练,相互促进
迁移学习(Transfer Learning):
源任务1 →
源任务2 → 知识迁移 → 目标任务 ★
源任务3 →
目标: 只关心目标任务性能
- 目标任务更重要
- 源任务只是辅助
- 通常先训练源任务,再迁移到目标任务
2. 详细对比
| 维度 | 多任务学习 | 迁移学习 |
|---|---|---|
| 目标 | 所有任务都好 | 目标任务好 |
| 任务关系 | 平等,互利 | 源→目标,单向 |
| 训练方式 | 同时训练 | 通常分阶段 |
| 评估 | 所有任务性能 | 只看目标任务 |
| 应用场景 | 任务自然相关 | 目标任务数据少 |
3. 实例对比
MTL场景: 电商平台
任务1: 点击率预测 }
任务2: 购买率预测 } 都很重要
任务3: 评论预测 } 同时优化
迁移学习场景: 医疗影像
源任务: ImageNet预训练 } 辅助
↓
目标任务: 肺部CT诊断 } 核心
4. 可以结合使用
多源迁移学习:
- 多个源任务 + 一个目标任务
- 类似MTL,但目标任务权重更高
持续学习中的MTL:
- 依次学习多个任务
- 同时保持之前任务的性能
第九部分: 高级话题与资源
1. 在线多任务学习(Online MTL)
场景: 数据流式到达
挑战:
- 无法一次性访问所有数据
- 需要增量更新模型
- 计算效率要求高
应用:
- 实时推荐系统
- 在线广告投放
2. 分布式多任务学习(Distributed MTL)
场景: 大规模数据集
方法:
- 数据分布在多个节点
- 分布式优化算法(如ADMM)
- 通信效率优化
应用:
- 联邦学习(隐私保护)
- 大规模推荐系统
3. 深度学习中的MTL
流行架构:
(1) 硬参数共享
[共享编码器] → [任务1头]
→ [任务2头]
→ [任务3头]
(2) 软参数共享
[编码器1] ←约束→ [编码器2] ←约束→ [编码器3]
↓ ↓ ↓
[任务1头] [任务2头] [任务3头]
(3) 交叉拼接网络(Cross-stitch Networks)
任务1网络 ←→ 交叉拼接单元 ←→ 任务2网络
↓ ↓
多层交互,学习如何组合特征
(4) 注意力机制
- 动态决定共享多少信息
- 任务特定的注意力权重
- 更灵活的知识共享
优势:
- 自动学习特征表示
- 端到端训练
- 强大的表达能力
挑战:
- 任务平衡困难
- 梯度冲突
- 训练不稳定
4. 实用工具与资源
(1) MALSAR工具箱
网址: http://jiayuzhou.github.io/MALSAR/
功能:
- Matlab实现的MTL算法集合
- 包含多种经典MTL模型
- 易于使用和扩展
包含的算法:
- 低秩MTL
- 稀疏MTL
- 聚类MTL
- 鲁棒MTL
(2) 深度学习MTL教程
网址: http://ruder.io/multi-task/
内容:
- 深度神经网络中的MTL综述
- 硬/软参数共享详解
- 最新研究进展
- 实践技巧
关键话题:
- 任务权重
- 梯度归一化
- 不确定性加权
- 动态任务优先级
(3) MTL综述论文
网址: https://arxiv.org/pdf/1707.08114.pdf
标题: “A Survey on Multi-Task Learning”
覆盖内容:
- MTL的理论基础
- 经典模型和算法
- 深度学习时代的MTL
- 应用领域
- 未来研究方向
第十部分: 实战案例分析
1. 案例1: 自然语言处理
任务组合:
任务1: 命名实体识别(NER)
任务2: 词性标注(POS)
任务3: 句法分析
任务4: 情感分析
为什么MTL有效?
- 共享词嵌入表示
- 底层语法结构相似
- 任务之间有层次关系(如POS帮助NER)
架构:
输入: "苹果发布了新iPhone"
↓
[共享LSTM层] ← 学习通用语言表示
↓
┌─┴─┬─┴─┬─┴─┐
NER POS 句法 情感
结果:
- 每个任务都比单任务有提升
- 特别是数据较少的任务受益更多
2. 案例2: 计算机视觉
场景: 自动驾驶
任务组合:
任务1: 物体检测(车辆、行人、交通标志)
任务2: 车道线检测
任务3: 深度估计
任务4: 语义分割
网络架构:
输入图像
↓
[共享卷积特征提取器]
↓
[特征金字塔网络(FPN)]
↓
┌─┴──┬──┴──┬──┴─┐
检测头 分割头 深度头 车道头
优势:
- 共享计算(减少推理时间)
- 特征互补(如深度帮助检测)
- 模型紧凑(适合车载部署)
3. 案例3: 推荐系统
任务组合:
任务1: 点击率(CTR)预测
任务2: 转化率(CVR)预测
任务3: 停留时间预测
任务4: 评论预测
模型: ESMM (Entire Space Multi-Task Model)
输入: 用户特征 + 物品特征
↓
[共享嵌入层]
↓
[共享塔]
↙ ↘
[CTR塔] [CVR塔]
↓ ↓
点击 购买|点击
关键洞察:
- CVR有样本选择偏差(只能观察到点击后的转化)
- 通过MTL利用全部曝光数据
- CTR和CVR相关,联合建模更准确
实际效果:
- CVR预测准确率显著提升
- 消除样本选择偏差
4. 案例4: 医疗诊断
任务组合:
任务1: 疾病A分类
任务2: 疾病B分类
任务3: 疾病C分类
任务4: 预后预测
挑战:
- 单个疾病样本稀少
- 标注成本极高
- 需要专家知识
MTL方案:
医学影像输入
↓
[ResNet特征提取] ← 预训练
↓
[任务特定注意力层]
↓
┌──┼──┬──┐
疾病A B C 预后
收益:
- 每个疾病任务实际使用了所有疾病的数据
- 学到更鲁棒的医学特征
- 提高罕见疾病的诊断准确率
第十一部分: 高级技术与最新进展
1. 任务关系学习
问题: 如何自动发现任务之间的关系?
方法:
(1) 任务聚类
# 伪代码
任务相似度矩阵 = 计算任务间相似度()
任务组 = 聚类(任务相似度矩阵)
for 组 in 任务组:
在组内应用MTL
(2) 任务关系网络
- 学习任务之间的图结构
- 边权重表示任务相关性
- 动态调整知识共享程度
2. 负迁移的缓解
策略1: 门控机制
任务i的输出 = 门控值ᵢ × 共享特征 + (1-门控值ᵢ) × 任务特定特征
- 每个任务学习自己的门控参数
- 自动决定使用多少共享知识
策略2: 对抗训练
- 共享编码器学习任务不变特征
- 任务判别器无法区分特征来自哪个任务
- 类似域适应的思想
策略3: 梯度手术(Gradient Surgery)
- 检测梯度冲突
- 当任务梯度方向冲突时,投影到不冲突的方向
- 数学形式:
g̃ᵢ = gᵢ - (gᵢ·gⱼ)gⱼ(如果gᵢ·gⱼ < 0)
3. 元学习与MTL的结合
MAML (Model-Agnostic Meta-Learning) + MTL
思想:
- 学习一个好的初始化
- 这个初始化对所有任务都有利
- 每个任务只需少量步骤就能适应
过程:
1. 元训练阶段:
for 每个任务:
从初始化θ开始
少量梯度步骤 → θᵢ
计算任务损失
更新初始化θ使得平均损失最小
2. 元测试阶段:
新任务从θ开始
快速适应
与传统MTL的区别:
- 传统MTL: 学习共享参数
- 元学习MTL: 学习如何快速学习
4. 连续学习/终身学习
挑战: 灾难性遗忘
- 学习新任务时,旧任务性能下降
解决方案:
(1) 弹性权重巩固(EWC)
- 保护重要参数不变
- 重要性通过Fisher信息矩阵衡量
(2) 进步神经网络(Progressive Neural Networks)
任务1网络 → 固定
↗
任务2网络 → 固定
↗
任务3网络 → 训练中
- 每个新任务添加新列
- 保留旧任务的网络结构
5. 少样本MTL
场景: 某些任务只有极少样本(如1-5个)
方法: Prototypical Networks + MTL
支持集(少量标注) → 原型(类中心)
查询样本 → 与原型比较距离 → 分类
MTL增强:
- 共享原型学习
- 跨任务的度量学习
- 更好的嵌入空间
第十二部分: 实现技巧与调优
1. 损失函数设计
加权和:
total_loss = Σᵢ αᵢ × lossᵢ
权重选择策略:
(1) 固定权重
- 手动设置
- 简单但需要调优
(2) 不确定性加权
# Kendall et al., 2018
total_loss = Σᵢ (1/(2σᵢ²)) × lossᵢ + log(σᵢ)
- σᵢ: 任务i的不确定性(可学习参数)
- 自动平衡任务权重
(3) 动态任务优先级(DTP)
# Guo et al., 2018
权重ᵢ ∝ 1 / (损失ᵢ的下降速度)
- 学习慢的任务获得更高权重
2. 梯度管理
问题: 不同任务的梯度可能:
- 量级差异大
- 方向冲突
解决方案:
(1) 梯度归一化
for 任务i:
gᵢ = gᵢ / ||gᵢ|| # 归一化到单位长度
总梯度 = Σᵢ αᵢ × gᵢ
(2) GradNorm
# Chen et al., 2018
目标: 使所有任务的梯度范数相近
自动调整任务权重αᵢ
(3) PCGrad (梯度投影)
for 任务对(i,j):
if gᵢ · gⱼ < 0: # 冲突
gᵢ = gᵢ - (gᵢ·gⱼ/||gⱼ||²) × gⱼ
3. 架构选择指南
决策树:
任务输入相同?
├─ 是 → 共享编码器
│ └─ 任务输出相似?
│ ├─ 是 → 硬参数共享
│ └─ 否 → 软参数共享
└─ 否 → 交叉拼接网络
或任务特定编码器
经验法则:
- 数据少: 硬共享(更强约束)
- 数据多: 软共享(更灵活)
- 任务异质性高: 注意力机制
4. 训练技巧
(1) 课程学习
# 先训练简单任务,再加入困难任务
epoch 0-10: 任务1(简单)
epoch 10-20: 任务1 + 任务2
epoch 20-30: 所有任务
(2) 任务采样
# 平衡不同任务的训练次数
if 任务i样本少:
提高任务i的采样概率
(3) 分阶段训练
# 阶段1: 只训练共享层
for epoch in range(warm_up_epochs):
只更新共享参数
# 阶段2: 全部训练
for epoch in range(remaining_epochs):
更新所有参数
5. 调试与诊断
检查清单:
✓ 任务性能对比
baseline = 单任务学习结果
mtl = 多任务学习结果
for 任务i:
if mtl[i] < baseline[i]:
警告: 任务i出现负迁移
✓ 特征可视化
- 使用t-SNE可视化共享特征
- 检查任务是否在特征空间聚集
✓ 梯度分析
for epoch:
记录每个任务的梯度范数
检查是否平衡
✓ 消融实验
- 逐个移除任务,观察影响
- 识别有益/有害的任务
第十三部分: 理论分析
1. 为什么MTL能提升泛化?
理论1: Rademacher复杂度
- MTL约束降低假设空间复杂度
- 较小的复杂度 → 更好的泛化界
理论2: 正则化视角
单任务: min L(w)
MTL: min Σᵢ Lᵢ(wᵢ) + R(w₁,...,wₘ)
↑
隐式正则化
理论3: 样本复杂度
- m个任务,每个n个样本
- 有效样本量 ≈ m×n (在任务相关时)
- 降低了PAC学习界
2. 任务相关性的度量
定义: 两个任务的相关性可以通过:
(1) 数据相关性
ρ = corr(任务1的特征, 任务2的特征)
(2) 模型相关性
ρ = cosine(w₁, w₂)
- 参数向量的余弦相似度
(3) 性能相关性
如果联合训练提升两个任务 → 相关
如果一个提升,一个下降 → 不相关或冲突
3. 负迁移的理论理解
定理: 如果任务i和j满足:
||wᵢ* - wⱼ*|| > 某个阈值
其中wᵢ和wⱼ是各自的最优解,则MTL可能导致负迁移。
直观理解:
- 任务最优解差异太大
- 共享约束阻碍了达到各自最优
- 强制共享反而有害
数学分析:
单任务i的误差: εᵢ
MTL后的误差: εᵢ' = εᵢ + δᵢ
↑
迁移项
如果δᵢ > 0 → 负迁移
如果δᵢ < 0 → 正迁移
4. 最优任务数量
问题: 应该组合多少个任务?
权衡:
任务数 ↑
├─ 好处: 更多数据,更强正则化
└─ 坏处: 任务异质性↑,负迁移风险↑
最优点: 边际收益 = 边际成本
经验公式(非严格):
最优任务数 ≈ √(总参数数 / 单任务样本数)
第十四部分: 总结与展望
1. 核心要点回顾
MTL的本质:
知识共享 + 互惠互利 = 性能提升
成功的关键:
- ✓ 选择相关任务
- ✓ 合理的共享机制
- ✓ 平衡的任务权重
- ✓ 防止负迁移
两大范式:
- 参数共享: wᵢ = w₀ + Δwᵢ
- 特征共享: x → P(x),在新空间学习
2. 实践建议总结
设计阶段:
- 分析任务相关性
- 选择合适的共享层次
- 考虑任务特定需求
训练阶段:
- 监控所有任务性能
- 动态调整任务权重
- 使用梯度管理技术
评估阶段:
- 与单任务baseline对比
- 消融实验验证有效性
- 分析负迁移情况
3. 未来研究方向
(1) 自动化MTL
- 神经架构搜索(NAS)找最优共享结构
- 自动任务选择和组合
- 自适应权重学习
(2) 理论基础
- 更严格的泛化界
- 负迁移的充要条件
- 最优共享度的理论指导
(3) 大规模MTL
- 百万任务级别的MTL
- 分布式训练优化
- 增量式任务添加
(4) 与其他范式结合
- MTL + 元学习
- MTL + 联邦学习
- MTL + 强化学习
4. 应用前景
自然语言处理:
- 大规模预训练模型(BERT, GPT)本质上是MTL
- 未来: 更细粒度的任务组合
计算机视觉:
- 统一的多任务感知系统
- 实时多任务推理
推荐系统:
- 全链路多目标优化
- 跨域推荐
医疗AI:
- 多疾病联合诊断
- 个性化治疗方案
自动驾驶:
- 端到端的多任务感知决策
- 更安全高效的系统
5. 学习资源汇总
经典论文:
- Caruana (1997) - MTL的开创性工作
- Ando & Zhang (2005) - 低秩MTL
- Ruder (2017) - 深度学习中的MTL综述
工具库:
- MALSAR (Matlab)
- PyTorch多任务学习示例
- TensorFlow MTL教程
在线课程:
- CS330 (Stanford) - 深度多任务学习
- 各大会议(ICML, NeurIPS)的MTL教程
6. 最后的思考
多任务学习的哲学:
“单丝不成线,独木不成林”
关键洞察:
- 世界本身是多任务的
- 人类学习也是多任务的
- MTL更接近真实的智能系统
实践智慧:
- 不要盲目使用MTL
- 理解任务关系是关键
- 持续监控和调优
未来愿景:
- 从多任务学习到通用学习
- 一个模型,解决所有任务
- 真正的人工智能
附录: 快速参考
常用公式速查
基础MTL:
min_(W) (1/m) Σᵢ (1/nᵢ) Σⱼ ℓ(xⱼⁱ, yⱼⁱ, wᵢ)
参数共享:
wᵢ = w₀ + Δwᵢ
正则化: + λ||W||²_F
特征共享:
ℓ(Pᵀx, y, w)
约束: PPᵀ = I
低秩分解:
wᵢ = uᵢ + Θᵀvᵢ
约束: ΘᵀΘ = I
代码框架模板
# PyTorch伪代码
class MTLModel(nn.Module):
def __init__(self):
self.shared_encoder = ... # 共享编码器
self.task_heads = nn.ModuleList([...]) # 任务头
def forward(self, x, task_id):
shared_features = self.shared_encoder(x)
output = self.task_heads[task_id](shared_features)
return output
# 训练循环
for epoch in epochs:
for task_id, (x, y) in enumerate(data_loaders):
loss = criterion(model(x, task_id), y)
weighted_loss += task_weights[task_id] * loss
optimizer.zero_grad()
weighted_loss.backward()
optimizer.step()

1万+

被折叠的 条评论
为什么被折叠?



