TROISINH
FrontierAlignment Frontier

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.

Bạn đã chán ngán với pipeline RLHF 3 giai đoạn (SFT → Reward Model → PPO) và thấy DPO vẫn còn "cồng kềnh" vì phải load 2 model? ORPO là câu trả lời: chỉ cần một giai đoạn, một model duy nhất, vừa học nói vừa học sở thích người dùng cùng lúc. Không reference model, không RL loop phức tạp—chỉ là fine-tuning thông thường với một loss function đặc biệt.

Vấn đề

Alignment truyền thống bị ám ảnh bởi "pipeline complexity":

  1. RLHF cổ điển: SFT để model biết nói → train Reward Model để đánh giá → chạy PPO để optimize. Ba stage, ba model, ba lần load data.
  2. DPO (Direct Preference Optimization): Tiến bộ lớn khi bỏ reward model và RL loop, nhưng vẫn cần giữ reference model (π_ref) frozen trong memory để tính KL divergence. Training 7B model cần VRAM cho 14B parameters—và bạn phải lo lắng về distribution shift khi policy π_θ drift xa reference.

Vấn đề sâu hơn: Tại sao phải dạy model nói đúng trước, rồi mới dạy nó nói hay sau? Đây là pedagogical inconsistency—giống như bắt học sinh viết văn hoàn chỉnh trước, rồi mới dạy cách không viết lung tung.

Ý tưởng cốt lõi

ORPO (Odds Ratio Preference Optimization) đặt câu hỏi: Nếu model đang học trả lời câu hỏi "Paris là thủ đô Pháp", tại sao không dạy nó ngay lập tức rằng "London là thủ đô Pháp" là sai?

Thay vì tách biệt SFT và preference learning, ORPO monolithic hóa quá trình:

1. Odds Ratio thay cho Relative Probability

DPO so sánh π_θ với π_ref: "Tôi khác reference bao nhiêu phần trăm?"
ORPO so sánh trong chính π_θ: "Câu đúng có odds cao hơn câu sai bao nhiêu?"

Odds của một câu trả lời y được định nghĩa là:

odds(y) = P(y|x) / (1 - P(y|x))

Khi P(y) → 1 (model rất tự tin), odds → ∞. Khi P(y) → 0, odds → 0.
Odds ratio giữa câu thắng (y_w) và câu thua (y_l):

OR = odds(y_w) / odds(y_l)

Nếu OR = 100, nghĩa là câu đúng có khả năng xảy ra cao gấp 100 lần câu sai (theo model hiện tại). Loss function đơn giản là maximize log(OR), tức là:

L_OR = -log[odds(y_w) / odds(y_l)]

2. Self-Referential Learning

Điểm mấu chốt: Không cần reference model. Tất cả probabilities đến từ model đang train (π_θ). Khi model còn "ngu" (early training, P(y) thấp cho cả hai câu), raw probability gap có thể nhỏ, nhưng odds ratio vẫn phân biệt được đâu tốt hơn đâu. Khi model giỏi lên, odds ratio tự động đẩy câu đúng lên gần 1.0 và câu sai xuống gần 0.0.

3. The "Minor Penalty" Philosophy

ORPO không cố gắng đè bẹp câu sai xuống 0 probability (điều này dễ gây mode collapse). Thay vào đó, nó chỉ cần câu đúng có odds cao hơn câu sai một margin nào đó. Điều này giữ được diversity của generation trong khi vẫn đảm bảo quality ranking.

That's it. Không cần π_ref, không cần reward model riêng. Chỉ là cross-entropy loss quen thuộc cộng thêm một số hạng nhỏ "phạt" khi model thích câu sai hơn câu đúng.

Tại sao nó hoạt động

Từ góc độ toán học:

Loss function của ORPO là tổng của hai thành phần:

L_total = L_NLL + λ * L_OR
  • L_NLL: Negative log-likelihood trên câu được chọn (y_w). Đây là SFT thuần túy—dạy model nói đúng ngữ pháp và nội dung.
  • L_OR: Odds ratio penalty. Mở rộng ra:
    L_OR = -[log(P(y_w)/(1-P(y_w))) - log(P(y_l)/(1-P(y_l)))]
    Tương đương với việc maximize log-probability của y_w đồng thời minimize log-probability của y_l, nhưng thông qua odds thay vì raw probability.

Tại sao odds tốt hơn raw probability trong early training?

Khi model chưa converge, cả P(y_w) và P(y_l) đều nhỏ (ví dụ 0.01 vs 0.001). Raw gap là 0.009—khó học. Nhưng odds ratio là (0.01/0.99)/(0.001/0.999) ≈ 10. Một con số rõ ràng để optimize. Odds ratio tự động rescale signal theo mức độ uncertainty của model.

Memory Efficiency:

DPO cần giữ cả π_θ (trainable) và π_ref (frozen, cần forward pass để tính reference probability). Điều này gần như double memory usage (2x parameters + 2x activations). ORPO chỉ cần π_θ. Với model 7B, bạn tiết kiệm ~50% VRAM so với DPO—biến những GPU 24GB thành có thể train alignment cho model lớn.

Ý nghĩa thực tế

Hiệu quả thực tế:

MetricDPOORPOChênh lệch
Memory VRAM~2× model size~1× model size-50%
Training stages2 (SFT rồi DPO)1 (simultaneous)-1 stage
AlpacaEval 2.0 (LC)Baseline+12.2% win rateBetter
MT-Bench7.07.32Competitive

ORPO đặc biệt hữu ích cho:

  • Resource-constrained fine-tuning: Train alignment trên single GPU consumer (RTX 4090 24GB) cho model 7B-13B mà không cần QLoRA.
  • Rapid iteration: Không cần chờ SFT xong mới bắt đầu alignment. Một lệnh chạy từ base model đến aligned model.
  • Deployment simplicity: Production serving chỉ cần 1 model checkpoint, không cần giữ reference model để tính KL penalty.

Limitations cần lưu ý:

  1. Vẫn cần paired data: Khác với KTO (chỉ cần binary good/bad), ORPO vẫn đòi hỏi cặp (win, lose) cho mỗi prompt. Không dùng được cho scalar rewards hay unpaired feedback.
  2. Numerical instability: Khi model quá tự tin (P(y) → 1.0), term (1-P(y)) → 0 gây overflow trong log. Cần clamping hoặc epsilon nhỏ.
  3. Multi-turn chưa chứng minh: Hiệu quả được validate chủ yếu trên single-turn QA và instruction following. Tính ổn định trên conversation dài với evolving context chưa được nghiên cứu sâu.

Ai đang dùng?

  • HuggingFace TRL đã implement ORPOTrainer từ v0.9.
  • Các fine-tune community (Mistral-ORPO, Llama-ORPO variants) trên HuggingFace Hub.
  • Startups cần alignment nhanh không có infrastructure RLHF phức tạp.

Đào sâu hơn

Paper gốc: ORPO: Monolithic Preference Optimization without Reference Model — Jiwoo Hong et al., 2024.

Cùng cụm (alignment-frontier):

  • SimPO — Cũng bỏ reference model, nhưng dùng "average log probability" thay vì odds ratio, alignment tốt hơn với generation metric thực tế.
  • KTO — Bỏ luôn cả paired data, chỉ cần binary feedback (thumbs up/down) dựa trên prospect theory.
  • Online DPO — Generate response on-the-fly thay vì dùng dataset cố định, giải quyết distribution shift.

Đọc tiếp:

  • DPO — Nền tảng của ORPO: cách biến RLHF thành classification problem.
  • RLHF Basics — Hiểu tại sao 3-stage pipeline tồn tại trước khi ORPO đơn giản hóa nó.
  • GRPO — Hướng tiếp cận khác cho alignment: dùng group relative feedback thay vì preference pairs, phù hợp reasoning tasks.

On this page