← 返回 Day 117 正文

Day 117 · 图解

Day 117 — 迁移学习 图解

1. 迁移学习整体流程

flowchart TD A[预训练模型<br/>ImageNet 1000类] --> B{冻结/解冻策略} B -->|特征提取| C[冻结所有卷积层<br/>只训练分类头] B -->|微调| D[冻结底层<br/>解冻高层+分类头] C --> E[训练分类头<br/>lr=1e-3] D --> F[差分学习率训练<br/>底层lr=1e-5<br/>高层lr=1e-4<br/>分类头lr=1e-3] E --> G[评估模型] F --> G G --> H{准确率达标?} H -->|是| I[保存模型<br/>部署推理] H -->|否| J[调整策略<br/>解冻更多层/调学习率] J --> B
flowchart TD
    A[预训练模型<br/>ImageNet 1000类] --> B{冻结/解冻策略}
    B -->|特征提取| C[冻结所有卷积层<br/>只训练分类头]
    B -->|微调| D[冻结底层<br/>解冻高层+分类头]
    C --> E[训练分类头<br/>lr=1e-3]
    D --> F[差分学习率训练<br/>底层lr=1e-5<br/>高层lr=1e-4<br/>分类头lr=1e-3]
    E --> G[评估模型]
    F --> G
    G --> H{准确率达标?}
    H -->|是| I[保存模型<br/>部署推理]
    H -->|否| J[调整策略<br/>解冻更多层/调学习率]
    J --> B

2. 渐进式解冻策略

flowchart LR subgraph 阶段1["阶段1: 分类头训练"] A1[conv1]:::frozen A2[layer1]:::frozen A3[layer2]:::frozen A4[layer3]:::frozen A5[layer4]:::frozen A6[fc]:::trainable end subgraph 阶段2["阶段2: 解冻 layer4"] B1[conv1]:::frozen B2[layer1]:::frozen B3[layer2]:::frozen B4[layer3]:::frozen B5[layer4]:::trainable B6[fc]:::trainable end subgraph 阶段3["阶段3: 解冻 layer3-4"] C1[conv1]:::frozen C2[layer1]:::frozen C3[layer2]:::frozen C4[layer3]:::trainable C5[layer4]:::trainable C6[fc]:::trainable end 阶段1 --> 阶段2 --> 阶段3 classDef frozen fill:#ffcccc,stroke:#cc0000 classDef trainable fill:#ccffcc,stroke:#00cc00
flowchart LR
    subgraph 阶段1["阶段1: 分类头训练"]
        A1[conv1]:::frozen
        A2[layer1]:::frozen
        A3[layer2]:::frozen
        A4[layer3]:::frozen
        A5[layer4]:::frozen
        A6[fc]:::trainable
    end

    subgraph 阶段2["阶段2: 解冻 layer4"]
        B1[conv1]:::frozen
        B2[layer1]:::frozen
        B3[layer2]:::frozen
        B4[layer3]:::frozen
        B5[layer4]:::trainable
        B6[fc]:::trainable
    end

    subgraph 阶段3["阶段3: 解冻 layer3-4"]
        C1[conv1]:::frozen
        C2[layer1]:::frozen
        C3[layer2]:::frozen
        C4[layer3]:::trainable
        C5[layer4]:::trainable
        C6[fc]:::trainable
    end

    阶段1 --> 阶段2 --> 阶段3

    classDef frozen fill:#ffcccc,stroke:#cc0000
    classDef trainable fill:#ccffcc,stroke:#00cc00

3. 差分学习率示意图

xychart-beta title "差分学习率设置" x-axis ["conv1", "layer1", "layer2", "layer3", "layer4", "fc"] y-axis "学习率 (log scale)" 1e-6 --> 1e-2 bar [1e-6, 1e-5, 1e-5, 1e-5, 1e-4, 1e-3]
xychart-beta
    title "差分学习率设置"
    x-axis ["conv1", "layer1", "layer2", "layer3", "layer4", "fc"]
    y-axis "学习率 (log scale)" 1e-6 --> 1e-2
    bar [1e-6, 1e-5, 1e-5, 1e-5, 1e-4, 1e-3]

4. 特征层级可视化

深度网络特征层级
═══════════════════════════════════════════════════════════

输入: 📷 猫的照片 (224×224×3)
    │
    ▼
┌─────────────────────────────────────────────────┐
│ Layer 1-2: 边缘/颜色/纹理                        │
│ ┌───┐ ┌───┐ ┌───┐ ┌───┐                         │
│ │ ─ │ │ ╱ │ │ ╲ │ │ │ │  → 简单视觉特征          │
│ └───┘ └───┘ └───┘ └───┘                         │
│ 特点: 通用性强,所有图像任务共享                   │
└─────────────────────────────────────────────────┘
    │
    ▼
┌─────────────────────────────────────────────────┐
│ Layer 3-4: 局部形状/纹理组合                      │
│ ┌───┐ ┌───┐ ┌───┐ ┌───┐                         │
│ │ ◯ │ │ △ │ │ □ │ │ ⬡ │  → 中级视觉特征          │
│ └───┘ └───┘ └───┘ └───┘                         │
│ 特点: 部分通用,需要少量调整                       │
└─────────────────────────────────────────────────┘
    │
    ▼
┌─────────────────────────────────────────────────┐
│ Layer 5+: 高级语义特征                            │
│ ┌───┐ ┌───┐ ┌───┐ ┌───┐                         │
│ │ 👁 │ │ 👂 │ │ 🐾 │ │ 🐱 │  → 语义级特征          │
│ └───┘ └───┘ └───┘ └───┘                         │
│ 特点: 任务相关性强,需要微调                       │
└─────────────────────────────────────────────────┘
    │
    ▼
┌─────────────────────────────────────────────────┐
│ 分类头: 最终决策                                  │
│ ┌───────────────────────────┐                    │
│ │ 猫 95% │ 狗 3% │ 其他 2% │  → 输出概率          │
│ └───────────────────────────┘                    │
│ 特点: 必须从头训练(类别数不同)                   │
└─────────────────────────────────────────────────┘

迁移学习策略:
  ✅ 冻结 Layer 1-2(通用特征,不需要调整)
  ⚠️ 冻结或微调 Layer 3-4(看数据量决定)
  ✅ 解冻 Layer 5+(任务相关,需要调整)
  ✅ 从头训练分类头(类别数不同)

5. 模型性能对比

模型性能对比(ImageNet 验证集)
═══════════════════════════════════════════════════════════

模型            参数量      准确率     速度      推荐场景
─────────────────────────────────────────────────────────
ResNet-18      11.7M      69.8%     ⚡⚡⚡     快速实验/移动端
ResNet-50      25.6M      76.1%     ⚡⚡       通用任务首选
ResNet-152     60.2M      78.3%     ⚡         高精度要求
VGG-16         138M       71.6%     ⚡         特征提取/风格迁移
EfficientNet-B0  5.3M     77.1%     ⚡⚡⚡     资源受限场景
EfficientNet-B4  19M      82.9%     ⚡⚡       通用高精度任务

选择建议:
  🚀 快速原型 → ResNet-18 或 EfficientNet-B0
  🎯 通用任务 → ResNet-50
  🏆 高精度   → EfficientNet-B4 或 ResNet-152
  📱 移动端   → MobileNetV3 或 EfficientNet-B0