【大模型】大模型微调(中)

一、P-Tuning(Prompt Tuning)

1. 原理

  • 软提示(Soft Prompt):在输入前添加可训练的连续向量(soft prompt),而非修改模型参数。
  • 冻结模型主体:仅更新提示向量,保持预训练权重不变。
  • 优势:显存开销小,易于存储和切换任务;支持多任务场景。

2. 所需数据示例

{
  "prompt_template": "Question: {question}  Answer:",
  "samples": [
    {"question": "北京的最高温度是多少?", "answer": "42°C"},
    {"question": "埃菲尔铁塔高度?", "answer": "324米"}
  ]
}

3. 代码示例(基于 HuggingFace)

from transformers import AutoModelForCausalLM, AutoTokenizer, PromptEncoder
import torch

model = AutoModelForCausalLM.from_pretrained('gpt2')
tokenizer = AutoTokenizer.from_pretrained('gpt2')
prompt_encoder = PromptEncoder(num_virtual_tokens=20, encoder_hidden_size=model.config.n_embd)

# 冻结模型参数
for param in model.parameters(): param.requires_grad = False
# 只训练 prompt_encoder
optimizer = torch.optim.Adam(prompt_encoder.parameters(), lr=1e-3)

# 训练循环
for batch in dataloader:
    inputs = tokenizer(batch['question'], return_tensors='pt', padding=True)
    soft_prompts = prompt_encoder(batch['prompt_ids'])
    outputs = model(inputs['input_ids'], attention_mask=inputs['attention_mask'], inputs_embeds=soft_prompts)
    loss = loss_fn(outputs.logits, tokenizer(batch['answer'], return_tensors='pt').input_ids)
    loss.backward()
    optimizer.step()

4. 优缺点

  • 优点:参数量小(仅几十至百级别);适合多任务热切换;无灾难遗忘风险。
  • 缺点:提示长度有限制;对复杂任务效果不及微调参数。

二、LoRA(Low-Rank Adaptation)

1. 原理

  • 低秩分解:将大型权重矩阵的梯度更新拆分为两组低秩矩阵 A , B A, B A,B仅训练这两组矩阵。
  • 冻结原模型:基础参数 W W W冻结,仅学习 Δ W = A B \Delta W = A B ΔW=AB

2. 所需数据示例

[
  {"input": "将下面句子翻译成英文:你好,世界。", "output": "Hello, world."},
  {"input": "总结这段话要点:...", "output": "..."}
]

3. 代码示例(基于 PEFT)

from transformers import AutoModelForSeq2SeqLM, AutoTokenizer
from peft import get_peft_config, get_peft_model, LoraConfig, TaskType

model = AutoModelForSeq2SeqLM.from_pretrained('t5-base')
tokenizer = AutoTokenizer.from_pretrained('t5-base')

config = LoraConfig(
    task_type=TaskType.SEQ_2_SEQ_LM,
    inference_mode=False,
    r=8,           # 低秩矩阵秩
    lora_alpha=16,
    lora_dropout=0.1
)
model = get_peft_model(model, config)

# 全部参数:只有 LoRA 参数可训练
model.print_trainable_parameters()
trainer = Trainer(model=model, ...)
trainer.train()

4. 优缺点

  • 优点:可训练参数少(如百万级别),性能接近全量微调;支持 Mixed-precision、分布式。
  • 缺点:新增矩阵带来少量推理开销;需要框架支持(如 PEFT)。

三、RLHF(Reinforcement Learning from Human Feedback)

1. 原理

  • 人类偏好建模:先通过 SFT 得到基础模型,再用人类标注的「比较对」(A vs B)训练一个奖励模型(RM)。
  • 策略优化:采用强化学习(如 PPO)最大化 RM 给出的奖励,从而让模型生成更符合人类偏好的回答。

2. 所需数据示例

[
  {"context": "写一首五言绝句关于春天。", "chosen": "春风拂面柳含烟,...", "rejected": "春天来了,花开了。"},
  ...
]

3. 代码示例(简化流程)

# 1) SFT
sft_model = train_sft(base_model, sft_data)
# 2) 奖励模型
rm = train_reward_model(sft_model, preference_pairs)
# 3) PPO 微调
from trl import PPOTrainer, PPOConfig
ppo_trainer = PPOTrainer(model=sft_model, ref_model=base_model, reward_model=rm, config=PPOConfig())
ppo_trainer.train(preference_episodes)

4. 优缺点

  • 优点:生成质量与安全性高;用户体验佳。
  • 缺点:数据标注成本高;训练复杂且对资源要求极高;收敛不稳定。

四、三种方法对比

维度 P-Tuning LoRA RLHF
可训练参数 少(几十~百级) 少(百万级别) 多(全量 + RM)
显存占用 极低
部署开销 少量算力增量
性能提升 中等 极高
数据需求 少量指令样本 中等任务对 大量比较对样本
难度 简单 中等 高(RL + 人工环)

五、当前主流与原因

  1. LoRA / Adapter 系列:因易用、性能/成本比优异,成为多家机构首选。
  2. P-Tuning / Prompt Tuning:在多任务场景与快速迭代场景下被广泛采用。
  3. RLHF:应用于对话系统与高要求内容生成,确保对齐安全与偏好,是商业化部署的关键一步。

原因在于:

  • 成本/效益平衡:LoRA和Adapter在显存及训练时间上可控,且对下游任务效果显著。
  • 可维护性与可迁移性:小模型权重更新更易于管理、分享与版本控制。
  • 安全与偏好对齐:RLHF可确保模型输出符合人类预期,但成本较高,通常在关键应用中使用。

你可能感兴趣的:(大模型实战,深度学习,机器学习,人工智能)