【苦しみながら理解する強化学習】Spinning Up 04-1 エクササイズ

Diagonal Gaussian Likelihoodを実装せよ

よし

だから、

log-likelihood

ここをみると、

xはaction、muはmean μ、log_stdは標準偏差のログやって理解できる。

で作ってるから、xmu0.0以上、1.0未満の乱数のbatch_size x dimの配列となる。
でもそれで、[batch, dim]ってわかりにくくないか…
そんなん誤解する。

log_stdは1次元。

んで、πをどうするかムズ…
πはpolicy。
“The policy is trying to maximize reward.”だから、aの一番大きい値にしてみる。

それと、logの底は10だと思うので

これで、標準偏差でるのではないかな。

とまぁ計算方法をみたが、なぜDiagonal Gaussian Likelihoodを求めたいのだろうか。

The two most common kinds of stochastic policies in deep RL are categorical policies and diagonal Gaussian policies.

それは、policyの確率として表される。

Categorical policies can be used in discrete action spaces, while diagonal Gaussian policies are used in continuous action spaces.

連続的なaction spacesの時は、diagonal Gaussian policiesが適用される。

つまりは、行動の種類(x)と、報酬の平均値(mu)、標準偏差のログ(log_std)からpolicyの確率(パラメーター化されたpolicy)として扱うためのdiagonal Gaussian policiesをここでは計算する。

実装

そこで、考えたのがこれ。

ただ、そもそも、tensorをloopできないという。

"Tensor objects are only iterable when eager execution is "

めちゃくちゃ検討違いなことをやってそうなので答えを…見るか!

解答

まず、大前提の参照するべき式は合っていた(当然か)。
しかし、tensorflowの計算方法がダメダメだった。
もうtensorのまま計算できるんだ。便利なんだ。

まぁ、-0.5だろうが、-1/2だろうがそこはどうでもいいだろう。
log_stdの解釈は合っていただが、標準偏差(std)にするときに(tf.exp(log_std)+EPS))
あれ?こうすればいいんだっけ?
そうか、ここのlogはlnなのか…自然対数なのか…
だから、

だっ

しかしこのEPSというめっちゃ小さい数は何だ?
これはオーバーフロー対策なんだな。

たぶん、演算の後ろの桁が答えになるんではないだろうか?
なので、小数点以下8桁で終わらす!

その他は、だいたい合っていたが大きな勘違いを2つしていた。

  1. πはリアルπだった。policyではなく。
  2. Σの計算方法が間違っていた(ヤバイ)。式全体を足すのか…これガチか…Σ()内だけではないのか…ガチか…

次回はちゃんとtensorで計算しよう。

debug方法

pythonのコンソールから

こういう感じにevalを使えばよいらしい。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です