cara menghitung kehilangan KLD vs kehilangan rekonstruksi dalam auto-encoder variasional

26

di hampir semua contoh kode yang pernah saya lihat dari VAE, fungsi kerugian didefinisikan sebagai berikut (ini adalah kode tensorflow, tapi saya pernah melihat yang serupa untuk theano, obor dll. Ini juga untuk convnet, tetapi itu juga tidak terlalu relevan , hanya mempengaruhi sumbu jumlah yang diambil alih):

# 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)

Namun rentang numerik dari kl_loss dan rec_loss sangat tergantung pada redup ruang laten dan ukuran fitur input (misalnya resolusi piksel). Apakah masuk akal untuk mengganti pengurangan_sum dengan mengurangi_maksud untuk mendapatkan per z-redup KLD dan per piksel (atau fitur) LSE atau BCE? Lebih penting lagi, bagaimana kita menghitung kerugian laten dengan kehilangan rekonstruksi saat menjumlahkan untuk kerugian akhir? Apakah ini hanya trial and error? atau adakah teori (atau setidaknya aturan praktis) untuk itu? Saya tidak dapat menemukan info tentang ini di mana pun (termasuk kertas asli).


Masalah yang saya alami, adalah bahwa jika keseimbangan antara fitur input saya (x) dimensi dan ruang laten (z) dimensi tidak 'optimal', baik rekonstruksi saya sangat baik tetapi ruang laten yang dipelajari tidak terstruktur (jika x dimensi sangat tinggi dan kesalahan rekonstruksi mendominasi di atas KLD), atau sebaliknya (rekonstruksi tidak bagus tetapi ruang laten yang dipelajari terstruktur dengan baik jika KLD mendominasi).

Saya menemukan diri saya harus menormalkan kembali kehilangan rekonstruksi (membaginya dengan ukuran fitur masukan), dan KLD (membaginya dengan dimensi z) dan kemudian secara manual menimbang istilah KLD dengan faktor bobot yang berubah-ubah (Normalisasi adalah agar saya dapat menggunakan yang sama atau berat serupa tidak tergantung pada dimensi x atau z ). Secara empiris saya telah menemukan sekitar 0,1 untuk memberikan keseimbangan yang baik antara rekonstruksi dan ruang laten terstruktur yang terasa seperti 'sweet spot' bagi saya. Saya mencari pekerjaan sebelumnya di bidang ini.


Atas permintaan, notasi matematika di atas (berfokus pada kehilangan L2 untuk kesalahan rekonstruksi)

L.lSebuahtent(saya)=-12j=1J(1+log(σj(saya))2-(μj(saya))2-(σj(saya))2)

L.recHain(saya)=-k=1K(yk(saya)-xk(saya))2

L.(m)=1M.saya=1M.(L.lSebuahtent(saya)+L.recHain(saya))

di mana adalah dimensi vektor laten (dan mean dan varians ) yang sesuai, adalah dimensi fitur input, adalah ukuran mini-batch, superscript menunjukkan data ke- point dan adalah kerugian untuk mini-batch ke- .Jzμσ2KM.(saya)sayaL.(m)m

memo
sumber

Jawaban:

17

Bagi siapa pun yang tersandung pada posting ini juga mencari jawaban, utas twitter ini telah menambahkan banyak wawasan yang sangat berguna.

Yaitu:

beta-VAE: Mempelajari Konsep Visual Dasar dengan Kerangka Kerja Variabel Terbatas

membahas pertanyaan persis saya dengan beberapa percobaan. Menariknya, tampaknya (yang mirip dengan bobot KLD yang dinormalisasi) juga berpusat di sekitar 0,1, dengan nilai yang lebih tinggi memberikan ruang laten lebih terstruktur dengan biaya rekonstruksi yang lebih buruk, dan nilai yang lebih rendah memberikan rekonstruksi yang lebih baik dengan lebih sedikit terstruktur ruang laten (meskipun fokus mereka secara khusus pada pembelajaran representasi terurai ).βnHairm

dan bacaan terkait (di mana masalah serupa dibahas)

memo
sumber
7

Saya ingin menambahkan satu makalah lagi yang berkaitan dengan masalah ini (saya tidak dapat berkomentar karena reputasi saya yang rendah saat ini).

Dalam ayat 3.1 makalah, penulis menetapkan bahwa mereka gagal untuk melatih implementasi langsung VAE yang sama-sama membobot kemungkinan dan perbedaan KL. Dalam kasus mereka, kerugian KL berkurang hingga nol, meskipun diharapkan memiliki nilai yang kecil. Untuk mengatasinya, mereka mengusulkan untuk menggunakan "KL cost annealing", yang perlahan-lahan meningkatkan faktor bobot istilah divergensi KL (kurva biru) dari 0 ke 1.

Gambar 2. Bobot istilah KL divergensi dari batas bawah variasional sesuai dengan jadwal anil sigmoid khas yang diplot di samping nilai (tidak tertimbang) istilah KL divergensi untuk VAE kami pada Penn TreeBank.

Solusi penyelesaian ini juga diterapkan di Ladder VAE.

Kertas:

Bowman, SR, Vilnis, L., Vinyals, O., Dai, AM, Jozefowicz, R. dan Bengio, S., 2015. Menghasilkan kalimat dari ruang kontinu . arXiv preprint arXiv: 1511.06349.

Cuong
sumber