Bir VAE'yi gördüğüm neredeyse tüm kod örneklerinde, kayıp işlevleri şu şekilde tanımlanır (bu tensorflow kodudur, ancak theano, torch vb. için de benzer şekilde gördüm. , sadece toplamların alındığı ekseni etkiler):
# latent space loss. KL divergence between latent space distribution and unit gaussian, for each batch.
# first half of eq 10. in https://arxiv.org/abs/1312.6114
kl_loss = -0.5 * tf.reduce_sum(1 + log_sigma_sq - tf.square(mu) - tf.exp(log_sigma_sq), axis=1)
# reconstruction error, using pixel-wise L2 loss, for each batch
rec_loss = tf.reduce_sum(tf.squared_difference(y, x), axis=[1,2,3])
# or binary cross entropy (assuming 0...1 values)
y = tf.clip_by_value(y, 1e-8, 1-1e-8) # prevent nan on log(0)
rec_loss = -tf.reduce_sum(x * tf.log(y) + (1-x) * tf.log(1-y), axis=[1,2,3])
# sum the two and average over batches
loss = tf.reduce_mean(kl_loss + rec_loss)
Bununla birlikte, sayısal kl_loss ve rec_loss aralığı, sırasıyla boşluk boşlukları ve giriş özelliklerinin boyutuna (örneğin piksel çözünürlüğü) bağlıdır. Z-dim KLD başına ve piksel başına (veya özellik) LSE veya BCE elde etmek için reduc_sum'ları reduc_mean ile değiştirmek mantıklı olur mu? Daha da önemlisi, nihai zararı bir araya getirirken gizli kaybı yeniden yapılanma kaybıyla nasıl ağırlıklandırırız? Sadece deneme yanılma mı? veya bunun için bir teori (veya en azından temel kural) var mı? Bu konuda hiçbir bilgi bulamadım (orijinal makale dahil).
Karşılaştığım mesele, eğer giriş özelliği (x) boyutları ve gizli boşluk (z) boyutları arasındaki denge 'optimum' değilse, yeniden yapılanmamın çok iyi olduğu ancak öğrenilen gizli alanın yapılandırılmamış olduğu (x boyutları ise) çok yüksektir ve yeniden yapılanma hatası KLD'ye egemendir) ya da tam tersi (yeniden yapılandırmalar iyi değildir ancak öğrenilen gizli alan KLD egemen olduğunda iyi yapılandırılmıştır).
Yeniden yapılanma kaybını (giriş özellik boyutuna göre bölme) ve KLD'yi (z boyutlarına bölme) normalleştirmek zorunda olduğumu ve ardından KLD terimini isteğe bağlı bir ağırlık faktörü ile manuel olarak ağırlıklandırmak için kendimi buldum x veya z boyutlarından bağımsız olarak benzer ağırlık ). Ampirik olarak yeniden yapılandırma ile bana 'tatlı bir nokta' gibi hissettiren yapılandırılmış gizli alan arasında iyi bir denge sağlamak için 0.1 civarında buldum. Bu alanda önceki çalışmaları arıyorum.
Talep üzerine yukarıdaki matematik notasyonu (yeniden yapılanma hatası için L2 kaybına odaklanmak)
burada , latent vektör boyutluluğu olan (ortalama karşılık gelen ve varyans ), , giriş özellikleri boyutluluğu olan mini parti boyutu, üst anlamına gelir inci verileri point ve , . mini toplu işleminin kaybıdır .z u σ 2 K M ( I ) i L ( m ) m