什么是微调?(intro4devs) | [2025]
社区文章 发布于 2025 年 2 月 16 日
微调你的LLM就像对你的ARPG英雄进行最小最大化,这样你就可以推进高难度地下城,并最大限度地利用你的构筑/装备……这说得通,对吧?😃
这是一份面向开发者的备忘单(但也向所有人开放!)
TL;DR
- 完全微调: 性能最优,资源需求高,可靠性最佳。
- PEFT: 高效、成本效益高、主流,由 AutoML 增强。
- 指令微调: 适用于遵循命令的 AI,常与 RLHF 和 CoT 结合使用。
- RAFT: 最适合具有动态检索的基于事实的模型。
- RLHF: 生成符合道德、高质量的对话 AI,但成本高昂。
明智选择,根据你的任务、预算和部署限制匹配方法。
1. 完全微调:最大容量
它是指什么
完全微调使用你的数据集更新模型的所有参数,这是最大化模型性能的黄金标准,确保模型的每一层都适应你的特定需求。
代码示例
from transformers import AutoModelForCausalLM, TrainingArguments, Trainer
model = AutoModelForCausalLM.from_pretrained("gpt-neo-125M")
training_args = TrainingArguments(
output_dir="./full_ft",
num_train_epochs=3,
per_device_train_batch_size=8,
)
trainer = Trainer(model=model, args=training_args, train_dataset=your_dataset)
trainer.train()
何时使用
- 需要最大性能时。
- 计算和数据资源不受限制时。
- 模型需要深入理解特定领域时。
优点
- 最佳性能。
- 对新任务和领域的最大适应性。
缺点
- 计算成本高。
- 小数据集有过拟合的风险。
- 不适用于频繁的模型更新。
2. 参数高效微调 (PEFT):效率优先
背景 (2025)
随着模型变得更小、更专业且效率更高,PEFT 已成为行业热门选择。
AutoML 的进步使 PEFT 对微调经验最少的开发者也易于使用。
a. LoRA & QLoRA:参数节省器
它是指什么
LoRA (低秩适应) 和 QLoRA (量化 LoRA) 将小的低秩矩阵注入到冻结的模型中,使微调变得轻量且内存高效。QLoRA 采用 4 位量化以提高额外效率。
代码示例
from peft import LoraConfig, get_peft_model
from transformers import AutoModelForCausalLM
base_model = AutoModelForCausalLM.from_pretrained("gpt-neo-125M")
lora_config = LoraConfig(
r=8,
lora_alpha=16,
target_modules=["q_proj", "v_proj"],
lora_dropout=0.05,
)
model = get_peft_model(base_model, lora_config)
何时使用
- 在普通 GPU 上运行时。
- 优先考虑效率而非原始性能时。
- 成本节省是关键因素时。
优点
- 参数减少高达 99%。
- 更低的内存和计算需求。
- 更快的训练和推理时间。
缺点
- 由于量化导致性能略有下降。
- 可能难以处理极端领域变化。
b. 适配器与表示微调:快速原型制作
它是指什么
适配器是添加到预训练模型中的小型模块,用于微调特定方面,而无需修改整个模型。
何时使用
- 需要以最小的计算成本快速原型制作时。
- 试验不同数据集和模型变体时。
- 保持基础模型不变以适应未来时。
优点
- 非常轻量级。
- 快速训练周期。
- 保持基础模型的灵活性。
缺点
- 捕捉复杂领域知识的能力有限。
- 与完全微调相比,性能有上限。
3. 指令微调:教模型遵循命令
它是指什么
指令微调教导模型如何精确地遵循命令。
此方法对于对话式 AI、聊天机器人和助手类模型等非常重要。
代码示例
from transformers import AutoModelForSeq2SeqLM, Seq2SeqTrainingArguments, Seq2SeqTrainer
model = AutoModelForSeq2SeqLM.from_pretrained("t5-small")
training_args = Seq2SeqTrainingArguments(
output_dir="./instr_ft",
num_train_epochs=3,
per_device_train_batch_size=8,
)
trainer = Seq2SeqTrainer(model=model, args=training_args, train_dataset=your_instruction_dataset)
trainer.train()
何时使用
- 需要结构化的命令遵循响应时。
- 模型应以一致的格式生成输出时。
- 应用程序涉及任务自动化时。
优点
- 提高响应一致性。
- 所需数据量少于完全微调。
- 更结构化的输出生成。
缺点
- 有限的领域适应能力。
- 数据质量严重影响性能。
4. 检索增强微调 (RAFT):外部知识注入
它是指什么 (2025)
微调与引入外部知识的检索机制相结合。
RAFT 是 RAG (检索增强生成) 的演进,使模型能够动态获取和处理外部信息。
何时使用
- 处理实时、不完整或不断演变的数据时。
- 模型响应需要基于事实时。
- 处理多模态数据源时。
优点
- 显著提高事实准确性。
- 使模型能够高效处理海量知识。
- 无需重新训练基础模型即可使响应保持最新。
缺点
- 需要强大的检索系统。
- 设置复杂性可能很高。
5. 基于人类反馈的强化学习 (RLHF):使AI与人类偏好对齐
它是指什么 (2025)
RLHF 根据人类反馈微调 AI 模型,确保响应符合人类期望、道德和偏好。
(RP 微调等等,哈哈)
何时使用
- 开发 AI 助手或聊天机器人时。
- 确保响应用户友好且符合道德时。
- 提高 AI-人类交互质量时。
优点
- 产生高度人类对齐的输出。
- 减少有毒或有偏见的响应。
- 增强对话体验。
缺点
- 需要大量的人类反馈。
- 劳力密集且资源密集。
- 易受训练数据中偏差的影响。
总结:为Boss匹配合适的装备
微调是一门艺术,也充满了乐趣!
以下是我在摸索了(数百)小时后发现的最佳方法:D
- 需要最佳性能? 选择完全微调。
- 想要效率和低成本? PEFT (LoRA/QLoRA) 是你的朋友。
- 需要结构化命令遵循? 指令微调是最佳选择。
- 处理真实世界、不断演变的数据? RAFT 将使你的模型保持最新。
- 构建道德聊天机器人? RLHF 至关重要。
明智地微调,保持高效,并保持简单。🚀
由 tegridydev 于 2025 年 2 月首次发布
有关 LLM 开发的更多指南和技巧,请关注或留言!😃