Redes Neurais Artificiais e Deep Learning · Insper

Redes Adversariais Generativas

A arquitetura perdeu; a perda venceu

Uma perda que não se escreve

Você quer gerar rostos. Qual é a perda?

  • contra um alvo? Não há alvo — e a média de rostos plausíveis é o borrão do capítulo de VAEs.
  • Uma nota de "realismo" escrita à mão? Qualquer uma já escrita é satisfeita por algo que não é um rosto.
  • Goodfellow (2014): pare de escrever a perda — aprenda-a. Uma segunda rede aprende a separar o real do gerado e aquilo que ela usa para separá-los é a medida de realismo.

Dois jogadores, uma função de valor

Uma GAN: o ruído z passa pelo gerador G até uma amostra falsa G(z); as amostras reais x vêm dos dados de treino. O discriminador D recebe as duas e devolve a probabilidade de a entrada ser real. D quer D(x) perto de 1 e D(G(z)) perto de 0; G quer D(G(z)) perto de 1 e o gradiente dele volta através de D. z ~ 𝒩(0, I) ruído G gerador G(z) falsa x real · dados de treino D discriminador D(·) ∈ (0, 1) probabilidade de “real” D quer D(x) → 1 D quer D(G(z)) → 0 G quer D(G(z)) → 1 passo do gerador: o gradiente de D(G(z)) volta através de D até G

Nenhuma das duas redes recebe a definição de "realista". No ótimo e : cara ou coroa.

: média (sobre os dados reais ou sobre o ruído ) · : a distribuição dos dados reais · : a distribuição das amostras · : vale 1/2 em todo ponto.

O que o discriminador aprende

Para um gerador fixo, o melhor discriminador é

De onde vem: em cada , maximiza ; derivada zero dá .

Num ponto em que os dados são 3 vezes mais densos que as amostras do gerador, quanto vale ?

  • : . Densidades iguais dão ; massa do gerador onde não há dados dá .
  • é um estimador de razão de densidades: o gradiente dele aponta o gerador para onde falta massa.

Medido: um treinado contra a fórmula

Laboratório, seção 2: dados = anel de 8 gaussianas (desvio-padrão 0,05); um "gerador" fixo = o mesmo anel com desvio-padrão 0,2.

distância ao centro de um modo (fórmula) (treinado)
0,00 0,941 0,957
0,10 0,710 0,791
0,15 0,191 0,380
0,30 0,000 0,001
  • No centro de um modo os dados são vezes mais densos (o pico de uma gaussiana 2-D de desvio-padrão vale ): .
  • Substituindo : . A perda de é ; a melhor possível aqui, 0,545; a do treinado 0,599.

JS: divergência de Jensen–Shannon, 0 quando as duas distribuições são iguais, quando não se sobrepõem (0,42 aqui, por Monte Carlo).

Os números para ler um treino

No equilíbrio , então:

grandeza no equilíbrio de onde vem
e 0,5 com :
perda do discriminador
perda do gerador

Uma perda do discriminador perto de zero não é progresso: significa que ele separa reais de falsos perfeitamente.

Um passo de treino

  1. Passo do discriminador — lote real com rótulo 1, lote gerado com rótulo 0. Os falsos passam por detach (corta o grafo: o gradiente não chega aos pesos de ), porque este passo não pode mexer em .
  2. Passo do gerador — um lote novo de falsos, avaliado por ; quer que eles sejam chamados de reais.
  3. Repita. Opcionalmente, passos do discriminador por passo do gerador.

Duas redes, dois otimizadores, dois objetivos opostos. É um jogo, não uma otimização: cada perda é medida contra um adversário que não para de se mover.

Duas perdas do gerador, um ponto fixo

Com (: o logit, a saída de antes da sigmoide), o gradiente em relação a :

perda gradiente em
minimax (2014): minimizar ?
não saturante: minimizar ?

O discriminador rejeita um falso com . Preencha a coluna: qual perda empurra mais forte?

Para conferir os gradientes: .

Duas perdas do gerador · resposta

perda gradiente: de onde vem em
minimax
não saturante
  • Razão : a não saturante empurra 99 vezes mais forte, exatamente quando o gerador está perdendo.
  • Em geral a razão é , que cresce sem limite quando .
  • Mesmo ponto fixo: as duas querem alto. O próprio artigo de 2014 recomenda a segunda.

Simulador · um passo de treino, linha a linha

reais x ruído z D: w, b G: a, c

Medido: a saturação e o que o Adam faz com ela

Discriminador com 300 passos de vantagem, depois o gradiente do gerador sob cada perda (laboratório, seções 4 e 8):

anel DCGAN no MNIST
depois da vantagem 0,0001 0,0005
razão por falso, ≈ 10 000 ≈ 2 000
medido: ‖∇G‖ não saturante / minimax ≈ 8 000× ≈ 1 900×
  • Gerador com SGD: a minimax não sai do lugar (; distância média dos falsos ao modo mais próximo 1,91 → 1,91). A não saturante: 1,91 → 0,68.
  • Com Adam as duas se movem (minimax 1,91 → 0,29, não saturante 1,91 → 0,39): o Adam é invariante à escala do gradiente, então esconde a saturação.

‖∇G‖: norma do gradiente em relação a todos os pesos de , num lote de falsos; mistura falsos com diferentes, por isso fica abaixo da razão por falso. DCGAN: GAN convolucional profunda, montada no slide 22 · MNIST: imagens 28 × 28 de dígitos escritos à mão.

Simulador · uma GAN no seu navegador

O que o treino vê vs. o que está acontecendo

O que o treino vê: , parado perto de 0,5.

O que está acontecendo: a cobertura (quantos dos 8 modos do anel recebem amostras), medida à parte por código que o laço nunca roda.

Oito execuções com os ajustes padrão, a mesma linha laranja: 7, 5, 8, 6, 6, 8, 8, 8 modos.

Uma GAN não tem perda que se possa ler: sem early stopping, sem comparar execuções pelas curvas, sem saber se um checkpoint é melhor sem uma métrica separada.

É por isso que a difusão — uma perda de regressão comum, que desce — a substituiu.

Lendo as curvas

A perda do discriminador cai para 0,05, a do gerador sobe para 6. Boa notícia?

  • Não: o discriminador vence de lavada. Perda de → : quase todo falso é rejeitado.
  • Equilibrado é e .
  • As curvas não descem num treino saudável: cada jogador persegue um alvo em movimento.
  • E curvas equilibradas não significam boas amostras — próximo slide.

Colapso de modos

Por que o objetivo permite um gerador que faz só poucas saídas?

  • Nada nele premia diversidade: cada falso é avaliado sozinho.
  • Se uma saída engana o atual, pôr toda a massa ali reduz a perda de .
  • Até alcançá-lo — e saltar para o próximo lugar aceito.
  • Comportamento como o da KL reversa (divergência de Kullback–Leibler) do capítulo de modelos generativos, : pune falsos fora dos dados, não pune modos esquecidos. Busca modos, não cobre massa.

Medido: colapso provocado, invisível, corrigido

Laboratório, seção 5: o anel, 2 000 passos, três sementes cada.

configuração modos (3 sementes) perda D
equilibrada: as duas com 7, 8, 7 0,45–0,47 1,24–1,42
D lento: (5× menor) 0, 0, 0 0,48–0,51 1,32–1,43
D lento, 6, 8, 7 0,47–0,50 1,22–1,32
  • D lento: todas as amostras num aglomerado entre dois modos, arrastado pelo anel.
  • As curvas dele parecem mais equilibradas que as das execuções que funcionam.

lr: taxa de aprendizado do Adam · : passos de por passo de · modos: quantos dos 8 recebem amostras, medidos à parte.

Por que há amostras entre os modos

  • é uma função contínua de .
  • Uma função contínua leva um conjunto conexo a um conjunto conexo.
  • Para alcançar 8 modos separados ela precisa esticar pontes entre eles — algumas amostras caem nas pontes.
  • Com um latente 1-D a saída inteira é uma curva.
  • No painel: 2 de 8 modos, 57% das amostras fora dos dados — a mais de 3 desvios-padrão de todo modo (nossa execução).
  • Com latente 2-D: de 18% a 52% ainda fora dos dados.

Os modos de falha, nomeados

falha como aparece por quê
colapso de modos poucas saídas, seja qual for nada premia diversidade
gradiente some trava, venceu completo demais
oscilação qualidade sobe, cai, sobe jogos não precisam convergir
overfitting de D a qualidade melhora e depois piora decora o conjunto de treino

As correções que ficaram — WGAN-GP, norma espectral, R1, ADA — fazem uma coisa só: impedem o discriminador de ficar afiado demais.

WGAN-GP: GAN de Wasserstein com penalidade de gradiente, sobre o gradiente do discriminador (lá chamado de crítico) · norma espectral: limita o quanto pode variar · R1: penaliza o gradiente de nos dados reais · ADA: augmentation adaptativa no que vê.

Por que a JS não dá direção e o que a WGAN mudou

  • Contra um ótimo, o gerador minimiza .
  • No começo as duas distribuições não se sobrepõem. Aí a JS — estejam os falsos a um milímetro ou a um quilômetro.
  • Uma superfície de perda plana não dá direção nenhuma ao gerador.
  • WGAN: a distância de Wasserstein (do transportador de terra) continua crescendo com a distância. O crítico dela precisa ser 1-Lipschitz → penalidade de gradiente (WGAN-GP), normalização espectral.

Por que : , com ; sem sobreposição, onde vive (e onde vive), então cada KL vale . 1-Lipschitz: .

GAN Lab · o que está na tela

Kahng et al., IEEE VIS 2018 — uma GAN interativa treinada ao vivo no navegador sobre dados 2-D.

elemento nesta aula
pontos verdes / roxos amostras reais e geradas
mapa de calor ao fundo — uma estimativa de ; cinza onde
a grade deformada (manifold) como função do quadrado de ruído; mais escuro = mais denso
linhas rosa a direção em que o gradiente de empurra cada falso
barras de perda vs. Metrics (KL, JS) o que o treino vê vs. uma medida feita à parte

GAN Lab · vá e experimente

  1. Anel, play: veja o mapa desbotar para cinza conforme os falsos cobrem os dados.
  2. Passo a passo: atualize só uma dúzia de vezes — os falsos sobem para o verde e passam do ponto. Depois só .
  3. Não convergência: as duas taxas lá em cima; depois baixe uma de cada vez. Qual para a oscilação?
  4. Colapso: disjoint com mais camadas e neurônios; ou o anel com ruído 1D.
  5. Reequilibre: atualizações de por época, a razão entre as taxas, log loss vs. LeastSq. Julgue pelas amostras e pela JS, não pelas perdas.

abrir o GAN Lab →

Uma DCGAN no MNIST

DCGAN: GAN convolucional profunda. Ampliar + convoluir (o capítulo de CNNs: convoluções transpostas deixam um padrão de xadrez).

gerador saída discriminador saída
64 imagem 1 × 28 × 28
Linear(64, 6272) + BN + ReLU 128 × 7 × 7 Conv2d(1, 32, 4, 2, 1) + LReLU 32 × 14 × 14
Upsample + Conv2d(128, 64, 3, 1, 1) + BN + ReLU 64 × 14 × 14 Conv2d(32, 64, 4, 2, 1) + BN + LReLU 64 × 7 × 7
Upsample + Conv2d(64, 32, 3, 1, 1) + BN + ReLU 32 × 28 × 28 Linear(3136, 1) 1 logit
Conv2d(32, 1, 3, 1, 1) + Tanh 1 × 28 × 28

Conv2d(entram, saem, k, passo, padding) · BN: BatchNorm · LReLU: LeakyReLU · Upsample dobra altura e largura · saídas em canais × altura × largura.

Lado em : , . Em : pelo Upsample; cada 3×3 com padding 1 mantém o lado. , .

Três épocas passos do gerador (lote de 128).

DCGAN · de onde vêm os parâmetros

camada conta parâmetros
Linear(64, 6272) + BN 420 224
Conv2d(128, 64, 3, 1, 1) + BN 73 920
Conv2d(64, 32, 3, 1, 1) + BN 18 528
Conv2d(32, 1, 3, 1, 1) 289
gerador 512 961
Conv2d(1, 32, 4, 2, 1) 544
Conv2d(32, 64, 4, 2, 1) + BN 32 960
Linear(3136, 1) 3 137
discriminador 36 641

Conv: , a fórmula do capítulo de CNNs · Linear: entradas · saídas + saídas · BN: 2 por canal (escala e deslocamento) · Upsample, ReLU, LReLU e Tanh: nenhum.

Medido: o que a perda não diz

Juiz: uma CNN treinada no MNIST real (acurácia de teste 0,979), sobre 2 000 amostras.

perda D / perda G confiante classes efetivas
imagens reais de teste — — 0,91 9,94
DCGAN, 3 épocas 0,99 / 1,22 0,33 0,48 8,71
a mesma, D lento (, 10× menor) 1,40 / 0,69 0,50 0,38 7,85
  • A DCGAN faz todos os dígitos, de forma desigual: 38 seis em 2 000 (uma equilibrada: 2 000/10 = 200).
  • A execução com D lento tem as curvas "perfeitas" (1,40 e 0,69, os números do equilíbrio) — e as amostras piores.

confiante: fração das amostras que o juiz rotula com probabilidade acima de 0,9 · classes efetivas: , com a entropia e a saída média do juiz — 10 se os dígitos saem por igual, 1 se sai um só.

A linhagem, em resumo

modelo a contribuição
DCGAN (2015) jogadores convolucionais, regras que tornaram o treino reprodutível
GAN condicional (2014) um rótulo nas duas redes
pix2pix / CycleGAN (2017) tradução imagem-para-imagem, até sem pares
WGAN / WGAN-GP (2017) outra distância, uma perda que acompanha a qualidade
StyleGAN 1–3 (2019–21) os melhores rostos de GAN; o latente editável
GigaGAN (2023) texto-para-imagem, 0,13 s por imagem de 512 px — depois de a área ter migrado

Onde a perda adversarial vive em 2026

onde o que o discriminador faz
decodificador do VAE da difusão latente pune o borrão da perda de reconstrução (receita do VQGAN: reconstrução + perceptual + adversarial, capítulo de VAE)
super-resolução Real-ESRGAN: uma imagem pequena, muitas respostas nítidas
vocoders neurais HiFi-GAN: espectrograma → forma de onda
destilação em 1–4 passos ADD (destilação adversarial de difusão), SDXL-Turbo: "parece real", não "casa com a média do professor"
adaptação de domínio features das quais não se lê o domínio

Use quando o alvo é uma entre muitas respostas válidas e a média delas é ela mesma uma resposta ruim.

Laboratório · o jogo, medido

Notebook no Colab, ~2 h. Anel de 8 gaussianas na CPU, depois MNIST numa GPU T4. Cada seção termina num checkpoint.

  1. o anel e um medidor de cobertura
  2. o discriminador ótimo, medido
  3. uma GAN no anel; lendo as curvas
  4. minimax × não saturante, SGD × Adam
  5. colapso de modos: provocado, invisível, corrigido
  1. uma DCGAN no MNIST
  2. quais dígitos? um classificador como juiz
  3. a saturação, em imagens
  4. sua vez: quebre a DCGAN, conserte e confira o que as curvas diziam

abrir no Colab →

Para levar

  1. Uma GAN aprende a própria perda. O discriminador ótimo é a razão de densidades .
  2. A perda do gerador de 2014 satura; a não saturante tem o mesmo ponto fixo e, na GAN do MNIST depois de uma vantagem inicial, um gradiente ~1 900× maior.
  3. Não há perda que se possa ler: com 8 modos e com 0. A cobertura é medida à parte.
  4. O colapso de modos é permitido pelo objetivo; um par desequilibrado o provoca e reequilibrar o corrige.
  5. Toda correção que ficou impede o discriminador de ficar afiado demais.
  6. A arquitetura perdeu para a difusão; a perda adversarial continua viva onde a resposta é uma entre muitas.

Roteiro: (1) uma perda que não se escreve e os dois jogadores; (2) o que o discriminador aprende; (3) as duas perdas do gerador; (4) o painel: o que o treino vê vs. o que acontece; (5) colapso de modos, provocado e corrigido; (6) GAN Lab; (7) uma DCGAN no MNIST, medida; (8) onde a perda adversarial vive em 2026. Fecha com o laboratório no Colab.

O D treinado chega perto e é mais suave na borda: uma rede finita treinada por um tempo finito.

Caso inicial = o slide anterior: D rejeita o primeiro falso com D(G(z)) = 0,01. Avançar linha a linha: p_d = 0,0295 (perto de zero: D está vencendo) e o passo do próprio D é minúsculo. Na última linha: σ − 1 = −0,99, c vai de −1,00 para −0,71. Trocar para minimax: −σ = −0,01, c só chega a −0,99; por falso 99× (e 30×). Depois "longa vantagem" (razão ≈ 9 900, como no lab), "equilíbrio" (1,386 e 0,693, nada se move) e "D enganado" (os falsos andam para a esquerda, para onde D diz real, não para os dados).

Primeiro o padrão: aponte a linha laranja (D(G(z))) perto de 0,5 e a linha verde (cobertura). Depois dimensão latente 1: 2 de 8 modos na nossa execução, linha laranja igual. Depois retreine com os mesmos ajustes algumas vezes. A minimax treina aqui porque D nunca abre muita vantagem.

Cerca de 20 minutos. A página tem a mesma sessão, passo a passo, ligada às seções do capítulo.