Почему потеря вариационного автоэнкодера во многих реализациях имеет противоположный знак от бумаги?

Я думаю, что понимаю статью Auto-Encoding Variational Bayes. И я читаю некоторые коды тензорного потока, реализующие эту статью. Но я не понимаю их функцию потерь в этих кодах. Поскольку многие коды написаны одинаково, возможно, я ошибаюсь.

Проблема такая. Следующее уравнение взято из документа AEVB. введите здесь описание изображения Функция потерь похожа на это уравнение. Это уравнение можно разделить на две части: член регуляризации и член реконструкции. Поэтому становится

Loss_function = Regularization_term + Reconstruction_term

Однако во многих кодах этот термин регуляризации реализуется с отрицательным знаком, например

Loss_function = -Regularization_term + Reconstruction_term 

Например, в этом коде в 79-й строке показан термин регуляризации. в качестве

KLD = -.5 * tf.reduce_sum(1. + enc_logsd - tf.pow(enc_mu, 2) - tf.exp(enc_logsd), reduction_indices=1)

И потом, это только увеличивает срок Реконструкции.

loss = tf.reduce_mean(KLD + BCE)

Я не понимаю. Знак КЛД противоположен уравнению из статьи. Таких кодов очень много. Я думаю, что ошибаюсь, но я не знаю, что не так. Можете ли вы объяснить, почему это должно быть так?

Коды ссылок: code1, code2, code3


person Minkyu Choi    schedule 08.08.2017    source источник


Ответы (1)


Уравнение (10) представляет собой логарифмическую потерю правдоподобия, которую мы хотим максимизировать. Это эквивалентно минимизации отрицательного логарифмического правдоподобия (NLL). Это то, что функции оптимизации делают на практике. Обратите внимание, что Reconstruction_term уже инвертирован в tf.nn.sigmoid_cross_entropy_with_logits (см. https://github.com/tegg89/VAE-Tensorflow/blob/master/model.py#L96). Нам также нужно отрицать Regularization_term.

Итак, код реализует Loss_function = -Regularization_term + -Reconstruction_term.

person eaksan    schedule 08.08.2017