欢迎来到啾啾的博客🐱。
记录学习点滴。分享工作思考和实用技巧,偶尔也分享一些杂谈💬。
有很多很多不足的地方,欢迎评论交流,感谢您的阅读和评论😄。
目录
- 1 什么时候我们需要微调呢?
- 1.1 微调的种类
- 1.2 基本概念
- 1.2.1 全量微调(Full Fine-tuning)
- 1.2.1.1 应用场景
- 1.2.2 参数高效微调(PEFT, Parameter-Efficient Fine-Tuning)
- 1.2.2.1 应用场景
- 1.2.3 全量微调 vs LoRA 对比总结
- 2 RAG VS 微调
1 什么时候我们需要微调呢?
需要微调的情况:
- Your domain is extremely different from what a LLM was pretrained on, and extensive prompting didn’t produce the results you want.
你的领域与 LLM 预训练的内容极其不同,并且广泛的提示没有产生你想要的结果。 - Your model needs to work well in a low-resource language.
您的模型需要在低资源语言环境中表现良好。 - Your model needs to be trained on sensitive data that have strict regulatory requirements.
您的模型需要在严格监管要求的数据上进行训练。 - You’re using a small model due to cost, privacy, infrastructure, or other constraints.
由于成本、隐私、基础设施或其他限制,你正在使用一个小模型。
1.1 微调的种类
看设备情况,对于我的8G显存GPU,全参数微调最大支持1B~1.3B。
而参数高效微调(PEFT),可以支持7B参数模型微调。
1.2 基本概念
1.2.1 全量微调(Full Fine-tuning)
更新模型所有参数。
1.2.1.1 应用场景
- 任务与预训练差距极大(Domain Shift 大)
🔍 场景:从通用语言 → 高度专业化领域
- 例子:
- 医疗诊断报告生成
- 法律条文推理
- 数学证明生成
- 代码生成(尤其是新语言)
- 原因:这些任务涉及大量新词汇、结构和逻辑模式,仅靠低秩更新难以改变模型底层表示能力。
📌 结论:当任务“超出”模型原有知识边界时,需要深度重塑参数。
- 需要彻底改变模型行为或风格(如写作风格迁移)
🔍 你的任务是“将文章润色成自己的风格”——这其实是一个灰色地带。
- 如果你的“个人风格”只是 轻微调整语气、句式(如更正式/简洁),✅ LoRA 足够。
- 但如果你的风格非常独特(如:鲁迅式冷峻、王小波式荒诞、张爱玲式细腻),且训练数据足够多(>2000 对),那么:
- ✅ 全量微调能更好地重塑语言模式
- ❌ LoRA 可能“学不像”,因为它只在原有风格上“微调”
🧠 类比:LoRA 像给演员加个面具;全量微调是重新训练一个演员。
- 长序列建模或上下文扩展(Extended Context)
- 模型原生支持 4K tokens,你想扩展到 32K 或 128K
- 需要重训 RoPE(旋转位置编码)或修改位置嵌入
- 这种结构性改动通常需要全量微调才能稳定收敛
⚠️ LoRA 无法有效学习位置编码的全局变化
- 多任务联合训练(Multi-task Learning)
- 同时训练:摘要 + 翻译 + 风格迁移 + 问答
- 不同任务影响模型不同层
- 全量微调能让各层协同优化
- LoRA 容易出现“任务干扰”或“容量不足”
- 模型压缩后的再训练(Post-Quantization Fine-tuning)
- 你先做了 4-bit 量化(如 GPTQ),然后发现性能下降
- 需要通过全量微调“恢复”部分性能(称为 PTQ + FT)
- 此时 LoRA 效果有限,因为量化已破坏原始参数结构
- 作为最终性能冲刺手段(SOTA 追求)
- 在学术或竞赛场景中,追求最高指标
- 实验表明:在足够数据下,全量微调 > LoRA > Prompting
- 当你已经用 LoRA 验证了可行性,下一步就是“全量微调冲榜”
1.2.2 参数高效微调(PEFT, Parameter-Efficient Fine-Tuning)
PEFT(Parameter-Efficient Fine-Tuning) 是一类只更新少量参数、冻结主干模型的微调方法,典型代表:
- LoRA(Low-Rank Adaptation)
- QLoRA(4-bit 量化 + LoRA)
- Adapter(插入小型神经模块)
- IA³(缩放注意力权重)
- BitFit(仅微调偏置项)
官网资料:PEFT
-
LoRA(Low-Rank Adaptation)
在原始权重旁添加“低秩矩阵”来近似更新,不修改原模型,只训练新增的小矩阵(如 4GB → 仅训练 100MB)。训练后可合并回原模型,无推理延迟。 -
QLoRA(Quantized LoRA)
在 LoRA 基础上 + 4-bit 量化,将模型权重从 16-bit 压缩到 4-bit(节省 75% 显存),仍能保持 95%+ 的性能。 -
梯度检查点(Gradient Checkpointing)
用时间换空间:不保存所有中间激活值,反向传播时重新计算。 -
Flash Attention-2
加速注意力计算,降低显存占用。
1.2.2.1 应用场景
- 指令微调(Instruction Tuning)
让模型学会理解并执行指令,如:“请总结这篇文章”。
- ✅ 适合 PEFT:模型已具备语言能力,只需“对齐”指令格式
- 📌 典型数据格式:
instruction + input → output
- 💡 你的任务(风格润色)就属于此类!
✅ 推荐方法:LoRA / QLoRA
- 风格迁移与文本改写(Stylized Rewriting)
将原文重写为特定风格:文艺、正式、简洁、口语化等
- ✅ 适合 PEFT:本质是“条件生成”,不改变语义结构
- 📌 示例:
- 输入:“今天天气不错。”
- 输出(文艺风):“阳光洒落,微风轻拂,万物皆在低语。”
- 💡 你的核心需求正是这一类!
✅ 推荐方法:QLoRA + 风格指令控制
- 领域适配(Domain Adaptation)
将通用模型适配到特定领域,如医疗、法律、金融、教育等
- ✅ 适合 PEFT:如果领域术语不多、任务结构相似
- 📌 示例:
- 通用模型 → 医疗问答助手(使用少量医生问答对微调)
- 通用模型 → 法律文书生成(使用判决书摘要对训练)
⚠️ 注意:若领域极专业(如病理报告生成),建议未来用全量微调
✅ 当前阶段:QLoRA 完全可用
- 对话系统定制(Chatbot Personalization)
构建个性化 AI 助手、客服机器人、虚拟角色
- ✅ 适合 PEFT:只需调整语气、人设、回复风格
- 📌 示例:
- “请用温柔体贴的语气回答用户情感问题”
- “扮演一个毒舌但专业的程序员导师”
✅ 推荐方法:LoRA + System Prompt 控制人设
- 信息抽取与结构化输出
从文本中提取实体、关系、事件,并输出 JSON/表格
- ✅ 适合 PEFT:模型已有理解能力,只需“格式对齐”
- 📌 示例:
- 输入新闻:“苹果公司发布新款 iPhone”
- 输出:
{"company": "苹果", "product": "iPhone", "action": "发布"}
✅ 推荐方法:LoRA + 输出模板微调
- 多语言/中文增强
提升模型在中文或小语种上的表现
- ✅ 适合 PEFT:中文能力可通过少量高质量语料增强
- 📌 示例:
- 使用中文写作语料微调 Qwen,提升润色能力
- 用中英翻译对增强翻译能力
✅ 推荐方法:QLoRA + 高质量双语对
- 常见PEFT方法对比
方法 | 显存 | 中文支持 | 易用性 | 推荐度 |
---|---|---|---|---|
QLoRA(4-bit + LoRA) | ✅ 8GB 可行 | ✅ 强 | ⭐⭐⭐⭐☆ | ⭐⭐⭐⭐⭐ |
LoRA(16-bit) | ❌ 7B 模型需 >16GB | ✅ | ⭐⭐⭐⭐☆ | ⭐⭐⭐☆☆ |
Adapter | ✅ 可行 | ⚠️ 支持弱 | ⭐⭐☆☆☆ | ⭐⭐☆☆☆ |
IA³ | ✅ 可行 | ⚠️ 工具少 | ⭐⭐☆☆☆ | ⭐⭐☆☆☆ |
1.2.3 全量微调 vs LoRA 对比总结
维度 | 全量微调 | LoRA/QLoRA |
---|---|---|
显存需求 | 高(7B 需 24GB+) | 低(8GB 可行) |
训练速度 | 慢 | 快(参数少) |
性能上限 | 高 | 略低(≈90~95%) |
适合任务 | 领域迁移大、风格重塑深 | 轻量适配、设备受限 |
推理部署 | 直接使用 | 需加载增量权重 |
数据需求 | 大(>5k 样本) | 小(500~1k 可行) |
2 RAG VS 微调
在垂直领域,RAG VS 微调,效果都有哪些差异?
特性 | RAG (检索增强生成) | 微调 (Fine-Tuning) |
---|---|---|
核心目的 | 提供知识 (Providing Knowledge) | 传授技能 (Teaching a Skill) |
工作原理 | 在回答问题前,先去一个外部知识库(如你的博客文章)里查找相关信息,然后把这些信息作为上下文交给LLM去总结回答。 | 通过在你的个人数据上进行训练,改变模型自身的权重,让模型内在化地学习到你的风格、格式、语气或特定领域的语言模式。 |
解决的问题 | “我希望AI能基于我最新的、事实准确的笔记来回答问题。” | “我希望AI能像我一样思考和写作,用我的口吻来表达观点。” |
知识更新 | 极其容易。 你只需在向量数据库中添加、删除或修改一篇文档,AI的知识立刻就更新了。 | 极其困难。 你需要重新准备数据集,并花费数小时(甚至更久)和GPU成本来重新训练模型。 |
可追溯性 | 非常高。 你可以清晰地看到AI是引用了哪几篇原文来得出答案的,便于事实核查。 | 几乎为零。 模型的回答来自于它内部复杂的权重,你无法知道它为什么会生成某个特定的句子。它是一个“黑盒”。 |
幻觉风险 | 较低。 因为它的回答被严格限制在提供的上下文中,不容易编造事实。 | 较高。 如果没有RAG配合,微调后的模型仍然可能产生幻觉,只是幻觉的内容可能会更像你的风格。 |
成本 | 开发成本低, 但有持续的API调用成本和向量数据库的运营成本。 | 开发成本高, 有一次性的、高昂的GPU训练成本。但推理成本可能(也可能不)比带长上下文的RAG低。 |
在生产系统中,我们可以让RAG和微调强强联合。
全量微调>高效参数微调>提示词