Differential Transformer
O Differential Transformer subtrai um mapa de atenção softmax de outro para cancelar o ruído de atenção, melhorando a recuperação em contextos longos e a quantização.
O Transformer Diferencial, ou DIFF Transformer, é uma arquitetura transformer cujas cabeças de atenção calculam dois mapas de atenção softmax e subtraem um do outro, cancelando os pesos que ambos distribuem pelo contexto irrelevante. Tianzhu Ye, Li Dong, Furu Wei e colegas da Microsoft Research e da Universidade Tsinghua o apresentaram em outubro de 2024 em Differential Transformer, um artigo apresentado oralmente na ICLR 2025. O projeto se inspira em amplificadores diferenciais e fones de ouvido com cancelamento de ruído, que subtraem dois sinais para eliminar o ruído compartilhado entre eles. Em modelagem de linguagem, um DIFF Transformer precisou de cerca de 65% dos parâmetros ou dos tokens de treinamento de um transformer padrão para atingir a mesma perda: um modelo de 6,8 bilhões de parâmetros igualou um transformer de 11 bilhões de parâmetros.
Como funciona a atenção diferencial#
A self-attention padrão atribui a cada token um peso não negativo, pelo que algum peso acaba sempre em tokens irrelevantes, algo a que os autores chamam ruído de atenção. A atenção diferencial divide as projeções de consulta e chave de cada cabeça em duas metades, calcula um mapa softmax a partir de cada par e combina os valores como (map1 − λ × map2) × V. Ambos os mapas atribuem peso aos mesmos tokens irrelevantes, pelo que a subtração os cancela, enquanto o peso atribuído apenas pelo map1 permanece. Como cada mapa soma 1, cada linha do resultado soma 1 − λ, e os pesos individuais podem ser negativos:
import torch
torch.manual_seed(0)
n, d, lam = 6, 8, 0.8 # 6 tokens, head size 8, lambda near the paper's 0.8 initialization
q1, k1, q2, k2 = torch.randn(4, n, d)
v = torch.randn(n, 2 * d) # values are twice as wide as each query-key pair
# Two ordinary softmax attention maps from separate query and key projections
map1 = torch.softmax(q1 @ k1.T / d**0.5, dim=-1)
map2 = torch.softmax(q2 @ k2.T / d**0.5, dim=-1)
# Subtracting cancels weight that both maps place on the same tokens
diff = map1 - lam * map2
out = diff @ v
print(f"Each row sums to {diff.sum(dim=-1)[0]:.2f}; {(diff < 0).sum().item()} of {n * n} weights are negative")Imprime Each row sums to 0.20; 13 of 36 weights are negative, duas propriedades que nenhum mapa de atenção softmax pode ter. No modelo real, λ é aprendido através de quatro vetores pequenos e começa em 0.8 − 0.6 × exp(−0.3 × (l − 1)) para a camada l, pelo que as camadas mais profundas começam mais perto de 0.8. A saída de cada cabeça é normalizada individualmente, algo que o artigo representa como GroupNorm, e depois escalada por (1 − λ na inicialização) para manter os gradientes do mesmo tamanho que num Transformer padrão. O modelo usa metade do número de cabeças, cada uma com valores duas vezes mais largos, pelo que o número de parâmetros corresponde ao da linha de base. Cada mapa é uma atenção softmax normal, pelo que as implementações reutilizam kernels de flash attention, e o débito de treino em GPUs H100 foi 6% a 12% inferior ao de um Transformer do mesmo tamanho.
Benefícios comunicados#
Num teste de agulha num palheiro, com 6 agulhas e 2 perguntas numa janela de contexto de 4K tokens, o DIFF Transformer obteve 0.85, contra 0.55 de um Transformer padrão, e a análise de atenção do artigo atribuiu este resultado ao foco: o modelo dedicou 0.27 a 0.40 da sua atenção à resposta, contra 0.03 a 0.09 no Transformer. Também produziu menos alucinações na sumarização de texto e na resposta a perguntas e, na aprendizagem em contexto few-shot, foi mais preciso e menos sensível à ordem dos exemplos.
Os valores atípicos de ativação também diminuíram. O maior logit de atenção foi 38.8, contra 318.0 num Transformer padrão, e a maior ativação do estado oculto foi 1,688, contra 3,609. Com os logits de atenção quantizados para 4 bits, igualou a precisão de um Transformer padrão a 6 bits e superou em cerca de 25% a precisão de um Transformer de 4 bits.
Este resultado é importante para a quantização de modelos, porque algumas ativações extremas determinam o intervalo que todos os outros valores têm de partilhar. O mesmo se aplica aos modelos de visão: quando o Ultralytics YOLO26 é exportado com quantize=8, o exportador calibra os intervalos de ativação com imagens do conjunto de dados data e recomenda pelo menos 300 imagens, enquanto quantize="w8a16" mantém os pesos a 8 bits e as ativações a 16 bits nas exportações LiteRT, Core ML e QNN.
DIFF Transformer vs. termos relacionados#
- Diffusion Transformer (DiT): um Transformer que substitui a U-Net nos modelos de difusão para geração de imagens e vídeos.
- Privacidade diferencial: uma garantia matemática de privacidade dos dados de treino.
- Atenção esparsa: calcula pontuações apenas para um subconjunto fixo de pares de tokens e define antecipadamente todos os outros pesos como zero.
- Transformador diferencial de deslocamento linear: um sensor elétrico que mede o deslocamento linear.










