什么是微调?(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 开发的更多指南和技巧,请关注或留言!😃

社区

注册登录 发表评论