Conteúdo detalhado
Gerar ação como denoising: começa em ruído gaussiano e refina até uma trajetória executável.
🎲 Por que difusão para ação
No Módulo 1.4 vimos que MSE colapsa modos. A difusão resolve modelando a ação como uma amostragem de uma distribuição condicional: em vez de prever um valor, aprende a transformar ruído gaussiano numa trajetória válida por denoising. Como amostra, captura naturalmente distribuições multimodais — escolhe um modo coerente em vez da média. E ao gerar a trajetória inteira (chunk), produz movimentos suaves e consistentes.
💡 Três vantagens da difusão
Multimodal: representa "esquerda OU direita" sem mediar. Trajetória: gera chunks suaves de ações futuras. Estável no treino: objetivo de denoising é bem-comportado, sem instabilidade de GANs.
Denoising
Refinar ruído em ação.
Multimodal
Captura vários modos.
Trajectory gen
Gera chunk inteiro.
Amostragem
Ação como sample, não média.
🌊 Diffusion Policy (2023)
Diffusion Policy (Chi et al., 2023) aplicou DDPM a controle: uma rede (U-Net 1D ou transformer) faz denoising de uma sequência de ações futuras condicionada na observação. Combina action chunking (prever H passos) com receding horizon (executar parte, re-prever). Bateu baselines em manipulação fina e virou o padrão-ouro para tarefas dexterosas — inclusive a cabeça de ação do Octo.
# Diffusion Policy — inferência (esboço)
A = torch.randn(H, action_dim) # ruído inicial
for k in reversed(range(K)): # K passos de denoising
eps = net(A, k, obs_cond) # prevê o ruído
A = ddpm_step(A, eps, k) # remove um pouco
execute(A[:exec_horizon]) # receding horizon
📊 Por que funcionou
- Multimodal — resolve tarefas com soluções alternativas.
- Estável — treino robusto a hiperparâmetros.
- Chunking — trajetórias suaves, menos jitter.
DDPM
Modelo de difusão denoising.
Receding horizon
Executar parte, re-prever.
U-Net 1D
Backbone comum do denoiser.
Padrão-ouro
Baseline de manipulação fina.
📐 Score matching e processo reverso
Por baixo, difusão tem um processo direto que adiciona ruído gaussiano à ação em K passos até virar ruído puro, e um processo reverso aprendido que o desfaz. A rede aprende o score — o gradiente da log-densidade ∇log p(a) — equivalente a prever o ruído adicionado. O conditioning na observação entra via FiLM ou cross-attention, fazendo a geração depender do que o robô vê.
Forward: adicionar ruído
A ação limpa vira ruído gaussiano em K passos (definido por um schedule).
Aprender o score
A rede prevê o ruído (≈ score), minimizando um erro simples de regressão.
Reverse: amostrar
Partindo de ruído, aplica o score K vezes condicionado na observação.
⚡ Dica prática
O conditioning é o que torna a política reativa: sem ele, você amostra ações plausíveis mas descoladas da cena. FiLM é leve; cross-attention é mais expressivo. Escolha conforme o budget.
Score function
Gradiente da log-densidade.
Reverse process
Desfazer o ruído passo a passo.
Conditioning
FiLM / cross-attention na obs.
Noise schedule
Como o ruído cresce em K.
➡️ Flow Matching e o uso em π0
Flow Matching generaliza a difusão: em vez de um processo estocástico de denoising, aprende um campo vetorial que transporta ruído→ação por uma ODE contínua. Com conditional flow matching, o alvo de treino é simplesmente a velocidade ao longo de um caminho (frequentemente reto) entre ruído e dado — objetivo mais simples e estável. O π0 usa exatamente isso no seu action expert para gerar ação contínua fluida a 50Hz.
✓ Vantagens do flow matching
- ✓Treino mais simples e estável que DDPM.
- ✓Caminhos retos permitem menos passos de inferência.
- ✓Ação contínua de alta frequência (π0 a 50Hz).
✗ Cuidados
- ✗Ainda exige integrar a ODE (vários NFEs).
- ✗Sensível à parametrização do caminho.
- ✗Requer action expert bem condicionado.
Flow matching
Transporte ruído→ação por ODE.
Vector field
Velocidade aprendida no caminho.
ODE
Processo determinístico contínuo.
π0 action expert
Flow matching a 50Hz.
⚡ Custo de inferência e destilação
O custo central de políticas generativas é o número de avaliações de função (NFE) — cada passo de denoising/integração é um forward pass. DDPM clássico usa dezenas a centenas de passos, inviável a 50Hz. Soluções: samplers rápidos (DDIM), consistency models (geram em 1-2 passos) e destilação de um modelo lento para um veloz. Flow matching com caminhos retos já reduz NFE naturalmente.
📊 Orçamento de passos
- 50-100 NFE — DDPM ingênuo; alta qualidade, alta latência.
- ~10 NFE — DDIM / flow com caminho reto; bom equilíbrio.
- 1-2 NFE — consistency models destilados; tempo real.
💡 Latência vs qualidade
Combine poucos NFEs com action chunking: gere um chunk com 5-10 passos e execute-o enquanto re-amostra. Assim você mantém a expressividade da difusão dentro do orçamento de tempo real.
NFE
Avaliações por amostra.
Consistency model
Gera em 1-2 passos.
Distillation
Lento → rápido.
DDIM
Sampler determinístico rápido.
⚖️ Difusão vs autoregressivo
A grande escolha de design da cabeça de ação: geração por difusão/flow versus tokens autoregressivos. Difusão é mais expressiva (multimodal contínua) mas exige múltiplos passos. Autoregressivo (RT-2, OpenVLA, FAST) reaproveita o backbone LLM e tem treino simples, mas gera token a token e a discretização pode limitar a fidelidade. Não há vencedor universal — o trade-off é expressividade × latência × simplicidade de integração.
Eixo Difusão/Flow Autoregressivo (tokens)
expressividade alta (multimodal) média (depende da disc.)
latência K passos por chunk 1 forward, N tokens
integração action expert extra reusa o backbone LLM
exemplos Diffusion Policy,π0 RT-2, OpenVLA, FAST
⚡ Dica prática
Tarefa dexterosa e contínua → difusão/flow. Integração simples sobre um VLM e treino autoregressivo unificado → tokens (e o Módulo 1.6 mostra como o FAST torna isso competitivo).
Expressividade
Capturar distribuições ricas.
Latência
Passos vs tokens por ação.
AR vs diffusion
Dois paradigmas de cabeça.
Integração
Reusar backbone ou não.
✅ Resumo do módulo
Próximo módulo
1.6 — Tokenização de ações: discreto, contínuo e FAST, fechando a Trilha 1.