Temperature Scaling
Temperature scaling chia logit của model cho một giá trị được khớp trước softmax để độ tin cậy phù hợp với độ chính xác, đồng thời không làm thay đổi dự đoán.
Hiệu chỉnh nhiệt độ là phương pháp hiệu chỉnh hậu nghiệm, chia logits của bộ phân loại đã huấn luyện cho một số dương duy nhất T trước khi áp dụng softmax; T được chọn trên dữ liệu giữ lại để độ tin cậy của model phù hợp với tỷ lệ dự đoán đúng thực tế. Nhiệt độ lớn hơn 1 làm mềm các xác suất quá tự tin, còn nhiệt độ nhỏ hơn 1 làm sắc các xác suất chưa đủ tự tin. Chia mọi logit cho cùng một số dương giữ nguyên thứ tự của chúng, vì vậy lớp được dự đoán không bao giờ thay đổi và độ chính xác giữ nguyên tuyệt đối. Trong nghiên cứu “On Calibration of Modern Neural Networks”, Guo và cộng sự phát hiện các mạng sâu hiện đại được hiệu chỉnh kém, còn hiệu chỉnh nhiệt độ—một biến thể một tham số của hiệu chỉnh Platt—đạt hiệu quả bất ngờ trong việc hiệu chỉnh chúng trên hầu hết bộ dữ liệu được kiểm tra.
Cách temperature scaling hoạt động#
Softmax sau khi điều chỉnh cho lớp i xác suất exp(z_i / T) / Σ_j exp(z_j / T), trong đó z là các logit. Khi T = 1, model không đổi; khi T tăng, các xác suất tiến gần phân phối đều; khi T tiến đến 0, xác suất của lớp đứng đầu tiến đến 1. T được khớp sau huấn luyện bằng cách tối thiểu hóa log-loss âm (NLL)—cùng hàm cross-entropy được dùng làm loss huấn luyện—trên tập xác thực giữ lại, trong khi trọng số mạng được cố định. Chỉ có một tham số nên quá trình khớp chỉ mất vài giây và ít có khả năng overfit tập xác thực. Script PyTorch bên dưới khớp T cho model có logits lớn gấp ba lần:
import torch
import torch.nn.functional as F
# Held-out logits for 5,000 images and 10 classes from an overconfident model:
# labels are drawn so that softmax(logits / 3) is perfectly calibrated
torch.manual_seed(0)
logits = 9 * torch.randn(5000, 10)
labels = torch.multinomial(F.softmax(logits / 3, dim=1), 1).squeeze(1)
# Fit the single temperature that minimizes negative log-likelihood (NLL) on the held-out set
temperatures = torch.linspace(0.5, 6.0, 551)
nll = torch.stack([F.cross_entropy(logits / t, labels) for t in temperatures])
T = temperatures[nll.argmin()]
# Accuracy depends only on the argmax, which dividing by T never changes
accuracy = (logits.argmax(1) == labels).float().mean()
before = F.softmax(logits, dim=1).max(1).values.mean()
after = F.softmax(logits / T, dim=1).max(1).values.mean()
print(f"T = {T:.2f}, accuracy {accuracy:.3f}")
print(f"Mean confidence: {before:.3f} before, {after:.3f} after")Quá trình khớp tìm được T = 2.98, gần với hệ số thực là 3. Độ chính xác vẫn ở mức 0.663, còn độ tin cậy trung bình giảm từ 0.880 xuống 0.664; sau khi điều chỉnh, độ tin cậy trung bình của model khớp với độ chính xác.
Vì sao mạng trở nên quá tự tin#
Huấn luyện bằng cross-entropy tiếp tục khuyến khích logits lớn hơn trên các ví dụ huấn luyện mà mạng đã phân loại đúng, nên độ tin cậy tiếp tục tăng ngay cả khi độ chính xác trên dữ liệu mới đã chững lại. Guo và cộng sự xác định độ sâu, độ rộng, weight decay và batch normalization là những yếu tố quan trọng gây hiệu chỉnh sai. Khả năng hiệu chỉnh được đo bằng biểu đồ độ tin cậy, biểu diễn độ chính xác so với độ tin cậy theo từng bin, và bằng sai số hiệu chỉnh kỳ vọng (ECE)—độ lệch trung bình giữa độ tin cậy và độ chính xác trên các bin, có trọng số theo số lượng dự đoán trong mỗi bin. NLL và điểm Brier cũng đánh giá khả năng hiệu chỉnh. Hiệu chỉnh rất quan trọng bất cứ khi nào điểm số được hiểu là xác suất, chẳng hạn quy tắc phân loại y tế chuyển mọi trường hợp có rủi ro trên 30% đến bước tiếp theo, hệ thống chuyển dự đoán không chắc chắn cho con người xử lý hoặc vòng lặp học chủ động chọn những hình ảnh ít chắc chắn nhất để gán nhãn.
Hiệu chỉnh nhiệt độ cho bộ phát hiện vật thể#
Bộ phát hiện thường chấm điểm từng lớp bằng sigmoid độc lập thay vì softmax; nhiệt độ được áp dụng theo cùng cách, dưới dạng sigmoid(z / T). Khi T lớn hơn 1, điểm số dịch chuyển về 0.5: điểm cao giảm, điểm thấp tăng. Trong YOLO26, độ tin cậy của mỗi box là sigmoid của logit lớp, được so sánh với ngưỡng conf bằng 0.25 tại thời điểm dự đoán; vì vậy, nhiệt độ được khớp trên các ảnh giữ lại sẽ thay đổi những box vượt ngưỡng đó nhưng vẫn giữ nguyên thứ hạng của tất cả box, thứ hạng mà các metric như độ chính xác trung bình (mAP) phụ thuộc vào.
Nhiệt độ trong các thiết lập khác#
- Mô hình ngôn ngữ lớn (LLMs): Nhiệt độ lấy mẫu chia vector logit của token kế tiếp cho T theo cùng cách đó; người dùng tự đặt giá trị này để cân bằng giữa tính đa dạng và tính xác định. Khi T tiến gần đến 0, quá trình lấy mẫu tiến gần đến giải mã tham lam, luôn chọn token có xác suất cao nhất.
- Chưng cất tri thức: Phương pháp chưng cất của Hinton và các cộng sự tăng nhiệt độ của đầu ra softmax ở cả model giáo viên lẫn model học sinh để model học sinh học được xác suất tương đối của giáo viên dành cho các lớp sai.
- Học tương phản: Các model như CLIP chia điểm tương đồng giữa ảnh và văn bản cho một nhiệt độ được học trước khi áp dụng softmax; giá trị này kiểm soát mức độ loss phân tách các cặp khớp nhau với phần còn lại.
Temperature Scaling so với các phương pháp liên quan#
- Hiệu chỉnh Platt: Khớp một hệ số góc và một hệ số chặn với điểm số của bộ phân loại nhị phân trước khi áp dụng sigmoid. Temperature scaling mở rộng phương pháp này cho nhiều lớp bằng một hệ số góc dùng chung, 1 / T, và không có hệ số chặn.
- Hiệu chỉnh vector và ma trận: Học một trọng số và độ lệch riêng cho mỗi lớp, hoặc một ma trận đầy đủ trên các logit. Các phương pháp này linh hoạt hơn, dễ overfit hơn và có thể làm thay đổi lớp được dự đoán.
- Hồi quy đẳng trương: Ánh xạ đơn điệu, phi tham số từ điểm số sang xác suất, có trong các công cụ hiệu chỉnh của scikit-learn cùng với hiệu chỉnh Platt.
- Làm mượt nhãn: Làm mềm các mục tiêu huấn luyện, chẳng hạn dùng 0.9 thay vì 1.0 cho lớp đúng, nhằm giảm độ tự tin thái quá trong quá trình huấn luyện. Temperature scaling chỉ thay đổi đầu ra của một model đã hoàn tất.
- Dự đoán conformal: Chuyển điểm số thành các tập dự đoán chứa nhãn đúng với tỷ lệ được đảm bảo, chẳng hạn 90% số lần, trên dữ liệu có thể hoán đổi.










