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 * stdO 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 samplesPor 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
- Autoencoders para aprendizado de representações
- Autoencoders variacionais (VAE)
- GANs: gerador e discriminador
- GANs condicionais e transferência de estilo