Suavização de Rótulos
O que é suavização de rótulos?
Suavização de rótulos (label smoothing) é uma técnica simples, mas poderosa, de regularização (regularization) para aprendizado supervisionado que modifica os alvos de treinamento para classificação (classification) (incluindo modelagem de linguagem (language modeling)) para serem menos certos do que um rótulo one-hot estrito.
Em vez de treinar com uma distribuição-alvo como:
- alvo one-hot para a classe (y):
[ \mathbf{y} = (0,\dots,0,1,0,\dots,0) ]
a suavização de rótulos treina com uma mistura do alvo one-hot e uma pequena distribuição “de fundo” (frequentemente uniforme):
[ \tilde{\mathbf{y}} = (1-\varepsilon)\cdot \mathbf{y} + \varepsilon \cdot \mathbf{u} ]
onde:
- (\varepsilon \in [0,1]) é o fator de suavização (smoothing factor)
- (\mathbf{u}) é tipicamente a distribuição uniforme (uniform distribution) sobre (K) classes: (\mathbf{u}_i = \frac{1}{K})
Assim, a classe “correta” deixa de ter probabilidade-alvo 1.0, passando a aproximadamente (1-\varepsilon + \varepsilon/K), e as demais classes recebem uma pequena massa-alvo não nula (\varepsilon/K).
A suavização de rótulos é amplamente usada em pipelines modernos de aprendizado profundo, especialmente para modelos baseados em Transformer (Transformer-based) em PLN (Arquitetura Transformer) e em classificação de imagens.
Por que a suavização de rótulos pode ajudar
1) Reduz o excesso de confiança e melhora a generalização
Treinar com alvos one-hot e Perda de Entropia Cruzada (Cross-Entropy Loss) força o modelo a atribuir probabilidade 1 à classe correta e 0 a todas as outras. Com um classificador softmax, a única forma de obter probabilidade exatamente 1 é levar o logit correto a (+\infty) em relação aos demais, o que incentiva logits muito grandes e previsões excessivamente confiantes.
A suavização de rótulos desencoraja essas soluções extremas. Isso frequentemente melhora o desempenho em teste de maneira semelhante a outros regularizadores (por exemplo, Dropout, Decaimento de Peso (Weight Decay), Parada Antecipada (Early Stopping)) e é particularmente útil quando:
- os rótulos do conjunto de dados contêm ruído
- classes são visual/semanticamente similares
- o modelo tem alta capacidade e pode superajustar facilmente (Superajuste (Overfitting))
2) Melhora a calibração de probabilidades (com frequência)
Um modelo é calibrado (calibrated) se suas probabilidades preditas correspondem às frequências empíricas de acerto (por exemplo, entre previsões com confiança 0.8, ~80% estão corretas). Redes profundas treinadas com rótulos one-hot comumente ficam mal calibradas (miscalibrated) e excessivamente confiantes.
Como a suavização de rótulos penaliza explicitamente certezas extremas, ela frequentemente melhora métricas de calibração (por exemplo, ECE) e diagramas de confiabilidade. Não é uma correção universal — a calibração ainda depende da arquitetura, dos dados e do regime de treinamento —, mas muitas vezes ajuda.
Veja também: Calibração de Modelos (Model Calibration).
3) Comporta-se como um prior simples sobre as saídas
Usar uma distribuição uniforme diz: “mesmo que este rótulo esteja correto, não assuma certeza absoluta; mantenha uma pequena massa a priori espalhada por todas as classes”. Em modelagem de linguagem, isso pode ser interpretado como: “tokens raramente são realmente impossíveis”.
Isso é especialmente relevante quando a rotulagem do conjunto de dados é incompleta (por exemplo, múltiplos próximos tokens plausíveis, múltiplas traduções corretas).
Suavização de rótulos com softmax + entropia cruzada
A maioria dos classificadores multiclasse calcula:
- logits (\mathbf{z} \in \mathbb{R}^K)
- probabilidades via Softmax: [ p_i = \frac{e^{z_i}}{\sum_{j=1}^K e^{z_j}} ]
- perda de entropia cruzada com distribuição-alvo (\mathbf{t}): [ \mathcal{L} = -\sum_{i=1}^K t_i \log p_i ]
Com alvos one-hot, (t_y = 1), a perda se simplifica para (-\log p_y).
Com suavização de rótulos, (t_i = \tilde{y}i), então: [ \mathcal{L}{LS} = -\sum_{i=1}^K \tilde{y}_i \log p_i ]
Uma decomposição útil
Se (\mathbf{u}) é uniforme, então:
[ \mathcal{L}{LS} = (1-\varepsilon)\cdot \mathcal{L}{CE}(\mathbf{y}, \mathbf{p}) ;+; \varepsilon \cdot \mathcal{L}_{CE}(\mathbf{u}, \mathbf{p}) ]
O primeiro termo é a perda usual (escalada por (1-\varepsilon)).
O segundo termo incentiva (\mathbf{p}) a ter entropia não nula e a não colapsar de forma muito acentuada em uma única classe.
Outra forma de ver:
[ \mathcal{L}_{CE}(\mathbf{u}, \mathbf{p}) = \log K + KL(\mathbf{u};|;\mathbf{p}) ]
Assim, a suavização de rótulos adiciona um termo que (até uma constante) incentiva (\mathbf{p}) a não ficar muito distante da uniforme.
Efeito nos gradientes (intuição)
Para softmax + entropia cruzada, o gradiente em relação aos logits é:
[ \frac{\partial \mathcal{L}}{\partial z_i} = p_i - t_i ]
- Com rótulos one-hot: (t_y=1), então o gradiente da classe correta é (p_y - 1) (fortemente negativo a menos que (p_y) esteja próximo de 1).
- Com suavização de rótulos: (t_y < 1), então o gradiente que empurra (p_y \to 1) é mais fraco, e o “empurrão para baixo” nas outras classes também é menos absoluto.
Isso reduz o incentivo para levar margens e logits a extremos.
Exemplos práticos
Exemplo 1: classificação com 5 classes
Suponha (K=5), a classe verdadeira é a classe 2 (indexação a partir de 0), e (\varepsilon = 0.1).
- One-hot: ([0, 0, 1, 0, 0])
- Uniforme: ([0.2, 0.2, 0.2, 0.2, 0.2])
- Suavizado: [ \tilde{\mathbf{y}} = 0.9\cdot [0,0,1,0,0] + 0.1\cdot [0.2,\dots,0.2] = [0.02, 0.02, 0.92, 0.02, 0.02] ]
Agora o modelo é treinado para prever 0.92 na classe correta — não 1.0 — e para alocar uma massa de probabilidade minúscula em outros lugares.
Exemplo 2: uso no PyTorch (embutido)
O PyTorch fornece suavização de rótulos diretamente em CrossEntropyLoss:
import torch
import torch.nn as nn
criterion = nn.CrossEntropyLoss(label_smoothing=0.1)
logits = torch.randn(32, 10) # batch x classes
targets = torch.randint(0, 10, (32,))
loss = criterion(logits, targets)
loss.backward()
Esta é a opção mais confiável porque lida corretamente com estabilidade numérica.
Exemplo 3: implementação manual (educacional)
Aqui está uma implementação manual e explícita usando log-softmax:
import torch
import torch.nn.functional as F
def label_smoothed_nll_loss(logits, target, epsilon=0.1):
# logits: (B, K), target: (B,) integer class indices
B, K = logits.shape
log_probs = F.log_softmax(logits, dim=-1) # (B, K)
# Negative log likelihood for the true class
nll = -log_probs.gather(dim=-1, index=target.unsqueeze(1)).squeeze(1) # (B,)
# Cross-entropy against uniform distribution: -mean_i log p_i
smooth = -log_probs.mean(dim=-1) # (B,)
# Combine
loss = (1 - epsilon) * nll + epsilon * smooth
return loss.mean()
Essa forma torna a decomposição clara: uma mistura de NLL padrão e uma perda com alvo uniforme.
Suavização de rótulos em modelagem de linguagem e sequência-para-sequência
Em modelagem de linguagem, cada passo de treinamento prediz um token em um vocabulário de tamanho (V) (frequentemente 10k–200k+). Um alvo one-hot estrito assume que exatamente um token é correto — o que nem sempre é realista:
- Múltiplas continuações podem ser válidas (“car” vs “vehicle”)
- Tradução tem muitas saídas aceitáveis
- A tokenização pode criar variantes quase equivalentes
Por isso, a suavização de rótulos é comum em tradução automática neural e no treinamento de Transformers.
Considerações práticas em modelagem de linguagem
- Padding / tokens ignorados: normalmente há um
ignore_index(por exemplo, token de padding) que não deve contribuir para a perda. Sua implementação de suavização deve respeitar isso. - Vocabulários muito grandes: a suavização uniforme espalha (\varepsilon) por muitos tokens, então cada token incorreto recebe uma massa minúscula (\varepsilon/V). O efeito principal ainda é reduzir o alvo do token correto de 1.0 para aproximadamente (1-\varepsilon), e não aumentar de forma significativa algum token alternativo específico.
Um ajuste comum em PLN é (\varepsilon \in [0.05, 0.2]), com (\varepsilon=0.1) como padrão amplamente utilizado, mas o valor ótimo depende da tarefa.
Variante: suavização não uniforme
A suavização uniforme é simples, mas às vezes você quer uma distribuição de fundo que reflita melhor a realidade, como:
- frequências unigram de tokens (mais massa em tokens comuns)
- uma hierarquia de classes / distribuição por similaridade semântica
- uma distribuição baseada em matriz de confusão
Isso pode reduzir a massa de probabilidade “desperdiçada” em alternativas implausíveis.
Como a suavização de rótulos interage com avaliação e interpretação
A perda de treinamento deixa de ser uma pura log-verossimilhança negativa
Com alvos one-hot, a entropia cruzada corresponde de perto a maximizar a log-verossimilhança da classe correta. Com suavização de rótulos, você está otimizando um objetivo diferente: um que explicitamente troca verossimilhança por entropia/uniformidade da saída.
Isso significa:
- Você não deve interpretar a perda de treinamento como uma NLL pura.
- Comparar valores de entropia cruzada entre execuções com diferentes (\varepsilon) pode ser enganoso.
Escores de confiança tornam-se “mais suaves” por construção
Como o modelo não é treinado para produzir 1.0 em exemplos corretos, suas probabilidades tendem a ser menores e menos concentradas. Isso muitas vezes é bom para calibração, mas pode afetar sistemas que dependem das probabilidades brutas previstas como confiança.
Se você precisa de estimativas de confiança bem calibradas, a suavização de rótulos pode ajudar, mas ela também pode interagir com métodos de calibração pós-treinamento, como escalonamento de temperatura.
Armadilhas comuns e modos de falha
1) Suavização excessiva ( \(\varepsilon\) grande demais)
Se (\varepsilon) for alto demais:
- o modelo pode subajustar (os alvos ficam ambíguos demais)
- a acurácia top-1 pode cair
- a separação entre classes (margens) pode enfraquecer
- as representações podem ficar menos discriminativas
Sintomas: a acurácia de treinamento se estabiliza cedo, os logits permanecem pequenos, as previsões parecem uniformes demais.
Regra prática: comece com (\varepsilon \in [0.05, 0.1]) para muitos problemas; ajuste na validação.
2) Desbalanceamento de classes e “uniforme” sendo um mau prior
Se as classes forem altamente desbalanceadas, a suavização uniforme pode injetar um prior irrealista que aumenta a probabilidade de classes raras/irrelevantes.
Mitigações:
- use uma distribuição de fundo baseada nas frequências das classes
- combine com estratégias de reponderação / amostragem
- ajuste (\varepsilon) cuidadosamente para tarefas desbalanceadas
3) Classificação multirrótulo é diferente
A suavização de rótulos é mais direta para problemas multiclasse de rótulo único (single-label multiclass) com softmax. Para problemas multirrótulo (multi-label) (sigmoid + entropia cruzada binária), “suavização de rótulos” é possível, mas não é a mesma coisa; suavizar alvos ingenuamente em direção a 0.5 pode ser prejudicial, a menos que você saiba exatamente o que está fazendo.
4) Interação com destilação de conhecimento
Em Destilação de Conhecimento (Knowledge Distillation), o aluno é treinado com alvos suaves (soft targets) produzidos por um professor (frequentemente com escalonamento de temperatura). Essas probabilidades do professor já fornecem um tipo de suavização — mais informativa do que a suavização uniforme.
Problemas potenciais:
- Adicionar suavização uniforme por cima da destilação pode diluir o sinal do professor.
- Se você misturar rótulos duros + perda de destilação, pode ser desejável aplicar suavização apenas no termo de rótulo duro, ou reduzir (\varepsilon).
Boa prática: trate (\varepsilon) como outro hiperparâmetro ajustável em configurações de destilação; não assuma que o valor padrão ainda se aplica.
5) A calibração não é garantida
Embora a suavização de rótulos frequentemente reduza o excesso de confiança, ela às vezes pode produzir previsões pouco confiantes ou distorcer ordenações de probabilidade dependendo do conjunto de dados e do modelo. Sempre meça a calibração explicitamente (por exemplo, ECE, diagramas de confiabilidade), em vez de assumir que melhorou.
Escolhendo o fator de suavização \(\varepsilon\)
Não há um melhor valor universal, mas estas heurísticas são comuns:
- Classificação de imagens (K moderado): (\varepsilon \approx 0.05) a (0.1)
- NMT / Transformer seq2seq: (\varepsilon \approx 0.1) é uma linha de base clássica
- Rótulos muito ruidosos: às vezes valores mais altos ajudam, mas valide com cuidado
- Conjuntos de dados pequenos: a suavização pode ajudar, mas um valor alto demais pode causar subajuste
Você também pode agendar (\varepsilon) (por exemplo, começar em 0 e aumentar), mas isso é menos padrão do que agendar taxas de aprendizado.
Relação com outros métodos de regularização
A suavização de rótulos é uma ferramenta no conjunto mais amplo de Regularização (Regularization) e frequentemente é complementar a:
- Dropout: regulariza representações internas
- Decaimento de Peso: penaliza pesos grandes
- Parada Antecipada: interrompe antes do superajuste
- Mixup: suaviza alvos via interpolação de exemplos (frequentemente mais forte do que suavização de rótulos)
- regularização por entropia / penalidade de confiança: penaliza diretamente saídas de baixa entropia (relacionado em espírito)
Uma diferença-chave é que a suavização de rótulos modifica os alvos, enquanto muitos outros regularizadores modificam o modelo ou a dinâmica de otimização.
Dicas de implementação
- Prefira implementações nativas do framework (elas lidam com estabilidade e casos de borda).
- Garanta que sua implementação de suavização:
- trate
ignore_indexcorretamente (tokens de padding em PLN) - use
log_softmaxpara estabilidade numérica - aplique suavização apenas onde apropriado (por exemplo, não em tokens mascarados)
- trate
Se você calcular métricas como perplexidade em modelagem de linguagem, lembre-se de que treinar com suavização de rótulos otimiza um objetivo modificado; a perplexidade calculada a partir da perda suavizada não é a mesma que a perplexidade da NLL verdadeira. Muitos praticantes reportam NLL/perplexidade calculadas contra rótulos duros para comparabilidade.
Resumo
- Suavização de rótulos substitui alvos one-hot por uma mistura do rótulo verdadeiro e uma pequena distribuição de fundo (frequentemente uniforme).
- Ela funciona naturalmente com softmax + entropia cruzada, mudando os gradientes de “empurrar probabilidade para 1” para “empurrar em direção a alta, mas não absoluta, confiança”.
- Pode melhorar a generalização e frequentemente melhora a calibração ao reduzir previsões excessivamente confiantes.
- Armadilhas comuns incluem suavização excessiva, incompatibilidade com desbalanceamento de classes, e interações com destilação de conhecimento em que alvos suaves já fornecem suavização.
- É amplamente usada no aprendizado profundo moderno — especialmente em PLN e em grandes modelos de classificação — porque é fácil de implementar e barata de executar.