Phase 08 - Lesson 13

Flow Matching & Rectified Flows

Los modelos de difusión toman de 20 a 50 pasos de muestreo porque recorren una trayectoria curva desde el ruido hasta los datos. Flow matching (Lipman et al., 2023) y rectified flow (Liu et al., 2022) entrenaron trayectorias rectas. Trayectorias más rectas significan menos pasos, lo que a su vez significa una inferencia más rápida. Stable Diffusion 3, Flux.1 y AudioCraft 2 cambiaron a flow matching en 2024.

Type: Build Languages: Python Prerequisites: Phase 8 · 06 (DDPM), Phase 1 · Calculus Time: ~45 minutos

El Problema

El proceso inverso de DDPM es un recorrido estocástico de 1000 pasos desde N(0, I) de regreso a la distribución de datos. DDIM lo redujo a 20-50 pasos deterministas. Se buscan menos pasos; idealmente uno. El obstáculo es que la EDO que resolve el proceso inverso es rígida (stiff); la trayectoria es curva.

Si se pudiera entrenar el modelo de manera que la trayectoria desde el ruido hasta los datos fuera una línea recta, bastaría con un único paso de Euler de t=1 a t=0. Flow matching construye esto directamente: define una interpolación en línea recta desde x_1 ∼ N(0, I) a x_0 ∼ data, entrena un campo vectorial v_θ(x, t) para que coincida con su derivada temporal e integra en la inferencia.

Rectified flow (Liu 2022) va más allá: endereza las trayectorias de forma iterativa con un procedimiento de reflow que produce una EDO progresivamente más cercana a lo lineal. Después de dos iteraciones de reflow, un muestreador de 2 pasos iguala la calidad de DDPM de 50 pasos.

El Concepto

Flow matching: interpolación en línea recta entre ruido y datos

Flujo en línea recta

Define:

x_t = t · x_1 + (1 - t) · x_0,   t ∈ [0, 1]

donde x_0 ~ data y x_1 ~ N(0, I). La derivada temporal a lo largo de esta línea recta es constante:

dx_t / dt = x_1 - x_0

Define un campo de vectores neural v_θ(x_t, t) y entrénalo para que coincida con esta derivada:

L = E_{x_0, x_1, t} || v_θ(x_t, t) - (x_1 - x_0) ||²

Esta es la pérdida de conditional flow matching (Lipman 2023). El entrenamiento es libre de simulación: nunca se desenrolla la EDO. Simplemente se toma una muestra de (x_0, x_1, t) y se realiza la regresión.

Muestreo

En la inferencia, integra el campo vectorial aprendido hacia atrás en el tiempo:

x_{t-Δt} = x_t - Δt · v_θ(x_t, t)

Comienza en x_1 ~ N(0, I) y realiza pasos de Euler hacia abajo hasta t=0.

Rectified flow (Liu 2022)

El flujo en línea recta funciona, pero las trayectorias aprendidas no son realmente rectas; se curvan porque muchos x_0 pueden mapearse al mismo x_1. Paso de reflow de rectified flow:

  1. Entrena el modelo de flujo v_1 con emparejamientos aleatorios.
  2. Muestrea N pares (x_1, x_0) integrando v_1 desde x_1 hasta su punto de llegada x_0.
  3. Entrena v_2 en esos ejemplos empareljados. Dado que los pares ahora están "emparejados por EDO" (ODE-matched), la interpolación en línea recta entre ellos es genuinamente más plana.
  4. Repite.

En la práctica, 2 iteraciones de reflow te acercan a un comportamiento casi lineal, lo que permite una inferencia de 2-4 pasos. SDXL-Turbo, SD3-Turbo y LCM son todos modelos destilados a partir de flow matching.

Por qué ganó para imágenes en 2024

Tres razones:

  1. Entrenamiento libre de simulación: sin desenrollar la EDO durante el entrenamiento, de implementación trivial.
  2. Mejor geometría de pérdida: las trayectorias rectas tienen una relación señal-ruido consistente, mientras que la pérdida ε de DDPM tiene una SNR deficiente en los extremos de la programación (schedule).
  3. Inferencia más rápida: 4-8 pasos con calidad de SDXL-Turbo; 1 paso con destilación de consistencia (consistency distillation).

Flow matching vs DDPM — la conexión exacta

Flow matching con una trayectoria condicional gaussiana es difusión con un cronograma (noise schedule) de ruido específico. Al elegir el cronograma x_t = α(t) x_0 + σ(t) x_1, flow matching recupera la difusión reformulada por Stratonovich con v = α'·x_0 - σ'·x_1. Ambos son algebraicamente equivalentes para trayectorias gaussianas.

Lo que flow matching aportó: la claridad del objetivo (una velocidad simple), una pérdida más limpia y la libertad de experimentar con interpolantes no gaussianos.

Constrúyelo

code/main.py implementa flow matching unidimensional (1-D) en una mezcla gaussiana de dos modos. El campo vectorial v_θ(x, t) es una MLP diminuta entrenada con el objetivo de línea recta. En la inferencia, integra 1, 2, 4 y 20 pasos de Euler y compara la calidad de las muestras.

Paso 1: pérdida de entrenamiento

def train_step(x0, net, rng, lr):
    x1 = rng.gauss(0, 1)
    t = rng.random()
    x_t = t * x1 + (1 - t) * x0
    target = x1 - x0
    pred = net_forward(x_t, t)
    loss = (pred - target) ** 2
    # backprop + update

Paso 2: inferencia multipaso

def sample(net, num_steps):
    x = rng.gauss(0, 1)
    for i in range(num_steps):
        t = 1.0 - i / num_steps
        dt = 1.0 / num_steps
        x -= dt * net_forward(x, t)
    return x

Paso 3: comparar conteo de pasos

Espera que el muestreador de 4 pasos ya iguale la calidad de 20 pasos, lo cual es muy importante para la latencia.

Dificultades Comunes

  • Parametrización del tiempo. Flow matching utiliza t ∈ [0, 1] con t=0 en los datos y t=1 en el ruido. DDPM utiliza t ∈ [0, T] con t=0 en los datos y t=T en el ruido. Misma dirección, diferente escala. Los artículos de investigación se equivocan en esto constantemente.
  • Elección de la programación (schedule). La línea recta de rectified flow es "el" cronograma de flow matching, mas puedes usar muestreo t de coseno o logit-normal (SD3 hace esto) para una mejor cobertura de la escala.
  • Costo de reflow. Generar el conjunto de datos emparejados para reflow es una pasada completa de inferencia por muestra. Solo realiza reflow cuando realmente necesites inferencia de 1 a 2 pasos.
  • Classifier-free guidance aún aplica. Simplemente intercambia ε por v en la combinación lineal: v_cfg = (1+w) v_cond - w v_uncond.

Úsalo

Caso de uso Stack en 2026
Texto a imagen, mejor calidad Flow matching: SD3, Flux.1-dev
Texto a imagen, 1-4 pasos Flow matching destilado: Flux.1-schnell, SD3-Turbo, SDXL-Turbo
Inferencia en tempo real Destilación de consistencia a partir de una base de flow matching (LCM, PCM)
Generación de audio Flow matching: Stable Audio 2.5, AudioCraft 2
Generación de video Flow matching mezclado con difusión (Sora, Veo, Stable Video)
Ciencia / física (trayectorias de partículas, moléculas) Flow matching + campo de vectores equivariante

Cada vez que un artículo académico dice "más rápido que la difusión" en 2025-2026, casi siempre se trata de flow matching + destilación.

Envíalo

Guarda outputs/skill-fm-tuner.md. La Skill toma una especificación de modelo de estilo difusión y la convierte en una configuración de entrenamiento de flow matching: elección del cronograma, distribución de muestreo de tiempo (uniforme / logit-normal), optimizador, plan de reflow, recuento de pasos objetivo y protocolo de evaluación.

Ejercicios

  1. Fácil. Ejecuta code/main.py y compara el MSE de 1 paso vs 20 pasos con la distribución de datos real.
  2. Medio. Cambia del muestreo t uniforme a logit-normal (concentra el muestreo en la mitad de t). ¿Mejora la calidad del modelo?
  3. Difícil. Implementa una iteración de reflow: genera pares (x_0, x_1) integrando el primer modelo, entrena un segundo modelo en base a los pares y compara la calidad de la muestra de 1 paso.

Términos Clave

Término Lo que la gente dice Lo que realmente significa
Flow matching "Difusión en línea recta" Entrenar v_θ(x, t) para que coincida con x_1 - x_0 a lo largo de un interpolante.
Rectified flow "Reflow" Procedimento iterativo que endereza los flujos aprendidos.
Velocity field "v_θ" La salida del modelo: la dirección en la que se debe mover x_t.
Straight-line interpolant "La trayectoria" x_t = (1-t)·x_0 + t·x_1; derivada del objetivo trivial.
Euler sampler "Solucionador de EDO de primer orden" El integrador más simple; funciona bien cuando las trayectorias son rectas.
Logit-normal t "Muestreo SD3" Concentrar el muestreo de t hacia los valores intermedios donde los gradientes son más fuertes.
Consistency distillation "Muestreador de 1 paso" Entrenar a un modelo estudiante para mapear cualquier x_t directamente a x_0.
CFG with velocity "v-CFG" v_cfg = (1+w) v_cond - w v_uncond; mismo truque, nueva variable.

Nota de producción: Flux.1-schnell es flow matching en su forma más rápida

El gran logro de producción de flow matching es Flux.1-schnell: un DiT con flow matching destilado a 1-4 pasos de inferencia que mantiene la calidad propia de Flux-dev. El notebook de Niels "Run Flux on an 8GB machine" es la receta de despliegue de referencia: codificación T5 + CLIP, denoise de MMDiT cuantizado (en 4 pasos para schnell vs 50 para dev), decodificación VAE. El desglose de costos:

Variante Pasos Latencia a 1024² en L4 FLOPs Totales (relativo)
Flux.1-dev (sin procesar) 50 ~15 s 1.0×
Flux.1-schnell 4 ~1.2 s 0.08× (12× más rápido)
SDXL-base 30 ~4 s 0.25×
SDXL-Lightning 2-step 2 ~0.3 s 0.03×

La regla de producción: base con flow matching + destilación = el estándar de 2026 para texto a imagen rápido. Todos los proveedores importantes ofrecen esta combinación: SD3-Turbo (SD3 + flujo + destilación), Flux-schnell (Flux-dev + enderezamiento de rectified-flow), CogView-4-Flash. Las bases de difusión pura existen únicamente para checkpoints heredados (legacy checkpoints).

Lecturas Adicionales

0 lifetime access. Curriculum based on AI Engineering from Scratch by Rohit Ghumare (MIT, used under attribution).