Skip to content

Zoom-in: Decoding Parameters

Karify98·
Cover Image for Zoom-in: Decoding Parameters

Khi bạn gửi cùng một câu lệnh (prompt) cho một LLM nhiều lần, bạn sẽ nhận được các câu trả lời khác nhau, đôi khi mang tính sáng tạo cao, lúc khác lại rất chuẩn xác. Làm thế nào để một thuật toán toán học khô khan có thể "sáng tạo" và thay đổi tính cách linh hoạt như vậy?

Tất cả nằm ở hậu trường của quá trình chọn từ, được điều khiển bởi ba Decoding Parameters (tham số giải mã): Temperature, Top-P, và Top-K.

Hãy phóng to vào bước cuối cùng trước khi mô hình đưa ra từ ngữ.


Layer 1 — Logits và Softmax: Bảng xác suất thô

Khi mô hình tính toán xong token tiếp theo, sản phẩm đầu ra của nó không phải là một từ cụ thể mà là một danh sách điểm số thô chưa chuẩn hóa, gọi là Logits của toàn bộ các từ có trong vocabulary.

Danh sách Logits này sau đó được đưa qua hàm Softmax để biến đổi thành một phân phối xác suất (probability distribution) có tổng bằng 1 (tức là 100%).

Ví dụ, sau chuỗi từ: "Tôi muốn uống một ly...", phân phối xác suất đầu ra có thể là:

  • cà phê: 45%
  • nước: 30%
  • trà: 15%
  • xăng: 0.001%

Nếu mô hình luôn luôn chọn từ có xác suất cao nhất (cà phê), đây gọi là phương pháp Greedy Search (tìm kiếm tham lam). Phương pháp này khiến câu trả lời của mô hình trở nên rất đơn điệu, lặp đi lặp lại và thiếu tự nhiên. Để tạo ra sự tự nhiên, chúng ta cần đưa độ ngẫu nhiên vào quá trình lựa chọn.


Layer 2 — Temperature: Làm phẳng hoặc làm dốc xác suất

Temperature (nhiệt độ) là một hệ số dùng để điều chỉnh trực tiếp các Logits trước khi đưa vào hàm Softmax.

Công thức điều chỉnh logits: $$\text{Logit mới} = \frac{\text{Logit cũ}}{Temperature}$$

graph TD
    A[Logits: Điểm số thô] -->|Chia cho Temperature T| B[Logits mới]
    B -->|Qua hàm Softmax| C[Phân phối xác suất]
    
    subgraph Tác động của Temperature
    D[T thấp: Phân phối dốc - Chỉ chọn từ đầu]
    E[T cao: Phân phối phẳng - Các từ bằng cơ hội]
    end
  • Khi Temperature thấp (tiến về 0): Các logits cao sẽ bị phóng đại vượt trội so với các logits thấp. Phân phối xác suất trở nên cực kỳ dốc. Mô hình sẽ hầu như luôn chọn từ đứng đầu. Kết quả đầu ra có tính ổn định cao, chính xác về logic nhưng thiếu tính đa dạng (phù hợp khi viết code hoặc giải toán).
  • Khi Temperature cao (lớn hơn 1.0): Sự chênh lệch giữa các logits bị thu hẹp lại. Phân phối xác suất trở nên phẳng hơn. Các từ có xác suất thấp (như từ xăng ở ví dụ trên) đột ngột có cơ hội lớn hơn để được chọn. Kết quả sẽ rất bất ngờ và sáng tạo, nhưng dễ dẫn đến Hallucination (hiện tượng ảo giác) hoặc câu chữ vô nghĩa.
Temperature càng cao, mô hình càng dám thử nghiệm những từ ngữ ít phổ biến hơn.

Layer 3 — Top-K và Top-P: Những chiếc màng lọc thông minh

Nếu chỉ tăng Temperature, mô hình rất dễ chọn phải các từ hoàn toàn lạc đề. Vì vậy, người ta kết hợp thêm hai bộ lọc thông minh là Top-K và Top-P để giới hạn phạm vi lựa chọn.

1. Top-K

Bộ lọc này yêu cầu mô hình chỉ được phép chọn từ trong danh sách $K$ từ có xác suất cao nhất.

  • Ví dụ: Nếu $K = 50$, mô hình sẽ loại bỏ hoàn toàn các từ xếp từ vị trí thứ 51 trở đi trong bảng xếp hạng xác suất, bất kể Temperature có cao thế nào. Điều này đảm bảo những từ quá xa lạ sẽ không bao giờ xuất hiện.

2. Top-P (còn gọi là Nucleus Sampling)

Thay vì lấy số lượng từ cố định như Top-K, Top-P sẽ lấy một tập hợp các từ đứng đầu sao cho tổng xác suất của chúng cộng lại vừa đủ đạt đến mức $P$ (ví dụ: $P = 0.9$ hay 90%).

Giả sử có bảng xác suất:
- Từ A: 60%
- Từ B: 25%
- Từ C: 10%
- Từ D: 5%

Với Top-P = 0.9 (90%):
Mô hình sẽ cộng dồn: A (60%) + B (25%) = 85% (chưa đủ) -> cộng tiếp C (10%) = 95% (đã vượt 90%).
Mô hình chỉ được chọn ngẫu nhiên trong nhóm [A, B, C]. Từ D bị loại bỏ hoàn toàn.

Sự linh hoạt của Top-P nằm ở chỗ: nếu từ đứng đầu có xác suất quá cao (ví dụ từ đầu tiên đã chiếm 95%), mô hình sẽ chỉ chọn duy nhất từ đó mà không lan man sang từ khác. Ngược lại, nếu các từ đều có xác suất thấp ngang nhau, tập hợp lựa chọn sẽ tự động mở rộng để mô hình thỏa sức sáng tạo.

Mẹo thiết lập: Khi viết code hoặc lập trình logic, hãy hạ Temperature xuống 0.0. Khi cần viết lách sáng tạo hoặc brainstorm ý tưởng, hãy đặt Temperature khoảng 0.8 kết hợp với Top-P ở mức 0.95.

Full picture

graph TD
    Logits[Logits: Điểm số thô của từ vựng] -->|1. Chia cho Temperature| Scaled[Logits đã điều chỉnh]
    Scaled -->|2. Hàm Softmax| Prob[Bảng xác suất của từ vựng]
    Prob -->|3. Bộ lọc Top-K| FilterK[Giới hạn K từ có điểm cao nhất]
    FilterK -->|4. Bộ lọc Top-P| FilterP[Giới hạn tổng xác suất tích lũy đạt P]
    FilterP -->|5. Lấy mẫu ngẫu nhiên| Selection[Chọn 1 token và sinh kết quả]
    
    style Logits fill:#1e293b,stroke:#475569,color:#cbd5e1
    style Scaled fill:#1e293b,stroke:#475569,color:#cbd5e1
    style Prob fill:#1e293b,stroke:#475569,color:#cbd5e1
    style FilterK fill:#1e293b,stroke:#475569,color:#cbd5e1
    style FilterP fill:#1e293b,stroke:#475569,color:#cbd5e1
    style Selection fill:#1e293b,stroke:#475569,color:#cbd5e1

Takeaway

Việc kiểm soát độ ngẫu nhiên và sáng tạo của LLM không nằm ở quá trình suy luận sâu bên trong mạng thần kinh, mà hoàn toàn được quyết định bởi bộ lọc xác suất ở bước decoding cuối cùng. Bằng cách kết hợp giữa việc kéo giãn phân phối (Temperature) và giới hạn động tập hợp lựa chọn (Top-K/Top-P), lập trình viên có thể tùy biến một mô hình duy nhất chuyển đổi linh hoạt giữa hai thái cực: cẩn trọng, chính xác tuyệt đối phục vụ logic/lập trình, hoặc bay bổng, bất ngờ để brainstorm ý tưởng.

Related Posts