Phase 12 - Lesson 13
Transfusion: Texto autorregresivo + Imagen de difusión en un solo Transformer
This lesson includes a graded coding exercise that runs in your browser, unlocked with lifetime access.
Chameleon y Emu3 apostaron todo a los tokens discretos. Funcionan, pero el cuello de botella de la cuantización es visible: la calidad de la imagen se estanca por debajo de los modelos de difusión en espacio continuo. Transfusion (Meta, Zhou et al., agosto de 2024) toma la apuesta contraria: mantener las imágenes continuas, eliminar por completo el VQ-VAE y entrenar un solo transformer con dos pérdidas. Los tokens de texto reciben predicción del siguiente token (NTP). Los parches de imagen reciben una pérdida de coincidencia de flujo (flow matching) / difusión. Ambos objetivos optimizan los mismos pesos. La arquitectura subyacente de Stable Diffusion 3 (MMDiT) es un primo cercano. Esta lección analiza la tesis de Transfusion, construye un entrenador de juguete de dos pérdidas y rastrea la máscara de atención que permite a un solo transformer realizar ambas tareas.
Tipo: Construir Idiomas: Python (librería estándar, entrenador de dos pérdidas en un modelo de juguete a escala MNIST) Prerrequisitos: Fase 12 · 11 (Chameleon), Fase 8 (IA Generativa) Tiempo: ~180 minutos
Objetivos de Aprendizaje
- Conectar un transformer que ejecuta dos pérdidas (NTP en tokens de texto, MSE de difusión en parches de imagen) en un solo backbone.
- Explicar por qué la atención bidireccional entre parches de imagen combinada con la atención causal sobre tokens de texto es la elección correcta de máscara.
- Comparar el estilo Transfusion (imágenes continuas, pérdida de difusión) con el estilo Chameleon (imágenes discretas, NTP) en términos de cómputo, calidad y complejidad de código.
- Nombrar la contribución de MMDiT: pesos específicos de modalidad en cada bloque, atención conjunta en el flujo residual.
El Problema
El debate sobre tokens de imagen discretos vs. continuos es más antiguo que los LLM. Las representaciones continuas (píxeles brutos, latentes de VAE) preservan los detalles. Los tokens discretos (índices VQ) se ajustan al vocabulario nativo del transformer, pero pierden detalles en el paso de cuantización.
Chameleon / Emu3 optaron por la opción discreta: una pérdida, una arquitectura, pero con la fidelidad de la imagen limitada por la calidad del tokenizador.
Los modelos de difusión optaron por la opción continua: calidad de imagen excepcional, pero un modelo separado del LLM, ingeniería compleja de cronograma de ruido (noise-schedule) y sin una integración limpia con la generación de texto.
Transfusion se pregunta: ¿podemos tener ambas? Mantener las imágenes continuas, seguir entrenando un solo modelo y usar dos pérdidas integradas en un solo paso de gradiente.
El Concepto
La arquitectura de dos pérdidas
Un único transformer de solo decodificador (decoder-only) procesa una secuencia que contiene:
- Tokens de texto (discretos, del vocabulario BPE).
- Parches de imagen (continuos, bloques de píxeles de 16x16 proyectados en la dimensión oculta mediante un embedding lineal, lo mismo que la entrada de un codificador ViT).
- Etiquetas
<image>y</image>que marcan dónde residen los parches continuos.
El forward pass se ejecuta una vez. La pérdida elige uno de dos cabezales por token:
- Para tokens de texto: entropía cruzada estándar en el cabezal de logits del vocabulario.
- Para parches de imagen: pérdida de difusión en parches continuos; predice el ruido que se agregó a cada parche.
El gradiente fluye a través del cuerpo del transformer compartido. Ambas pérdidas mejoran los pesos compartidos simultáneamente.
Máscara de atención: texto causal + imagen bidirecional
Los tokens de texto deben ser causales; no se puede permitir que un token de texto atienda a texto futuro, o el teacher forcing se rompe. Sin embargo, los parches de imagen representan una sola instantánea (snapshot); deben atenderse entre sí de forma bidireccional dentro del mismo bloque de imagen.
La máscara:
M[i, j] = 1 if:
(i is text and j is text and j <= i) # causal for text
OR (i is image and j is image and same_image_block(i, j)) # bidirectional within image
OR (i is text and j is image and j < i_image_end) # text attends to previous images
OR (i is image and j is text and j < i_image_start) # image attends to preceding text
Implementada como una máscara triangular por bloques (block-triangular) en el entrenamiento y en la inferencia.
Pérdida de difusión dentro del transformer
La pérdida de difusión es estándar: agregar ruido a un parche de imagen, pedir al modelo que prediga el ruido (o el parche limpio, equivalentemente). La versión de Transfusion utiliza coincidencia de flujo (flow matching); predice el campo de velocidad de ruidoso a limpio.
Durante el entrenamiento:
- Para cada parche de imagen x0, se muestra un paso de tiempo t aleatorio.
- Se muestra el ruido ε, se calcula xt = (1-t) * x0 + t * ε (interpolación lineal para flow matching).
- El transformer predice v_theta(xt, t); pérdida = MSE(v_theta(xt, t), ε - x0).
- Retropropagación (backprop) junto con las pérdidas NTP de texto de la misma secuencia.
En la inferencia, la generación es:
- Tokens de texto: muestreo autorregresivo estándar.
- Parches de imagen: bucle de muestreo de difusión (típicamente de 10 a 30 pasos) condicionado a los tokens de texto anteriores.
MMDiT: variante de Stable Diffusion 3
Stable Diffusion 3 (Esser et al., marzo de 2024) lanzó MMDiT (Multimodal Diffusion Transformer) aproximadamente al mismo tiempo que Transfusion. Las arquitecturas son hermanas.
Diferencias clave de MMDiT:
- Pesos específicos de modalidad por bloque. Cada bloque de transformer tiene pesos Q, K, V y MLP separados para tokens de texto frente a parches de imagen. La atención es conjunta (entre modalidades); todo lo demás es específico de la modalidad.
- Entrenamiento por flujo rectificado (rectified flow). Una variante específica de flow matching con un muestreo conocido y matemáticas más simples que DDPM.
- Escala. MMDiT es el backbone para SD3 (variantes de parámetros de 2B y 8B). El artículo de Transfusion escala a 7B.
Ambos convergen en la misma idea central: un transformer ejecuta NTP en texto y difusión en representaciones de imágenes continuas.
Por qué supera al estilo Chameleon
La brecha de calidad entre la difusión continua y el NTP discreto en la generación de imágenes es medible. El artículo de Transfusion informa:
- Con 7B de parámetros, supera a un modelo de estilo Chameleon del mismo tamaño en FID por 3-5 puntos.
- No se requiere entrenamiento del tokenizador: el codificador de imágenes es más simple (proyección lineal a la dimensión oculta, idéntico a la capa de entrada de un ViT).
- La inferencia puede paralelizar el denoising de los parches de imagen, a diferencia de los tokens de imagen autorregresivos.
Desventaja: Transfusion es un modelo de doble pérdida, lo que hace que la dinámica de entrenamiento sea más compleja. Los pesos de las pérdidas necesitan ajuste. La falta de coincidencia de cronograma entre NTP y la difusión puede hacer que un cabezal domine.
Qué hay downstream
Janus-Pro (Lección 12.15) refina la idea de Transfusion al desacoplar el codificador de visión para comprensión y generación —SigLIP para uno, VQ para el otro— mientras comparte el cuerpo del transformer. Show-o (Lección 12.14) cambia la difusión por difusión discreta (predicción enmascarada). La familia de generación unificada se ramifica rápidamente después de Transfusion.
Los VLM de producción de 2026 que emiten imágenes —Gemini 3 Pro, GPT-5, la ruta de generación de imágenes de Claude Opus 4.7— casi con certeza utilizan algún descendiente de esta familia. Los detalles son propietarios.
Uso
El archivo code/main.py construye un Transfusion de juguete en un pequeño problema similar a MNIST:
- Los pies de foto son secuencias cortas de enteros que describen un dígito (0-9).
- Las imágenes son cuadrículas de 4x4 de bytes.
- Un par de proyecciones lineales con pesos compartidos actúa como sustituto del transformer; pérdida NTP en el texto, pérdida MSE en los parches ruidosos.
- El bucle de entrenamiento alterna las dos pérdidas; la máscara de atención es explícita.
- La generación produce un pie de foto y una imagen de 4x4 en un solo forward pass.
El transformer es de juguete. La estructura de dos pérdidas, la construcción de la máscara de atención y el bucle de inferencia son los artefactos reales.
Envío
Esta lección produce el archivo outputs/skill-two-loss-trainer-designer.md. Dado un nuevo escenario de entrenamiento multimodal (texto + imagen, texto + audio, texto + video), diseña el cronograma de dos pérdidas (pesos de pérdida, forma de máscara, bloques compartidos frente a específicos de la modalidad) y señala los riesgos de implementación.
Ejercicios
Un modelo de estilo Transfusion entrena 70% de tokens de texto y 30% de parches de imagen. La pérdida de difusión de imagen es ~10x la pérdida NTP de texto en magnitud. ¿Qué pesos de pérdida los equilibran?
Implemente la máscara triangular por bloques para una secuencia:
[T, T, <image>, P, P, P, P, </image>, T]. Marque cada entrada con 0 o 1.MMDiT tiene pesos QKV específicos de modalidad. ¿Qué sobrecarga en el recuento de parámetros agrega esto frente al transformer totalmente compartido de Transfusion? Con 7B de parámetros, ¿vale la pena?
Generación: dado un prompt de texto, el modelo ejecuta NTP durante 50 tokens, luego llega a
<image>, luego ejecuta la difusión en 256 parches durante 20 pasos de denoising. ¿Cuántos forward passes en total?Lea la Sección 3 del artículo de SD3. Describa el flujo rectificado (rectified flow) y por qué converge en menos pasos de inferencia que DDPM.
Términos Clave
| Término | Lo que dice la gente | Lo que realmente significa |
|---|---|---|
| Entrenamiento de dos pérdidas | "NTP + difusión" | Un solo transformer optimiza tanto la entropía cruzada en tokens de texto como el MSE en parches de imagen continuos en el mismo paso de gradiente |
| Coincidencia de flujo (Flow matching) | "Flujo rectificado" | Variante de difusión que predice un campo de velocidad de datos ruidosos a datos limpios; matemáticas más simples que DDPM |
| MMDiT | "DiT Multimodal" | Arquitectura de Stable Diffusion 3: atención conjunta, MLPs y normalizaciones específicas de modalidad |
| Máscara triangular por bloques | "Texto causal + imagen bidireccional" | Máscara de atención que es causal en regiones de texto pero bidireccional dentro de regiones de imagen |
| Representación de imagen continua | "Sin VQ" | Parches de imagen como vectores de valor real, no índices de diccionario de códigos enteros |
| Predicción de velocidad | "Parametrización-v" | La salida de la red es el campo de velocidad entre el ruido y el dato real, no el ruido en sí |