Phạt Độ Lệch KL (Kullback-Leibler Penalty) Từng Token Cho PPO RLHF
Rpenalized(x, y) = R(x, y) - β · DKL(πθ ∥ πref)
Tiến độ của tôi ở bài này
Điểm đượ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: reward-modeling-bradley-terry-loss.
Nội dung đề bài
Mục tiêu kiến thức
- Trong vòng lặp PPO-RLHF, nếu chỉ tối đa hóa điểm thưởng R, mô hình sẽ bị hiện tượng Hack Điểm Thưởng (Reward Hacking): sản sinh ra các câu lặp vô nghĩa hoặc nịnh hót để đánh lừa Reward Model.
- Để giữ câu từ tự nhiên và bảo toàn năng lực gốc, ta thêm số hạng phạt KL Divergence giữa chính sách πθ và chính sách tham chiếu ban đầu πref:
Rpenalized(x, y) = R(x, y) - β · DKL(πθ ∥ πref)
- Các ước lượng KL từng mẫu (Schulman 2020):
Đặt rt = log πθ(yt | x, y<t) - log πref(yt | x, y<t).
- Ước lượng chuẩn k1:
DKL(1) = rt (Có kỳ vọng đúng bằng KL, nhưng phương sai lớn và có thể nhận giá trị âm).
- Ước lượng xấp xỉ bậc 2 k3 (Schulman 2020):
DKL(3) = 12 rt2 (Luôn không âm ≥ 0, phương sai cực thấp, rất ổn định khi huấn luyện LLM).
- Ước lượng không chệch không âm k2:
DKL(2) = e-rt - 1 + rt
Yêu cầu
Viết hàm:
def compute_token_kl_penalty(
logprobs: torch.Tensor,
ref_logprobs: torch.Tensor,
estimator: str = "k3"
) -> torch.Tensor:
passlogprobs: Tensor bất kỳ shape(B, S)chứa log xác suất của chính sách hiện tại.ref_logprobs: Tensor cùng shape(B, S)của mô hình tham chiếu.estimator:"k1","k2", hoặc"k3".- Trả về Tensor cùng shape
(B, S)chứa ước lượng độ lệch KL tại từng token.
Input
- Hàm
compute_token_kl_penalty(logprobs,ref_logprobs,estimator): 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_token_kl_penalty: Trả về kết quả kiểutorch.Tensortheo đú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
p = torch.tensor([[-1.0]])
ref = torch.tensor([[-2.0]])Output
[[-2.]]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ế.
Ví dụ 2
Input
p = torch.randn(4, 16)
for est in ['k1', 'k2', 'k3']:
penalty = compute_token_kl_penalty(p, p, estimator=est)Output
()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.
