関数近似としてニューラルネットワークを使用したQ学習
ニューラルネットワークを使用したQラーニングに関する質問のように、QラーニングのQ値を概算するためにニューラルネットワークを使用しようとしています。最初の回答で提案したように、私は出力層に線形活性化関数を使用していますが、非表示層ではまだシグモイド活性化関数を使用しています(2、後で変更できます)。また、アドバイスどおり各アクション出力を返す単一のNNを使用しています。Q(a)Q(a)Q(a) ただし、アルゴリズムは、単純なカートポールバランス問題についてはまだ分岐しています。だから、私のQアップデートが間違っているのを恐れています。初期化後、各ステップで行ったのは次のとおりです。 すべてのアクションのNNの順方向伝搬を使用してを計算します。Qt(st)Qt(st)Q_t(s_t) 新しいアクション選択し、新しい状態ます。atata_tststs_t すべてのアクションに対してNNのフォワードプロパゲーションを使用してを計算します。Qt(st+1)Qt(st+1)Q_t(s_{t+1}) 目標Q値を次のように設定します: だけ現在のアクションのために、A_tと、設定しながらQ_ {T + 1}(S、A_tと)= Q_ {T}(S、A_tとの)他の状態のために。これは問題だと思います。Qt+1(st,at)=Qt(st,at)+αt[rt+1+γmaxaQ(st+1,a)−Qt(st,at)]Qt+1(st,at)=Qt(st,at)+αt[rt+1+γmaxaQ(st+1,a)−Qt(st,at)]Q_{t+1}(s_t,a_t)=Q_t(s_t,a_t)+\alpha_t \left[r_{t+1}+\gamma \max_a Q(s_{t+1},a) - Q_t(s_t,a_t) \right]atata_tQt+1(s,at)=Qt(s,at)Qt+1(s,at)=Qt(s,at)Q_{t+1}(s,a_t)=Q_{t}(s,a_t) エラーベクトルをe=Qtarget−Qt=Qt+1−Qte=Qtarget−Qt=Qt+1−Qt\mathbf{e}=Q_\mathrm{target}-Q_t=Q_{t+1}-Q_t 重み行列を更新するために、NNを介してエラーを逆伝播します。 誰かが私が間違ったことを私に指摘してくれませんか? さらに、入力層と最初の非表示層(つまり、シグモイド関数)にもバイアス項を含める必要があると思いますか?違いはありますか? よろしくお願いします。質問を明確にしたり、必要に応じてコードを共有したりできます。