SimPO — DPO không cần reference model, đơn giản hơn và mạnh hơn
SimPO loại bỏ reference model và định nghĩa lại reward bằng average log probability, giải quyết vấn đề misalignment trong DPO và đạt 72.4% win rate trên AlpacaEval 2.
Reference model là "gót chân Achilles" của DPO — nó chiếm 50% VRAM, neo chặt policy vào quá khứ, và tạo ra khoảng cách giữa cách ta đánh giá reward với cách model thực sự generate. SimPO chỉ đơn giản: bỏ nó đi. Dùng trung bình log-probability của chính policy làm reward. Kết quả là pipeline đơn giản hơn, memory nhẹ hơn một nửa, và alignment chính xác hơn đáng kể.
Vấn đề
DPO đã cách mạng hóa alignment bằng cách loại bỏ reward model riêng biệt, nhưng nó vẫn mang di sản của RLHF: reference model (). Đây là checkpoint SFT đóng băng, chiếm gần một nửa bộ nhớ GPU và tạo ra ba vấn đề cốt lõi:
1. Misalignment giữa reward và generation. DPO định nghĩa reward là — nghĩa là "tốt hơn bao nhiêu so với reference". Nhưng khi generate, model chỉ nhìn vào absolute likelihood . Điều này tạo ra khoảng cách: reward accuracy của DPO chỉ đạt ~52% trên UltraFeedBack, nghĩa là gần một nửa các cặp preference không phản ánh đúng xu hướng generate thực tế của model.
2. Length bias không được hiệu chỉnh. DPO tối ưu tổng log-probability của chuỗi. Vì xác suất là các số nhỏ hơn 1, nhân chúng lại khiến chuỗi dài luôn có log-prob thấp hơn chuỗi ngắn — dù nội dung tốt hơn. Model học cách trả lời ngắn gọn để "ăn điểm" thay vì trả lời đầy đủ.
3. Complexity và memory overhead. DPO yêu cầu load song song cả policy model và reference model, gấp đôi VRAM usage (ví dụ: 70B model cần ~140GB FP16 cho reference + 140GB cho policy). Điều này khiến fine-tuning trở nên đắt đỏ và deployment phức tạp, đặc biệt với consumer hardware.
Ý tưởng cốt lõi
SimPO (Simple Preference Optimization) nhận ra rằng: nếu policy model đã đủ khả năng đánh giá chất lượng response, tại sao cần reference model để so sánh? Thay vì hỏi "câu này tốt hơn reference bao nhiêu", SimPO hỏi "câu này có average log-probability cao không?" — cùng metric mà model dùng để generate.
Reference-Free Reward. SimPO định nghĩa reward trực tiếp trên policy:
Đây là trung bình log-probability per token (length-normalized). Không còn , không còn phép chia. Reward giờ đây chính là "độ tự tin trung bình" của model khi sinh ra response.
Target Reward Margin (). SimPO thêm một hyperparameter vào Bradley-Terry objective, bắt buộc khoảng cách giữa winning và losing response phải lớn hơn :
Điều này ngăn model collapse vào trạng thái cả hai response đều có reward gần nhau (một vấn đề phổ biến trong DPO khi policy quá khớp reference).
Length Normalization. Bằng cách chia cho , SimPO so sánh "perplexity trung bình per token" thay vì "tổng log-prob". Điều này tương đương việc so sánh điểm trung bình thay vì tổng điểm — câu dài không còn bị phạt nữa. Model tự do trả lời đầy đủ mà không sợ giảm reward.
Single Model Training. Vì không cần reference, SimPO chỉ giữ một model trong memory — tiết kiệm ~50% VRAM so với DPO. Đây là bước tiến lớn cho resource-constrained fine-tuning (single GPU 24GB có thể tune model lớn hơn nhiều so với DPO).
That's it. Không cần KL divergence term, không cần reference model frozen, không cần phức tạp hóa pipeline. SimPO thu gọn alignment thành một objective duy nhất: maximize average log-likelihood của preferred response, minimize của rejected response, với margin đủ lớn.
Tại sao nó hoạt động
Alignment thực sự giữa reward và generation. Khi model generate token tiếp theo, nó thực hiện sampling dựa trên . SimPO dùng chính metric này làm reward, tạo ra "reward accuracy" cao (~70%) — khi reward model nói A > B, policy thực sự có xu hướng generate A. Điều này giải quyết vấn đề "proxy misalignment" của DPO, nơi reward và generation dùng hai thước đo khác nhau.
Length normalization như equalizer. Trong DPO, nếu câu trả lời tốt nhất cần 100 tokens để giải thích đầy đủ, nó sẽ có tổng log-prob thấp hơn câu trả lời tệ chỉ dài 10 tokens (vì nhân 100 số < 1 vs 10 số). SimPO chia cho độ dài, biến nó thành geometric mean — câu dài và ngắn cạnh tranh công bằng trên cơ sở "mỗi token tốt đến mức nào".
Margin ngăn collapse. DPO dựa vào implicit KL regularization từ reference model để giữ policy không đi quá xa. SimPO bỏ reference, nên cần cơ chế khác để tránh mode collapse (policy chỉ generate một kiểu response an toàn). ép buộc sự khác biệt rõ ràng: winning response phải tốt hơn losing response ít nhất điểm, ngăn model "lười biếng" và tạo ra câu trả lời trung lập.
Memory efficiency thực sự. Việc loại bỏ reference model không chỉ tiết kiệm VRAM mà còn giảm communication overhead trong distributed training. Gradient chỉ flow qua một model, và checkpoint chỉ cần lưu một bộ weights (không cần cả policy và reference). Điều này biến alignment từ một nhiệm vụ "multi-GPU mandatory" thành khả thi trên single consumer GPU.
Ý nghĩa thực tế
Hiệu năng vượt trội với chi phí thấp. Gemma-2-9B-it-SimPO đạt 72.4% win rate trên AlpacaEval 2 (length-controlled), cao hơn DPO 6.4 điểm và đứng đầu bảng LMSys Chatbot Arena trong nhóm < 10B parameters, vượt cả Llama-3-70B-Instruct. Training chỉ mất 3 giờ trên 1 node H100 với 50k preference pairs — cho thấy alignment chất lượng cao không cần infrastructure phức tạp.
Pipeline simplification. SimPO là một bước trong xu hướng "bỏ giai đoạn" trong alignment:
| Phương pháp | Số model cần load | Số stage | Memory overhead |
|---|---|---|---|
| RLHF (PPO) | 4 (Policy, Ref, Reward, Critic) | 3 | ~400% |
| DPO | 2 (Policy, Ref) | 2 | ~200% |
| SimPO | 1 | 1 | ~100% |
| ORPO | 1 | 1 (kết hợp SFT) | ~100% |
SimPO và ORPO cùng hướng đến "monolithic alignment" — gộp mọi thứ vào một stage, một model. Nhưng SimPO tập trung vào việc cải thiện DPO, trong khi ORPO cải tiến SFT.
Giới hạn. SimPO vẫn cần pairwise preference data (win/lose pairs), không linh hoạt bằng KTO (chỉ cần binary thumbs up/down). Hyperparameter cũng cần tuning cẩn thận — quá thấp thì không hiệu quả, quá cao thì model có thể từ chối trả lời hoặc generate văn bản dài dòng để "ăn điểm" length-normalized reward. Ngoài ra, không có reference model đồng nghĩa với việc mất đi implicit KL regularization, cần theo dõi kỹ để tránh policy drift quá xa khỏi phân phối tự nhiên của ngôn ngữ.
Đào sâu hơn
Paper gốc: "SimPO: Simple Preference Optimization with a Reference-Free Reward" (NeurIPS 2024) — Princeton NLP.
Cùng cụm (alignment-frontier):
- ORPO — Kết hợp SFT và preference alignment trong một stage duy nhất, bỏ cả reference model lẫn pairwise data structure phức tạp
- KTO — Chỉ cần binary feedback (thumbs up/down) thay vì cặp preference, phù hợp với dữ liệu telemetry thực tế
- Online DPO — Generate response on-the-fly thay vì dùng offline dataset cố định, giải quyết distribution shift
Đọc tiếp:
- DPO — Hiểu nền tảng Bradley-Terry và implicit reward mà SimPO cải tiến
- RLHF — Context về PPO và reward model để thấy rõ sự tiến hóa từ 4-model pipeline xuống 1-model SimPO
- GRPO — Nếu quan tâm đến việc loại bỏ cả value model trong RL reasoning, tương tự cách SimPO loại bỏ reference model trong preference optimization
RLVR — Reward từ kết quả verify được (math, code), không hack được
RLVR dùng verifier xác định (unit test, math checker) thay vì reward model học được, loại bỏ reward hacking và tạo nên DeepSeek-R1 chỉ với RL thuần túy
ORPO — SFT + preference 1 lần duy nhất, bỏ pipeline nhiều stage
ORPO kết hợp supervised fine-tuning và preference alignment thành một giai đoạn duy nhất bằng odds ratio, loại bỏ hoàn toàn reference model và đơn giản hóa pipeline alignment từ 3 bước xuống 1.