Files
LLaMA-Factory/docs/zh/feature-guide/dpo.md
2026-09-14 16:09:48 +08:00

1.7 KiB
Raw Blame History

偏好优化(DPO)

v1 通过统一的 dpo 入口运行偏好优化,pref_loss 支持 sigmoid、orpo 和 simpo。数据必须是 chosen/rejected 偏好对。

运行 DPO

llamafactory-cli dpo examples/v1/train_lora/train_lora_dpo.yaml

训练配置

peft_config.name: lora 启用 LoRA,未配置 peft_config 时进行全参训练。以下是完整的 LoRA DPO 配置,保存为 config.yaml 后运行 llamafactory-cli dpo config.yaml:

model: Qwen/Qwen3-4B
model_class: llm
train_dataset: data/v1_dpo_demo.yaml

peft_config:
  name: lora
  r: 16
  lora_alpha: 32
  target_modules: all

pref_loss: sigmoid
pref_beta: 0.1
pref_ftx: 0.0
dpo_label_smoothing: 0.0

dist_config:
  name: fsdp2

output_dir: outputs/qwen3_dpo
micro_batch_size: 1
cutoff_len: 2048
learning_rate: 1.0e-5
max_steps: 10

偏好损失

pref_loss 指定偏好损失:

  • sigmoid:标准 DPO,相对参考策略进行偏好优化,pref_beta 控制偏好项缩放。
  • orpo:无参考策略的 odds-ratio 偏好目标,基于回答的平均 log-prob 计算。
  • simpo:无参考策略的平均 log-prob 差值目标,通过 simpo_gamma 设置 margin。

pref_ftx 加入 SFT 损失,dpo_label_smoothing 用于 cDPO。设置 ld_alpha 后,LD-DPO 会将 chosen 和 rejected 中超出较短响应长度的尾部 token log-prob 乘以该系数。参数定义见训练参数。

参考模型

标准 DPO 需要 reference log-prob:全参训练会建立独立的 reference model;LoRA 训练复用 policy model 的基座权重,并在计算 reference log-prob 时禁用 adapter。ORPO 和 SimPO 的目标计算不使用 reference log-prob。