Căn Chỉnh Không Cần Reference Model (ORPO Loss - Hong et al. 2024)
oddstheta(y | x) = Ptheta(y x)|1 - Ptheta(y | x)
Tiến độ của tôi ở bài này
Điểm và code bạn nộp được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: direct-preference-optimization-dpo-loss.
Nội dung đề bài
Mục tiêu kiến thức
- DPO tuy không cần Reward Model nhưng vẫn bắt buộc giữ mô hình tham chiếu piref trong bộ nhớ GPU, tốn gấp đôi VRAM so với SFT.
- ORPO (Hong et al. 2024) đề xuất phương pháp căn chỉnh nguyên khối (Monolithic Alignment) kết hợp trực tiếp Supervised Fine-Tuning (SFT) với phạt tỷ số tỷ cược (Odds Ratio) mà hoàn toàn không cần Reference Model:
- Tỷ cược (Odds) của câu trả lời y theo chính sách:
oddstheta(y | x) = Ptheta(y x)|1 - Ptheta(y | x) Trong đó Ptheta(y | x) = exp(log p) là xác suất trung bình trên mỗi token của chuỗi y.
- Log của tỷ cược chính là hàm logit:
log odds_theta(y | x) = log p - log(1 - exp(log p))
- Tỷ số tỷ cược (Odds Ratio - OR) giữa câu được chọn yw và câu bị loại yl:
ORtheta(yw, yl) = oddstheta(yw x)|oddstheta(yl | x) log ORtheta = log oddstheta(yw) - log oddstheta(yl)
- Hàm mất mát ORPO:
LORPO = LSFT(yw) - lambda · log sigma(log ORtheta) Trong đó LSFT là cross-entropy thông thường trên chuỗi yw.
Yêu cầu
Viết hàm:
def compute_orpo_loss(
chosen_nll_loss: torch.Tensor,
policy_chosen_logps: torch.Tensor,
policy_rejected_logps: torch.Tensor,
lambda_orpo: float = 0.1
) -> tuple[torch.Tensor, torch.Tensor]:
pass- chosennllloss: Scalar tensor mất mát SFT NLL của câu được chọn yw.
- policychosenlogps: Tensor 1D (B,) chứa log xác suất trung bình của yw (các giá trị < 0).
- policyrejectedlogps: Tensor 1D (B,) chứa log xác suất trung bình của yl (các giá trị < 0).
- Trả về tuple (total_loss, odds_ratio_loss):
- total_loss = chosen_nll_loss + lambda_orpo * odds_ratio_loss.
- odds_ratio_loss = - logsigmoid(log_odds_chosen - log_odds_rejected).mean().
Input
- Hàm compute_orpo_loss(chosen_nll_loss, policy_chosen_logps, policy_rejected_logps, lambda_orpo): Các tham số đầu vào chứa dữ liệu Tensor/mảng NumPy hoặc giá trị siêu tham số tương ứng.
Output
- Hàm compute_orpo_loss: Trả về kết quả kiểu tuple[torch.Tensor, torch.Tensor] theo đúng đặc tả kỹ thuật và kích thước quy định.
Ràng buộc
- Thời gian chạy tối đa: 2000ms.
- Giới hạn bộ nhớ: 256MB.
- Dữ liệu đầu vào hợp lệ theo đúng kiểu dữ liệu và miền giá trị được mô tả.
Ví dụ 1
Input
sft_loss = torch.tensor(1.5)
c_logp = torch.tensor([-0.69314718])
r_logp = torch.tensor([-0.69314718])
total, or_loss = compute_orpo_loss(sft_loss, c_logp, r_logp, lambda_orpo=0.2)
Output
(1.6386, 0.6931)
Giải thích
Hàm/lớp được gọi với các tham số mẫu trên và trả về kết quả số học / kích thước tensor tương ứng theo đúng thiết kế.
Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
