NOTE
Fine-tuning
梳理微调的作用与边界,比较不同训练策略,并分析微调流程、优化方法及评估。
Fine-tuning
是什么
- 在已有基础模型上继续训练部分或全部参数,使模型适应特定任务
- 属于迁移学习(Transfer Learning)的一种方式
- 与Prompt Engineering、RAG的区别
- Prompt Engineering
- 通过设计输入改善输出,不修改模型权重
- RAG
- 通过外部检索提供信息,不修改模型权重
- Fine-tuning
- 通过训练修改模型权重
- Prompt Engineering
为什么需要
- 基础模型的局限
- 特定领域能力不足
- 特定任务表现不佳
- 输出风格或格式不符合要求
- 可能存在特定偏见
- 微调的价值
- 提高特定任务的表现
- 改善模型行为和指令遵循
- 让较小模型满足特定业务需求
- 在某些场景下降低长期推理成本
- 什么时候应该微调
- 优先尝试Prompt Engineering
- 如果缺少外部知识
- 优先考虑RAG
- 如果持续存在行为或能力问题
- 考虑微调
- 需要综合评估
- 性能提升
- 训练数据成本
- 计算资源成本
- 部署和维护成本
- 微调的风险
- 其他任务能力可能退化
- 可能发生灾难性遗忘
- 需要高质量训练数据
- 基座模型更新可能降低既有微调的价值
如何实现微调
- 整体流程
-
- 确定微调目标
-
- 选择基座模型
-
- 准备训练数据
-
- 选择微调方式
-
- 配置训练环境和超参数
-
- 执行微调
-
- 评估微调效果
-
- 部署或继续优化
-
- 核心组成
- Base Model(基座模型)
- 是什么
- 已经经过预训练或后训练的模型
- 是什么
- Training Dataset(训练数据集)
- 是什么
- 用于调整模型参数的数据
- 详细内容在第8章
- 是什么
- Loss Function(损失函数)
- 是什么
- 衡量模型预测与训练目标之间的差异
- 是什么
- Optimizer(优化器)
- 是什么
- 根据梯度更新可训练参数
- 常见算法
- SGD
- Adam
- 是什么
- Training Runtime(训练运行环境)
- 负责模型加载、计算、参数更新与资源管理
- Base Model(基座模型)
- 微调方式
- 按照训练目标分类
- Continued Pre-training(继续预训练)
- 使用领域数据继续进行自监督训练
- SFT(监督微调)
- 利用输入与目标输出进行训练
- Preference Fine-tuning(偏好微调)
- 利用偏好数据调整模型行为
- 特殊目标
- Infilling Fine-tuning(填充式微调)
- Long-context Fine-tuning(长上下文微调)
- Continued Pre-training(继续预训练)
- 按照参数更新方式分类
- Full Fine-tuning(全量微调)
- 更新模型全部参数
- Partial Fine-tuning(部分微调)
- 只更新部分原有参数
- PEFT(参数高效微调)
- 通过少量可训练参数适配模型
- Adapter
- Soft Prompt
- LoRA
- 利用低秩矩阵学习权重更新量
- QLoRA
- 结合量化基座模型与LoRA
- Full Fine-tuning(全量微调)
- 按照训练目标分类
- 执行流程详解
- 加载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 查看