質問したいこと
pytorchで評価時に計算したニューラルネットをそのまま訓練時に使えるものでしょうか。またそのメリットはあるのでしょうか。
ニューラルネットの誤差逆伝搬では順伝搬時に計算した各ノードの値を使って重みを更新していたと記憶していますが、順伝搬の計算を評価モードで実行して誤差逆伝搬を訓練モードで行う実装を見て、なんでそんなことをしているのか(その必要があるのか)と思いました。
ソースコード
pytorchによる深層強化学習の実装のBrain#replay
が対象の実装になります。
(issueで質問すべきだとも思いますが作者はみていないっぽいのでこちらで質問することにしました)
具体的には
Brain#__init__
でニューラルネットを実装しています。
このニューラルネットでは入力は4変数のベクトルstate
,出力は要素数2のベクトルaction
(2種類の行動に対する行動価値)となります。
ここでのニューラルネットの実装では
- #3.1で評価モードに切り替え
- #3.2でニューラルネットの順伝搬を実行する
- #3.3でもニューラルネットの順伝搬を実行する。ただしdetachしている
- #3.4で
action
の教師データを取得する - #4.1で訓練モードに切り替える
- #4.2で損失関数を計算する
- #4.3で誤差逆伝搬を実行する。
となっており、#4.*では訓練モードなのに順伝搬の実行がされていません。
なので誤差逆伝搬のための順伝搬の計算は評価モード時の#3.2で実行されているものを使っているのかと考えました。
質問の仕方がくどくなり申し訳ありません。
ご教授いただければと思います。よろしくお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。