Destilação de Conhecimento (Knowledge Distillation)
Visão geral
Destilação de conhecimento (knowledge distillation) é uma família de técnicas para transferir conhecimento de um modelo grande e de alto desempenho (o modelo professor (teacher)) para um modelo menor e mais barato (o modelo aluno (student)). O objetivo é manter a maior parte da qualidade do professor enquanto torna o aluno mais rápido, menor e mais fácil de implantar em hardware restrito (dispositivos móveis, dispositivos de borda (edge devices)) ou em grande escala (serviços de alta QPS (queries per second)).
A destilação é amplamente usada em aprendizado profundo (deep learning): visão computacional, fala, recomendação e especialmente PLN (processamento de linguagem natural) moderno com a Arquitetura Transformer (Transformer Architecture). Ela frequentemente se combina de forma natural com outros métodos de eficiência (por exemplo, poda (pruning) e quantização (quantization)), mas é distinta por treinar o aluno para imitar o comportamento do professor em vez de apenas comprimir pesos.
Por que a destilação funciona (intuição)
Um modelo professor geralmente codifica uma estrutura rica aprendida a partir de grandes conjuntos de dados e grande capacidade. Quando ele produz uma distribuição de probabilidade sobre classes (ou probabilidades do próximo token), ele não apenas diz “a classe A está correta”. Ele também revela:
- quais alternativas são plausíveis (por exemplo, “gato” vs “cachorro”),
- quais são improváveis (por exemplo, “avião”),
- e quão confiante ele está.
Esses “alvos suaves (soft targets)” podem ser mais informativos do que rótulos one-hot (one-hot labels), especialmente quando os rótulos são ruidosos ou limitados. A destilação usa esses alvos suaves para guiar o aluno em direção a uma solução que frequentemente generaliza melhor do que treinar apenas com rótulos rígidos (hard labels).
Essa ideia se encaixa naturalmente no treinamento de Redes Neurais (Neural Networks): ainda fazemos otimização padrão com Descida do Gradiente (Gradient Descent) e Retropropagação (Backpropagation), mas com um objetivo adicional de imitação.
Formulação central: logits, temperatura e divergência KL
Considere um problema de classificação com logits (logits) do professor (z^{(t)}) e logits do aluno (z^{(s)}). Seja:
[ p^{(t)}_T = \text{softmax}\left(\frac{z^{(t)}}{T}\right), \quad p^{(s)}_T = \text{softmax}\left(\frac{z^{(s)}}{T}\right) ]
onde (T > 0) é a temperatura (temperature). Um (T) maior torna a distribuição mais “suave” (menos concentrada), expondo mais informação sobre similaridades relativas entre classes.
Um objetivo comum de destilação combina:
- Perda supervisionada nos rótulos de verdade (y) (quando disponíveis), tipicamente entropia cruzada (cross-entropy).
- Perda de destilação entre as distribuições do professor e do aluno, tipicamente divergência KL (KL divergence).
Uma forma padrão (popularizada por Hinton et al.) é:
[ \mathcal{L} = \alpha \cdot \mathcal{L}_{\text{CE}}(y, p^{(s)}_1) ;+; (1-\alpha)\cdot T^2 \cdot \text{KL}\left(p^{(t)}_T ;|; p^{(s)}_T\right) ]
Notas:
- O professor normalmente fica congelado (frozen).
- O aluno é treinado para corresponder ao professor na temperatura (T).
- O fator (T^2) mantém as magnitudes dos gradientes aproximadamente comparáveis entre temperaturas (uma convenção prática).
Quando você não tem rótulos
A destilação pode funcionar com dados não rotulados: você passa as entradas pelo professor, trata sua distribuição de saída como alvo de treinamento e treina o aluno para imitar. Isso é comum quando você tem muito texto/áudio/imagens brutos, mas poucos rótulos, e se relaciona a ideias em Aprendizado Auto-Supervisionado (Self-Supervised Learning).
Que “conhecimento” está sendo transferido?
A destilação pode mirar diferentes tipos de sinais, levando a várias variantes principais.
Destilação baseada na resposta (destilação por logits)
O aluno corresponde às probabilidades de saída (ou aos logits) do professor. Essa é a abordagem mais simples e mais comum, especialmente para:
- classificação de imagens,
- classificação de texto,
- modelagem de linguagem (previsão do próximo token).
Prós:
- Fácil de implementar.
- Funciona mesmo quando os internos dos modelos diferem.
Contras:
- Pode não transferir plenamente representações internas; pode ter desempenho inferior se o aluno for muito menor.
Destilação baseada em características (destilação de camadas intermediárias)
O aluno é treinado para corresponder às ativações intermediárias do professor (estados ocultos (hidden states), mapas de atenção (attention maps), mapas de características (feature maps)). Isso é comum em Transformadores (Transformers) e CNNs (convolutional neural networks).
Exemplos:
- Corresponder estados ocultos em camadas selecionadas usando perda de erro quadrático médio (MSE loss).
- Corresponder matrizes de atenção (às vezes após projeção).
Prós:
- Fornece um sinal de treinamento mais forte.
- Pode ajudar alunos muito pequenos.
Contras:
- Exige alinhar formatos de camadas (muitas vezes via camadas de projeção aprendidas).
- As arquiteturas do professor e do aluno podem precisar de um mapeamento cuidadoso.
Isso se conecta ao Aprendizado de Representações (Representation Learning): o aluno é incentivado a formar características internas semelhantes.
Destilação baseada em relações
Em vez de corresponder ativações brutas, o aluno corresponde a relações entre exemplos (por exemplo, distâncias/ângulos no espaço de embeddings) ou entre características (por exemplo, estruturas de correlação). Isso pode ser robusto quando o pareamento direto de características é difícil.
Auto-destilação
Um modelo destila a partir de si mesmo (ou de um checkpoint anterior/maior), por exemplo:
- supervisão profunda (deep supervision): camadas posteriores ensinam camadas anteriores,
- ensemble de snapshots: médias de previsões viram alvos do professor.
A auto-destilação pode melhorar a acurácia e a calibração sem precisar de um professor separado, e às vezes é usada como regularizador.
Destilação com múltiplos professores e comitê de modelos
Múltiplos professores podem ser combinados (média dos logits, ponderação por desempenho ou especialização por domínio). Isso é útil em cenários de Aprendizado Multitarefa (Multi-Task Learning) ou quando você tem vários modelos especialistas.
Motivações práticas e casos de uso comuns
1) Implantação em dispositivos de borda (exemplo de visão)
Suponha que você tenha um professor do tipo ResNet, com alta acurácia, mas lento demais para celular. Você treina um aluno leve (por exemplo, no estilo MobileNet) para corresponder às saídas do professor.
Benefícios:
- Menor latência (latency) e consumo de energia.
- Menor pegada de memória (memory footprint).
- Frequentemente melhor acurácia do que treinar o modelo pequeno do zero.
2) Servir em escala (exemplo de PLN)
Modelos Transformer grandes podem ser caros em alto volume de consultas. A destilação pode produzir um aluno que é:
- 2–10× mais rápido,
- mais barato por requisição,
- ainda próximo em qualidade para uma tarefa restrita (classificação, recuperação (retrieval), detecção de intenção).
Um padrão clássico: um professor do tipo BERT destilado em um aluno menor (por exemplo, modelos no estilo “Distil”).
3) Comprimir modelos de linguagem grandes para domínios específicos
Para um domínio estreito (suporte ao cliente, triagem jurídica, QA interno), você pode destilar um grande modelo ajustado por instruções (instruction-tuned) em um modelo menor ao:
- coletar prompts representativos do tráfego de produção,
- gerar respostas do professor (e às vezes distribuições),
- treinar o aluno para imitar.
Isso é especialmente atraente quando o aluno precisa rodar localmente (on-prem) ou em GPUs limitadas.
4) Destilar políticas em aprendizado por reforço
Em aprendizado por reforço (reinforcement learning), “destilação de políticas (policy distillation)” treina uma política aluno para imitar uma política professor (ou um comitê), frequentemente reduzindo o custo de inferência enquanto mantém o desempenho.
Uma receita concreta (ponta a ponta)
Etapa 1: Escolha professor e aluno
- Professor: alta qualidade, frequentemente grande e caro.
- Aluno: arquitetura menor projetada para o runtime alvo (CPU, GPU móvel, acelerador).
- Garanta que o aluno tenha capacidade suficiente; se for pequeno demais, pode subajustar mesmo com destilação.
Etapa 2: Escolha os dados de destilação
Opções:
- Conjunto de treino rotulado original (se permitido).
- Um grande pool de dados não rotulados no domínio (frequentemente o melhor).
- Dados aumentados ou sintetizados (para cobertura).
- Em alguns cenários, “destilação sem dados (data-free distillation)” usa entradas sintéticas, mas é mais complexa e tipicamente menos confiável.
Etapa 3: Escolha objetivos e pesos
Escolhas comuns:
- Entropia cruzada em rótulos rígidos + divergência KL em rótulos suaves (mais comum).
- Adicionar correspondência intermediária (estados ocultos / atenção).
- Ajustar:
- temperatura (T) (frequentemente 2–10),
- peso de mistura (\alpha) (frequentemente 0,1–0,9 dependendo da qualidade dos rótulos).
Etapa 4: Treine com engenharia estável
Destilação ainda é treinamento de aprendizado profundo: use as mesmas boas práticas de Treinamento em Escala (Training at Scale):
- precisão mista (mixed precision),
- clipping de gradiente (gradient clipping),
- agendamentos de taxa de aprendizado (learning rate schedules) cuidadosos,
- salvamento de checkpoints (checkpointing),
- avaliação em conjuntos de validação (held-out sets).
Etapa 5: Avalie além da acurácia
Em produção, avalie:
- latência e vazão (throughput),
- uso de memória,
- calibração (calibration) (confiança vs acerto),
- robustez a mudança de distribuição (distribution shift),
- perfis de segurança e vieses (alunos podem herdar comportamentos do professor).
Exemplo mínimo no estilo PyTorch (classificação)
A seguir está um esboço simplificado para destilar um classificador. Ele assume que você já tem modelos teacher e student que produzem logits.
import torch
import torch.nn.functional as F
def distillation_loss(student_logits, teacher_logits, labels, T=4.0, alpha=0.5):
# Hard-label loss (student at T=1)
ce = F.cross_entropy(student_logits, labels)
# Soft-label loss (KL between softened distributions)
p_s = F.log_softmax(student_logits / T, dim=-1)
p_t = F.softmax(teacher_logits / T, dim=-1)
kl = F.kl_div(p_s, p_t, reduction="batchmean")
loss = alpha * ce + (1 - alpha) * (T * T) * kl
return loss
teacher.eval()
for p in teacher.parameters():
p.requires_grad_(False)
optimizer = torch.optim.AdamW(student.parameters(), lr=3e-4)
for batch in dataloader:
x, y = batch["input"], batch["label"]
with torch.no_grad():
t_logits = teacher(x)
s_logits = student(x)
loss = distillation_loss(s_logits, t_logits, y, T=4.0, alpha=0.7)
optimizer.zero_grad()
loss.backward()
optimizer.step()
Notas práticas:
- Se os rótulos forem ruidosos ou escassos, diminua
alpha(confie mais no professor). - Se os rótulos forem de alta qualidade e o professor for imperfeito para seu domínio, aumente
alpha. - Teste algumas temperaturas; uma temperatura alta demais pode “diluir” um sinal útil.
Destilação para Transformadores e modelos de linguagem
Para alunos baseados em Transformer, profissionais frequentemente combinam múltiplas perdas:
- destilação por logits: corresponder distribuições do próximo token,
- destilação de estados ocultos: corresponder saídas de camadas selecionadas,
- destilação de atenção: corresponder padrões de atenção (às vezes após normalização).
Um desafio comum é o mapeamento de camadas (layer mapping) (o professor tem mais camadas do que o aluno). Estratégias típicas:
- mapear a camada do aluno (i) para a camada do professor (k \cdot i) (passo uniforme),
- aprender projeções do tamanho oculto do professor para o tamanho oculto do aluno,
- destilar apenas um subconjunto de camadas para reduzir overhead.
Destilando geração de sequência (forçamento do professor)
Para modelagem de linguagem, o treinamento frequentemente usa forçamento do professor (teacher forcing): as entradas são prefixos e os alvos são os próximos tokens. A destilação pode:
- corresponder à distribuição do próximo token do professor em cada posição,
- opcionalmente misturar com tokens de verdade (alvos rígidos).
Ressalva: corresponder distribuições completas para vocabulários grandes é caro. Aproximações incluem:
- destilação top-k (top-k distillation) (só corresponder às top-k probabilidades do professor),
- alvos suaves amostrados (sampled soft targets).
Como a destilação se compara a outros métodos de compressão
A destilação frequentemente é combinada com outras abordagens:
- Poda: remove pesos/neurônios/cabeças. Boa para reduzir computação, mas pode exigir kernels especializados (specialized kernels) para realizar ganhos de velocidade.
- Quantização: reduz a precisão numérica (por exemplo, int8, int4). Frequentemente oferece grandes benefícios de velocidade/memória na inferência.
- Mudanças de arquitetura: projetar alunos eficientes diretamente (convoluções depthwise, Transformadores menores).
A destilação é diferente porque é supervisão em tempo de treinamento: ela transfere comportamento, não apenas estrutura. Muitos pipelines fortes de implantação fazem:
- destilar professor → aluno,
- quantizar o aluno,
- opcionalmente podar ou compilar (compile).
Armadilhas comuns e como lidar com elas
Aluno pequeno demais (gargalo de capacidade)
Se o aluno não consegue representar a função do professor, a destilação pode estagnar.
Mitigações:
- usar um aluno um pouco maior,
- adicionar perdas baseadas em características (estados ocultos),
- destilar progressivamente (professor médio → aluno pequeno).
Desalinhamento professor-aluno (arquitetura/tokenização)
Em PLN, se tokenizadores (tokenizers) diferirem significativamente, a imitação fica mais difícil.
Mitigações:
- manter o tokenizador consistente quando possível,
- destilar em um nível mais alto (por exemplo, embeddings de sentença (sentence embeddings)) para tarefas de recuperação.
Overfitting a “manias” do professor
Alunos podem herdar vieses do professor, correlações espúrias ou comportamentos indesejáveis.
Mitigações:
- misturar supervisão de verdade onde disponível,
- usar dados de destilação diversos (cobrir uso real),
- avaliar equidade/segurança explicitamente.
Piora da calibração
Alunos podem ficar confiantes demais ou pouco confiantes.
Mitigações:
- ajustar temperatura e pesos de perda,
- considerar métodos de calibração pós-treinamento (se apropriado),
- monitorar o erro esperado de calibração (expected calibration error, ECE).
Mudança de distribuição
Se os dados de destilação não combinarem com os dados de implantação, o aluno pode imitar o professor nas regiões erradas.
Mitigações:
- coletar consultas/logs não rotulados no domínio,
- usar um escalonamento tipo currículo do genérico para o in-domain (relacionado a Aprendizado por Currículo (Curriculum Learning)).
Padrões práticos de aplicação
Padrão A: “Professor rotula um grande pool não rotulado”
- Reúna entradas não rotuladas representativas da produção.
- Rode o professor para produzir alvos suaves (e opcionalmente pseudo-rótulos rígidos).
- Treine o aluno nesse grande pool com perda KL.
- Faça fine-tuning do aluno em um conjunto rotulado menor com entropia cruzada + KL (opcional).
Essa é uma forma comum de obter desempenho forte com orçamento de rotulagem limitado.
Padrão B: “Destilar um comitê em um único modelo”
Se um comitê for lento demais para produção:
- Use a média das probabilidades do comitê como alvos do professor.
- Treine um único aluno para correspondê-las.
Isso pode reter grande parte da acurácia do comitê com o custo de um único modelo.
Padrão C: “Aluno especialista para uma subtarefa”
Se apenas uma capacidade precisa ser rápida (por exemplo, classificação de intenção):
- destile apenas essa cabeça/tarefa em um modelo pequeno,
- mantenha o professor grande para uso offline ou fallback.
Tendências atuais (o que é destilação “moderna”)
- Destilação de instruções para modelos de linguagem grandes: usar respostas geradas pelo professor em conjuntos de dados de instruções para treinar modelos menores de chat/seguimento de instruções.
- Destilação alinhada a preferências: destilar modelos que foram alinhados via otimização por preferências (preference optimization) em alunos menores (exige cuidado para preservar o alinhamento (alignment)).
- Destilação com recuperação ou ferramentas: treinar um aluno para imitar um professor que usa recuperação/chamadas de ferramenta (tool calls), às vezes supervisionando decisões intermediárias de ferramenta.
- Destilação online (online distillation): professor e aluno treinam conjuntamente, onde o professor pode ser uma média móvel exponencial (exponential moving average) do aluno (relacionado à auto-destilação).
Resumo
A destilação de conhecimento é uma abordagem prática, com base teórica, para compressão de modelos: treinar um aluno menor para imitar um professor maior, tipicamente correspondendo distribuições de saída suavizadas e, às vezes, representações intermediárias. Ela é amplamente usada para tornar modelos profundos implantáveis sob restrições reais — latência, memória, custo — enquanto retém grande parte do desempenho de modelos grandes.
Quando bem feita, a destilação não é apenas “tornar um modelo menor”; é uma forma de transferir o comportamento de generalização aprendido por modelos de grande capacidade para arquiteturas eficientes adequadas à produção.