Nenhuma das duas redes recebe a definição de "realista". No ótimo
Para um gerador fixo, o melhor discriminador é
De onde vem: em cada
Num ponto em que os dados são 3 vezes mais densos que as amostras do gerador, quanto vale
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 | ||
|---|---|---|
| 0,00 | 0,941 | 0,957 |
| 0,10 | 0,710 | 0,791 |
| 0,15 | 0,191 | 0,380 |
| 0,30 | 0,000 | 0,001 |
JS: divergência de Jensen–Shannon, 0 quando as duas distribuições são iguais,
No equilíbrio
| grandeza | no equilíbrio | de onde vem |
|---|---|---|
| 0,5 | ||
| perda do discriminador | ||
| perda do gerador |
Uma perda do discriminador perto de zero não é progresso: significa que ele separa reais de falsos perfeitamente.
detach (corta o grafo: o gradiente não chega aos pesos de 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.
Com
| perda | gradiente | em |
|---|---|---|
| minimax (2014): minimizar |
? | |
| não saturante: minimizar |
? |
O discriminador rejeita um falso com
Para conferir os gradientes:
| perda | gradiente: de onde vem | em |
|---|---|---|
| minimax | ||
| não saturante |
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 | |
|---|---|---|
| 0,0001 | 0,0005 | |
| razão por falso, |
≈ 10 000 | ≈ 2 000 |
| medido: ‖∇G‖ não saturante / minimax | ≈ 8 000× | ≈ 1 900× |
‖∇G‖: norma do gradiente em relação a todos os pesos de
O que o treino vê:
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.
A perda do discriminador cai para 0,05, a do gerador sobe para 6. Boa notícia?
Por que o objetivo permite um gerador que faz só poucas saídas?
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: |
0, 0, 0 | 0,48–0,51 | 1,32–1,43 |
| D lento, |
6, 8, 7 | 0,47–0,50 | 1,22–1,32 |
lr: taxa de aprendizado do Adam ·
| falha | como aparece | por quê |
|---|---|---|
| colapso de modos | poucas saídas, seja qual for |
nada premia diversidade |
| gradiente some | trava, |
|
| oscilação | qualidade sobe, cai, sobe | jogos não precisam convergir |
| overfitting de D | a qualidade melhora e depois piora |
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
Por que
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 | |
| a grade deformada (manifold) | |
| linhas rosa | a direção em que o gradiente de |
| barras de perda vs. Metrics (KL, JS) | o que o treino vê vs. uma medida feita à parte |
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 Upsample; cada 3×3 com padding 1 mantém o lado.
Três épocas
| 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: Upsample, ReLU, LReLU e Tanh: nenhum.
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 ( |
1,40 / 0,69 | 0,50 | 0,38 | 7,85 |
confiante: fração das amostras que o juiz rotula com probabilidade acima de 0,9 · classes efetivas:
| 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 |
| GigaGAN (2023) | texto-para-imagem, 0,13 s por imagem de 512 px — depois de a área ter migrado |
| 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.
Notebook no Colab, ~2 h. Anel de 8 gaussianas na CPU, depois MNIST numa GPU T4. Cada seção termina num checkpoint.
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.