NOTE

Fine-tuning

梳理微调的作用与边界,比较不同训练策略,并分析微调流程、优化方法及评估。

AI更新于 约 3 分钟读完

Fine-tuning

是什么

  • 在已有基础模型上继续训练部分或全部参数,使模型适应特定任务
  • 属于迁移学习(Transfer Learning)的一种方式
  • 与Prompt Engineering、RAG的区别
    • Prompt Engineering
      • 通过设计输入改善输出,不修改模型权重
    • RAG
      • 通过外部检索提供信息,不修改模型权重
    • Fine-tuning
      • 通过训练修改模型权重

为什么需要

  • 基础模型的局限
    • 特定领域能力不足
    • 特定任务表现不佳
    • 输出风格或格式不符合要求
    • 可能存在特定偏见
  • 微调的价值
    • 提高特定任务的表现
    • 改善模型行为和指令遵循
    • 让较小模型满足特定业务需求
    • 在某些场景下降低长期推理成本
  • 什么时候应该微调
    • 优先尝试Prompt Engineering
    • 如果缺少外部知识
      • 优先考虑RAG
    • 如果持续存在行为或能力问题
      • 考虑微调
    • 需要综合评估
      • 性能提升
      • 训练数据成本
      • 计算资源成本
      • 部署和维护成本
  • 微调的风险
    • 其他任务能力可能退化
    • 可能发生灾难性遗忘
    • 需要高质量训练数据
    • 基座模型更新可能降低既有微调的价值

如何实现微调

  • 整体流程
      1. 确定微调目标
      1. 选择基座模型
      1. 准备训练数据
      1. 选择微调方式
      1. 配置训练环境和超参数
      1. 执行微调
      1. 评估微调效果
      1. 部署或继续优化
  • 核心组成
    • Base Model(基座模型)
      • 是什么
        • 已经经过预训练或后训练的模型
    • Training Dataset(训练数据集)
      • 是什么
        • 用于调整模型参数的数据
      • 详细内容在第8章
    • Loss Function(损失函数)
      • 是什么
        • 衡量模型预测与训练目标之间的差异
    • Optimizer(优化器)
      • 是什么
        • 根据梯度更新可训练参数
      • 常见算法
        • SGD
        • Adam
    • Training Runtime(训练运行环境)
      • 负责模型加载、计算、参数更新与资源管理
  • 微调方式
    • 按照训练目标分类
      • Continued Pre-training(继续预训练)
        • 使用领域数据继续进行自监督训练
      • SFT(监督微调)
        • 利用输入与目标输出进行训练
      • Preference Fine-tuning(偏好微调)
        • 利用偏好数据调整模型行为
      • 特殊目标
        • Infilling Fine-tuning(填充式微调)
        • Long-context Fine-tuning(长上下文微调)
    • 按照参数更新方式分类
      • Full Fine-tuning(全量微调)
        • 更新模型全部参数
      • Partial Fine-tuning(部分微调)
        • 只更新部分原有参数
      • PEFT(参数高效微调)
        • 通过少量可训练参数适配模型
        • Adapter
        • Soft Prompt
        • LoRA
          • 利用低秩矩阵学习权重更新量
        • QLoRA
          • 结合量化基座模型与LoRA
  • 执行流程详解
    • 加载Base Model
    • 确定可训练参数
    • 加载训练数据
    • Forward Pass(前向传播)
      • 计算模型输出
    • 计算Loss
      • 比较预测与训练目标
    • Backward Pass(反向传播)
      • 计算梯度
    • Optimizer更新参数
    • 重复训练直到满足停止条件
    • 保存模型或Adapter

如何优化微调

  • 为什么需要优化
    • 全量微调需要大量内存
    • 训练时间与计算成本较高
  • 内存瓶颈
    • 内存主要来源
      • 模型权重
      • 梯度
      • 优化器状态
      • 激活值
  • 内存优化
    • 减少可训练参数
      • PEFT
      • LoRA
    • 降低数值精度
      • Quantization(量化)
      • Mixed Precision(混合精度)
    • 组合优化
      • QLoRA
    • 内存卸载
      • CPU Offloading
  • 训练超参数优化
    • Learning Rate(学习率)
    • Batch Size(批次大小)
    • Gradient Accumulation(梯度累积)
    • Epoch(训练轮数)
    • Prompt Loss Weight(提示词损失权重)
  • 多任务模型定制
    • 同时微调
      • 使用多个任务的数据共同训练
    • 顺序微调
      • 依次训练不同任务
      • 需要注意灾难性遗忘
    • Model Merging(模型合并)
      • 组合不同模型或Adapter的参数
      • 不等同于微调
      • 属于互补的模型定制技术

如何评估微调

  • 复用第4章的评估方法论
  • 质量评估
    • 目标任务表现是否提升
    • 其他任务能力是否退化
    • 是否符合业务质量要求
  • 训练过程评估
    • Training Loss
    • Validation Loss
    • 是否出现过拟合
  • 成本评估
    • 训练成本
    • 推理成本
    • 维护成本
  • 对比评估
    • 原始基座模型
    • 微调后的模型
    • Prompt Engineering方案
    • RAG方案

讨论

使用 GitHub 账号参与讨论,评论会保存在 GitHub Issues 中。在 GitHub 查看