Estou treinando um autoencoder variacional condicional em um conjunto de dados de faces. Quando eu defino minha Perda de KLL igual ao meu termo de Perda de reconstrução, meu autoencoder parece incapaz de produzir amostras variadas. Eu sempre recebo os mesmos tipos de rosto aparecendo:
Essas amostras são terríveis. No entanto, quando diminuo o peso da perda de KLL em 0,001, recebo amostras razoáveis:
O problema é que o espaço latente aprendido não é suave. Se eu tentar executar uma interpolação latente ou gerar uma amostra aleatória, fico com lixo. Quando o termo KLL tem um peso pequeno (0,001), observo o seguinte comportamento de perda: Observe que o VggLoss (o termo de reconstrução) diminui, enquanto o KLLoss continua a aumentar.
Também tentei aumentar a dimensionalidade do espaço latente, mas isso também não funcionou.
Observe aqui, quando os dois termos de perda têm peso igual, como o termo KLL domina, mas não permite que a perda de reconstrução diminua:
Isso resulta em terríveis reconstruções. Existem sugestões sobre como equilibrar esses dois termos de perda ou qualquer outra coisa possível a tentar, para que o meu autoencoder aprenda um espaço latente interpolativo e suave enquanto produz reconstruções razoáveis?
Parece super ajuste. Lembre-se de que a perda de KL no espaço latente corresponde à regularização.
Recentemente me deparei com este artigo:β -VAE: Aprendendo conceitos visuais básicos com uma estrutura variacional restrita (na verdade, usa seu conjunto de dados em um exemplo).
Do papel (β é o parâmetro que você alterou):
fonte