一文讲清楚【AI大模型微调】十种微调方式的核心原理

1. 全量微调(Full Fine-tuning)

核心原理

微调步骤

1. 数据准备

收集与任务相关的标注数据集。预处理:清洗、分词、编码(如tokenization)。

2. 模型加载

加载预训练模型(如BERT、GPT)及其权重。

3. 参数配置

设置超参数:学习率(如1e-5)、批大小(batch size)、训练轮次(epochs)。

4. 微调训练

使用标注数据进行端到端训练。

优化器(如AdamW)最小化任务损失(如交叉熵损失)。

5. 评估与调优

在验证集上评估性能(如准确率、F1-score)。

调整超参数(如学习率衰减、早停策略)。

6. 部署

保存最优模型,用于推理。


2. 冻结层微调(Frozen Layers Fine-tuning)

核心原理

微调步骤

1. 模型加载

加载预训练模型,冻结底层(如前几层Transformer层)。

2. 添加新层

在顶层添加任务专用层(如全连接层、分类头)。

3. 参数配置

设置学习率(通常比全量微调低)。

4. 训练

仅优化顶层参数,底层参数保持不变。

5. 评估与调优

监控验证集性能,调整顶层结构或学习率。


3. LoRA(Low-Rank Adaptation)

核心原理

微调步骤

1. 选择权重矩阵

选择关键层(如Transformer的注意力层、前馈层)的权重矩阵 WW

2. 初始化低秩矩阵

定义低秩秩数 rr(如r=8)。

初始化低秩矩阵 A∈Rd×rA∈Rd×r 和 B∈Rr×dB∈Rr×d

3. 计算低秩更新

计算 ΔW=A⋅BΔW=AB

4. 结合原始权重

更新后的权重为 Wnew=Wbase+ΔWWnew=Wbase+ΔW

5. 训练

仅优化 AA 和 BB,冻结原始权重 WbaseWbase。

6. 评估

测试微调后的模型性能。


4. Prefix Tuning(前缀微调)

核心原理

微调步骤

1. 生成前缀向量

定义固定长度的前缀(如100个词元)。

初始化前缀向量 P∈RL×dP∈RL×d(LL为长度,dd为隐藏维度)。

2. 拼接输入

将前缀 PP 与输入序列 XX 拼接:[P;X][P;X]。

3. 训练

仅优化前缀参数 PP,冻结模型其他参数。

4. 推理

使用优化后的前缀生成任务相关输出。


5. RLHF(人类反馈强化学习)

核心原理

微调步骤

1. 监督微调(SFT)阶段

使用标注数据(输入-输出对)训练模型。

2. 奖励模型(Reward Model)训练

收集人类偏好数据(如“输出A比输出B更好”)。训练奖励模型,预测输出质量。

3. 强化学习(RL)阶段

使用策略梯度方法最大化奖励模型的评分。

4. 迭代优化

重复SFT和RL阶段,逐步提升模型输出质量。


6. Adapter(适配器微调)

核心原理

微调步骤

1. 插入适配器

在每层的注意力层和前馈层后插入适配器。

2. 初始化适配器参数

随机初始化适配器权重。

3. 训练

仅优化适配器参数,冻结模型其他参数。

4. 合并输出

适配器输出与原始层输出相加(残差连接)。


7. QLoRA(量化+LoRA)

核心原理

微调步骤

1. 模型量化

使用量化工具(如LLM.Q、Hugging Face的bitsandbytes)将模型权重压缩为4-bit。

2. LoRA插入

在量化模型中插入低秩矩阵 AA 和 BB

3. 训练

仅优化低秩矩阵,冻结量化后的原始权重。

4. 推理加速

量化后的模型在推理时占用更少显存。


8. UPFT(无监督前缀微调)

核心原理

微调步骤

1. 设计前缀:

选择与任务相关的初始词元(如“解决数学问题:”)。

2. 生成约束:

限制模型仅生成前缀后的词元,确保输出格式正确。

3. 无监督训练:

通过最大化前缀与后续生成内容的连贯性优化模型。

4. 推理:

使用优化后的前缀生成任务相关输出。


9. 量化微调(Quantization-aware Fine-tuning)

核心原理

微调步骤

1. 模型量化

使用工具(如TensorRT、DeepSpeed)将模型量化为低精度(如FP16、INT8)。

2. 微调配置

设置量化感知训练参数(如动态范围调整)。

3. 训练

在量化模型上进行微调,优化低精度参数。

4. 部署

量化后的模型在边缘设备上运行更快。


10. Hugging Face PEFT 工具库

核心原理

微调步骤(以LoRA为例)

1. 安装PEFT库

pip install transformers peft

2. 配置模型与适配器

from peft import LoraConfig, get_peft_model
model = AutoModel.from_pretrained("bert-base-uncased")
lora_config = LoraConfig(
    r=8,  # 低秩秩数
    lora_alpha=16,
    target_modules=["query", "key", "value"],
    lora_dropout=0.1,
)
model = get_peft_model(model, lora_config)

3. 训练循环

from transformers import Trainer, TrainingArguments
training_args = TrainingArguments(
    output_dir="./results",
    learning_rate=1e-3,
    per_device_train_batch_size=4,
    num_train_epochs=3,
)
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=train_dataset,
    eval_dataset=val_dataset,
)
trainer.train()

总结对比表

方法

核心原理

参数更新量

典型步骤

适用场景

全量微调

更新所有参数

100%

加载模型→端到端训练→调参

任务差异大,资源充足

冻结层微调

仅更新顶层

<10%

冻结底层→添加新层→训练

任务相似,数据有限

LoRA

低秩分解参数

<5%

插入低秩矩阵→优化

大模型轻量化

Prefix Tuning

前缀向量引导

极低

生成前缀→拼接输入→优化

快速任务切换

RLHF

人类反馈强化学习

可选

SFT→奖励模型→强化学习→迭代

符合人类价值观的任务

Adapter

插入适配器模块

<10%

插入适配器→训练

领域适配

QLoRA

量化+低秩

<5%

量化→LoRA微调

边缘设备部署

UPFT

无监督前缀引导

极低

设计前缀→无监督训练

推理任务,无标注数据

量化微调

量化感知训练

低精度

量化→微调

资源受限环境

Hugging Face PEFT

统一接口集成多种方法

视方法而定

选择方法→配置→训练

快速实验与开发


选择建议

资源充足:全量微调或RLHF。

轻量化需求:LoRA、QLoRA、Prefix Tuning。

无标注数据:UPFT。

边缘部署:量化微调或QLoRA。

快速开发:使用Hugging Face PEFT库。

展开阅读全文

更新时间:2025-05-07

标签:科技   模型   原理   核心   方式   前缀   参数   适配器   权重   矩阵   定义   步骤

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020- All Rights Reserved. Powered By bs178.com 闽ICP备11008920号
闽公网安备35020302034844号

Top