barilog

エンジニアリング見習い雑記

VAEの損失関数の符号について

損失関数は最小化するものと一般には理解されていますが,VAEの損失関数は最大化するものとして扱われる場合が多いみたいです.これで混乱してしまう方がよくいます.

 

VAEの損失関数は対数尤度関数を変形したもので,

VAEの損失関数 = ReconstractionError - KLダイバージェンス

と定義される場合が多いです.対数尤度関数ですので最大化することが目的になります.

ただ,計算上VAEの損失関数を最小化するものと定義することも可能みたいです.

ロジスティック回帰では対数尤度関数 ln p(x)にマイナスをかけたものを損失関数としていました.

loss =  - ln p(x)

この場合対数尤度関数を最大化,つまり損失関数を最小化していくのが正しくなります.

VAEではロジスティック回帰と同じようなことをしない場合が多く

対数尤度関数の符号を逆転させません.

よって

VAEの損失関数 = ReconstractionError - KLダイバージェンス

 と定義される場合が多いと考えられます.

 

もし損失関数は最小化しないと気持ち悪い!という場合は単純に

VAEの損失関数 = -ReconstractionError + D_KL

と定義して損失関数を最小化するようにすればいいです.

参考文献

Variational Autoencoder徹底解説

https://qiita.com/kenchin110100/items/7ceb5b8e8b21c551d69a

https://qiita.com/iss-f/items/c43b23815fc6d15ae22e

http://tkengo.github.io/blog/2016/06/04/yaruo-machine-learning5/