一、什么是微调?
定义
微调是指在预训练好的基座模型(如GPT、Llama)基础上,进一步调整模型参数,使其输出更符合特定业务需求。简单来说,就是让通用模型“学点新技能”,比如学会医疗诊断或儿童讲故事。
微调的本质
- 属于模型训练:微调会修改模型参数,因此需要训练过程。
- 工程师门槛:普通研发工程师也能做,但经验丰富的算法工程师效果更佳。
- 适用模型:大部分开源模型(Llama、Qwen等)和提供接口的闭源模型(如GPT)均可微调。
二、什么情况下需要微调?
四大核心场景
- “面子工程”需求:比如政绩汇报或资本化需要必须拥有“自研大模型”。
- 特殊语言风格:AI恋爱、儿童故事等场景,仅靠提示词(Prompt)难以控制输出风格。
- 垂直领域数据稀缺:如军事、医疗等专业领域,模型未见过相关数据。
- 新任务类型:比如RPA自动化操作,模型训练数据中未覆盖此类任务。
判断是否需要微调
- 优先级原则:通用模型(如GPT-4),若在特定场景表现不佳,优先用应用层技术(如RAG)优化。只有当RAG等无法满足需求时,才考虑直接修改模型参数。
- 数据可行性:评估数据量是否足够(例如7B模型需2000-5000条数据起步)。
- 模型迭代速度:避免基座模型频繁更新导致重复微调。
三、微调的具体方法
全模型微调(Full Fine-Tuning)
- 特点:调整所有参数,效果最好但成本最高。
- 适用场景:对性能要求极高且资源充足的场景(如基座模型训练)。
轻量化微调(PEFT)
- 核心方法:
- Prompt Tuning:在输入提示词中加入前缀可训练参数。
- P-Tuning: 在提示词中加入动态生成的前缀可训练参数,以适应更复杂的场景。
- Prefix-Tuning:在每层Transformer添加前缀可训练参数。
- LoRA
- 通过在预训练模型的参数矩阵上添加低秩矩阵来进行微调。
- 实现方式:
- 将参数矩阵分解为两个低秩矩阵(A和B),并对A和B进行训练。
- 最终的偏移量由A和B矩阵的乘积得到。
- QLoRA
- 在LoRA的基础上,进一步减少内存和显存占用。
- 方法:
- 通过乘以一个公共倍数,将浮点数参数转换为整数参数(例如从32位浮点数转换为8位整数)
- 在计算时再将整数转换回浮点数。
其他方法
- 部分参数微调:冻结部分层,只调关键参数。
- 渐进微调:分阶段调整参数,避免“一刀切”。
- 多任务微调:同时学习多个任务,提升模型泛化能力。
四、数据与微调
数据质量
- 黄金标准:从真实场景收集数据(如用户聊天记录)。
- 评估方法:人工打分 + 调整数据分布(例如增加复杂场景样本)。
数据量参考
模型规模 | 入门级数据量 | 适中数据量 |
---|---|---|
7B-8B | 2000-5000条 | 5000-2万条 |
30B-33B | 2万-5万条 | - |
70B-72B | 5万-10万条 | - |
注:知识密度越高(如医疗),所需数据量越大。
五、模型评估与调优
数据集划分
- 训练集(70-80%):用于训练模型。
- 验证集(10-15%):监控训练过程,防止过拟合。
- 测试集(10-15%):最终性能检验。
常见问题
- 过拟合:模型在训练集表现好,但测试集差。
- 解决方案:简化模型、增加数据量、数据增强。
- 欠拟合:模型在所有数据集表现均差。
- 解决方案:增加模型复杂度或训练轮次。
量化评估
- 分类任务:记录准确率。
- 人工打分:让用户对比微调前后的回答,计算支持率。
其他问题解答
-
Q:微调需要特别的格式吗?
不用特别搞什么格式,正常一问一答就行。
-
Q:基座模型更新了,微调会怎么样?
基座模型更新后,微调的工作量会少点,但还是得做。
-
Q:微调和 AI 产品有啥关系?
AI 产品一般是由好几个模型拼起来的,每个模型管一块儿。微调一般就是针对某一块儿,不是整个产品都调。
-
Q:微调对硬件有啥要求?
微调得用 GPU,租个 GPU(比如 AutoDL)就行。
-
Q:微调的时候要写很多代码吗?
代码不用写太多,主要还是搞数据和评估。