Difusão Latente: Comprimir Antes de Gerar

por Frank de Alcantara em 28/07/2026

Difusão Latente: Comprimir Antes de Gerar

Remover ruído de uma imagem de alta resolução é caro por uma razão pouco misteriosa: há muitos pixels, e o modelo precisa visitar o tensor repetidas vezes. Uma imagem de $1024\times1024$ possui dezesseis vezes a área de uma imagem de $256\times256$. Se a rede trabalhar diretamente nos pixels durante dezenas de passos, a conta cresce antes que qualquer amostra tenha a oportunidade de nos impressionar.

A difusão latente começa com uma pergunta de engenharia: precisamos executar todo o processo generativo no espaço em que a imagem será exibida? Nos dois artigos anteriores, construímos essa passagem em etapas. Primeiro, o autoencoder linear treinável tornou observável o contrato de reconstrução com um vetor global. Depois, Autoencoders Espaciais: da Projeção Linear ao Latente Gerativo substituiu esse vetor por um tensor que conserva vizinhanças e pode ser processado por uma rede gerativa. Em ambos, o encoder $E$ transforma a imagem $x$ no latente $z$, e o decoder $D$ transforma esse latente na reconstrução $\hat x$:

\[z=E(x),\qquad \hat{x}=D(z).\]

O encoder comprime a imagem; o decoder tenta reconstruí-la. A difusão latente acrescenta um segundo modelo entre essas duas operações. Em vez de aprender a remover ruído diretamente de $x$, aprende no latente $z$:

\[x\rightarrow z_0\rightarrow z_t\rightarrow\hat{z}_0\rightarrow\hat{x}.\]

O exemplo linear do Artigo 2 produziu um vetor de $16$ componentes a partir de $784$ pixels. O primeiro estágio considerado aqui é diferente: usa transformações não lineares e preserva eixos espaciais, por exemplo em um tensor $h\times w\times c$. A passagem intermediária da série existe justamente para que essa diferença arquitetural não pareça um detalhe de notação. Neste artigo, usaremos a interface $E$/$D$ e a forma espacial do latente como ponto de partida.

Essa decomposição separa responsabilidades e também separa os lugares em que podemos fracassar. O autoencoder define quais imagens podem ser reconstruídas a partir do latente. O modelo de difusão aprende uma distribuição sobre esse espaço. Se o primeiro descartou um detalhe, o segundo não possui um túnel secreto de volta aos pixels. A arquitetura pode ser prodigiosa; a informação continua desaparecida.

1. Corrupção gradual

Um DDPM, de denoising diffusion probabilistic model (modelo probabilístico de difusão com remoção de ruído), define uma cadeia direta que adiciona ruído gaussiano. Chamaremos de $x_t$ a amostra no passo $t$, de $T$ o número total de passos, de $\beta_t\in(0,1)$ a fração de ruído adicionada no passo e de $I$ a matriz identidade. A notação $N(\mu,\Sigma)$ representará uma distribuição normal de média $\mu$ e covariância $\Sigma$, enquanto $q(x_t\mid x_{t-1})$ representará a distribuição da próxima amostra condicionada à anterior. Para $t=1,\ldots,T$:

\[q(x_t\mid x_{t-1}) =N\!\left(\sqrt{1-\beta_t}\,x_{t-1},\,\beta_t I\right),\]

na qual $\beta_t\in(0,1)$ controla quanto ruído entra no passo. Defina $\alpha_t=1-\beta_t$ e

\[\bar{\alpha}_t=\prod_{s=1}^{t}\alpha_s.\]

Então podemos amostrar $x_t$ diretamente a partir da amostra limpa $x_0$, usando $\varepsilon$ para representar ruído gaussiano padrão:

\[x_t=\sqrt{\bar{\alpha}_t}\,x_0+ \sqrt{1-\bar{\alpha}_t}\,\varepsilon, \qquad \varepsilon\sim N(0,I).\]

O primeiro coeficiente conserva sinal; o segundo injeta ruído. Como seus quadrados somam $1$, uma entrada de variância unitária permanece com variância unitária sob as hipóteses do modelo. Quando $\bar{\alpha}_t$ se aproxima de zero, quase toda informação sobre $x_0$ desaparece.

1.1 De física fora do equilíbrio a um modelo generativo

O nome não nasceu da vaga ideia de “espalhar ruído”. Sohl-Dickstein e colaboradores formularam, em 2015, um processo direto que destrói gradualmente a estrutura dos dados e um processo reverso aprendido, inspirado por termodinâmica fora do equilíbrio. Ho, Jain e Abbeel mostraram em 2020 que uma parametrização simples do ruído, ligada a denoising score matching, produzia imagens de alta qualidade. Rombach e colaboradores, em 2022, moveram o mesmo processo para o espaço de um autoencoder perceptual. A difusão latente é, portanto, a composição histórica de duas ideias anteriores: remoção de ruído probabilística e representação comprimida.

A forma fechada da Seção 1 precisa ser deduzida, não apenas anunciada. Escreva cada passo como

\[x_t=\sqrt{\alpha_t}\,x_{t-1} +\sqrt{1-\alpha_t}\,\varepsilon_t, \qquad \varepsilon_t\sim N(0,I).\]

Para $t=2$, substituímos o primeiro passo:

\[x_2 =\sqrt{\alpha_2\alpha_1}\,x_0 +\sqrt{\alpha_2(1-\alpha_1)}\,\varepsilon_1 +\sqrt{1-\alpha_2}\,\varepsilon_2.\]

A soma dos dois últimos termos é gaussiana, pois é combinação linear de gaussianas independentes. Sua variância é

\[\alpha_2(1-\alpha_1)+(1-\alpha_2) =1-\alpha_1\alpha_2.\]

Logo ela pode ser reescrita como $\sqrt{1-\alpha_1\alpha_2}\,\varepsilon$, com $\varepsilon\sim N(0,I)$. Repetindo o argumento por indução, o coeficiente do sinal torna-se $\sqrt{\prod_{s=1}^{t}\alpha_s}=\sqrt{\bar{\alpha}_t}$ e a variância acumulada do ruído torna-se $1-\bar{\alpha}_t$. É daí, e não de um palpite conveniente, que vem

\[q(x_t\mid x_0) =N\!\left( \sqrt{\bar{\alpha}_t}\,x_0, (1-\bar{\alpha}_t)I \right).\]

Se $x_0$ tem média zero e covariância $I$, então $\operatorname{Cov}(x_t)=\bar{\alpha}_tI+(1-\bar{\alpha}_t)I=I$. A distribuição marginal mantém variância unitária, enquanto a correlação com o original cai como $\sqrt{\bar{\alpha}_t}$. Preservar escala não significa preservar informação.

1.2 Exercícios de lápis e papel

1. Para $\beta_1=0{,}1$ e $\beta_2=0{,}2$, calcule $\alpha_1$, $\alpha_2$ e $\bar{\alpha}_2$.

Solução: Como $\alpha_t=1-\beta_t$,

\[\alpha_1=1-0{,}1=0{,}9, \qquad \alpha_2=1-0{,}2=0{,}8.\]

O produto acumulado é

\[\bar{\alpha}_2=\alpha_1\alpha_2=0{,}9\cdot0{,}8=0{,}72.\]

2. Com os valores anteriores, determine os coeficientes de $x_0$ e de $\varepsilon$ na forma fechada de $x_2$.

Solução: Na forma fechada,

\[x_2=\sqrt{\bar{\alpha}_2}x_0+\sqrt{1-\bar{\alpha}_2}\varepsilon.\]

Como $\bar{\alpha}_2=0{,}72$, os coeficientes são

\[\sqrt{0{,}72}\approx0{,}8485\]

para $x_0$ e

\[\sqrt{1-0{,}72}=\sqrt{0{,}28}\approx0{,}5292\]

para $\varepsilon$. Portanto,

\[x_2\approx0{,}8485x_0+0{,}5292\varepsilon.\]

3. Verifique que $\alpha_2(1-\alpha_1)+(1-\alpha_2)=1-\alpha_1\alpha_2$.

Solução: Distribuindo $\alpha_2$ e cancelando termos,

\[\alpha_2(1-\alpha_1)+(1-\alpha_2) =\alpha_2-\alpha_1\alpha_2+1-\alpha_2 =1-\alpha_1\alpha_2.\]

Com $\alpha_1=0{,}9$ e $\alpha_2=0{,}8$, os dois lados valem $1-0{,}72=0{,}28$.

4. Se $\bar{\alpha}_t=0{,}36$, $x_0=2$ e $\varepsilon=-1$, calcule $x_t$.

Solução: Temos $\sqrt{0{,}36}=0{,}6$ e $\sqrt{1-0{,}36}=\sqrt{0{,}64}=0{,}8$. Logo,

\[x_t =0{,}6\cdot2+0{,}8\cdot(-1) =1{,}2-0{,}8 =0{,}4.\]

5. Para dados de variância $4$, e não $1$, calcule $\operatorname{Var}(x_t)$ em função de $\bar{\alpha}_t$ e explique por que ela já não permanece constante.

Solução: Supondo $x_0$ e $\varepsilon$ independentes, com $\operatorname{Var}(x_0)=4$ e $\operatorname{Var}(\varepsilon)=1$,

\[\operatorname{Var}(x_t) =\bar{\alpha}_t\operatorname{Var}(x_0) +(1-\bar{\alpha}_t)\operatorname{Var}(\varepsilon) =4\bar{\alpha}_t+1-\bar{\alpha}_t =1+3\bar{\alpha}_t.\]

A variância cai de $4$, quando $\bar{\alpha}_t=1$, em direção a $1$, quando $\bar{\alpha}_t$ se aproxima de zero. Ela só permaneceria constante se os dados e o ruído tivessem a mesma variância.

2. Aprender o caminho inverso

O processo reverso verdadeiro depende da distribuição dos dados e não está disponível em forma simples. Uma rede $\varepsilon_\theta(x_t,t)$ aprende a prever o ruído usado na corrupção. A forma simplificada da perda é

\[\mathcal{L}_{\mathrm{noise}} =\mathbb{E}_{x_0,t,\varepsilon} \left\lVert \varepsilon-\varepsilon_\theta(x_t,t) \right\rVert_2^2.\]

Durante a amostragem, começamos de ruído e aplicamos muitas avaliações da rede para caminhar até uma amostra. Diferentes formulações predizem ruído, score, a própria amostra limpa ou velocidade. Elas reorganizam o alvo e a ponderação; não mudam o fato central de que existe um processo iterativo aprendido.

É aqui que difusão e denoising autoencoder parecem parentes. Ambos recebem entrada corrompida e aprendem remoção de ruído. O DDPM, porém, organiza uma família inteira de níveis de ruído e usa o modelo para definir uma cadeia generativa.

2.1 O posterior de um passo

Embora $q(x_{t-1}\mid x_t)$ dependa da distribuição desconhecida dos dados, condicionar também em $x_0$ torna o posterior gaussiano calculável. Denotaremos sua média por $\tilde\mu_t(x_t,x_0)$ e sua variância escalar por $\tilde\beta_t$:

\[q(x_{t-1}\mid x_t,x_0) =N\!\left(\tilde{\mu}_t(x_t,x_0),\tilde{\beta}_tI\right),\]

com

\[\tilde{\beta}_t =\frac{1-\bar{\alpha}_{t-1}} {1-\bar{\alpha}_t}\,\beta_t\]

e

\[\tilde{\mu}_t = \frac{\sqrt{\bar{\alpha}_{t-1}}\beta_t} {1-\bar{\alpha}_t}x_0 + \frac{\sqrt{\alpha_t}(1-\bar{\alpha}_{t-1})} {1-\bar{\alpha}_t}x_t.\]

A média é uma combinação de duas informações: a amostra limpa $x_0$ e a observação ruidosa $x_t$. Na geração, $x_0$ não está disponível. A rede precisa fornecer informação equivalente, diretamente ou por uma parametrização.

Da equação direta,

\[x_0 =\frac{x_t-\sqrt{1-\bar{\alpha}_t}\,\varepsilon} {\sqrt{\bar{\alpha}_t}}.\]

Substituir o ruído verdadeiro por $\varepsilon_\theta(x_t,t)$ fornece uma estimativa $\hat{x}_0$ e, consequentemente, uma média reversa aprendida. Uma forma equivalente, usada na parametrização por ruído, é

\[\mu_\theta(x_t,t) =\frac{1}{\sqrt{\alpha_t}} \left( x_t-\frac{\beta_t}{\sqrt{1-\bar{\alpha}_t}} \varepsilon_\theta(x_t,t) \right).\]

Se $\sigma_t^2$ é a variância escolhida para a transição reversa e $\eta$ é ruído gaussiano padrão independente, o processo generativo amostra

\[x_{t-1} =\mu_\theta(x_t,t)+\sigma_t\eta, \qquad \eta\sim N(0,I),\]

com uma escolha de variância $\sigma_t^2$. No último passo pode-se omitir o ruído adicional. A rede não “apaga ruído” por metáfora; ela parametriza a média de uma transição reversa.

2.2 Da verossimilhança à perda de ruído

O treinamento probabilístico começa com um limite variacional negativo para $\log p_\theta(x_0)$. Após fatorar as cadeias direta e reversa, os termos intermediários tornam-se divergências KL entre gaussianas:

\[D_{\mathrm{KL}} \left( q(x_{t-1}\mid x_t,x_0) \;\middle\|\; p_\theta(x_{t-1}\mid x_t) \right).\]

Se a variância reversa é fixada e a média é parametrizada por $\varepsilon_\theta$, vamos chamar de $w_t$ o peso conhecido que depende do passo $t$. Cada termo reduz a um erro quadrático

\[w_t\left\lVert \varepsilon-\varepsilon_\theta(x_t,t) \right\rVert_2^2.\]

Ho, Jain e Abbeel observaram que retirar os pesos variacionais e amostrar $t$ uniformemente produz a perda simplificada usada na Seção 2. Ela não apareceu por acidente: é uma reponderação prática de um objetivo de máxima verossimilhança. Dizer apenas “a rede prevê ruído” esconde essa origem e também esconde que outras parametrizações, como $x_0$, score ou velocidade, mudam o condicionamento numérico do problema.

2.3 Exercícios de lápis e papel

1. Isole $x_0$ na equação $x_t=\sqrt{\bar{\alpha}_t}x_0+\sqrt{1-\bar{\alpha}_t}\varepsilon$.

Solução: Subtraindo o termo de ruído e dividindo pelo coeficiente do sinal,

\[x_t-\sqrt{1-\bar{\alpha}_t}\varepsilon =\sqrt{\bar{\alpha}_t}x_0,\]

portanto

\[x_0 =\frac{x_t-\sqrt{1-\bar{\alpha}_t}\varepsilon} {\sqrt{\bar{\alpha}_t}}.\]

2. Para $\alpha_t=0{,}9$, $\bar{\alpha}t=0{,}6$, $\beta_t=0{,}1$, $x_t=0{,}5$ e $\varepsilon\theta=-0{,}2$, calcule $\mu_\theta$.

Solução: Aplicando a parametrização por ruído,

\[\mu_\theta =\frac{1}{\sqrt{0{,}9}} \left( 0{,}5- \frac{0{,}1}{\sqrt{1-0{,}6}}(-0{,}2) \right).\]

Como $\sqrt{0{,}4}\approx0{,}63246$,

\[\mu_\theta \approx\frac{0{,}5+0{,}03162}{0{,}94868} \approx0{,}56038.\]

3. Se $\varepsilon=(1,-1)$ e $\varepsilon_\theta=(0{,}8,-0{,}5)$, calcule a perda quadrática sem média.

Solução: O vetor de erro é

\[\varepsilon-\varepsilon_\theta =(1-0{,}8,-1-(-0{,}5)) =(0{,}2,-0{,}5).\]

Sem dividir pelo número de coordenadas, a perda vale

\[\lVert\varepsilon-\varepsilon_\theta\rVert_2^2 =0{,}2^2+(-0{,}5)^2 =0{,}04+0{,}25 =0{,}29.\]

4. Explique por que conhecer $x_t$ não basta para calcular $q(x_{t-1}\mid x_t)$ sem integrar sobre possíveis $x_0$.

Solução: A mesma observação ruidosa $x_t$ pode ter sido produzida por diferentes valores de $x_0$ combinados com diferentes ruídos. O posterior calculável de um passo é $q(x_{t-1}\mid x_t,x_0)$; sem conhecer $x_0$, precisamos ponderar esse posterior por todas as origens compatíveis, segundo $q(x_0\mid x_t)$. Essa distribuição depende da distribuição desconhecida dos dados.

5. Se a rede prevê exatamente o ruído usado no processo direto, mostre por substituição que a estimativa de $x_0$ é exata.

Solução: Se $\varepsilon_\theta=\varepsilon$, a estimativa será

\[\hat{x}_0 =\frac{x_t-\sqrt{1-\bar{\alpha}_t}\varepsilon_\theta} {\sqrt{\bar{\alpha}_t}}.\]

Substituindo $x_t=\sqrt{\bar{\alpha}_t}x_0+\sqrt{1-\bar{\alpha}_t}\varepsilon$,

\[\hat{x}_0 =\frac{\sqrt{\bar{\alpha}_t}x_0 +\sqrt{1-\bar{\alpha}_t}\varepsilon -\sqrt{1-\bar{\alpha}_t}\varepsilon} {\sqrt{\bar{\alpha}_t}} =x_0.\]

3. Trocar pixels por latentes

Na difusão latente, um autoencoder pré-treinado produz $z_0=E(x)$. O processo direto torna-se

\[z_t=\sqrt{\bar{\alpha}_t}\,z_0+ \sqrt{1-\bar{\alpha}_t}\,\varepsilon,\]

e a rede aprende $\varepsilon_\theta(z_t,t,c)$, na qual $c$ representa um condicionamento opcional, como texto ou outra variável externa. Ao final, $D(\hat{z}_0)$ devolve uma imagem.

Considere uma imagem $256\times256\times3$. Com redução espacial $f=4$ e latente de quatro canais, o tensor passa de

\[256\cdot256\cdot3=196\,608\]

valores para

\[64\cdot64\cdot4=16\,384.\]

Isso representa doze vezes menos elementos. O ganho real do denoiser depende de canais internos, arquitetura e atenção, mas as convoluções passam a operar em uma grade cuja área é $1/f^2=1/16$ da original.

A Figura 1 localiza onde essa redução paga juros: o encoder e o decoder aparecem uma vez, enquanto o denoiser percorre o espaço latente em cada um dos $S$ passos.

O encoder comprime a imagem uma vez, o denoiser repete os passos em uma grade latente menor e o decoder reconstrói a imagem ao final

Figura 1: A difusão latente concentra o cálculo repetido do denoiser em uma representação com doze vezes menos valores e um dezesseis avos da área espacial da imagem do exemplo.

Compressão excessiva cobra qualidade. No artigo de difusão latente, fatores espaciais moderados, como $4$ e $8$, ocupam o regime útil; reduzir demais piora o limite de reconstrução. O resultado não é surpresa: o modelo generativo só consegue distribuir massa sobre imagens acessíveis por $D(z)$.

3.1 A razão de compressão, símbolo por símbolo

Se a imagem possui altura $H$, largura $W$ e $C_x$ canais, enquanto o latente reduz cada dimensão espacial por $f$ e usa $C_z$ canais, chamaremos de $n_x$ e $n_z$ as respectivas contagens de escalares:

\[n_x=HWC_x, \qquad n_z=\frac{H}{f}\frac{W}{f}C_z.\]

Chamaremos de $\rho$ a razão de compressão entre entrada e latente:

\[\rho =\frac{n_x}{n_z} =f^2\frac{C_x}{C_z}.\]

Para $f=4$, $C_x=3$ e $C_z=4$, obtemos $\rho=16\cdot3/4=12$, exatamente a conta da Seção 3. Dobrar $f$ de $4$ para $8$ quadruplica a redução espacial, mas não garante quadruplicar a velocidade de toda a rede. Convoluções, atenção, número de canais internos, leituras de memória e o decoder final possuem escalas próprias.

Uma camada convolucional com kernel $k\times k$, $C_{\mathrm{in}}$ canais de entrada e $C_{\mathrm{out}}$ canais de saída executa aproximadamente

\[2HWk^2C_{\mathrm{in}}C_{\mathrm{out}}\]

FLOPs. Reduzir $H$ e $W$ por $f$ divide essa parcela por $f^2$, mantidos os canais. Já a atenção densa sobre $N=HW$ posições contém uma parcela quadrática em $N$; a mesma redução espacial divide esse termo por $f^4$. Essas são razões de componentes, não uma promessa de tempo de parede.

3.2 Condicionamento por atenção cruzada

Na difusão latente condicionada por texto, o contexto $c$ não entra como um rótulo escalar. Um codificador produz a sequência textual $C\in\mathbb{R}^{L\times d_c}$, na qual $L$ é o número de tokens e $d_c$ sua dimensão. Em um bloco de atenção cruzada, as ativações visuais $Y\in\mathbb{R}^{N\times d}$ contêm $N$ posições com $d$ coordenadas e produzem consultas, enquanto o texto produz chaves e valores. Chamaremos de $d_h$ a dimensão usada por cada cabeça:

\[Q=YW_Q,\qquad K=CW_K,\qquad V=CW_V.\]

O resultado é

\[\operatorname{Attn}(Y,C) =\operatorname{softmax} \left(\frac{QK^\top}{\sqrt{d_h}}\right)V.\]

Cada posição latente pode, portanto, combinar informações de todos os tokens do condicionamento. Rombach e colaboradores usaram essa interface para texto, caixas delimitadoras e outras modalidades. A origem da flexibilidade não está na palavra “condicional”, mas no contrato matricial que converte uma sequência externa em chaves e valores consultáveis durante a remoção de ruído.

3.3 Exercícios de lápis e papel

1. Calcule $\rho$ para $f=8$, $C_x=3$ e $C_z=4$.

Solução: Pela definição,

\[\rho=f^2\frac{C_x}{C_z} =8^2\frac34 =64\frac34 =48.\]

O latente contém $48$ vezes menos escalares que a entrada.

2. Uma imagem $512\times512\times3$ é codificada com $f=8$ e $C_z=4$. Calcule a forma do latente e as duas contagens de escalares.

Solução: Cada dimensão espacial é dividida por oito, portanto o latente tem forma

\[64\times64\times4.\]

A imagem contém

\[n_x=512\cdot512\cdot3=786\,432\]

escalares, enquanto o latente contém

\[n_z=64\cdot64\cdot4=16\,384.\]

A razão $786\,432/16\,384=48$ confirma o exercício anterior.

3. Se uma convolução custa $120$ GFLOPs em pixels e apenas a área espacial é reduzida por $f=4$, estime o custo correspondente no latente.

Solução: A área cai pelo fator $f^2=16$. Mantendo os demais fatores,

\[\frac{120}{16}=7{,}5\ \text{GFLOPs}.\]

4. Se a parcela quadrática de atenção custa $64$ unidades antes da redução espacial e $f=2$, estime a nova parcela.

Solução: A redução espacial por $f$ divide a parcela quadrática por $f^4$. Como $2^4=16$,

\[\frac{64}{16}=4\]

unidades de custo.

5. Para $Q\in\mathbb{R}^{16\times64}$ e $K,V\in\mathbb{R}^{10\times64}$, determine os formatos de $QK^\top$ e da saída da atenção.

Solução: Como $K^\top\in\mathbb{R}^{64\times10}$,

\[QK^\top\in\mathbb{R}^{16\times10}.\]

A softmax preserva esse formato. Multiplicando seus $16\times10$ pesos por $V\in\mathbb{R}^{10\times64}$, obtemos

\[\operatorname{Attn}(Y,C)\in\mathbb{R}^{16\times64}.\]

4. Duas perdas, dois contratos

O primeiro estágio aprende reconstrução, usualmente combinando termos de pixel, perceptuais e regularização do latente. O segundo aprende remoção de ruído no espaço fixado:

\[\mathcal{L}_{\mathrm{total}} \neq \mathcal{L}_{\mathrm{rec}}+\mathcal{L}_{\mathrm{noise}}\]

em uma única otimização necessariamente conjunta. Na receita clássica de LDM, o autoencoder é treinado primeiro e congelado para o treino da difusão. Isso evita que o espaço se mova enquanto o denoiser tenta aprendê-lo.

As métricas também não são intercambiáveis. Erro de reconstrução mede o teto do primeiro estágio. Perda de ruído mede o objetivo do segundo. FID, precisão e recall de amostras avaliam propriedades da distribuição gerada. Acurácia de uma sonda mede utilidade de representação. Um número baixo em uma coluna não quita automaticamente as demais.

4.1 O suporte gerado cabe na imagem do decoder

Fixado o decoder $D:\mathcal{Z}\rightarrow\mathcal{X}$, toda amostra final pertence ao conjunto

\[\operatorname{Im}(D) =\{D(z):z\in\mathcal{Z}\},\]

a imagem matemática da função $D$. O denoiser pode aprender uma distribuição excelente sobre $\mathcal{Z}$ e ainda assim nunca produzir uma imagem fora de $\operatorname{Im}(D)$. Se duas imagens $x_a$ e $x_b$ recebem o mesmo código, $E(x_a)=E(x_b)=z$, um decoder determinístico possui uma única saída $D(z)$ e não pode reconstruir ambas exatamente quando $x_a\ne x_b$.

Essa limitação separa dois tipos de erro. O erro de representação já existe quando calculamos $D(E(x))$; o erro generativo aparece quando a distribuição aprendida sobre $z$ não coincide com a distribuição dos códigos reais. Melhorar o denoiser reduz o segundo, não o primeiro. A decomposição não é necessariamente aditiva sob FID ou perdas perceptuais, mas é causalmente útil: identifica qual estágio pode reparar qual falha.

Congelar o autoencoder também estabiliza as coordenadas do alvo. Se $E$ mudasse durante o treinamento, a mesma imagem passaria a ocupar posições latentes diferentes. O denoiser perseguiria uma distribuição móvel. Treino conjunto é possível em outras arquiteturas, mas exige tratar essa coadaptação explicitamente; não é a receita clássica do LDM.

4.2 Exercícios de lápis e papel

1. Se $E(x_a)=E(x_b)$ e $x_a\ne x_b$, prove em uma linha que um decoder determinístico não pode reconstruir ambos exatamente.

Solução: Chamando o código comum de $z$, uma reconstrução exata exigiria simultaneamente

\[D(z)=D(E(x_a))=x_a \quad\text{e}\quad D(z)=D(E(x_b))=x_b,\]

o que implicaria $x_a=x_b$ e contradiz a hipótese $x_a\ne x_b$.

2. Dê um exemplo de função $D:\mathbb{R}\rightarrow\mathbb{R}^2$ e descreva geometricamente $\operatorname{Im}(D)$.

Solução: Considere

\[D(t)=(t,t^2).\]

Sua imagem é

\[\operatorname{Im}(D)=\{(x,y)\in\mathbb{R}^2:y=x^2\},\]

a parábola no plano. Embora o contradomínio seja todo $\mathbb{R}^2$, o decoder só consegue produzir pontos dessa curva.

3. Classifique como erro de representação ou erro generativo: o decoder borra letras mesmo quando recebe códigos reais.

Solução: Trata-se de erro de representação. O defeito já aparece em $D(E(x))$, usando códigos produzidos por imagens reais, portanto pertence ao contrato do primeiro estágio.

4. Classifique como erro de representação ou erro generativo: códigos amostrados concentram-se em uma região rara do latente, mas códigos reais são reconstruídos bem.

Solução: Trata-se de erro generativo. O autoencoder reconstrói bem os códigos reais, mas o segundo estágio aprendeu uma distribuição incorreta e amostra uma região que os dados raramente ocupam.

5. Explique por que reduzir a perda de ruído do segundo estágio não garante reduzir o erro de reconstrução $D(E(x))$.

Solução: Durante o treinamento clássico da difusão latente, $E$ e $D$ permanecem congelados. A perda de ruído ajusta apenas o modelo que distribui probabilidade sobre os códigos. Logo, ela pode melhorar quais valores de $z$ são amostrados, mas não altera a função $D(E(x))$ nem recupera detalhes que o primeiro estágio já descartou.

5. O processo direto em C++23

O código abaixo verifica a forma fechada em um exemplo unidimensional. Fixamos $x_0=0{,}8$, $\varepsilon=-0{,}35$ e $\bar{\alpha}_t=e^{-5t/T}$. O cronograma exponencial é didático; não reproduz uma receita de treinamento específica.

#include <cmath>
#include <iomanip>
#include <initializer_list>
#include <iostream>

double noisy_sample(
    const double clean,
    const double noise,
    const double alpha_bar) {
    return std::sqrt(alpha_bar) * clean
         + std::sqrt(1.0 - alpha_bar) * noise;
}

int main() {
    constexpr double clean = 0.8;
    constexpr double noise = -0.35;
    constexpr int total_steps = 100;

    std::cout << std::fixed << std::setprecision(6);
    for (const int step : {0, 20, 50, 100}) {
        const double alpha_bar =
            std::exp(-5.0 * step / total_steps);
        std::cout << "t=" << step
                  << " alpha_bar=" << alpha_bar
                  << " z_t=" << noisy_sample(clean, noise, alpha_bar)
                  << '\n';
    }
}

A mesma fórmula age elemento a elemento sobre tensores. Em produção, a rede recebe também uma codificação do passo $t$, pois remover pouco ruído perto do início e recuperar sinal quase apagado no fim são problemas diferentes.

No MSVC 19.51, compilamos com cl /std:c++latest /permissive- /W4 /EHsc /utf-8 /O2 forward_diffusion.cpp. O valor começa em z_t=0.800000, cruza 0.206953 no passo 20 e chega a -0.283151 no passo 100. Não deve chegar exatamente ao ruído $-0{,}35$, pois $\bar{\alpha}_{100}=e^{-5}\approx0{,}006738$ ainda conserva uma pequena parcela do sinal.

5.1 Exercícios de rastreamento manual

1. Calcule alpha_bar nos passos $0$, $20$ e $100$ usando $e^{-5t/100}$.

Solução: Substituindo cada passo,

\[\bar{\alpha}_0=e^0=1,\] \[\bar{\alpha}_{20}=e^{-1}\approx0{,}367879\]

e

\[\bar{\alpha}_{100}=e^{-5}\approx0{,}006738.\]

2. Calcule noisy_sample(0.8, -0.35, 1.0) e explique por que o resultado é a entrada limpa.

Solução: Com alpha_bar=1.0,

\[\sqrt1\cdot0{,}8+\sqrt{1-1}\cdot(-0{,}35) =0{,}8.\]

O coeficiente do ruído é zero, portanto somente a entrada limpa permanece.

3. Calcule noisy_sample(0.8, -0.35, 0.0) e explique por que o resultado é o ruído.

Solução: Com alpha_bar=0.0,

\[\sqrt0\cdot0{,}8+\sqrt{1-0}\cdot(-0{,}35) =-0{,}35.\]

O coeficiente do sinal é zero, enquanto o coeficiente do ruído é um.

4. Se noise mudar de $-0{,}35$ para $0{,}35$, determine se o valor do passo $100$ aumenta ou diminui sem executar o programa.

Solução: O ruído é multiplicado por $\sqrt{1-\bar{\alpha}_{100}}$, um coeficiente positivo. Trocar $-0{,}35$ por $0{,}35$ aumenta o resultado em

\[0{,}70\sqrt{1-e^{-5}}>0.\]

Numericamente, o valor passa de aproximadamente $-0{,}283151$ para $0{,}414487$.

5. Explique por que usar o mesmo noise em todos os passos do exemplo ilustra a forma fechada, mas não simula literalmente uma cadeia com novos ruídos independentes a cada transição.

Solução: A forma fechada permite representar o ruído acumulado até cada passo por um único vetor gaussiano $\varepsilon$. O programa fixa esse vetor para mostrar como os coeficientes de sinal e ruído variam com $t$. Em uma simulação literal da cadeia, cada transição usaria um novo $\varepsilon_t$ independente, e o ruído agregado de cada passo não seria a mesma realização fixa.

6. Laboratório: compressão e ruído

Altere o fator espacial e o passo de ruído. O painel mostra a forma do latente, a fração relativa de elementos e a mistura entre sinal e ruído. O “teto de detalhe” é uma ilustração monotônica, não uma métrica de um modelo real; serve para lembrar que custo e reconstrução caminham em direções opostas.

7. CPU, GPU e avaliações repetidas

Uma amostra exige muitas passadas pelo denoiser. Mesmo que cada passada fique mais barata no latente, o custo total multiplica-se pelo número de passos. Em CPUs, convoluções grandes e atenção repetida tornam geração de alta resolução difícil de amortizar. Em GPUs, o latente reduz ativação e tráfego, enquanto lotes e condicionamento alimentam os kernels matriciais.

O gargalo muda durante a amostragem. Camadas convolucionais reutilizam vizinhanças; atenção pode materializar relações quadráticas; decodificação final volta ao espaço de pixels. Medir apenas FLOPs do U-Net e ignorar passos, transferências e o decoder é pagar metade da conta e declarar o jantar barato.

7.1 Latência total e paralelismo disponível

Se uma avaliação do denoiser leva $t_d$, o decoder leva $t_D$ e usamos $S$ passos sequenciais, uma aproximação mínima para a latência de uma amostra é

\[T_{\mathrm{amostra}}\approx S\,t_d+t_D.\]

Com $S=50$, $t_d=12$ ms e $t_D=35$ ms, o total é $635$ ms. Reduzir o denoiser pela metade economiza $300$ ms; reduzir o decoder pela metade economiza apenas $17{,}5$ ms. A parcela repetida recebe a alavanca maior.

Os passos são sequenciais porque $z_{t-1}$ depende da saída calculada em $t$. Dentro de um passo, contudo, convoluções, GEMMs e posições espaciais oferecem paralelismo. A GPU acelera o trabalho interno; não transforma automaticamente a cadeia temporal em cinquenta passos independentes. Na CPU, lotes pequenos e redes largas podem deixar unidades vetoriais subutilizadas, mas aumentar o lote troca latência individual por vazão.

O tráfego também compõe. Se os pesos do denoiser não cabem nas memórias rápidas e precisam ser lidos da memória global a cada passo, a mesma matriz atravessa a hierarquia $S$ vezes. Técnicas de amostragem com menos avaliações atacam essa multiplicação; compressão latente ataca o tamanho das ativações dentro de cada avaliação. São economias em eixos diferentes.

7.2 Exercícios de custo

1. Calcule $T_{\mathrm{amostra}}$ para $S=25$, $t_d=8$ ms e $t_D=20$ ms.

Solução: Aplicando $T_{\mathrm{amostra}}\approx St_d+t_D$,

\[T_{\mathrm{amostra}} =25\cdot8+20 =220\ \text{ms}.\]

2. No exercício anterior, calcule a nova latência se $t_d$ cair em $25\%$.

Solução: Uma redução de $25\%$ leva $t_d$ de $8$ ms para

\[8(1-0{,}25)=6\ \text{ms}.\]

A nova latência será

\[25\cdot6+20=170\ \text{ms}.\]

3. Um denoiser lê $2$ GiB de pesos por passo. Estime o tráfego acumulado em $40$ passos, ignorando cache.

Solução: Sem reutilização entre passos,

\[40\cdot2=80\ \text{GiB}.\]

4. Explique por que duas amostras no mesmo lote podem executar em paralelo, enquanto dois passos consecutivos da mesma amostra não podem.

Solução: Duas amostras distintas não dependem dos estados intermediários uma da outra e podem compartilhar a mesma avaliação em lote. Na mesma amostra, porém, $z_{t-1}$ só existe depois que a avaliação no passo $t$ termina. Essa dependência impede executar os dois passos consecutivos simultaneamente.

5. Um método reduz os passos de $50$ para $10$, mas cada passo fica $1{,}5$ vez mais caro. Calcule o fator de redução do custo repetido.

Solução: Se o custo original de um passo é $c$, o custo repetido original vale $50c$. O novo custo é

\[10\cdot1{,}5c=15c.\]

O fator de redução é

\[\frac{50c}{15c}=\frac{10}{3}\approx3{,}33.\]

O custo repetido cai para $30\%$ do original, uma redução de $70\%$.

8. Por que JEPA não é uma difusão sem decoder

Uma difusão latente precisa de um espaço decodificável porque sua finalidade é gerar amostras. A JEPA, que encontraremos no Artigo 9, prevê uma representação-alvo e não precisa convertê-la em uma imagem. Isso permite que o encoder descarte detalhes que não ajudam a tarefa preditiva, embora não garanta que descartará os detalhes corretos.

O contraste seguro está no objetivo:

\[\text{LDM: modelar e amostrar }z,\qquad \text{JEPA: prever uma representação }s_y.\]

8.1 Exercícios de comparação

1. Classifique como objetivo generativo ou preditivo de representação: estimar $\varepsilon$ para amostrar um latente.

Solução: É um objetivo generativo. A estimativa do ruído parametriza o caminho reverso usado para amostrar um código latente e, depois, produzir uma imagem pelo decoder.

2. Classifique como objetivo generativo ou preditivo de representação: minimizar $\lVert\hat{s}_y-s_y\rVert^2$ sem decoder.

Solução: É um objetivo preditivo de representação. O modelo tenta prever um alvo no espaço de representações e não assume o compromisso de gerar pixels.

3. Explique por que um latente de difusão precisa preservar informação decodificável que uma representação JEPA pode descartar.

Solução: A difusão latente precisa terminar em uma imagem, portanto seu código deve conservar as informações que o decoder usa para reconstruir os detalhes visuais prometidos. Uma JEPA é avaliada pela previsão de uma representação-alvo e pode descartar detalhes que não alteram essa representação, mesmo que fossem necessários para reproduzir cada pixel.

4. Dê um detalhe visual irrelevante para planejamento, mas necessário para reconstrução fiel de pixels.

Solução: A textura decorativa de uma parede pode não alterar transições, recompensas nem ações seguras e, por isso, ser irrelevante para o planejamento. Para reconstruir fielmente os pixels da cena, contudo, o modelo precisa preservar o padrão e as cores dessa textura.

5. Escreva uma condição sob a qual uma representação JEPA também poderia ser usada por um decoder, deixando claro que isso seria uma exigência adicional.

Solução: Uma representação JEPA poderia alimentar um decoder se preservasse informação suficiente para que existisse uma função $D$ com

\[D(f_\theta(x))\approx x\]

segundo uma métrica de reconstrução declarada. Essa propriedade precisaria ser imposta ou verificada por um objetivo adicional de reconstrução; a perda preditiva entre representações, sozinha, não a garante.

No próximo artigo, sairemos da reconstrução e da geração. O SimCLR organizará representações por comparação, aproximando duas views relacionadas e afastando exemplos diferentes.

A difusão latente economiza porque gera em um espaço comprimido. Continua devendo ao decoder cada detalhe que deseja mostrar.

Acrônimos e Abreviações neste artigo

A seguir está a lista de todos os acrônimos e abreviações identificados no texto, organizados em ordem alfabética com o termo original em inglês e a tradução para o português:

Acrônimo / Abreviação Definição em Inglês Tradução em Português
BLAS Basic Linear Algebra Subprograms Subprogramas Básicos de Álgebra Linear
CPU / CPUs Central Processing Unit Unidade Central de Processamento
FLOPs Floating Point Operations Operações de Ponto Flutuante
FP32 32-bit Floating Point Ponto Flutuante de 32 bits
GEMM General Matrix Multiply Multiplicação Geral de Matrizes
GPU Graphics Processing Unit Unidade de Processamento Gráfico
IA Artificial Intelligence Inteligência Artificial
I-JEPA Image Joint-Embedding Predictive Architecture Arquitetura Preditiva de Incorporação Conjunta de Imagem
JEPA Joint-Embedding Predictive Architecture Arquitetura Preditiva de Incorporação Conjunta
KiB Kibibyte Kibibyte
MAE Masked Autoencoder Autocodificador Mascarado
MSE Mean Squared Error Erro Quadrático Médio
MSVC Microsoft Visual C++ Microsoft Visual C++
PCA Principal Component Analysis Análise de Componentes Principais
SIMD Single Instruction, Multiple Data Instrução Única, Múltiplos Dados
SimCLR Simple Framework for Contrastive Learning of Visual Representations Estrutura Simples para Aprendizado Contrastivo de Representações Visuais

Referências

HYVÄRINEN, A. Estimation of Non-Normalized Statistical Models by Score Matching. Journal of Machine Learning Research, v. 6, p. 695-709, 2005. Disponível em: https://www.jmlr.org/papers/v6/hyvarinen05a.html. Acesso em: 29 jul. 2026.

HO, J.; JAIN, A.; ABBEEL, P. Denoising Diffusion Probabilistic Models. Advances in Neural Information Processing Systems, v. 33, 2020. Disponível em: https://papers.nips.cc/paper/2020/hash/4c5bcfec8584af0d967f1ab10179ca4b-Abstract.html. Acesso em: 28 jul. 2026.

ROMBACH, R.; BLATTMANN, A.; LORENZ, D.; ESSER, P.; OMMER, B. High-Resolution Image Synthesis with Latent Diffusion Models. Proceedings of CVPR 2022, p. 10684-10695, 2022. Disponível em: https://openaccess.thecvf.com/content/CVPR2022/html/Rombach_High-Resolution_Image_Synthesis_With_Latent_Diffusion_Models_CVPR_2022_paper.html. Acesso em: 28 jul. 2026.

SOHL-DICKSTEIN, J.; WEISS, E. A.; MAHESWARANATHAN, N.; GANGULI, S. Deep Unsupervised Learning Using Nonequilibrium Thermodynamics. Proceedings of the 32nd International Conference on Machine Learning, p. 2256-2265, 2015. Disponível em: https://proceedings.mlr.press/v37/sohl-dickstein15.html. Acesso em: 29 jul. 2026.

(Updated: )