RLHF
This content is not available in your language yet.
Mục tiêu
Phần tiêu đề “Mục tiêu”Sau bài này, bạn sẽ:
- Kể được ba bước của học tăng cường từ phản hồi của người (reinforcement learning from human feedback, RLHF) theo InstructGPT: fine-tune có giám sát, học mô hình phần thưởng (reward model, RM) từ các cặp so sánh, rồi tối ưu chính sách (policy) bằng học tăng cường.
- Tự dẫn được hàm mất mát của RM từ mô hình Bradley–Terry (Bradley–Terry model), , và gradient của nó.
- Hiểu mục tiêu của bước học tăng cường: điểm RM trừ một khoản phạt KL (KL penalty) giữ chính sách gần mô hình SFT. Phân biệt được nó với cái kẹp của PPO.
- Nhận ra reward hacking, hay tối ưu quá mức (overoptimization): điểm RM tăng mãi trong khi chất lượng thật đi xuống.
Cần biết trước
Phần tiêu đề “Cần biết trước”- The GPT Family and Multi-Task Fine-Tuning, in Large Language Models(Not translated yet) (Learned)
Trực giác
Phần tiêu đề “Trực giác”Bắt chước thì chưa biết cái nào hay hơn
Phần tiêu đề “Bắt chước thì chưa biết cái nào hay hơn”Bạn đã SFT xong một mô hình. Bạn hỏi nó: “Giải thích lãi kép cho học sinh lớp 7”. Cho nó trả lời ba lần, bạn được ba đáp án khác nhau. Cả ba đều đúng ngữ pháp, đúng định dạng. Một bản ngắn mà rõ. Một bản dài, nhiều thuật ngữ. Một bản có ví dụ con heo đất rất dễ hiểu, nhưng tính sai một con số.
SFT không giúp gì ở đây. Nó chỉ đẩy xác suất về phía đáp án mẫu, không cho mô hình biết đáp án nào tốt hơn đáp án nào. Muốn dạy thêm bằng SFT thì phải viết thêm đáp án mẫu, mà viết một câu trả lời hoàn hảo cho mỗi prompt vừa chậm vừa đắt.
Có một việc dễ hơn nhiều: đặt hai đáp án cạnh nhau và hỏi “bản nào tốt hơn?”. Bạn không cần tự viết được bản hoàn hảo mới nói được bản nào hay hơn. So sánh cũng tránh được chuyện mỗi người hiểu thang “7 trên 10” một kiểu.
Ba bước, như học nấu ăn
Phần tiêu đề “Ba bước, như học nấu ăn”Hình dung bạn học nấu một món:
- Xem đầu bếp làm mẫu, rồi bắt chước. Đó là SFT.
- Nấu thử nhiều phiên bản, nhờ giám khảo nếm từng cặp và chọn món ngon hơn. Sau nhiều lần, bạn đoán được khẩu vị của giám khảo, tức có một “giám khảo ảo” trong đầu. Đó là RM.
- Tự nấu đi nấu lại để giám khảo ảo cho điểm cao. Nhưng giám khảo ảo chỉ đoán đúng với những món gần giống món đã nếm. Nên có một sợi dây giữ bạn không đi quá xa cách nấu quen thuộc. Đó là học tăng cường có phạt KL.
Cái bẫy nằm ở bước 3. Nếu sợi dây quá lỏng, bạn sẽ tìm ra món mà giám khảo ảo chấm rất cao nhưng giám khảo thật thấy dở, ví dụ cho thật nhiều đường vì giám khảo ảo hơi thiên về vị ngọt.
Bài toán của bài này là: chỉ từ các lựa chọn “bản này hơn bản kia” của người, làm sao học được một hàm chấm điểm, rồi dùng nó để cải thiện mô hình mà không để mô hình lợi dụng chỗ hàm chấm điểm sai?
Lý thuyết
Phần tiêu đề “Lý thuyết”Ba bước của InstructGPT
Phần tiêu đề “Ba bước của InstructGPT”Ý “học phần thưởng từ so sánh cặp của người” có từ học tăng cường cổ điển: Christiano và cộng sự (2017) dạy tác nhân (agent) chơi game Atari và điều khiển robot mô phỏng, người chỉ cần cho phản hồi trên chưa tới 1% số bước tương tác. Ziegler và cộng sự (2019) đưa nó vào mô hình ngôn ngữ. Stiennon và cộng sự (2020) dùng nó cho bài toán tóm tắt. InstructGPT (Ouyang và cộng sự, 2022) dùng cho chỉ dẫn tổng quát, theo ba bước:
- SFT. Fine-tune GPT-3 trên lời trình diễn, khoảng 13 nghìn prompt.
- Huấn luyện RM. Với mỗi prompt, lấy nhiều câu trả lời của mô hình. Người gán nhãn (labeler) xếp hạng chúng, và RM học dự đoán thứ hạng đó. Khoảng 33 nghìn prompt.
- Tối ưu chính sách. Lấy điểm RM làm phần thưởng, tối ưu mô hình bằng thuật toán PPO. Khoảng 31 nghìn prompt. Bước 2 và 3 có thể lặp lại.
Trong học tăng cường, chính sách là thứ chọn hành động. Ở đây, chính sách là chính mô hình ngôn ngữ đang được huấn luyện, hành động là câu trả lời nó sinh ra. Bài ký hiệu prompt là , câu trả lời là , chính sách là với tham số , và RM là với tham số . Hai bộ tham số tách riêng vì đây là hai mô hình khác nhau.
Mô hình phần thưởng
Phần tiêu đề “Mô hình phần thưởng”Kiến trúc. Lấy mô hình SFT, bỏ lớp đầu ra (lớp cho xác suất trên từ vựng), thay bằng một lớp cho ra một con số. Vào là cặp (prompt, câu trả lời), ra là điểm . InstructGPT dùng RM 6 tỉ tham số, vì tiết kiệm nhiều tính toán, và RM 175 tỉ có thể huấn luyện không ổn định nên khó dùng làm hàm giá trị.
Dữ liệu. Mỗi mẫu là một bộ ba : prompt, đáp án được chọn ( là win) và đáp án bị loại ( là lose). Ta không có điểm của từng đáp án, chỉ biết bản nào thắng. Vậy cần một mô hình nối điểm với xác suất thắng.
Từ hiệu điểm ra xác suất. Ta muốn , xác suất người chọn thay vì , chỉ phụ thuộc vào hiệu điểm. Hai điểm bằng nhau thì 50/50. Hiệu càng lớn thì càng gần 1. Hàm sigmoid là một lựa chọn tự nhiên: , tăng dần từ 0 tới 1. Nó còn có tính chất , nên xác suất A thắng B cộng xác suất B thắng A luôn bằng 1. Đặt , :
Viết lại cho dễ nhận ra. Nhân cả tử và mẫu với . Ở mẫu, :
Đây là mô hình so sánh cặp của Bradley và Terry (1952): mỗi đối thủ có một “sức mạnh” dương, ở đây là , và xác suất thắng là sức mạnh của mình chia tổng sức mạnh hai bên. Christiano và cộng sự ví nó với hệ số Elo trong cờ vua: chỉ hiệu điểm quyết định xác suất thắng. Lề 0 thì 50%, lề 2 thì , lề 4 thì .
Hàm mất mát. Coi các cặp là độc lập. Likelihood của bộ dữ liệu là tích xác suất mô hình gán cho lựa chọn thật của người ở từng cặp. Lấy để tích thành tổng và bài toán cực đại thành cực tiểu, rồi lấy trung bình trên các cặp:
Đây đúng là cross-entropy của một bài phân loại hai lớp, với “lớp” là “người chọn ”. Nếu bạn đã biết hồi quy logistic (logistic regression) thì đây chính là nó, áp lên hiệu điểm. Gọi lề (margin) là . Loss của một cặp chỉ phụ thuộc vào :
| Lề | ||||||
|---|---|---|---|---|---|---|
| 0.119 | 0.269 | 0.500 | 0.731 | 0.881 | 0.982 | |
| 2.1269 | 1.3133 | 0.6931 | 0.3133 | 0.1269 | 0.0181 |
Khi RM chưa học gì và chấm mọi đáp án như nhau, và loss bằng : đoán mò. Lề âm, tức RM xếp ngược ý người, thì loss lớn.
Gradient. Viết rồi đạo hàm theo . Đạo hàm của là , với và . Hai dấu trừ triệt tiêu, nên được . Phân số này bằng . Loss một cặp là , nên đạo hàm của nó theo lề là . Theo quy tắc chuỗi, đạo hàm của theo là , nên:
Đi ngược gradient thì tăng, giảm. Trọng số là xác suất RM cho rằng người đã chọn bản kia: cặp đã xếp đúng với lề lớn gần như không được đẩy thêm, cặp xếp sai được đẩy mạnh nhất. Ô code thứ nhất dùng RM tuyến tính , với là vectơ đặc trưng của đáp án. Khi đó , nên gradient của theo là .
Điểm không có gốc. Loss chỉ phụ thuộc hiệu điểm, nên cộng cùng một hằng số vào mọi điểm không đổi gì. Một mình điểm không có nghĩa gì. Vì vậy InstructGPT chuẩn hóa RM sao cho lời trình diễn có điểm trung bình 0 trước khi chạy RL.
Vài chi tiết thực hành của InstructGPT. Người gán nhãn xếp hạng đáp án cho một prompt, từ 4 tới 9, cho ra cặp. Các cặp cùng một prompt rất tương quan. Nếu xáo trộn chúng như những mẫu độc lập, RM overfit (xem Overfitting và Underfitting) chỉ sau một epoch. Họ đưa mọi cặp của một prompt vào cùng một batch, và chỉ huấn luyện RM một epoch. Ngược với bước SFT ở bài trước, nơi InstructGPT huấn luyện 16 epoch mà đánh giá của người vẫn tốt lên. Thư viện TRL của Hugging Face có RewardTrainer (bản 1.16.0) làm đúng loss này, trên dữ liệu có hai cột chosen và rejected. Để ý: RewardConfig của bản này mặc định num_train_epochs=3.0.
Tối ưu chính sách có phạt KL
Phần tiêu đề “Tối ưu chính sách có phạt KL”Bài toán. Đây là bước 3. RM đã huấn luyện xong và được đóng băng. Mỗi lượt: lấy một prompt , chính sách sinh trọn một câu trả lời , RM cho một điểm duy nhất, hết lượt. Ta muốn chỉnh để điểm trung bình cao lên. Chính sách khởi tạo từ mô hình SFT.
Vì sao phải dùng học tăng cường mà không lan truyền ngược thẳng từ điểm RM? Vì câu trả lời được lấy mẫu từng token. Phép chọn một token rời rạc không có đạo hàm. Học tăng cường né chỗ này: nó không đạo hàm qua câu trả lời, mà tăng xác suất của những câu trả lời đã sinh ra có điểm cao, giảm xác suất của những câu điểm thấp.
Mục tiêu. Nếu chỉ tối đa điểm RM, chính sách sẽ chạy tới bất cứ chỗ nào RM chấm cao, kể cả chỗ RM chấm sai. Từ Ziegler và cộng sự (2019), rồi Stiennon và cộng sự (2020) và InstructGPT, người ta trừ vào phần thưởng một khoản phạt:
rồi tối đa kỳ vọng của , với lấy từ tập prompt và do chính sách sinh ra. Đọc từng phần:
- là mô hình tham chiếu (reference model): bản sao đóng băng của mô hình SFT.
- Log tỉ số dương khi chính sách gán cho xác suất cao hơn mô hình SFT, âm khi thấp hơn. Nó đo chính sách đã lệch khỏi mô hình SFT bao nhiêu ở câu trả lời này.
- là hệ số phạt KL. InstructGPT dùng . Bai và cộng sự (2022) dùng một giá trị rất nhỏ, .
- Tính theo token. Câu trả lời dài token có , nên log tỉ số của cả câu là tổng log tỉ số của từng token. Vì thế InstructGPT gọi nó là phạt KL theo token (per-token KL penalty).
Vì sao gọi là phạt KL? Lấy kỳ vọng của log tỉ số theo , ta được đúng định nghĩa của độ lệch KL (Kullback–Leibler divergence) giữa hai phân phối:
KL luôn , và chỉ bằng 0 khi hai phân phối trùng nhau. Vậy kỳ vọng của là : điểm RM trừ một khoản phạt cho việc đi xa mô hình SFT.
Stiennon và cộng sự nêu hai tác dụng của khoản phạt. Một, nó giữ chính sách không sụp về một kiểu trả lời duy nhất. Hai, nó giữ đầu ra ở gần vùng mà RM đã thấy khi huấn luyện, nơi điểm của RM còn đáng tin.
Chính sách tối ưu. Với một prompt cố định, nếu chính sách được chọn tự do trong mọi phân phối, có thể chứng minh mục tiêu này đạt lớn nhất tại
với là hằng số làm tổng xác suất bằng 1. Bài DPO sẽ dẫn công thức này. Ở đây chỉ cần đọc nó: lấy xác suất của mô hình SFT, nhân với , rồi chuẩn hóa. lớn thì thừa số gần 1, chính sách gần như đứng yên. nhỏ thì thừa số của đáp án điểm cao nhất lớn hơn hẳn thừa số của các đáp án khác, chính sách dồn hết về đó. Ô code thứ hai cho bạn thấy điều này bằng số.
PPO, ở mức trực giác
Phần tiêu đề “PPO, ở mức trực giác”InstructGPT tối ưu mục tiêu trên bằng PPO (Proximal Policy Optimization, Schulman và cộng sự, 2017). Bài chỉ nói ý chính, không dẫn thuật toán.
PPO thuộc họ policy gradient: sinh một lô câu trả lời, xem câu nào được thưởng cao hơn mức kỳ vọng, rồi tăng xác suất của chúng. Sinh câu trả lời tốn kém, nên ta muốn cập nhật nhiều lần trên cùng một lô. Nhưng cập nhật nhiều quá thì chính sách đổi quá xa so với lúc sinh lô đó, và lô dữ liệu không còn đại diện cho nó nữa. PPO kẹp tỉ số vào khoảng , ví dụ . Ở đây là chính sách lúc sinh lô. Khi đã ra khỏi khoảng đó, đi thêm theo hướng có lợi cũng không được thưởng thêm. Kết quả là những bước nhỏ, an toàn.
Đừng nhầm hai sợi dây này:
| Tiêu chí | Phạt KL | Kẹp của PPO |
|---|---|---|
| Giữ chính sách gần | Mô hình SFT ban đầu, , cố định suốt quá trình | Chính sách của lô vừa rồi, , đổi sau mỗi vòng |
| Giới hạn | Kéo lại khi tổng quãng đường lớn | Hãm từng bước |
| Nằm ở | Phần thưởng | Thuật toán tối ưu |
Gao và cộng sự (2022) cũng nhấn mạnh điểm này: kẹp của PPO ngầm phạt độ lệch so với chính sách gần nhất, không phải mô hình ban đầu. Nó chỉ làm KL so với mô hình SFT tăng chậm lại. Trong thí nghiệm của họ, không có phạt KL thì KL vẫn tăng đều theo số bước.
PPO cần thêm một hàm giá trị (value function) để ước lượng mức kỳ vọng. InstructGPT khởi tạo nó từ RM. Vậy lúc chạy bước 3 có bốn mô hình cùng lúc: chính sách, mô hình tham chiếu, RM và hàm giá trị.
PPO-ptx. InstructGPT thấy RL làm tụt điểm trên một số tập dữ liệu NLP công khai. Họ gọi cái giá này là alignment tax. Cách giảm: cộng vào mục tiêu một số hạng , tức log-likelihood trên dữ liệu pre-train, với là hệ số. Chính sách vừa theo RM, vừa không quên việc dự đoán văn bản thường. Theo họ, cách này hiệu quả hơn việc chỉ tăng . Bai và cộng sự (2022) thì thấy alignment tax chủ yếu xảy ra ở mô hình nhỏ: mô hình 13 tỉ và 52 tỉ tham số của họ còn tốt lên khi đánh giá zero-shot.
Reward hacking: khi điểm cao không còn là tốt
Phần tiêu đề “Reward hacking: khi điểm cao không còn là tốt”RM chỉ là một hàm xấp xỉ, học từ vài chục nghìn prompt được xếp hạng. Ở bước 3, chính sách được tối ưu đúng theo nó, nên sẽ tìm ra mọi chỗ RM chấm cao hơn người. Đó là reward hacking. Hiện tượng này là một dạng của luật Goodhart (Goodhart’s law): khi một thước đo trở thành mục tiêu, nó không còn là thước đo tốt.
- Stiennon và cộng sự (2020), bài toán tóm tắt. Tối ưu vừa phải thì bản tóm tắt tốt lên. Tối ưu mạnh thì chất lượng thật, do người chấm, đi xuống. Tới một mức, điểm RM còn ngược chiều với đánh giá của người.
- Gao và cộng sự (2022) đo việc này có hệ thống. Họ dùng một RM lớn làm “người chấm vàng” thay cho người thật, rồi huấn luyện một RM nhỏ hơn từ nhãn của RM vàng. Khi chính sách đi xa dần khỏi lúc khởi tạo (KL tăng), điểm RM nhỏ tăng mãi, còn điểm vàng tăng rồi giảm. RM và bộ dữ liệu so sánh càng lớn thì càng ít bị.
- Hack trông thế nào. Ziegler và cộng sự (2019) thấy các mô hình tóm tắt hay chép nguyên câu từ văn bản gốc, và nói chúng có thể đang khai thác việc người gán nhãn dựa vào quy tắc đơn giản. InstructGPT nhận xét mô hình đôi khi rào đón quá mức, và nghi một phần là do người gán nhãn được dặn thưởng cho sự khiêm tốn.
Phạt KL có chữa được không? Nói cẩn thận. Stiennon và cộng sự dùng nó như sợi dây giữ chính sách ở vùng RM còn đáng tin. Nhưng trong thiết lập của Gao và cộng sự, thêm phạt KL không cho điểm vàng cao hơn ở cùng một mức KL. Tác dụng chính của nó là làm quá trình dừng ở KL nhỏ hơn, giống dừng sớm (early stopping). Họ cũng ghi kết luận này có thể nhạy với siêu tham số. Cách hiểu an toàn: phạt KL làm chậm việc rời xa mô hình SFT, nó không bảo đảm chính sách không hack. Vẫn phải đánh giá bằng người (xem Đánh giá mô hình và PEFT).
Giới hạn
Phần tiêu đề “Giới hạn”- Đắt và nhiều phần. Cần người gán nhãn (InstructGPT thuê khoảng 40 người), nhiều mô hình chạy cùng lúc như đã kể ở trên, và nhiều siêu tham số nhạy cảm. Bài DPO bỏ hẳn RM và vòng RL.
- RLHF dạy hành vi, không thêm kiến thức. Năm 2022, InstructGPT vẫn bịa thông tin và vẫn nhận giả thuyết sai trong câu hỏi làm tiền đề.
- Hữu ích và vô hại hay kéo ngược nhau. Bai và cộng sự (2022) thu hai bộ so sánh riêng cho hai mục tiêu này. Họ cũng cập nhật RM và chính sách gần như hằng tuần bằng phản hồi mới, thay vì huấn luyện RM một lần.
- RLHF không đồng nghĩa với PPO. PPO chỉ là thuật toán của bước 3 trong các paper trên.
Minh họa
Phần tiêu đề “Minh họa”Bảng dưới đặt ba bước của InstructGPT cạnh nhau. Hãy nhìn hai cột giữa: mỗi bước người làm một việc khác nhau, và mô hình được huấn luyện cũng khác nhau. Bước 2 huấn luyện RM, một mô hình riêng. Bước 3 mới quay lại cập nhật mô hình ngôn ngữ.
| Bước | Người làm gì | Mô hình được huấn luyện | Tối ưu cái gì | Số prompt ở InstructGPT |
|---|---|---|---|---|
| 1. SFT | Viết câu trả lời mẫu | Mô hình ngôn ngữ, khởi tạo từ GPT-3 | Cross-entropy trên phần trả lời | khoảng 13 nghìn |
| 2. Học RM | Xếp hạng 4–9 câu trả lời do mô hình sinh ra | RM, khởi tạo từ mô hình SFT, thêm đầu ra một số | , một epoch | khoảng 33 nghìn |
| 3. RL | Không làm gì trong lúc chạy | Chính sách, khởi tạo từ mô hình SFT | , bằng PPO | khoảng 31 nghìn |
Kết quả đáng nhớ của InstructGPT: trong đánh giá của họ, trên phân phối prompt của họ, người gán nhãn ưa câu trả lời của mô hình 1.3 tỉ tham số qua RLHF hơn câu trả lời của GPT-3 175 tỉ tham số, dù số tham số chưa bằng 1/100.
Ví dụ code
Phần tiêu đề “Ví dụ code”Code trong bài chạy thử lần cuối tháng 10/2026, với Python 3.14 và NumPy 2.4 (bản có trong Pyodide). Cả hai ô chạy ngay trên trang và chạy độc lập. Không ô nào cần GPU hay mô hình thật: ô thứ nhất làm lại bước 2, ô thứ hai làm lại bước 3 trên một ví dụ đủ nhỏ để tính chính xác.
Học RM từ sáu cặp so sánh
Phần tiêu đề “Học RM từ sáu cặp so sánh”Mỗi đáp án được tóm bằng hai đặc trưng: độ đúng (từ 0 tới 1) và độ dài (tính theo trăm từ). RM tuyến tính chấm , không có hệ số tự do , vì triệt tiêu trong hiệu . Có 6 cặp. Ở 4 cặp, đáp án được chọn đúng hơn. Một cặp hai bản đúng như nhau, và một cặp người chọn bản dài mà kém đúng hơn. Còn độ dài thì ở 5 trong 6 cặp, bản được chọn dài hơn. Ô in loss và gradient tại , chạy 100 bước gradient descent với , in loss và độ chính xác ở bước 1, 10 và 100 (đo sau khi cập nhật), rồi cho RM chấm một cặp mới.
RM Bradley–Terry trên sáu cặp
# RM tuyến tính học từ 6 cặp so sánh (loss Bradley-Terry)import numpy as np
# Mỗi đáp án: (độ đúng từ 0 tới 1, độ dài tính theo trăm từ)chosen = np.array([[0.9, 1.2], [0.8, 2.0], [0.7, 1.5], [0.6, 2.5], [0.9, 0.6], [0.5, 1.8]])rejected = np.array([[0.3, 0.8], [0.6, 1.0], [0.2, 1.4], [0.7, 1.0], [0.4, 0.9], [0.5, 0.7]])diff = chosen - rejected # r_w - r_l = w . (phi_w - phi_l)
def sigmoid(z): return 1 / (1 + np.exp(-z))
def loss_and_grad(w): margin = diff @ w # lề của từng cặp p = sigmoid(margin) # xác suất mô hình đồng ý với người loss = -np.mean(np.log(p)) grad = -np.mean((1 - p)[:, None] * diff, axis=0) return loss, grad
w = np.zeros(2)loss, grad = loss_and_grad(w)print(f"w = 0: loss {loss:.4f}, grad {np.round(grad, 4)}")
for step in range(1, 101): w -= 1.0 * loss_and_grad(w)[1] # một bước gradient descent, eta = 1 if step in (1, 10, 100): # đo SAU khi cập nhật, bằng w mới loss = loss_and_grad(w)[0] acc = np.mean(diff @ w > 0) print(f"step {step:3d}: loss {loss:.4f}, acc {acc:.2f}, " f"w {np.round(w, 2)}")
good = np.array([0.9, 0.5]) # đúng, ngắnbad = np.array([0.3, 3.0]) # sai, dài hơn mọi đáp án từng thấyprint(f"r(good) = {good @ w:.2f}, r(bad) = {bad @ w:.2f}")print(f"P(bad > good) = {sigmoid(bad @ w - good @ w):.3f}")The first run downloads Python, about 10 MB.
Đọc kết quả:
w = 0: loss 0.6931: đúng , như bảng ở mục Lý thuyết. Gradient là . Tại , mọi , nên gradient bằng nhân trung bình của . Thành phần độ dài lớn hơn, vì trung bình hiệu độ dài () lớn hơn trung bình hiệu độ đúng ().step 1: acc 0.83: sau bước đầu, RM xếp đúng 5 trên 6 cặp. Cặp sai là cặp duy nhất người chọn bản ngắn hơn, vì bước đầu đẩy trọng số độ dài mạnh hơn.step 100: loss 0.0567, acc 1.00: mọi cặp đều đúng, và loss vẫn đang giảm. Sáu cặp này tách được tuyến tính, nên loss chỉ về 0 khi lớn vô hạn. Với dữ liệu thật, đó là thêm một lý do để huấn luyện RM ít epoch.w [4.9 3.08]: RM thưởng cả độ đúng lẫn độ dài. Nó học được “dài là tốt” vì trong dữ liệu, đáp án được chọn thường dài hơn. Người không có ý đó, nhưng dữ liệu nói vậy.- Cặp mới: một đáp án đúng, ngắn được 5.95 điểm. Một đáp án sai, dài 300 từ, dài hơn mọi đáp án RM từng thấy, được 10.70 điểm. RM tin tới 99.1% rằng người sẽ chọn bản sai. Ở bước 3, chính sách sẽ tìm ra đúng chỗ này. Đó là lý do phải giữ nó gần vùng RM đã thấy.
Muốn chắc công thức gradient đúng, bạn có thể tự kiểm bằng sai phân tại : tính loss với cộng và trừ , lấy hiệu chia cho , rồi so với thành phần đầu của gradient.
Sợi dây KL trên ba đáp án
Phần tiêu đề “Sợi dây KL trên ba đáp án”Một prompt, ba đáp án: A cụt lủn, B đúng và gọn, C dài dòng và sai một ý. Mô hình SFT viết A, B, C với xác suất , , . RM bị lệch như ở ô trước, thích câu dài: chấm A, B, C lần lượt , , . Ô còn ghi thêm chất lượng thật , con số chỉ ví dụ đồ chơi mới biết. Gao và cộng sự dùng RM vàng để đóng vai này. Với mỗi , ô tính theo công thức ở mục Lý thuyết, kiểm rằng không phân phối nào trong 20 000 phân phối ngẫu nhiên có mục tiêu lớn hơn, rồi in KL, điểm RM trung bình và chất lượng thật trung bình .
Chính sách tối ưu theo β
# Sợi dây KL: chính sách tối ưu của E[r] - beta * KL(pi || pi_ref)import numpy as np
# Một prompt, ba đáp án: A cụt lủn, B đúng và gọn, C dài dòng, sai một ýpi_ref = np.array([0.6, 0.3, 0.1]) # xác suất của mô hình SFTr = np.array([0.0, 1.0, 3.0]) # điểm của RM (thích câu dài)q = np.array([0.0, 1.0, 0.3]) # chất lượng thật, đời thực không biếtrng = np.random.default_rng(0)trials = rng.dirichlet(np.ones(3), size=20000) # phân phối ngẫu nhiên
def kl(p): return np.sum(p * np.log(p / pi_ref), axis=-1)
def row(label, p): cols = list(p) + [kl(p), p @ r, p @ q] print(f"{label:>4} " + " ".join(f"{x:6.3f}" for x in cols))
print("beta pi(A) pi(B) pi(C) KL E[r] E[q]")row("ref", pi_ref)for beta in (10, 3, 1.5, 1, 0.5, 0.3): # nghiệm tối ưu: pi_ref nhân e^(r/beta), rồi chuẩn hóa tổng về 1 pi = pi_ref * np.exp(r / beta) pi /= pi.sum() best = pi @ r - beta * kl(pi) # kiểm: không phân phối ngẫu nhiên nào có mục tiêu lớn hơn assert np.all(trials @ r - beta * kl(trials) <= best + 1e-12) row(beta, pi)The first run downloads Python, about 10 MB.
Đọc từ trên xuống, tức thả sợi dây lỏng dần:
- Dòng
reflà mô hình SFT: điểm RM trung bình , chất lượng thật . - : dây rất chặt. Chính sách gần như đứng yên, KL chỉ .
- : chính sách dịch dần sang C, KL . Chất lượng thật đạt cao nhất bảng, , vì xác suất chủ yếu rời khỏi A, đáp án tệ nhất. Sang C, dù C sai một ý, vẫn hơn ở lại A.
- và : dây lỏng, chính sách dồn rồi vào C. Ở , chất lượng thật đã về , ngang mô hình SFT. Ở , điểm RM gần chạm tối đa, còn chất lượng thật , thấp hơn cả mô hình SFT.
Cột tăng đều khi KL tăng. Cột tăng rồi giảm. Đó là hình dạng mà Stiennon và cộng sự, rồi Gao và cộng sự, đo được với mô hình ngôn ngữ thật. Trong ví dụ này, quyết định chính sách dừng ở đâu trên đường đi, đúng như “dừng sớm”. Nhưng chọn tốt cần biết , mà đời thực không có . Vì thế phải đánh giá bằng người.
Lỗi hay gặp
Phần tiêu đề “Lỗi hay gặp”Kiểm tra nhanh
Phần tiêu đề “Kiểm tra nhanh”Tóm tắt và đọc thêm
Phần tiêu đề “Tóm tắt và đọc thêm”Ý chính:
- RLHF thêm vào sau SFT hai bước: học một RM từ các cặp “bản này hơn bản kia” của người, rồi dùng điểm RM làm phần thưởng để tối ưu chính sách bằng học tăng cường. Nó dạy hành vi, không thêm kiến thức.
- RM dùng mô hình Bradley–Terry, , và loss . Gradient đẩy lên, xuống, mạnh nhất ở cặp đang xếp sai. Điểm không có gốc, chỉ hiệu điểm có nghĩa.
- Bước 3 tối đa , có nghiệm . InstructGPT dùng PPO, có kẹp giữ từng bước gần chính sách vừa rồi, khác phạt KL giữ gần mô hình SFT. PPO-ptx trộn thêm log-likelihood trên dữ liệu pre-train để giảm alignment tax.
- Tối ưu quá tay thì điểm RM tăng mà chất lượng thật giảm (reward hacking, luật Goodhart). Phạt KL làm chậm việc này, không bảo đảm chặn được. Vẫn cần đánh giá bằng người.
Đọc thêm:
- Ouyang, L., Wu, J., Jiang, X., và cộng sự (2022). Training language models to follow instructions with human feedback, arXiv:2203.02155, mục 3.5 và phụ lục C. InstructGPT: ba bước, cách huấn luyện RM, mục tiêu PPO-ptx.
- Stiennon, N., Ouyang, L., Wu, J., và cộng sự (2020). Learning to summarize from human feedback, arXiv:2009.01325, NeurIPS 2020, mục 3 và 4.3. Khuôn mà InstructGPT theo, có phạt KL và đường cong tối ưu quá mức.
- Christiano, P., Leike, J., Brown, T. B., Martic, M., Legg, S., Amodei, D. (2017). Deep reinforcement learning from human preferences, arXiv:1706.03741, mục 2.2. Nguồn gốc của ý học phần thưởng từ so sánh cặp, với mô hình Bradley–Terry và phép so sánh Elo.
- Gao, L., Schulman, J., Hilton, J. (2022). Scaling Laws for Reward Model Overoptimization, arXiv:2210.10760, mục 1 và 3.6. Đo reward hacking bằng RM vàng, và vai trò của phạt KL.
- Schulman, J., Wolski, F., Dhariwal, P., Radford, A., Klimov, O. (2017). Proximal Policy Optimization Algorithms, arXiv:1707.06347, mục 3. Mục tiêu có kẹp của PPO, nếu bạn muốn xem chi tiết.
- Bai, Y., Jones, A., Ndousse, K., Askell, A., và cộng sự (2022). Training a Helpful and Harmless Assistant with Reinforcement Learning from Human Feedback, arXiv:2204.05862. Hữu ích và vô hại, cập nhật RM liên tục. Bộ dữ liệu so sánh công khai ở Anthropic/hh-rlhf trên Hugging Face (repo GitHub anthropics/hh-rlhf đã được lưu trữ, chỉ còn đọc).
- Hugging Face. Reward Modeling (TRL 1.16.0), tài liệu chính thức, đọc tháng 10/2026.
RewardTrainer, định dạng dữ liệuchosen/rejected, tùy chọncenter_rewards_coefficientđể giữ điểm quanh 0.
Your browser is blocking storage. Your progress will be lost when you reload the page.
Content licensed under CC BY-NC-SA 4.0. Code under the MIT license.About