Adam mantém duas médias móveis por parâmetro: o primeiro momento (média dos gradientes — momentum) e o segundo momento (média dos gradientes ao quadrado — escalonamento adaptativo). A regra de atualização: parâmetro -= lr × m̂ / (√v̂ + ε), onde m̂ e v̂ são momentos com correção de viés. Parâmetros com gradientes consistentemente grandes recebem atualizações menores (já estão bem calibrados). Parâmetros com gradientes pequenos e ruidosos recebem atualizações maiores (precisam de movimento mais agressivo).
O Adam original aplicava weight decay adicionando-o ao gradiente antes de calcular os momentos, o que fazia o decay ser escalonado pela taxa de aprendizado adaptativa — não é o que se deseja. AdamW (Loshchilov & Hutter, 2017) desacopla o weight decay da atualização de gradiente, aplicando-o diretamente aos parâmetros. Isso parece uma correção menor mas melhora significativamente a generalização. Todo treinamento moderno de LLM usa AdamW.
Adam armazena dois valores adicionais por parâmetro (primeiro e segundo momentos), triplicando a memória necessária para o estado do otimizador: um modelo de 70B precisa de ~140 GB para pesos (FP16) mais ~280 GB para estados Adam (FP32), totalizando ~420 GB. É por isso que o particionamento de estado do otimizador (DeepSpeed ZeRO, FSDP) é essencial para treinamento de modelos grandes. Alguns otimizadores mais novos (Adafactor, CAME, Lion) reduzem esse overhead de memória com algum custo em estabilidade.