Les deux termes de la perte du VAE
Partie 2 · ★★
La perte du VAE est la somme de deux termes : l'erreur de reconstruction (le décodeur rend-il l'image ?) et la KL (la zone reste-t-elle proche de la zone de référence ?). Le premier pousse chaque image à avoir sa zone à elle, bien nette ; le second les ramène toutes vers le même endroit, ce qui supprime les trous.
Compare deux encodages de la même image. A : zone large et centrée (μ = [0,5 ; 0,5], σ = [0,9 ; 0,9]), reconstruction MSE 0,12. B : zone minuscule, loin de 0 (μ = [3 ; 3], σ = [0,05 ; 0,05]), reconstruction MSE 0,01. La MSE est fournie. Calcule la perte totale de chacun et dis lequel le VAE préfère.
Attention à l'échelle : ici la reconstruction est une MSE moyenne par pixel. Dans le notebook elle est sommée sur les 784 pixels : la KL pèse alors bien moins, et ce choix d'échelle peut changer le gagnant.
def kl_dim(mu, sigma): return 0.5 * (mu ** 2 + sigma ** 2 - 1 - math.log(sigma ** 2)) def kl(mus, sigmas): return sum(kl_dim(m, s) for m, s in zip(mus, sigmas)) A = {"mu": [0.5, 0.5], "sigma": [0.9, 0.9], "recon": 0.12} B = {"mu": [3, 3], "sigma": [0.05, 0.05], "recon": 0.01} perte_A = A["recon"] + kl(A["mu"], A["sigma"]) perte_B = B["recon"] + kl(___, ___) meilleur = "A" if perte_A ___ perte_B else "B" terme_anti_trous = "___" # "reconstruction" ou "kl"