Vì sao Temperature 0 không hề mang tính xác định?
Nhiều người lầm tưởng đặt temperature bằng 0 sẽ khiến LLM luôn trả về cùng một kết quả. Thực tế, một công thức đơn giản cho thấy token hàng đầu vẫn có thể đổi và các câu trả lời giống nhau sẽ tách nhánh chỉ sau khoảng một trăm token.
Nhiều lập trình viên tin rằng chỉ cần đặt temperature = 0 là mô hình ngôn ngữ lớn (LLM) sẽ luôn sinh ra cùng một câu trả lời cho cùng một câu lệnh. Đây là một trong những hiểu lầm phổ biến nhất khi làm việc với các mô hình AI hiện nay. Trên thực tế, ngay cả khi temperature bằng 0, kết quả đầu ra vẫn có thể thay đổi giữa các lần gọi khác nhau.
Cơ chế chọn token không hề "cứng"
Khi temperature bằng 0, ta thường nghĩ mô hình sẽ luôn chọn token có xác suất cao nhất — gọi là greedy decoding. Về lý thuyết, phép chọn này hoàn toàn tất định: cùng một phân phối xác suất thì luôn cho ra cùng một token đứng đầu.
Nhưng vấn đề nằm ở chỗ: đầu vào (input) không thực sự giống nhau giữa các lần chạy. Có nhiều nguyên nhân khiến phân phối xác suất bị lệch đi dù chỉ một chút:
- Phép tính số học dấu phẩy động trên GPU không mang tính kết hợp tuyệt đối. Thứ tự cộng các số hạng có thể khác nhau tùy vào cách lập lịch của phần cứng, tạo ra sai số nhỏ.
- Song song hóa và batch làm thay đổi cách các phép toán được nhóm lại, dẫn đến kết quả hơi khác nhau.
- Các kernel tối ưu khác nhau giữa các lần chạy hoặc giữa các phiên bản thư viện có thể cho ra sai số khác nhau.
Những khác biệt này nhỏ đến mức vô hại khi chỉ xét một token riêng lẻ. Nhưng chúng lại đủ để đảo ngược thứ hạng khi hai token có xác suất gần bằng nhau.
Khi token đứng đầu "lật ngôi"
Điểm mấu chốt là: hai token có thể có xác suất rất sát nhau. Nếu token A là 0,4001 và token B là 0,3999, chỉ cần một sai số nhỏ từ phép tính dấu phẩy động cũng đủ khiến B vượt lên thành token được chọn.
Các tác giả của bài viết trên Towards Data Science đã đưa ra một công thức một dòng ước lượng tần suất token hàng đầu bị "lật ngôi" (flip). Ý tưởng cốt lõi: xác suất lật tăng theo mức độ gần nhau giữa hai token dẫn đầu và theo độ lớn của nhiễu số học.
Khi khoảng cách xác suất giữa token thứ nhất và thứ hai càng nhỏ, khả năng chúng hoán đổi vị trí càng cao — và điều này xảy ra ngay cả khi temperature bằng 0.
Vì sao câu trả lời giống nhau lại tách nhánh sau khoảng một trăm token
Một sai lệch nhỏ ở token thứ mười có thể không đáng kể. Nhưng khi mô hình sinh token theo kiểu tự hồi quy (autoregressive), mỗi token mới lại được đưa trở lại làm đầu vào cho bước tiếp theo. Đây là hiệu ứng lan truyền sai số.
- Chỉ cần một token khác đi, toàn bộ ngữ cảnh phía sau thay đổi.
- Từ đó, phân phối xác suất ở các bước kế tiếp cũng đổi theo.
- Càng nhiều bước, sai lệch càng tích lũy và khoảng cách giữa hai phiên bản càng nới rộng.
Kết quả là hai lần chạy có thể giống nhau trong khoảng vài chục token đầu, rồi tách nhánh rõ rệt sau khoảng một trăm token. Đây chính là lý do vì sao các câu trả lời được cho là "giống hệt nhau" lại đột nhiên khác nhau ở phần sau.
Điều này có ý nghĩa gì với người làm sản phẩm?
Với lập trình viên và kỹ sư AI, hiểu rõ bản chất này giúp tránh nhiều cái bẫy:
- Đừng dựa vào tính tất định để kiểm thử. Nếu bạn viết unit test so sánh chuỗi đầu ra của LLM, bài test có thể "flaky" bất cứ lúc nào.
- Cần seed và cấu hình cố định nếu muốn tái lập kết quả, nhưng ngay cả vậy vẫn không đảm bảo tuyệt đối.
- Thiết kế hệ thống chịu được sai khác nhỏ thay vì kỳ vọng đầu ra bất biến.
- Với các tác vụ nhạy cảm, nên kiểm tra và xác thực nội dung thay vì tin tưởng mù quáng vào một lần sinh duy nhất.
Với người dùng Việt Nam đang ngày càng tích hợp các API như OpenAI, Gemini hay Claude vào sản phẩm, đây là kiến thức nền tảng cần nắm. Việc hiểu đúng giới hạn của mô hình sẽ giúp xây dựng hệ thống ổn định hơn và giảm bớt những lỗi khó tái hiện trong môi trường thực tế.


