Pular para o conteúdo principal

O que é flow matching? Um guia sobre modelos de IA generativa

Flow matching treina modelos generativos para transformar ruído em dados ao aprender um campo vetorial que move amostras ao longo de um caminho de probabilidade escolhido — a mesma ideia por trás de continuous normalizing flows e de modelos modernos de difusão.
Atualizado 18 de set. de 2026  · 15 min lido

Explorar com IA

ChatGPTClaudePerplexity

Você tem visto o termo "flow matching" em todo novo modelo de imagem e vídeo, mas não faz ideia do que significa?

Muitas explicações já começam com equações diferenciais ou resumem como "difusão, só que melhor". Nenhuma delas diz o que o modelo realmente aprende. Stable Diffusion 3 e Flux usam flow matching e geram imagens em poucas etapas, enquanto a difusão clássica precisa de dezenas.

A ideia geral é: em vez de aprender exemplos individuais, o modelo aprende um campo de velocidades que indica para qualquer amostra em que direção e a que velocidade ela deve se mover. Depois que você entende isso, o processo de treino, a matemática por trás e a relação com difusão passam a fazer sentido.

Neste artigo, vou apresentar a intuição por trás do flow matching, como ele é treinado, a matemática (de forma leve) e como ele se compara a modelos de difusão.

Se você é novo em IA para imagens, confira nosso Top 10 Vision Language Models em 2026 para conhecer os modelos de ponta em raciocínio visual, análise de imagem e visão computacional.

O que é flow matching?

Flow matching é um objetivo de treinamento, não uma arquitetura de modelo.

Essa distinção é importante porque você pode combiná-lo com um transformer ou praticamente qualquer outra rede — o que define o flow matching é o que a rede é treinada para prever, não como ela é construída.

E o que ela aprende a prever é um campo vetorial dependente do tempo. Em bom português, é uma função que indica em cada ponto do caminho da distribuição de origem até a distribuição-alvo em que direção e a que velocidade a amostra deve se mover. Quando você treina continuous normalizing flows desse jeito, obtém um modelo que transforma uma distribuição simples em uma complexa, passo a passo.

Gosto de resumir a intuição em quatro ideias:

  • Comece simples: use uma distribuição fácil de amostrar, como ruído Gaussiano
  • Defina caminhos: conecte cada amostra de ruído a um ponto de dados-alvo por um caminho suave
  • Aprenda o movimento: treine uma rede para prever como a amostra deve se mover ao longo desse caminho, em cada instante
  • Siga o fluxo: depois de treinado, parta do ruído e siga o campo vetorial aprendido para gerar novas amostras

Se você aprende melhor de forma visual, imagine uma nuvem de partículas espalhadas e desordenadas. O flow matching ensina a cada partícula exatamente para onde e a que velocidade se mover, de modo que, com o tempo, a nuvem toda se organiza em um padrão estruturado (o formato da sua distribuição-alvo).

Ao aplicar isso em um dataset de imagens, "padrão estruturado" vira uma foto coerente em vez de ruído aleatório.

Como o flow matching funciona

Treinamento e geração são fases separadas aqui, e muita confusão começa quando as pessoas acham que são a mesma coisa.

Durante o treinamento:

  • Amostre um ponto de dados: escolha um ponto do conjunto de treino — o alvo para onde suas amostras irão
  • Amostre ruído: pegue um ponto de uma distribuição simples de origem, geralmente ruído Gaussiano
  • Escolha um tempo: selecione um t aleatório entre 0 e 1
  • Crie um ponto intermediário: combine o ponto de dados e a amostra de ruído conforme t, com base em um caminho de probabilidade que conecta os dois
  • Obtenha a velocidade-alvo: calcule a direção e a velocidade que esse ponto intermediário deve ter no tempo t, com base no caminho escolhido
  • Treine a rede: ensine-a a prever essa velocidade, dado o ponto intermediário e o tempo

A geração não precisa do ponto de dados.

Você parte do ruído e integra o campo vetorial aprendido ao longo do tempo, um pequeno passo por vez, até chegar a uma amostra da distribuição de dados.

E é isso — você prevê velocidade no treinamento e a segue na geração.

Entendendo campos vetoriais e caminhos de probabilidade

Duas ideias sustentam o objetivo de flow matching: campos vetoriais e caminhos de probabilidade. Entendendo isso, a função de perda na próxima seção fica clara.

Campos vetoriais

O campo vetorial é o que a rede prevê. Em qualquer ponto do espaço e em qualquer instante, ele fornece uma direção e uma velocidade — o modo como uma amostra nesse ponto deve se mover para se aproximar da distribuição de dados.

Por exemplo, imagine-se em um rio. Onde quer que você esteja, a correnteza te empurra de um certo jeito, e a intensidade e direção dependem da sua posição exata e do momento. Um campo vetorial faz o mesmo com suas amostras — atribui direção e velocidade a cada ponto no espaço, em cada instante de tempo.

Caminhos de probabilidade

Um caminho de probabilidade é a sequência de distribuições pelas quais uma amostra passa ao ir do ruído aos dados. Em t = 0, você amostra da distribuição de origem, geralmente ruído Gaussiano. Em t = 1, você amostra da distribuição de dados-alvo. Tudo entre esses dois pontos são distribuições intermediárias, e o caminho de probabilidade descreve como uma vira a outra.

O campo vetorial e o caminho de probabilidade estão diretamente conectados, porque o campo vetorial move as amostras ao longo do caminho, de uma distribuição intermediária para a próxima, até chegarem na distribuição de dados.

Diagrama de um caminho de probabilidade

Diagrama de um caminho de probabilidade

O objetivo de flow matching

O objetivo de flow matching transforma campos vetoriais e caminhos de probabilidade em uma única perda de regressão.

Cada passo de treino compara duas velocidades. A primeira é a velocidade-alvo — a direção e a velocidade que uma amostra deve ter naquele ponto do caminho de probabilidade escolhido. A segunda é a velocidade prevista pelo modelo — o palpite da rede para a mesma direção e velocidade, com base na amostra e no tempo atuais. O treinamento faz essas duas coincidirem o máximo possível.

Aqui está a função de perda:

Função de perda de flow matching

Função de perda de flow matching

O que cada termo significa:

  • v_θ(x_t, t): a velocidade prevista pelo modelo no ponto x_t e no tempo t

  • u_t(x_t): a velocidade-alvo nesse mesmo ponto e tempo, baseada no caminho de probabilidade escolhido

  • 𝔼[...]: uma média sobre muitos valores aleatórios de t e x_t

  • ‖ · ‖^2: a diferença ao quadrado entre as duas velocidades — erro quadrático médio

A demonstração completa não é o foco aqui. O que importa é que a rede prevê um único vetor em um ponto e tempo específicos, e você o compara com um alvo conhecido. Só isso!

Conditional flow matching

O caminho de probabilidade marginal que conecta toda a distribuição de ruído a toda a distribuição de dados não é algo que você consiga escrever diretamente.

Calcular a velocidade-alvo em um ponto requer considerar cada amostra de dados que poderia tê-lo gerado — uma integral sobre todo o seu dataset, inviável de computar a cada passo de treino.

O conditional flow matching resolve isso condicionando em pares individuais, em vez do caminho completo. Em vez de calcular o campo vetorial para todo o caminho marginal, você escolhe um único ponto de dados e um único ponto de ruído e constrói um caminho de probabilidade só para esse par. Quando esse caminho condicional é simples — por exemplo, uma linha reta entre os dois pontos — a velocidade-alvo tem expressão fechada e pode ser computada diretamente.

Treinar a rede nessas velocidades condicionais simples, em muitos pares e fazendo a média, leva ao mesmo campo vetorial que o objetivo marginal intratável buscaria. Você nunca calcula diretamente o caminho marginal — em vez disso, o aproxima indiretamente, um caminho condicional fácil por vez.

Essa versão condicional é a que quase todo mundo treina na prática. A formulação marginal fecha a conta na matemática, mas a condicional é a que funciona no dia a dia.

Flow matching vs modelos de difusão

Difusão e flow matching vivem sendo comparados por um bom motivo — a maioria dos "modelos de difusão" que você conhece hoje roda com objetivo de flow matching. Isso não significa que o flow matching substituiu a difusão. Significa que a difusão é um caso específico dentro de um arcabouço maior, e o flow matching é a versão geral.

Começando pelo que cada rede prevê. Um modelo de difusão prevê o ruído. Dada uma amostra ruidosa e um passo de tempo, ele prevê o ruído que foi adicionado e o remove, etapa a etapa. Já o flow matching prevê uma velocidade. Dada uma amostra e um passo de tempo, ele prevê em que direção e a que velocidade essa amostra deve se mover rumo à distribuição de dados.

Onde mais diferem é no caminho de probabilidade.

Modelos de difusão fixam um processo específico de ruidificação, geralmente adicionando ruído Gaussiano em um cronograma fixo — e todo o resto deriva dessa escolha. No flow matching, você escolhe qualquer caminho que conecte ruído a dados, e o objetivo funciona do mesmo jeito, independentemente da escolha. Um caminho Gaussiano ao estilo difusão é uma opção. Uma linha reta entre ruído e dados é outra — e isso impacta bastante a velocidade de amostragem.

Essas duas previsões não são tão diferentes quanto parecem.

A previsão de ruído de um modelo de difusão e a previsão de velocidade de um modelo de flow matching são duas visões do mesmo objeto subjacente, conectadas pelo score da distribuição em cada instante. Onde diferem é na geração. A amostragem por difusão é estocástica por padrão, ou seja, cada etapa de denoising adiciona um pouco de aleatoriedade (embora existam variantes determinísticas como DDIM). O flow matching segue o oposto — sua formulação natural é uma EDO determinística, então o mesmo ruído inicial produz sempre a mesma saída, e também existem versões estocásticas desse lado.

Em ambos os casos, amostrar significa resolver uma equação diferencial passo a passo, movendo-se do ruído até os dados.

Modelos de difusão costumam precisar de dezenas de passos, a menos que você use amostradores rápidos ou destilação. Já o flow matching, especialmente quando treinado com caminhos retos, tende a precisar de bem menos passos sem nada disso — um caminho reto tem velocidade constante, o que é bem mais fácil para um solver seguir com precisão do que um caminho curvo.

O próprio caminho é onde o flow matching sai na frente.

Modelos de difusão ficam limitados ao processo de ruído que os gerou. O flow matching trata o caminho como uma decisão de design, e escolhas diferentes trazem trade-offs diferentes.

 

Modelos de difusão

Flow matching

O que a rede prevê

Ruído adicionado em cada etapa

Velocidade rumo à distribuição de dados

Caminho de probabilidade

Fixo por um processo específico de ruído

Escolhido livremente; linhas retas são comuns

Objeto subjacente

Score da distribuição ruidosa

Campo vetorial dependente do tempo, ligado ao score

Geração

Estocástica por padrão, com variantes determinísticas

Determinística por padrão, com variantes estocásticas

Passos de amostragem

Frequentemente dezenas sem truques extras

Geralmente bem menos, especialmente com caminhos mais retos

Escolha do caminho

Definida pelo processo direto

Uma escolha de design — difusão é um caso particular

Flow matching comparado a modelos de difusão

Flow matching vs. métodos generativos relacionados

Difusão não é o único método comparado ao flow matching. Há mais três que vale conhecer

Flow matching vs. continuous normalizing flows

Os continuous normalizing flows vieram primeiro, e o flow matching nasceu diretamente dos problemas de treiná-los.

Um continuous normalizing flow é o tipo de modelo que o flow matching produz — uma rede que define uma transformação contínua entre distribuições via uma EDO. Treinar do jeito original significava resolver essa EDO adiante e computar a verossimilhança exata a cada passo, acompanhando como a transformação altera a densidade de probabilidade ao longo do caminho. Esse cálculo é caro e piora conforme a rede cresce.

O flow matching evita tudo isso. Ele faz regressão direta para uma velocidade-alvo conhecida, em vez de resolver a EDO e calcular verossimilhança durante o treino. Não há simulação necessária. Você ainda termina com um continuous normalizing flow, só não paga o custo de treinamento de antes para chegar lá.

Flow matching vs. score matching

Score matching treina uma rede para prever o score — o gradiente do log da densidade de probabilidade — em cada nível de ruído. Esse é o objetivo por trás dos modelos de difusão que você já conhece.

Flow matching treina uma rede para prever uma velocidade. Os dois objetos são relacionados matematicamente, o que significa que, sob certas escolhas de caminho, dá para converter um no outro. Mas eles representam coisas diferentes. O score descreve o formato da distribuição de probabilidade em um instante fixo. A velocidade descreve como uma amostra deve se mover conforme o tempo muda.

Score matching fala de geometria. Flow matching fala de movimento.

Flow matching vs. rectified flow

Rectified flow é uma escolha específica dentro do flow matching.

O flow matching permite escolher qualquer caminho de probabilidade que conecte ruído a dados. O rectified flow escolhe um — linhas retas — e vai além com um procedimento iterativo chamado "reflow", que endireita os caminhos que um modelo já aprendeu, para que um segundo modelo precise de ainda menos passos de integração na hora de gerar.

É por isso que os dois termos aparecem lado a lado nos mesmos artigos. Stable Diffusion 3 e Flux usam flow matching com algo próximo a um caminho de rectified flow. Mas tratar flow matching e rectified flow como sinônimos perde o ponto. Flow matching é o arcabouço. Rectified flow é uma das escolhas de caminho dentro dele.

Flow matching na IA generativa moderna

Hoje, o flow matching está por trás de alguns dos maiores sistemas generativos em produção.

  • Geração de imagens foi onde o flow matching apareceu em escala primeiro. O Stable Diffusion 3 saiu da formulação estilo DDPM para o flow matching, e o Flux, do Black Forest Labs, segue uma abordagem semelhante de rectified flow. Ambos conseguem amostragem mais rápida e com mais qualidade graças ao caminho reto.
  • Geração de vídeo é onde a liberdade de escolher seu próprio caminho faz muito sentido, porque vídeo é caro de amostrar até um único frame, imagine dezenas a cada etapa de denoising. O Movie Gen Video, da Meta, um modelo com 30 bilhões de parâmetros, substitui o U-Net de difusão clássico por um Transformer treinado com objetivo de flow matching. Vários geradores de vídeo grandes lançados desde então usam a mesma abordagem no espaço latente de um codificador de vídeo pré-treinado, pelo mesmo motivo — menos passos de amostragem geram economia real nessa escala.
  • Geração de áudio e fala também se beneficia. O Voicebox, da Meta, usou flow matching para fala multilíngue em 2023, e o componente de áudio do Movie Gen gera trilhas e efeitos sonoros do mesmo jeito, sincronizados ao vídeo. Sistemas TTS abertos como o F5-TTS se baseiam diretamente em flow matching com um diffusion transformer, produzindo fala natural sem um modelo de duração ou alinhador de fonemas separado.
  • Geração multimodal aparece menos como técnica separada e mais como o benefício de usar um único objetivo em tudo. O próprio Movie Gen é apresentado como um conjunto de foundation models de mídia — vídeo, áudio, personalização e edição — todos treinados com o mesmo objetivo de flow matching.

Tudo isso porque uma perda de regressão é simples de implementar e escalar. E, como o caminho é uma escolha de design, times que constroem sistemas com bilhões de parâmetros podem optar por um que exija menos passos de amostragem — o que importa quando cada passo custa compute nessa escala.

Um exemplo simples de flow matching

Até aqui foi conceitual. Agora vou mostrar a mesma ideia rodando em um dataset 2D real, pequeno o bastante para ver cada etapa.

A distribuição de ruído é uma Gaussiana 2D padrão, centrada na origem. A distribuição-alvo são três aglomerados Gaussianos formando um triângulo — simples o suficiente para uma rede pequena aprender rápido, mas estruturado o bastante para você saber se aprendeu direito.

Exemplo simples de flow matching

Exemplo simples de flow matching

O primeiro painel mostra de onde tudo começa — ruído espalhado sem estrutura. O segundo painel é o próprio campo vetorial, avaliado em uma grade no meio do treinamento. Note como as setas já apontam para um dos três aglomerados, bem antes de qualquer amostra chegar lá. O terceiro painel mostra o que acontece quando você parte de ruído novo e segue esse campo até t = 1 — três aglomerados emergem, casando quase perfeitamente com o quarto painel.

Nada disso envolve algo além do que já cobrimos — uma distribuição de origem, uma distribuição-alvo, um campo vetorial aprendido e um solver de EDO conectando os três. Vamos ao código.

Flow matching em Python

Aqui vai uma implementação pequena em PyTorch do mesmo exemplo, usando a mesma fonte de ruído e alvo de três aglomerados.

Comece definindo as duas distribuições e como amostrá-las:

import torch
import torch.nn as nn

torch.manual_seed(0)

# Three Gaussian clusters as the target ("data") distribution
centers = torch.tensor([[0.0, 3.0], [-2.6, -1.6], [2.6, -1.6]])

def sample_target(n):
    idx = torch.randint(0, 3, (n,))
    return centers[idx] + 0.4 * torch.randn(n, 2)

def sample_source(n):
return torch.randn(n, 2)

A rede recebe um ponto e um passo de tempo e prevê uma velocidade:

class VelocityNet(nn.Module):
    def __init__(self, hidden=64):
        super().__init__()
        self.net = nn.Sequential(
            nn.Linear(3, hidden), nn.ReLU(),
            nn.Linear(hidden, hidden), nn.ReLU(),
            nn.Linear(hidden, 2),
        )

def forward(self, x, t):
    return self.net(torch.cat([x, t], dim=1))

O treinamento amostra um lote de pontos de origem, pontos-alvo e passos de tempo a cada iteração, depois interpola entre os dois primeiros e faz regressão para a velocidade resultante:

model = VelocityNet()
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)

for step in range(3000):
    # source (noise) points
    x0 = sample_source(256) 
    # target (data) points
    x1 = sample_target(256) 
    # random time steps
    t = torch.rand(256, 1) 

    # interpolate along a straight-line path
    xt = (1 - t) * x0 + t * x1 
    # target velocity for that path
    target_v = x1 - x0 

    pred_v = model(xt, t)
    loss = ((pred_v - target_v) ** 2).mean()

    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

A geração resolve a EDO aprendida com integração de Euler. Basta um loop que dá passos pequenos de t = 0 até t = 1:

@torch.no_grad()
def generate(model, n_samples, n_steps=100):
    x = sample_source(n_samples)
    dt = 1.0 / n_steps
    for i in range(n_steps):
        t = torch.full((n_samples, 1), i * dt)
        x = x + model(x, t) * dt 
    return x

samples = generate(model, n_samples=600)
`

Visualização de amostras geradas

Visualização de amostras geradas

E esse é o pipeline inteiro! Amostrar, interpolar, regredir, integrar. Nada muda se você usar uma rede maior, um caminho diferente ou um dataset de maior dimensão — só a escala.

Vantagens e limitações do flow matching

Nada disso torna o flow matching um upgrade universal sobre a difusão. É um trade-off, como qualquer decisão de design.

Veja onde ele é uma boa opção — e onde não é.

Vantagens

  • Objetivo direto de regressão: sem estimativa de score, sem limites de verossimilhança, sem perda adversarial — apenas comparar a velocidade prevista com um alvo conhecido
  • Escolha do caminho de probabilidade: você não fica preso a um único processo de ruído; linha reta, caminho ao estilo difusão ou algo customizado — tudo cabe no mesmo objetivo
  • Encaixe natural em modelos de tempo contínuo: o flow matching treina continuous normalizing flows sem o cálculo caro de verossimilhança que esses modelos exigiam
  • Menos passos de amostragem: caminhos mais retos permitem que um solver de EDO use menos passos para manter a precisão — o que se traduz em geração mais rápida
  • Funciona entre modalidades: o mesmo objetivo treina modelos de imagem, vídeo, áudio e multimodais — a matemática não muda com a modalidade

Limitações

  • Integrar EDO pode ser caro: cada passo de amostragem ainda é um forward na rede — isso pesa em vídeo ou áudio
  • Qualidade depende do caminho e da rede: um caminho mal escolhido ou uma rede pouco treinada ainda gera amostras ruins — incluindo caminhos retos
  • A matemática tem curva de aprendizado: caminhos de probabilidade, campos vetoriais e formulações em tempo contínuo exigem mais base do que um esquema simples de denoising
  • Modelos grandes continuam caros: o flow matching reduz o custo por passo em sistemas como Movie Gen ou Flux, mas treinar e rodar redes de bilhões de parâmetros segue exigente

Conclusão

Flow matching ensina um modelo como as amostras devem se mover de uma distribuição simples até a distribuição de dados. Todo o resto que descrevi existe para tornar essa ideia treinável.

Duas ideias fazem quase todo o trabalho aqui. Um caminho de probabilidade conecta ruído a dados por uma sequência de distribuições intermediárias. Um campo vetorial descreve como uma amostra deve se mover em qualquer ponto ao longo desse caminho, em qualquer instante. A rede aprende esse campo vetorial — sua velocidade — e a geração é apenas seguir o fluxo resultante do ruído até os dados.

Nada disso está separado do que veio antes. O flow matching é como sistemas modernos treinam continuous normalizing flows sem o cálculo antigo de verossimilhança, e os modelos de difusão acabam sendo um caso específico dentro dele.

Se modelos de difusão, normalizing flows ou IA generativa de forma mais ampla te interessam, aqui estão os próximos passos:


Dario Radečić's photo
Author
Dario Radečić
LinkedIn
Cientista de dados sênior baseado na Croácia. Principal redator técnico com mais de 700 artigos publicados, gerando mais de 10 milhões de visualizações. Autor do livro Automação do aprendizado de máquina com TPOT.

Perguntas frequentes sobre flow matching

O que é flow matching?

Flow matching é um método de treinamento para modelos generativos, não uma arquitetura. Em vez de aprender a gerar exemplos específicos, a rede aprende um campo vetorial — uma função que diz a qualquer amostra em que direção e a que velocidade se mover em um ponto e instante dados. Se você começa do ruído e segue esse campo até t = 1, obtém uma amostra da distribuição de dados.

Como o flow matching é diferente de modelos de difusão?

Um modelo de difusão prevê o ruído em uma amostra e o remove passo a passo, seguindo um processo de ruído fixo. Flow matching prevê uma velocidade e permite que você escolha o caminho de probabilidade que conecta ruído a dados — por exemplo, uma linha reta, em vez de um cronograma Gaussiano fixo. Difusão é, no fim das contas, uma escolha específica de caminho dentro do arcabouço mais amplo do flow matching, não um método separado competindo com ele.

Flow matching é uma arquitetura de modelo?

Não, é um objetivo de treinamento. Você pode combiná-lo com um transformer ou quase qualquer outra rede — o que define o flow matching é o que a rede aprende a prever, não a sua aparência. É por isso que você verá o mesmo objetivo por trás de modelos de imagem, vídeo e áudio, mesmo com arquiteturas bem diferentes.

O que é conditional flow matching e por que ele importa?

Trabalhar diretamente com o caminho de probabilidade completo que conecta cada ponto de ruído a cada ponto de dado não é prático, pois a verdadeira velocidade-alvo precisaria considerar o dataset inteiro de uma vez. O conditional flow matching resolve isso condicionando em pares individuais ruído-dado, cada um com um caminho simples e uma velocidade que você consegue calcular. Ao treinar a rede na média sobre muitos desses pares, você acaba aproximando o mesmo campo vetorial que o objetivo marginal buscava — sem nunca computá-lo diretamente.

Quais modelos do mundo real usam flow matching?

Stable Diffusion 3 e Flux usam flow matching para geração de imagens. O Movie Gen, da Meta, aplica em vídeo e áudio, e modelos de fala como Voicebox e F5-TTS usam o mesmo objetivo para texto-para-fala. O apelo nessa escala vem de uma perda de regressão simples de treinar, somada a uma escolha de caminho que muitas vezes exige menos passos de amostragem.

Tópicos
Inteligência Artificial

Aprenda IA com a DataCamp

Curso

Entendendo a inteligência artificial

2 h
421.5K
Aprenda os conceitos básicos da Inteligência Artificial, como aprendizado de máquina, aprendizado profundo, PNL, IA generativa e outros.
Ver detalhesRight Arrow
Iniciar Curso
Ver maisRight Arrow