0Pricing
Learn AI with Python · Aula

Autoencoders variacionais (VAE)

Perda ELBO, truque de reparametrização, exploração do espaço latente e geração de imagens com VAE.

Autoencoders variacionais (VAE) é uma aula grátis de Learn AI with Python no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Learn AI with Python, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Learn AI with Python inclui 4 aulas no total.

Do codificador automático ao VAE

Um codificador automático comum aprende pontos espalhados, portanto a amostragem de novos pontos produz resultados sem sentido. Um codificador automático variacional (VAE) aprende um espaço latente suave e contínuo do qual é possível fazer amostragens, transformando-o em um verdadeiro modelo generativo.

Codificando uma distribuição

Em vez de um único ponto, o codificador VAE produz uma distribuição para cada entrada: uma média mu e uma log-variância log_var. Cada entrada é mapeada para uma pequena região difusa do espaço latente, e não para um único ponto.

class Encoder(nn.Module):
    def __init__(self):
        super().__init__()
        self.fc = nn.Linear(784, 256)
        self.fc_mu = nn.Linear(256, 64)
        self.fc_logvar = nn.Linear(256, 64)

Por que usar a média e a log-variância?

Prevemos log_var em vez da variância diretamente porque esse valor pode ser qualquer número real, sem restrição de positividade, e é numericamente estável. Quando necessário, a exponenciação recupera a variância.

    def forward(self, x):
        h = torch.relu(self.fc(x))
        return self.fc_mu(h), self.fc_logvar(h)

Amostrando o z latente

Para decodificar, precisamos amostrar z da distribuição prevista. Ingenuamente, essa seleção aleatória não é diferenciável, portanto não podemos fazer retropropagação através dela. O truque de reparametrização resolve esse problema.

O truque de reparametrização

Reescreva a amostra como z = mu + eps * exp(0.5 * log_var), em que eps é um ruído aleatório. Agora, a aleatoriedade está em eps (não é necessário calcular seu gradiente), e os gradientes fluem por mu e log_var.

def reparameterize(mu, log_var):
    std = torch.exp(0.5 * log_var)
    eps = torch.randn_like(std)
    return mu + eps * std

O decodificador

O decodificador recebe o z amostrado e reconstrói a imagem, assim como o decodificador de um codificador automático comum, expandindo 64 dimensões novamente para 784 pixels com uma saída Sigmoid.

decoder = nn.Sequential(
    nn.Linear(64, 256),
    nn.ReLU(),
    nn.Linear(256, 784),
    nn.Sigmoid()
)

Termo de perda de reconstrução

A primeira metade da perda do VAE é a reconstrução: o quanto a imagem decodificada corresponde à entrada. Usa-se entropia cruzada binária (ou MSE) nos pixels.

recon_loss = nn.functional.binary_cross_entropy(
    recon, x, reduction="sum"
)

O termo de divergência KL

A segunda metade é a divergência KL, que aproxima cada distribuição codificada de uma normal padrão. Isso regulariza o espaço latente para que ele seja suave e contínuo, permitindo a geração de dados.

kl = -0.5 * torch.sum(1 + log_var - mu.pow(2) - log_var.exp())

O objetivo ELBO

Os VAEs maximizam o ELBO (limite inferior da evidência), o que equivale a minimizar reconstruction + KL. A reconstrução torna as saídas fiéis; a KL mantém o espaço bem estruturado. Equilibrar os dois termos é o ponto central.

loss = recon_loss + kl
loss.backward()

Gerando novas imagens

Como o espaço latente corresponde a uma normal padrão, você pode gerar imagens totalmente novas amostrando z de N(0,1) e decodificando-o, sem precisar de uma imagem de entrada.

with torch.no_grad():
    z = torch.randn(16, 64)
    new_images = decoder(z)  # 16 generated samples

Por que os VAEs são importantes

Os VAEs oferecem um espaço latente fundamentado e suave, no qual é possível interpolar e fazer amostragens. Eles fundamentam muitas técnicas generativas e ensinam a ideia central de aprender distribuições, e não apenas pontos.

Verificação rápida

Teste sua compreensão sobre VAEs.

Recapitulação: codificadores automáticos variacionais

Você aprendeu o VAE: um codificador produz mu e log_var; o truque de reparametrização z = mu + eps * exp(0.5 * log_var) mantém a amostragem diferenciável; e a perda é ELBO = reconstruction + KL. Amostrar z de N(0,1) e decodificá-lo gera novas imagens.

Perguntas Frequentes

A aula “Autoencoders variacionais (VAE)” é grátis?

Sim — o texto completo de “Autoencoders variacionais (VAE)” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Learn AI with Python, atualize para CoddyKit PRO. O curso de Learn AI with Python inclui 4 aulas no total.

O que vou aprender em “Autoencoders variacionais (VAE)”?

Perda ELBO, truque de reparametrização, exploração do espaço latente e geração de imagens com VAE. Você pratica Learn AI with Python com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Learn AI with Python?

Nenhuma experiência prévia é necessária. Learn AI with Python no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Autoencoders variacionais (VAE)”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Learn AI with Python?

Sim. Cada aula de Learn AI with Python inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Autoencoders para aprendizado de representações
  2. Autoencoders variacionais (VAE)
  3. GANs: gerador e discriminador
  4. GANs condicionais e transferência de estilo
← Voltar para Learn AI with Python