Open Michi-123 opened 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に足し算する、という非常に分かりづらく、良くないコードになっています。
本書もだいぶ古くなってきましたので、次回改訂の機会があれば、修正させてください。
貴重なご質問をありがとうございます。
解説ありがとうございました。
A2C の損失関数は、Criticの損失を最小化し、方策損失とそのエントロピーを最大化するので、方策損失とそのエントロピーにはそれぞれマイナスを掛けて、損失全体は、 value_loss_coef - action_gain - entropy という形になっていると思います.。しかし、Net#evaluate_actions()の中ではエントロピーには既にマイナスを掛けています。これは対数の計算によりマイナス(第4象限)になった値をひっくり返してプラスに変えるためでしょうか?