Normalizing Flows
Fluxos normalizantes mapeiam ruído simples para dados complexos por meio de camadas invertíveis, permitindo que um modelo gere amostras e calcule verossimilhanças exatas. Saiba como funcionam.
Um fluxo normalizante é um modelo de IA generativa que transforma uma distribuição de base simples, geralmente uma distribuição gaussiana padrão, numa distribuição de dados complexa através de uma sequência de funções invertíveis e diferenciáveis. Como cada camada pode ser executada ao contrário e o seu efeito no volume é calculado exatamente, um único fluxo realiza duas tarefas que a maioria dos modelos generativos não consegue combinar: gera novas amostras ao passar ruído para a frente pelas camadas e calcula a verosimilhança exata de um ponto de dados observado ao passá-lo para trás até à distribuição de base. Esteban Tabak e colegas formularam fluxos para estimar densidades em 2010 e 2013, e Danilo Rezende e Shakir Mohamed, da DeepMind, introduziram o termo na aprendizagem profunda com Variational Inference with Normalizing Flows, na ICML de 2015. «Normalizante» refere-se a transformar a distribuição dos dados numa distribuição normal, ou gaussiana, e não tem relação com a normalização por lotes.
Fórmula da mudança de variáveis#
Se uma função invertível f mapeia um ponto de dados x para um ponto latente z = f(x), a log-verosimilhança dos dados é log p(x) = log p_z(f(x)) + log |det J|, em que J é a matriz jacobiana de f e o determinante mede quanto f estica ou comprime o volume em torno de x. Para uma função geral de D variáveis, calcular esse determinante exige uma ordem de D³ operações, demasiado lento para imagens com centenas de milhares de dimensões. Por isso, as camadas de fluxo são concebidas com jacobianas triangulares, cujo determinante é simplesmente o produto dos elementos diagonais. A composição de muitas dessas camadas encadeia as transformações e soma os log-determinantes, e o treino maximiza diretamente a log-verosimilhança dos dados de treino.
A camada de acoplamento afim do RealNVP é o desenho clássico. Metade da entrada passa sem alterações e alimenta uma pequena rede neuronal que define uma escala e um desvio para a outra metade, como nesta camada de PyTorch:
import torch
from torch import nn
torch.manual_seed(0)
# Affine coupling layer (RealNVP): x1 passes through unchanged and sets the scale and shift for x2
net = nn.Sequential(nn.Linear(2, 32), nn.Tanh(), nn.Linear(32, 4))
def coupling(x):
"""Map data x to z and return log|det J|, which is just the sum of the log-scales."""
x1, x2 = x.chunk(2, dim=-1)
log_s, t = net(x1).chunk(2, dim=-1)
return torch.cat([x1, x2 * log_s.exp() + t], dim=-1), log_s.sum(dim=-1)
x = torch.randn(4)
z, log_det = coupling(x)
jacobian = torch.autograd.functional.jacobian(lambda v: coupling(v)[0], x)
print(f"log|det J|: {log_det:.4f} from the formula, {torch.logdet(jacobian):.4f} from the full 4x4 Jacobian")
# Inverse: z1 equals x1, so the same scale and shift can be recomputed and undone
z1, z2 = z.chunk(2)
log_s, t = net(z1).chunk(2)
x_rec = torch.cat([z1, (z2 - t) * (-log_s).exp()])
print(f"Largest reconstruction error: {(x_rec - x).abs().max():.1e}")A fórmula simples e a jacobiana completa dão ambas um log-determinante de 0.1489, e a inversa recupera a entrada com uma diferença de apenas 1.2e-07, devido ao arredondamento float32. A rede dentro da camada nunca precisa de ser invertida, pelo que pode ter complexidade arbitrária.
Arquiteturas de fluxo#
- Fluxos de acoplamento: NICE (2014), de Laurent Dinh e colegas, e RealNVP (2016) alternam a metade transformada, e o Glow (2018), da OpenAI, acrescentou convoluções 1 x 1 invertíveis aprendidas e gerou rostos realistas de 256 x 256. Tanto a amostragem como a avaliação de densidade são rápidas.
- Fluxos autorregressivos: transformam cada dimensão condicionada pelas dimensões anteriores. Os fluxos autorregressivos mascarados avaliam densidades numa só passagem, mas geram amostras uma dimensão de cada vez; os fluxos autorregressivos inversos fazem o contrário. O TarFlow (2024), da Apple, empilha blocos de Transformer autorregressivo sobre recortes de imagem e foi o primeiro fluxo autónomo cujas amostras igualaram a qualidade dos modelos de difusão.
- Fluxos contínuos: definem a transformação como a solução de uma equação diferencial ordinária, eliminando as restrições de desenho das camadas; o FFJORD (2018) acompanha a alteração da log-densidade com um estimador estocástico do traço.
Aplicações#
- Deteção de anomalias: DifferNet (2021), CFLOW-AD e FastFlow ajustam fluxos às características de uma rede neuronal convolucional pré-treinada, usando imagens de produtos sem defeitos, e assinalam como defeituosas as imagens com baixa verosimilhança. Em 2021, o FastFlow comunicou uma AUC de 99.4% na deteção de anomalias no benchmark de inspeção industrial MVTec AD.
- Síntese de fala: o WaveGlow (2018), da NVIDIA, gerou áudio de fala a partir de espetrogramas mel numa única passagem paralela.
- Amostragem científica: os geradores de Boltzmann (2019), de Frank Noé e colegas, amostram estados de equilíbrio de moléculas e proteínas, usando a verosimilhança exata para reponderar as amostras de acordo com a distribuição física real.
Estes detetores modelam características em vez de píxeis por uma razão demonstrada por Eric Nalisnick e colegas em 2019: um modelo Glow treinado com fotografias do CIFAR-10 atribui uma verosimilhança superior a imagens de números de casas do SVHN que nunca viu, uma falha posteriormente atribuída ao facto de os fluxos modelarem mais as correlações locais entre píxeis do que o conteúdo das imagens. Para a deteção de defeitos, a entrada do fluxo pode ser constituída por embeddings de qualquer backbone pré-treinado: o método embed do Ultralytics YOLO26 devolve um vetor de características com pooling médio por imagem, por predefinição da camada imediatamente anterior à cabeça de deteção.
Fluxos normalizantes vs. termos relacionados#
- Correspondência de fluxo e fluxo retificado: treinam um fluxo contínuo por regressão do seu campo de velocidade, sem log-determinante durante o treino, e agora alimentam grandes geradores de imagens.
- Autoencoders variacionais e modelos de difusão: são treinados com um limite inferior da verosimilhança.
- GANs: aprendem a enganar um discriminador e não fornecem qualquer verosimilhança.
- Redes de fluxo generativas (GFlowNets): partilham a palavra «fluxo», mas constroem objetos discretos passo a passo, com probabilidades proporcionais a uma recompensa.










