W3 · Training / inference workflow
Hàm mất mát: model gán bao nhiêu xác suất cho đáp án đúng
Chấm điểm bảng logits của mô hình so với token đáp án bằng cross-entropy, rồi lấy trung bình trên các vị trí hợp lệ thành một con số duy nhất để bắt đầu backward.
1Định nghĩa
Hàm mất mát (loss) là phép chấm điểm cho biết bảng điểm logits của mô hình ở cuối lượt forward lệch khỏi đáp án thật bao nhiêu. Tại mỗi vị trí hợp lệ, hệ thống đổi logits thành xác suất bằng softmax, lấy xác suất mô hình gán cho đúng token đáp án trong bước tạo nhãn mục tiêu, rồi lấy giá trị âm của logarit xác suất đó. Phép chấm này gọi là cross-entropy hay negative log-likelihood.
Nếu mô hình gán xác suất càng cao cho token đúng thì loss càng gần 0; nếu gán xác suất rất thấp thì loss vọt lên. Điểm phạt của các vị trí được tính theo loss mask rồi lấy trung bình thành một số thực duy nhất, và số đó là điểm khởi phát của bước lan truyền ngược để biết cần sửa trọng số theo hướng nào.
Ví dụ đời thường: Hàm mất mát giống thước chấm điểm của người tập bắn cung: mũi tên cắm giữa hồng tâm (mô hình tự tin đúng) thì điểm phạt gần 0, mũi tên lệch càng xa thì điểm phạt càng lớn. Khác bia bắn, ở đây điểm phạt đo theo mức tự tin mà mô hình đặt vào đáp án đúng, nên một mô hình đoán 'chắc chắn' mà sai bị phạt nặng hơn một mô hình còn do dự.
2Luồng
Đây là ô 3A, nơi hai nhánh gặp nhau: logits đến từ cột 2, labels và mask đến từ ô 1B. Mũi tên ra chỉ mang một số thực (loss) cùng gradient của nó theo logits, đi tiếp vào ô 3B.
- Logits ở mọi vị trí
Bảng điểm shape (B, T, V) từ ô 2D.
- Lấy đáp án và mask
Labels và loss mask từ ô 1B cho biết token đúng và vị trí nào được chấm.
- Log-softmax rồi tra đáp án
Tính ln xác suất của token đúng ở từng vị trí hợp lệ, đổi dấu thành loss.
- Trung bình thành một số
Chia tổng loss cho số vị trí hợp lệ; số này mở đầu cho backward.
Mã Mermaid
flowchart TD
step1["Logits ở mọi vị trí"]
step2["Lấy đáp án và mask"]
step3["Log-softmax rồi tra đáp án"]
step4["Trung bình thành một số"]
step1 --> step2
step2 --> step3
step3 --> step4 3Giải pháp
Vị trí trên sơ đồ: ô 3A "Cross-entropy loss" ở đầu cột 3 · Học từ sai số. Đầu vào đến từ hai hướng: logits từ ô 2D (forward) và labels cùng loss mask từ ô 1B (nhãn mục tiêu). Đầu ra là một con số và gradient của nó đối với logits, chuyển sang ô 3B (backward).
Vấn đề cần giải. Ta cần một thước đo duy nhất cho biết 'dự đoán lần này tệ đến đâu' để tối ưu: thước đo phải thấp khi mô hình tin đúng đáp án và cao khi tin sai, và phải trơn (có đạo hàm) để biết hướng sửa.
Khái niệm tối thiểu. Tại một vị trí, logits z là V số. Softmax: p_k = e^(z_k) chia cho tổng các e^(z_j), cho V xác suất cộng lại bằng 1. Loss tại vị trí đó = −ln(p_đáp_án). Để tránh tràn số khi e^z quá lớn, log-softmax trừ trước số lớn nhất: ln p_k = (z_k − max) − ln(tổng e^(z_j − max)).
Ví dụ có số (minh họa, tính tay, tiếp tục từ bài forward). Logits tại vị trí “ăn” là [0,2; 0,7; 0,1; 0,2; 0,6; 0,1; 0,7] cho [pad, mèo, chó, ăn, cá, ngủ, eos], đáp án là cá (chỉ số 4). e^z = [1,221; 2,014; 1,105; 1,221; 1,822; 1,105; 2,014], tổng = 10,503. Xác suất của cá = 1,822 / 10,503 = 0,1735. Loss = −ln 0,1735 = 1,752 nat. Kiểm tra với cách ổn định: trừ max 0,7 được tổng e^(z − max) = 5,2155, ln của nó = 1,6516, nên ln p(cá) = (0,6 − 0,7) − 1,6516 = −1,7516; cùng kết quả.
Cách đọc con số 1,752. Một mô hình hoàn toàn chưa học, gán xác suất bằng nhau 1/7 cho mọi token, sẽ có loss = ln 7 = 1,946. Con số 1,752 thấp hơn một chút vì cá được cho điểm cao hơn mức trung bình. Mốc ln V là mốc ‘đoán mò’ để so sánh: loss ban đầu của mô hình chưa học thường nằm gần ln V; nếu cao hơn nhiều, nên nghi ngờ lỗi khởi tạo hoặc căn chỉnh nhãn. Hai điểm tham chiếu khác: xác suất 0,10 cho loss 2,303 và xác suất 0,80 cho loss 0,223.
Trung bình có mask. Giả sử một khối có bốn vị trí với loss lần lượt 1,75; 0,90; 0,20 và một vị trí là token đệm (mask 0). Đúng là (1,75 + 0,90 + 0,20) / 3 = 0,95. Nếu lỡ chia cho cả bốn vị trí, được 0,7125: nhỏ đi giả tạo và còn phụ thuộc vào bao nhiêu token đệm có trong batch. Perplexity tương ứng với loss trung bình 0,95 là e^0,95 ≈ 2,59; đọc là ‘như đang chọn đều giữa khoảng 2,6 token’, nhưng chỉ có nghĩa khi cùng tokenizer và cùng tập kiểm định.
Điều có thể và không thể kết luận. Loss giảm trên tập huấn luyện nghĩa là mô hình gán xác suất cao hơn cho đáp án trong dữ liệu đó. Loss thấp trên tập kiểm định mới nói lên khả năng tổng quát hóa trên dữ liệu kiểu đó. Loss thấp không đồng nghĩa với câu trả lời hữu ích hay đúng sự thật, và không so sánh được giữa hai mô hình dùng tokenizer khác nhau hoặc mask khác nhau.
Thực thi. Dùng hàm cross-entropy nhận thẳng logits; nếu thư viện đã gộp softmax thì đừng softmax thêm lần nữa. Chuẩn hóa theo số token hợp lệ, đặc biệt khi độ dài các batch khác nhau. Đường gộp (fused) có thể giảm tensor trung gian nhưng trước khi tối ưu phải so loss và gradient với bản tham chiếu, vì cách lấy trung bình và mask khác nhau làm đổi phép tính. Chi tiết về sai số số học nằm ở độ chính xác và sai số. Những bài toán khác cũng dùng ý tưởng này nhưng với đáp án mềm, ví dụ distillation (học từ phân phối của mô hình giáo viên).
Để tính loss trên logits thật và xem đạo hàm theo logits, mở giai đoạn 4 · Cross-entropy loss của Bài Lab tổng hợp. Hãy đoán trước loss khởi đầu so với ln V rồi đối chiếu.
4Profiling
- Loss huấn luyện và loss kiểm định
Kiểm tra tính đúng trước: tính loss của một vị trí bằng tay như ví dụ rồi so với hàm thư viện, và kiểm tra loss khởi đầu gần ln V. Sau đó theo dõi loss huấn luyện và loss kiểm định cùng objective và cùng mask. Chỉ tiến bộ trên tập huấn luyện không cho thấy khả năng tổng quát hóa; nếu loss huấn luyện giảm mà loss kiểm định tăng thì có dấu hiệu học thuộc, nhưng cần thêm bằng chứng (ví dụ đối chiếu dữ liệu trùng) trước khi kết luận nguyên nhân.
- Giá trị không hữu hạn và số vị trí hợp lệ
Ghi số lần xuất hiện NaN hoặc vô cực (Inf) và số token đã góp vào loss của mỗi batch. Một lỗi mask có thể làm loss trông đẹp nhưng mô hình học sai; số vị trí hợp lệ bằng 0 cũng làm phép chia lỗi. Số này nên khớp với kỳ vọng từ ô 1B.
- Độ lệch do kiểu số
Khi huấn luyện bằng kiểu số ít bit, so loss với phiên bản tính bằng kiểu số rộng hơn trên cùng một batch. Sai khác nhỏ là bình thường; sai khác lớn gợi ý nên tính softmax và log bằng kiểu số rộng hơn. Không kết luận về chất lượng từ độ lệch này.
Mẹo đo lường: ghim số liệu trên workload thật, ghi cả p50/p95/p99 thay vì chỉ trung bình, và luôn ghi lại điều kiện chạy (batch, cache, đồng thời, phần cứng) trước và sau khi tối ưu. Số đo thiếu điều kiện chạy thì không so sánh được.
5Ví dụ
Xác suất 0,10 và 0,80
Loss của một vị trí có xác suất đáp án 0,10 khoảng 2,303 nat; với xác suất 0,80 loss khoảng 0,223, thấp hơn vì mô hình tự tin hơn vào đáp án đúng. Tự kiểm tra: xác suất 1 cho loss bằng bao nhiêu? Đáp án: −ln 1 = 0, mô hình tin tuyệt đối và đúng. Xác suất rất nhỏ như 0,001 cho loss khoảng 6,91.
Batch có nhiều token đệm
Không lấy trung bình trên cả vị trí đệm. Với bốn vị trí, ba hợp lệ có loss 1,75; 0,90; 0,20: đúng là 0,95, sai (chia cho 4) là 0,7125. Nếu chia sai, loss và gradient phụ thuộc độ dài phần đệm, làm hai batch khác nhau trông như có chất lượng khác nhau dù mô hình giống nhau.
Tự kiểm tra: loss không cùng đơn vị
Mô hình A dùng tokenizer cắt thành 100 token cho một đoạn và đạt loss trung bình 2,0 nat mỗi token; mô hình B cắt thành 150 token và đạt loss 1,5 nat mỗi token. Hỏi B có tốt hơn không? Chưa kết luận được: tổng loss cho cả đoạn là 200 so với 225, nên trên cùng đoạn văn A còn thấp hơn. Cần so trên cùng đơn vị (ví dụ trên mỗi ký tự hoặc mỗi đoạn) trước khi so mô hình.
6Thuật ngữ
- Softmax và log-softmax
- Softmax biến V logits thành xác suất dương cộng lại bằng 1; log-softmax tính trực tiếp logarit của xác suất theo công thức ổn định số học, tránh tràn số.
- Cross-entropy
- Với một đáp án đúng, bằng −ln(xác suất mô hình gán cho token đúng). Xác suất càng cao, loss càng gần 0.
- Nat
- Đơn vị của loss khi dùng logarit tự nhiên ln; loss tính theo bit nếu dùng logarit cơ số 2.
- Perplexity
- exp của loss trung bình. Đọc là 'mô hình phân vân như đang chọn đều giữa chừng ấy token'; không phải độ chính xác (accuracy).
- Loss trung bình có mask
- Tổng loss của các vị trí có loss mask bằng 1 chia cho số vị trí đó, không chia cho tổng số vị trí kể cả đệm.
Glossary (6)
- Tokenizer
- Bộ cắt văn bản thành token và tra bảng từ vựng; loss phụ thuộc cách cắt, nên không so loss giữa hai tokenizer khác nhau như hai đơn vị giống nhau.
- Mask
- Quy tắc 0/1; ở bài này là loss mask: 1 nghĩa là vị trí được chấm, 0 nghĩa là bỏ qua.
- Forward pass
- Lượt tính cho ra logits; loss chỉ là bước chấm điểm sau nó.
- Backward pass
- Lượt tính gradient từ loss ngược về mọi tham số; bài kế tiếp.
- Batch
- Nhóm B khối token xử lý cùng lúc; loss được tính trung bình trên các vị trí hợp lệ của cả batch.
- Xác suất
- Số từ 0 đến 1; các xác suất của mọi token ở một vị trí cộng lại bằng 1.
