Giải Thuật Lọc Xác Suất Top-K, Top-P (Nucleus) & Temperature
1. Temperature Scaling (T > 0):
Tiến độ của tôi ở bài này
Điểm được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: softmax-cross-entropy-from-scratch.
Nội dung đề bài
Mục tiêu kiến thức
- Khi sinh văn bản từ LLM, tham lam (Greedy decoding: luôn chọn token xác suất lớn nhất) thường dẫn đến hiện tượng lặp từ vô tận hoặc suy thoái ngữ nghĩa.
- Pipeline xử lý Logits chuẩn:
- Temperature Scaling (T > 0):
z'i = ziT T < 1 làm phân phối sắc nét hơn (tập trung vào token điểm cao); T > 1 làm phẳng phân phối (tăng tính sáng tạo, đa dạng).
- Top-K Filtering (K ≥ 1):
Chỉ giữ lại K logits có giá trị cao nhất. Đặt tất cả các logits còn lại thành -∞ (-float('inf')).
- Top-P (Nucleus) Filtering (0 < P ≤ 1.0):
- Sắp xếp các logits giảm dần và tính phân phối xác suất tích lũy (cumulative probability).
- Chỉ giữ lại tập token nhỏ nhất có tổng xác suất ≥ P. Đặt các logits ngoài tập này thành -∞. Luôn giữ lại ít nhất 1 token có xác suất cao nhất.
- Chuẩn hóa xác suất:
Tính softmax(z') trên các logits còn lại và trả về phân phối xác suất hợp lệ.
Yêu cầu
Viết hàm:
def process_generation_logits(
logits: torch.Tensor,
temperature: float = 1.0,
top_k: int = 0,
top_p: float = 1.0
) -> torch.Tensor:
passlogits: Tensor 1 chiều kích thước(vocab_size,).temperature: Số thực dương T > 0. Nếu T ≤ 0, raiseValueError.top_k: Nếu k > 0, chỉ giữ lại k logits lớn nhất. Nếu k ≥ vocab_size, giữ nguyên.top_p: Nếu 0 < p < 1.0, lọc hạt nhân Nucleus.- Trả về: Tensor xác suất 1 chiều
probscùng shape(vocab_size,)có ∑ probs = 1.0 (tất cả các vị trí bị lọc có xác suất bằng 0.0).
Input
- Hàm
process_generation_logits(logits,temperature,top_k,top_p): Các tham số đầu vào chứa dữ liệu Tensor/mảng NumPy hoặc giá trị siêu tham số tương ứng.
Output
- Hàm
process_generation_logits: Trả về kết quả kiểutorch.Tensortheo đúng đặc tả kỹ thuật và kích thước quy định.
Ràng buộc
- Thời gian chạy tối đa: 2000ms.
- Giới hạn bộ nhớ: 256MB.
- Dữ liệu đầu vào hợp lệ theo đúng kiểu dữ liệu và miền giá trị được mô tả.
Ví dụ 1
Input
logits = torch.tensor([1.0, 2.0, 3.0, 4.0, 5.0])
probs = process_generation_logits(logits, temperature=1.0, top_k=2, top_p=1.0)Output
[0. , 0. , 0. , 0.2689, 0.7311]Giải thích
Hàm/lớp được gọi với các tham số mẫu trên và trả về kết quả số học / kích thước tensor tương ứng theo đúng thiết kế.
Ví dụ 2
Input
logits = torch.tensor([10.0, 1.0, 0.5, 0.1])
probs = process_generation_logits(logits, temperature=1.0, top_p=0.8)Output
[1., 0., 0., 0.]Giải thích
Hàm/lớp được gọi với các tham số mẫu trên và trả về kết quả số học / kích thước tensor tương ứng theo đúng thiết kế.
Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
