YutaroOgawa / Deep-Reinforcement-Learning-Book

書籍「つくりながら学ぶ!深層強化学習」のサポートリポジトリです
MIT License
336 stars 157 forks source link

エントロピー項の計算について #11

Open Michi-123 opened 3 years ago

Michi-123 commented 3 years ago

A2C の損失関数は、Criticの損失を最小化し、方策損失とそのエントロピーを最大化するので、方策損失とそのエントロピーにはそれぞれマイナスを掛けて、損失全体は、 value_loss_coef - action_gain - entropy という形になっていると思います.。しかし、Net#evaluate_actions()の中ではエントロピーには既にマイナスを掛けています。これは対数の計算によりマイナス(第4象限)になった値をひっくり返してプラスに変えるためでしょうか?

YutaroOgawa commented 3 years ago

@Michi-123 さま

ご指摘、ご質問ありがとうございます。

これは本書のコードが良くないですね。

6章5節、P. 181 において、

誤差関数の総和 total_loss = (value_loss value_loss_coef -action_gain - entropy entropy_coef)

となっているが、なぜentropyに負の係数がかかっているかという質問と理解しました。

これは、p. 180で、

entropy = -(log_probs * probs).sum(-1).mean()

と計算しており、変数entropyが実際のところ、「エントロピーに-1がかかった負の値」になっているからです。

ですが、わざわざエントロピーの負の値を求めて、係数マイナスでlossに足し算する、という非常に分かりづらく、良くないコードになっています。

本書もだいぶ古くなってきましたので、次回改訂の機会があれば、修正させてください。

貴重なご質問をありがとうございます。

Michi-123 commented 3 years ago

解説ありがとうございました。