Label Smoothing là một kỹ thuật regularization trong machine learning, thay vì gán nhãn cứng (hard label) kiểu 100% thuộc lớp A và 0% thuộc lớp B, mô hình sẽ gán nhãn mềm (soft label) ví dụ 90% lớp A và 10% lớp B. Mục đích là giảm overconfidence, giúp mô hình tổng quát tốt hơn khi gặp dữ liệu mới.
Label Smoothing Là Gì?

Label Smoothing (làm mượt nhãn) là kỹ thuật điều chỉnh nhãn huấn luyện từ giá trị cực đoan (0 hoặc 1) sang giá trị mềm hơn (ví dụ 0.9 hoặc 0.1). Thay vì bảo mô hình “chắc chắn 100% đây là con mèo”, bạn bảo “90% đây là con mèo, nhưng cũng có thể là chó 10%”.
Thuật toán này được Google giới thiệu trong bài báo năm 2015, và từ đó trở thành một phần tiêu chuẩn trong huấn luyện các model AI lớn, đặc biệt là trong lĩnh vực computer vision và NLP.
Vì Sao Cần Label Smoothing?
Khi huấn luyện mô hình phân loại, nếu nhãn là hard label (one-hot encoding), mô hình có xu hướng quá tự tin (overconfident) với dự đoán của mình. Nghĩa là nó sẽ đẩy xác suất dự đoán lên gần 1.0 cho lớp đúng và gần 0.0 cho các lớp sai.
Điều này gây ra hai vấn đề lớn:
- Overfitting: Mô hình học thuộc dữ liệu huấn luyện nhưng kém khi gặp dữ liệu mới.
- Gradient bão hòa: Khi xác suất gần 0 hoặc 1, gradient trở nên rất nhỏ, làm chậm quá trình học.
Label Smoothing giải quyết cả hai vấn đề trên bằng cách “mềm hóa” nhãn mục tiêu.
Label Smoothing Hoạt Động Như Thế Nào?
Giả sử bạn có bài toán phân loại 3 lớp: mèo, chó, chim. Với nhãn chuẩn (hard label), một ảnh mèo sẽ được mã hóa:
Mèo = [1.0, 0.0, 0.0]
Với Label Smoothing (tham số alpha = 0.1), nhãn trở thành:
Mèo = [0.9333, 0.0333, 0.0333]
Công thức chung: nhãn mới = nhãn_cu * (1 – alpha) + alpha / K, trong đó K là số lớp và alpha là hệ số làm mượt (thường từ 0.05 đến 0.2).
Nói đơn giản: lấy một phần nhỏ xác suất từ lớp đúng và chia đều cho tất cả các lớp khác.
Label Smoothing Khác Gì So Với Các Kỹ Thuật Khác?
Nhiều người nhầm Label Smoothing với Dropout hay Weight Decay, nhưng chúng hoạt động ở các层级 khác nhau:
- Label Smoothing: Can thiệp vào nhãn (label) đầu vào.
- Dropout: Can thiệp vào neuron trong quá trình forward pass.
- Weight Decay: Can thiệp vào trọng số (weight) thông qua hàm mất mát.
Cả ba kỹ thuật này có thể kết hợp với nhau, và thường được dùng song song trong các model AI hiện đại.
Khi Nào Nên Dùng Label Smoothing?
Label Smoothing đặc biệt hiệu quả trong các trường hợp sau:
- Dữ liệu nhiễu: Khi tập huấn luyện có nhãn sai hoặc mơ hồ (ví dụ: ảnh mờ giữa mèo và chó).
- Nhiều lớp: Khi bài toán có hàng nghìn lớp, mô hình dễ bị overconfidence.
- Model lớn: Các model có hàng tỷ tham số dễ ghi nhớ (memorize) dữ liệu, Label Smoothing giúp giảm hiệu ứng này.
- Knowledge Distillation: Khi distill model lớn sang model nhỏ, soft label tự nhiên được tạo ra, tương tự nguyên lý Label Smoothing.
Tuy nhiên, nếu bài toán của bạn yêu cầu độ chính xác tuyệt đối (ví dụ: phân loại bệnh ung thư), bạn nên cân nhắc kỹ. Label Smoothing làm mô hình “bớt chắc chắn” hơn, điều này có thể không mong muốn trong y tế.
Label Smoothing Trong Các Model AI Lớn
Hầu hết các model AI nổi tiếng đều dùng Label Smoothing trong quá trình huấn luyện:
- ResNet: Sử dụng alpha = 0.1, trở thành chuẩn mực cho computer vision.
- Transformer (GPT, BERT): Áp dụng Label Smoothing trong cross-entropy loss, thường với alpha = 0.1.
- Inception (GoogleNet): Paper gốc giới thiệu kỹ thuật này dùng alpha = 0.1.
Nếu bạn train model từ scratch, thêm Label Smoothing với alpha = 0.1 gần như luôn là lựa chọn an toàn.
Cách Implement Label Smoothing
Trong PyTorch, bạn có thể implement Label Smoothing chỉ bằng vài dòng code:
import torch.nn.functional as F
def label_smoothing_loss(pred, target, alpha=0.1, num_classes=3):
log_pred = F.log_softmax(pred, dim=-1)
nll_loss = F.nll_loss(log_pred, target, reduction='mean')
smooth_loss = -log_pred.mean()
return (1 - alpha) * nll_loss + alpha * smooth_lossHoặc đơn giản hơn, dùng torch.nn.CrossEntropyLoss(label_smoothing=0.1) từ phiên bản PyTorch 1.10 trở lên.
Trong TensorFlow/Keras, bạn cần viết custom loss function hoặc dùng thư viện bổ sung. Không có sẵn built-in support như PyTorch.
Label Smoothing Có Tác Dụng Phụ Gì?
Một tác dụng phụ thú vị: Label Smoothing làm giảm calibration error của mô hình. Calibration là độ tin cậy của xác suất dự đoán. Một mô hình được calibrate tốt sẽ có xác suất dự đoán phản ánh đúng xác suất thực tế.
Nghiên cứu của Google (Müller et al., 2019) cho thấy Label Smoothing cải thiện calibration đáng kể, nhưng cũng có thể giảm khả năng phân biệt giữa các lớp gần nhau (class separability). Trade-off này cần được cân nhắc tùy bài toán.
Giá Trị Alpha Nào Là Tốt Nhất?
Không có giá trị alpha hoàn hảo cho mọi bài toán, nhưng dựa trên thực tế:
- alpha = 0.05: Nhẹ, phù hợp cho bài toán ít lớp, dữ liệu sạch.
- alpha = 0.1: Giá trị phổ biến nhất, hoạt động tốt trong đa số trường hợp.
- alpha = 0.15 – 0.2: Mạnh, dùng khi dữ liệu nhiều nhiễu hoặc model rất lớn.
Lời khuyên: bắt đầu với alpha = 0.1, rồi tune dần dựa trên validation set.
Lưu Ý Khi Dùng Label Smoothing
Một số sai lầm phổ biến khi áp dụng Label Smoothing:
1. Dùng cho bài toán regression: Label Smoothing chỉ dành cho classification. Nếu output là giá trị liên tục, kỹ thuật này không áp dụng được.
2. Quá lạm dụng: Nếu alpha quá cao (trên 0.3), nhãn trở nên quá mượt, mô hình không thể phân biệt giữa các lớp. Kết quả tệ hơn không dùng.
3. Quên tăng epoch: Label Smoothing làm gradient nhỏ hơn, đôi khi cần huấn luyện lâu hơn để hội tụ. Nếu thấy model học chậm, thử tăng số epoch hoặc learning rate.
Kết Luận
Label Smoothing là một trong những kỹ thuật đơn giản nhưng hiệu quả nhất trong machine learning. Chi phí implement gần như bằng không (một dòng code trong PyTorch), nhưng lại cải thiện đáng kể khả năng tổng quát hóa của mô hình.
Nếu bạn đang train model classification và chưa dùng Label Smoothing, hãy thử ngay. Đây là một trong những kỹ thuật có tỷ lệ risk/reward tốt nhất mà mình từng dùng.