【高级机器学习】 14. 多任务学习

多任务学习(Multi-Task Learning)

第一部分: 动机与概念

1. 单任务学习 vs 多任务学习

单任务学习(STL - Single Task Learning):

  • 每个任务独立训练
  • 各自有独立的模型和参数
  • 不考虑任务之间的关系

多任务学习(MTL - Multi-Task Learning):

  • 同时学习多个相关任务
  • 共享知识来提升性能
  • 利用任务之间的相关性

2. 实际案例: 人脸识别相关任务

场景: 人脸图像处理的三个任务

      输入: 人脸图像
           ↓
    [共享特征提取]
      ↙    ↓    ↘
  任务1   任务2   任务3
人脸验证 情绪识别 年龄回归
(是/否) (笑/怒等)(2-35岁)

为什么要联合学习?

  1. 这三个任务都需要理解人脸特征
  2. 情绪识别和年龄估计都依赖于面部细节
  3. 共享底层特征可以让每个任务都受益

好处:

  • 特征提取器通过多个任务的监督信号变得更鲁棒
  • 数据利用更充分(三个任务的数据互相帮助)
  • 避免过拟合(多任务作为正则化)

3. 核心概念与总体观点

定义:

多任务学习是一种同时学习多个相关问题的方法,通过利用问题之间的相关性来提升学习效果。

关键要素:

  1. 多个任务: 不是一个任务
  2. 相关性: 任务之间有某种联系
  3. 同时学习: 不是先后训练
  4. 互惠互利: 任务之间相互帮助

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)

两大类模型:

  1. 基于参数的MTL: 参数之间有约束或正则化
  2. 基于特征的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)+λ∣∣WF2

其中:

  • ||W||²_F = Σᵢ ||Δwᵢ||²: Frobenius范数
  • λ: 正则化系数

为什么更好?

  1. 惩罚任务特定偏移: ||W||²_F 越小,Δwᵢ 越小
  2. 鼓励参数相似性: 推动不同任务的参数接近 w₀
  3. 增强相关性: 强制多任务学习算法具有更强的相关性
  4. 防止过拟合: 作为正则化项,减少模型复杂度

直观理解:

无正则化: Δ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)+λ∣∣UF2s.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,使得:

  1. 保留重要信息(不丢失判别力)
  2. 增强任务相关性
  3. 降低维度(可选)

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): 鼓励参数矩阵低秩(任务相关)

两层优化:

  1. 特征层: 学习共享特征表示 P
  2. 任务层: 在新特征空间学习任务参数 W,且参数相关(低秩)

4. 模型2: 神经网络中的共享隐藏层

架构:

在这里插入图片描述

关键点:

  • 共享隐藏层: 充当特征提取器
  • 任务特定输出层: 每个任务有独立的最后几层
  • 神经网络自动学习有用的特征表示

训练方式:
总损失=Σi=1mαi×Li(任务i的损失) 总损失 = Σᵢ₌₁ᵐ αᵢ × Lᵢ(任务i的损失) 总损失=Σi=1mαi×Li(任务i的损失)

  • αᵢ: 任务权重(可调节任务重要性)
  • 反向传播同时更新共享层和任务特定层

深度学习中的MTL:

  • 硬参数共享: 完全共享隐藏层(如上图)
  • 软参数共享: 每个任务有自己的网络,但参数通过正则化拉近

第六部分: 特征和参数联合学习

1. 综合模型架构

结合两种共享方式:

在这里插入图片描述

两层共享:

  1. 特征层: 学习投影 P,将所有任务映射到共享特征空间
  2. 参数层: 学习共享基础 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)+λ∣∣WF2s.t.PPT=I

变量:

  • P: 特征投影矩阵
  • w₀: 共享基础参数
  • W = [Δw₁,...,Δwₘ]: 任务偏移矩阵

正则化:

  • λ||W||²_F: 鼓励任务参数接近 w₀

3. 模型优势

同时增强相关性:

  1. 特征空间: P 使得任务在新空间更相关
  2. 参数空间: 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训练更复杂)

调试技巧:

  1. 先验证任务相关性(如相关系数分析)
  2. 逐步添加任务(观察性能变化)
  3. 可视化共享表示(如t-SNE)
  4. 消融实验(对比单任务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) 任务聚类
# 伪代码
任务相似度矩阵 = 计算任务间相似度()
任务组 = 聚类(任务相似度矩阵)
forin 任务组:
    在组内应用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的本质:

知识共享 + 互惠互利 = 性能提升

成功的关键:

  1. ✓ 选择相关任务
  2. ✓ 合理的共享机制
  3. ✓ 平衡的任务权重
  4. ✓ 防止负迁移

两大范式:

  • 参数共享: wᵢ = w₀ + Δwᵢ
  • 特征共享: x → P(x),在新空间学习

2. 实践建议总结

设计阶段:

  1. 分析任务相关性
  2. 选择合适的共享层次
  3. 考虑任务特定需求

训练阶段:

  1. 监控所有任务性能
  2. 动态调整任务权重
  3. 使用梯度管理技术

评估阶段:

  1. 与单任务baseline对比
  2. 消融实验验证有效性
  3. 分析负迁移情况

3. 未来研究方向

(1) 自动化MTL
  • 神经架构搜索(NAS)找最优共享结构
  • 自动任务选择和组合
  • 自适应权重学习
(2) 理论基础
  • 更严格的泛化界
  • 负迁移的充要条件
  • 最优共享度的理论指导
(3) 大规模MTL
  • 百万任务级别的MTL
  • 分布式训练优化
  • 增量式任务添加
(4) 与其他范式结合
  • MTL + 元学习
  • MTL + 联邦学习
  • MTL + 强化学习

4. 应用前景

自然语言处理:

  • 大规模预训练模型(BERT, GPT)本质上是MTL
  • 未来: 更细粒度的任务组合

计算机视觉:

  • 统一的多任务感知系统
  • 实时多任务推理

推荐系统:

  • 全链路多目标优化
  • 跨域推荐

医疗AI:

  • 多疾病联合诊断
  • 个性化治疗方案

自动驾驶:

  • 端到端的多任务感知决策
  • 更安全高效的系统

5. 学习资源汇总

经典论文:

  1. Caruana (1997) - MTL的开创性工作
  2. Ando & Zhang (2005) - 低秩MTL
  3. 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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值