майже в усіх прикладах коду, який я бачив у VAE, функції втрат визначаються наступним чином (це тензорфловий код, але я бачив подібне для theano, факела тощо. Це також для convnet, але це також не надто актуально , просто впливає на осі, на які беруться суми):
# 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)
Однак числовий діапазон kl_loss і rec_loss дуже залежить від прихованих димових просторів та розміру вхідної функції (наприклад, роздільної здатності пікселів) відповідно. Чи було б розумним замінити Redu_sum на Redu_mean, щоб отримати за z-dim KLD та за піксель (або функцію) LSE або BCE? Що ще важливіше, як ми зважуємо латентні втрати з втратами на відновлення, коли підсумовуємо разом кінцеву втрату? Це просто проба та помилка? чи є якась теорія (або, принаймні, велике правило) для цього? Я не міг ніде знайти інформацію про це (включаючи оригінальний папір).
Проблема, яка у мене виникає, полягає в тому, що якщо баланс між розмірами моєї вхідної функції (x) та розмірами прихованого простору (z) не є "оптимальним", або мої реконструкції дуже хороші, але засвоєний прихований простір неструктурований (якщо x розміри дуже висока, а помилка відновлення домінує над KLD), або навпаки (реконструкції не є гарними, але засвоєний прихований простір добре структурований, якщо KLD домінує).
Мені здається, що мені доведеться нормалізувати втрати від відновлення (ділення на розмір вхідної характеристики) та KLD (ділення на z розміри), а потім зважувати термін KLD вручну з довільним коефіцієнтом ваги (Нормалізація полягає в тому, що я можу використовувати той самий або аналогічна вага, незалежна від розмірів x або z ). Емпірично я виявив близько 0,1, щоб забезпечити хороший баланс між реконструкцією та структурованим прихованим простором, який мені здається «солодким місцем». Я шукаю попередню роботу в цій галузі.
За запитом, математичне позначення вище (фокус на втраті L2 на помилку відновлення)
де - розмірність латентного вектора z (і відповідне середнє μ і дисперсія σ 2 ), K - розмірність вхідних ознак, M - розмір міні-партії, індекс ( i ) позначає i- ю точку даних і L ( m ) - втрати для m- ї міні-партії.