Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How to get KL divergence and reconstruction error in VAE #104

Open
tatsuhiko-inoue opened this issue Jan 16, 2020 · 6 comments
Open

How to get KL divergence and reconstruction error in VAE #104

tatsuhiko-inoue opened this issue Jan 16, 2020 · 6 comments

Comments

@tatsuhiko-inoue
Copy link

VAE の学習中に KL divergence や再構成誤差などの損失の一部をそれぞれ独立に確認するにはどのようにすればよいのでしょうか?

@ktaaaki
Copy link
Collaborator

ktaaaki commented Jan 16, 2020

それぞれの損失の一部でevalメソッドを呼び出せばできると思います.
例えばVAE(q, p, regularizer=kl, ...)で定義されたVAEでは,kl.eval(x_dict)-p.log_prob().expectation(q).eval(x_dict)またはStochasticReconstructionLoss(q, p).eval(x_dict)でKL divergenceと再構成誤差が評価できます.

ただしそれぞれの損失のevalでは別々の(確率的な)計算が実行されるため,これを一元化したい場合の実装は現状では困難です.中間結果を明示的にsampleevalメソッドで取り出せばできる場合もあります(中間の変数や損失がすでに定義されている場合など).

@tatsuhiko-inoue
Copy link
Author

回答ありがとうございます。

おっしゃる通り、実行してみたところ、実行した分、Encoder/Decoderも実行されました。
追加の計算なしでの取得は現状、非常に困難という理解でよいでしょうか?

@ktaaaki
Copy link
Collaborator

ktaaaki commented Jan 20, 2020

今回の件については,以下のようにhについての期待値計算を手続き的に実装すればできそうです.

class Decoder(Normal):
   ...

class EncoderBase(Determinisitic):
   def __init__(self):
      super().__init__(cond_var=['x'], var=['h'])
      ...
   ...

def train():
   ...
   p = Decoder()
   q1 = EncoderBase()
   q2 = Normal(var=['z'], cond_var=['h'], ...)
   prior = Normal(...)
   kl = KullbackLeibler(q2, prior)
   reconst = -p.log_prob().expectation(q2)
   ...
   h_dict = q1.sample(x_dict)
   kl_value = kl.eval(h_dict)
   reconst_value = reconst.eval(h_dict)

@tatsuhiko-inoue
Copy link
Author

回答ありがとうございました。

この方法を使ってみようと思います。

ただ、変なことを言うかもしれませんが、せっかくVAEというクラスを用意して頂いているのだから、もっと簡単にかけるとありがたいと考えています。
将来の機能として検討いただけますでしょうか?

@ktaaaki
Copy link
Collaborator

ktaaaki commented Jan 23, 2020

いつのバージョンから取り入れるかはまだ明言できませんが,検討中です.
pixyzの実用的な自由度を広げる上で,貴重なご意見ありがとうございます.

@tatsuhiko-inoue
Copy link
Author

検討いただき、ありがとうございます。
対応をお待ちしています。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants