Chuyển tới nội dung chính

Tối ưu theo sở thích trực tiếp

Bốn log xác suất sửa đượcMốc biên bằng 0 khoá cứngỔn định số học

Tối ưu theo sở thích trực tiếp

Có hai câu trả lời và một người nói câu nào hơn. Biến đúng một mẩu thông tin đó thành một con số để tối ưu, rồi xem con số nào quyết định cặp ấy còn dạy được gì.

Sau khi huấn luyện trước, mô hình chỉ biết đúng một việc: tiếp chữ sao cho giống dữ liệu nó đã đọc. Nó không biết rằng người ta đang hỏi nó, cũng không biết câu trả lời nào là tử tế hơn. Bước tinh chỉnh có giám sát dạy nó cái khuôn hội thoại, tức thấy lời nhắc thì trả lời chứ không viết tiếp lời nhắc. Nhưng khuôn hội thoại không nói được câu nào hơn câu nào, mà đó lại chính là thứ người ta có sẵn rất nhiều: cho hai câu trả lời cho cùng một lời nhắc, người xếp hạng chỉ tay vào một câu.

Bài này không kể chuyện học tăng cường từ phản hồi con người. Nó dừng ở phần tính được: từ một cặp đã xếp hạng, làm sao ra được một con số để tối ưu, và con số nào trong đó quyết định cặp ấy còn hữu ích hay đã cạn.

Công thức chỉ có bốn bước, và bước nào cũng là số học phổ thông. Với câu được chọn y_w và câu bị loại y_l:

  • tỉ số log của mỗi câu là log π trừ log π_ref, tức chính sách đang huấn luyện đã đẩy câu đó lên hay dìm xuống bao nhiêu so với mô hình tham chiếu đang bị đóng băng;
  • phần thưởng hàm ý là tỉ số log đó nhân beta;
  • biên là phần thưởng hàm ý của câu được chọn trừ của câu bị loại;
  • mất mát-log sigmoid(biên).

Nếu sigmoid còn lạ thì xem lại sigmoid và hồi quy logistic; phần -log của một xác suất thì đã gặp ở hàm mất mát dưới tên cross-entropy, và bài này là đúng cái hàm đó áp lên một phép so sánh hai lựa chọn thay vì một nhãn.

Có một cách đọc sigmoid(biên) làm mọi thứ khớp lại. Chạy softmax trên đúng hai điểm số, ở đây là hai phần thưởng hàm ý, thì xác suất của cái thứ nhất là e^r_w chia cho e^r_w + e^r_l, và chia cả tử lẫn mẫu cho e^r_w sẽ ra ngay sigmoid(r_w - r_l). Nghĩa là sigmoid ở đây không phải một hàm nén tuỳ chọn: nó chính là softmax trên hai lựa chọn, và mất mát -log sigmoid(biên) chính là cross-entropy của bài phân loại "người xếp hạng đã chọn câu nào".

Hàm mất mát theo sở thích trực tiếp · một cặp, năm con số
Biên 0,1500Mất mát 0,6210Trọng số gradient 0,462570
Cả hai câu đều đã được chính sách đẩy lên so với tham chiếu, câu được chọn đẩy nhiều hơn một chút. Biên nhỏ, nên trọng số gradient còn gần 0,5: đây là loại cặp còn dạy được nhiều nhất. Chú ý một chuyện: trung bình mỗi token của hai câu theo chính sách bằng nhau đúng -0,7, thế mà biên vẫn dương, vì biên đo độ dịch chuyển so với tham chiếu chứ không đo xác suất tuyệt đối.
Nguồn số: Bốn log xác suất ở đây là số TỰ ĐẶT để biên rơi vào chỗ dễ đọc, KHÔNG chép từ mô hình hay bài báo nào. Chỉ công thức là có nguồn: hàm mất mát theo sở thích trực tiếp của Rafailov và cộng sự (arXiv:2305.18290, 2023). Giá trị beta nào là "thường dùng" thì tôi chưa kiểm được từ nguồn gốc nên không nêu ở đây.
Bốn log xác suất trong mọi preset đều là số tự đặt, không chép từ mô hình nào, và không có preset nào dán tên mô hình. Ngày viết bài: 28/07/2026. Cổng kiểm số của bài canh phép tính, không canh khẳng định nào về mô hình ngoài kia.

1 · Một cặp đã được xếp hạng ✎ sửa được

câu trả lờilog πlog π_reftỉ số logphần thưởng hàm ýtokenlog π mỗi tokenlog π_ref mỗi token
được chọn (y_w)-28,00-30,00+2,0000+0,200040-0,7000-0,7500
bị loại (y_l)-31,50-32,00+0,5000+0,050045-0,7000-0,7111

Tỉ số log là log π trừ log π_ref, tức chính sách đã đẩy câu đó lên hay dìm xuống bao nhiêu so với mô hình tham chiếu đang bị đóng băng. Phần thưởng hàm ý chỉ là tỉ số đó nhân beta = 0,100. Hai cột cuối là log xác suất chia cho số token: chúng giúp bạn thấy độ lớn có hợp lý hay không, nhưng không tham gia vào mất mát, vì mất mát cộng dồn log xác suất trên cả câu chứ không lấy trung bình.

2 · Từ biên tới mất mát

Biên = +0,2000 - (+0,0500) = 0,1500. Rồi sigmoid(biên) = 0,5374 mất mát = -log sigmoid(biên) = 0,620957.

0,1500
biên: phần thưởng hàm ý của câu được chọn trừ của câu bị loại
53,74%
sigmoid(biên), tức mô hình đang xếp cặp này đúng thứ tự với độ chắc bao nhiêu
0,620957
mất mát -log sigmoid(biên), càng nhỏ càng khớp thứ hạng
0,462570
trọng số gradient sigmoid(-biên), tức cặp này còn dạy được bao nhiêu
còn lẫn lộn
Biên dương nhưng còn nhỏ. Trọng số gradient vẫn cùng cỡ với 0,5, nên cặp này còn dạy được nhiều.
Bậc bước thật đứng trước gradient là beta × trọng số = 0,100 × 0,462570 = 0,046257. Đây là chỗ beta có hai vai trò ngược nhau: beta nhỏ làm biên co lại nên trọng số tăng, mà beta cũng nhân vào phía trước nên bậc bước giảm. Kéo beta rồi xem con số này, đừng đoán.

3 · Trọng số gradient tụt nhanh cỡ nào

Bảng cố định theo biên, để bạn thấy cả đường cong một lượt. Hàng được tô là hàng gần cấu hình đang mở nhất.
biênmất máttrọng sốnhận xét
-66,0024760,997527đi sai hướng
-22,1269280,880797đi sai hướng
-11,3132620,731059đi sai hướng
00,6931470,500000đúng mốc biên bằng 0
10,3132620,268941còn lẫn lộn
20,1269280,119203đang nhạt dần
40,0181500,017986đang nhạt dần
60,0024760,002473đã tách xa
104,540e-54,540e-5đã tách xa
Hàng biên bằng 0 là mốc kiểm: mất mát đúng log 2 ≈ 0,693147 và trọng số đúng 0,5, dù beta bằng bao nhiêu. Từ biên 2 trọng số đã xuống dưới 0,12, tới biên 6 chỉ còn 0,00247, tức khoảng một phần hai trăm của mốc. Cặp nào tới đó rồi thì vẫn tốn đủ phép tính mà gần như không đóng góp gì.

4 · Cùng công thức, hai cách tính

dạng ổn định (log1p, tách hai nhánh)0,620957
dạng viết thẳng như trên giấy (-log(1/(1+e^-x)))0,620957
Ở vùng biên thông thường hai cách cho kết quả trùng nhau tới chữ số cuối, và đó chính là lý do lỗi này rất khó thấy. Muốn thấy nó hỏng thì kéo log π câu được chọn xuống thật sâu (hoặc đẩy beta lên 2) để biên rất âm, hoặc làm ngược lại để biên vượt 50.
Sim này không làm được gì
  • Nó tính đúng một hàm mất mát cho đúng một cặp. Nó không chứng minh rằng huấn luyện theo cách này làm mô hình hữu ích hơn, trung thực hơn hay an toàn hơn. Những kết luận đó là thực nghiệm của người khác, đo trên tập đánh giá thật, và không có con số nào ở đây nói được về chúng.
  • Bốn log xác suất là số tự đặt. Trong thực tế chúng là tổng log xác suất từng token do mô hình sinh ra, và lấy được chúng đòi hỏi chạy cả chính sách lẫn mô hình tham chiếu trên từng cặp.
  • Trọng số gradient ở đây là hệ số vô hướng sigmoid(-biên) đứng trước gradient. Nó không phải toàn bộ gradient: phần còn lại là gradient của log xác suất theo tham số, thứ mà số học trên trang này không chạm tới.
  • Trung bình mỗi token chỉ để bạn đọc độ lớn cho dễ. Hàm mất mát chuẩn cộng dồn log xác suất trên cả câu, nên hai núm số token không làm mất mát đổi, và cổng kiểm có khẳng định khoá đúng chuyện đó.

Bốn con số vào, năm con số ra

Ở trạng thái mở bài, cặp trông như thế này. Câu được chọn có log π = -28log π_ref = -30, nên tỉ số log là +2,0000. Câu bị loại có -31,5-32, tỉ số log +0,5000. Với beta = 0,1, hai phần thưởng hàm ý là +0,2000+0,0500, nên biên bằng 0,1500. Từ đó sigmoid(biên) ra 53,74%, mất mát ra 0,620957, và trọng số gradient ra 0,462570.

Có một chuyện trong cấu hình này đáng dừng lại. Câu được chọn dài 40 token, câu bị loại dài 45 token, và log xác suất trung bình mỗi token theo chính sách của cả hai đều bằng đúng -0,7000. Tính theo độ khớp tuyệt đối thì hai câu ngang nhau. Thế mà biên vẫn dương, vì biên không đo xác suất tuyệt đối: nó đo độ dịch chuyển so với tham chiếu. Theo tham chiếu, câu được chọn chỉ đạt -0,7500 mỗi token còn câu bị loại đạt -0,7111, nên phần chính sách đẩy lên ở câu được chọn nhiều hơn. Cả hàm mất mát này chỉ nhìn vào hiệu của hiệu, và đó là lý do nó cần một mô hình tham chiếu chứ không chỉ cần chính sách.

Hai núm số token thì có mặt để bạn đọc độ lớn cho dễ, chứ chúng không làm mất mát đổi: công thức chuẩn cộng dồn log xác suất trên cả câu, không lấy trung bình. Cổng kiểm số của bài có một khẳng định khoá đúng chuyện đó, để chỗ này là lựa chọn được ghi rõ chứ không phải một cái quên.

Trọng số gradient là chỗ đáng nhìn nhất

Mất mát nhỏ nghe như tin tốt, và ở đây nó là tin tốt hiểu theo nghĩa hẹp: cặp đã được xếp đúng thứ tự. Nhưng nó cũng là tin xấu, vì đạo hàm của -log sigmoid(biên) theo biên đúng bằng trừ sigmoid(-biên). Nói cách khác, hệ số vô hướng đứng trước gradient của cặp này là sigmoid(-biên), và nó tụt cùng lúc với mất mát.

Bảng ở mục 3 của sim cho thấy cả đường tụt một lượt. Ở biên 0 trọng số bằng 0,5. Tới biên 2 nó đã xuống 0,119203, dưới 0,12. Tới biên 6 nó chỉ còn 0,002473, tức khoảng một phần hai trăm của mốc. Tới biên 104,540e-5. Bấm preset cặp đã tách xa để tới đúng chỗ đó: biên 6, mất mát 0,002476, và trọng số 0,002473. So với cặp đang mở bài, trọng số của nó nhỏ hơn khoảng 187 lần, dù nó vẫn nằm trong lô, vẫn phải chạy qua cả chính sách lẫn mô hình tham chiếu, vẫn tốn đủ phép tính.

Hệ quả thực hành: cặp còn lẫn lộn mới là cặp có ích. Một tập dữ liệu sở thích mà phần lớn cặp đã tách xa thì mỗi lượt học gần như chỉ đốt máy. Bấm preset chính sách đi sai hướng để thấy đầu kia của thang: biên -1, mất mát 1,313262 vượt log 2, và trọng số lên 0,731059, tức cặp bị kéo mạnh hơn cả cặp ở mốc 0.

Mốc biên bằng 0 là chỗ tự kiểm được

Bấm preset biên đúng bằng 0. Ở đó cả hai câu dịch chuyển y hệt nhau so với tham chiếu, mỗi câu +2, nên hai phần thưởng hàm ý bằng nhau và biên triệt tiêu. sigmoid(0) bằng đúng một nửa, nên mất mát bằng -log(1/2) tức log 2, xấp xỉ 0,693147, và trọng số gradient bằng đúng 0,5.

Điểm đẹp của mốc này là nó không phụ thuộc beta: beta nhân vào cả hai phần thưởng nên nó không cứu được một hiệu bằng 0. Kéo beta từ 0,001 tới 2, hai con số đó không nhúc nhích. Đây là mốc mà cổng kiểm số khoá với sai số bằng không, không phải bằng một ngưỡng nới tay, và khoá qua cả bảy giá trị beta khác nhau.

Beta có hai vai trò ngược nhau

Dễ tưởng beta chỉ là một hệ số tỉ lệ, nhưng nó vào công thức ở hai chỗ đánh nhau. Nó nhân vào biên, nên beta nhỏ làm biên co lại, và biên co lại thì trọng số gradient tăng. Đồng thời nó cũng đứng trước gradient, nên bậc bước thật là beta nhân trọng số.

Preset beta rất nhỏ cho thấy hai lực đó cộng lại ra gì. Vẫn đúng cặp đã tách xa, chỉ hạ beta từ 0,1 xuống 0,01: biên co từ 6 về 0,6000, trọng số bật từ 0,002473 lên 0,354344, và bậc bước thật đi từ 0,000247 lên 0,003543, tức lớn hơn khoảng mười bốn lần. Nói gọn: beta không chỉ điều chỉnh cường độ, nó quyết định cặp nào bị coi là đã xong. Beta lớn làm cặp cạn nhanh, beta nhỏ giữ cặp lại lâu hơn.

Còn beta bằng bao nhiêu thì hợp? Tôi không nêu ở đây. Sim mặc định 0,1 chỉ vì con số đó cho biên dễ đọc, và giá trị nào là "thường dùng" trong thực tế thì tôi chưa kiểm được từ nguồn gốc, nên thà nói thẳng là chưa kiểm còn hơn dán một con số nghe có vẻ chuyên nghiệp. Đặt beta bằng 0 thì sim kẹp về 0,001 và báo cho bạn biết là nó đã kẹp, kèm lý do: beta bằng 0 làm biên luôn bằng 0, mất mát đóng băng ở log 2, và không còn gì để học.

Vì sao công thức phải viết khác cách nó đọc

Mục 4 của sim in mất mát hai lần. Một lần bằng dạng ổn định, một lần bằng đúng cách công thức đọc trên giấy là -log(1/(1+e^-x)). Ở vùng biên thông thường hai cột trùng nhau tới chữ số cuối, nên nếu chỉ thử với dữ liệu tử tế thì bạn sẽ không bao giờ thấy vấn đề.

Đẩy biên ra hai đầu thì thấy ngay. Ở biên -800, dạng viết thẳng phải tính e^800, vượt số thực lớn nhất biểu diễn được, nên sigmoid làm tròn về 0 rồi log 0 ra vô cực: một cặp như vậy trong lô là đủ để mất mát trung bình của cả lô thành vô cực và gradient thành không xác định. Dạng ổn định trả về đúng 800. Ở đầu kia, biên 50, dạng viết thẳng làm tròn sigmoid thành đúng 1 nên in ra 0, còn giá trị thật là 1,929e-22. Cái này nguy hơn cái trên: không có cảnh báo nào, chỉ có một con số đã mất hết ý nghĩa mà vẫn trông bình thường.

Cách vá là tách hai nhánh và dùng log1p: với x dương thì log1p(exp(-x)), với x âm thì -x + log1p(exp(x)). Hai nhánh gặp nhau ở x = 0 tại log 2, và không nhánh nào phải tính một hàm mũ lớn hơn 1. Cả hai đầu cực trị đều có khẳng định trong cổng kiểm, kèm ngưỡng sai số ghi rõ: 1e-12 tuyệt đối ở đầu âm, và 1e-30 tuyệt đối ở đầu dương để chứng minh con số 1,929e-22 còn nguyên từng chữ số chứ không bị làm tròn về 0.

Sim này không chứng minh được gì

Nói thẳng, vì đây là chỗ dễ đọc lố nhất. Sim tính đúng một hàm mất mát cho đúng một cặp, và mọi con số trên trang đều kiểm được bằng tay. Nó không chứng minh rằng huấn luyện theo cách này làm mô hình hữu ích hơn, trung thực hơn hay an toàn hơn. Nó cũng không nói gì về việc thứ hạng của người xếp có phản ánh cái gì đáng giá hay không, mà đó mới là câu hỏi khó: một hàm mất mát chỉ trung thành với nhãn nó được cho, nên nếu người xếp hạng thích câu trả lời dài dòng dễ nghe hơn câu trả lời đúng thì công thức này sẽ tối ưu đúng cái sở thích đó rất giỏi. Phần bàn về chuyện ai đặt tiêu chí và trách nhiệm nằm ở đâu thì ở an toàn và đạo đức.

Vài điểm nhỏ nhưng hay bị bỏ qua:

  • Trọng số gradient ở đây là một hệ số vô hướng, không phải toàn bộ gradient. Phần còn lại là gradient của log xác suất theo tham số, thứ mà số học trên trang này không chạm tới.
  • Bốn log xác suất là số tự đặt. Không preset nào dán tên mô hình, vì chúng là tình huống chứ không phải cấu hình có thật. Trong thực tế chúng là tổng log xác suất từng token, và lấy được chúng đòi hỏi chạy cả chính sách lẫn mô hình tham chiếu trên từng cặp, tức bộ nhớ và thời gian gấp đôi.
  • Log xác suất không bao giờ dương. Gõ một số dương vào thì sim kẹp về 0 và nói rõ là nó đã kẹp, vì xác suất không vượt quá 1.
  • Cổng kiểm số canh phép tính, không canh khẳng định về mô hình ngoài kia. Nó có 450 khẳng định, tất cả về số học: nếu cấu hình là như vậy thì biên, mất mát và trọng số phải là như vậy.
Điều rút ra

Một cặp đã xếp hạng biến thành một con số qua bốn bước: tỉ số log so với mô hình tham chiếu, nhân beta thành phần thưởng hàm ý, trừ nhau thành biên, rồi -log sigmoid thành mất mát. Con số đáng nhìn nhất không phải mất mát mà là sigmoid(-biên), hệ số đứng trước gradient: ở biên 0 nó bằng đúng 0,5 cùng với mất mát log 2, tới biên 6 chỉ còn 0,002473, nên cặp đã tách xa gần như thôi dạy được gì trong khi vẫn tốn đủ phép tính. Cặp còn lẫn lộn mới là cặp có ích. Và beta không chỉ là hệ số cường độ, nó quyết định cặp nào bị coi là đã xong. Đếm đúng một hàm mất mát không có nghĩa là chứng minh được cách huấn luyện này làm mô hình tốt hơn: phần đó phải chạy thực nghiệm mới biết.

Câu hỏi tự kiểm0/3 đúngchưa trả lời
  1. 1Hai câu trả lời của một cặp dịch chuyển y hệt nhau so với mô hình tham chiếu, tức hai tỉ số log bằng nhau. Mất mát và trọng số gradient bằng bao nhiêu, và beta ảnh hưởng thế nào?
  2. 2Cặp A có biên 0,15 và mất mát 0,620957. Cặp B có biên 6 và mất mát 0,002476. Cặp nào đóng góp nhiều hơn vào bước cập nhật?
  3. 3Trong một lô huấn luyện có một cặp mà biên bằng -800. Nếu mất mát được tính đúng như công thức đọc trên giấy, tức trừ log của một chia cho một cộng e mũ trừ x, thì chuyện gì xảy ra?