mirror of
https://github.com/hiyouga/LLaMA-Factory.git
synced 2026-09-26 17:35:43 +08:00
1.7 KiB
1.7 KiB
偏好优化(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。