1

テーブル ルックアップを使用して、SARSA アルゴリズム (ワンステップと適格性トレースの両方を使用) を正常に実装しました。本質的に、各行が状態に対応し、各列がアクションに対応する q 値マトリックスがあります。

何かのようなもの:

[Q(s1,a1), Q(s1,a2), Q(s1,a3), Q(s1,a4)]
[Q(s2,a1), (Q(s2,a2), Q(s2a3), Q(s2, a2]
.
.
.
[Q(sn,a1), Q(sn,a2), Q(sn,a3), Q(sn,a4)]

各時間ステップで、行列から行が選択され、ポリシーに応じてアクションが選択され、SARSA ルールに従って更新されます。

現在、勾配降下法を使用してニューラル ネットワークとして実装しようとしています。

私の最初の仮説は、2 層ネットワークを作成することでした。入力層には状態と同じ数の入力ニューロンがあり、出力層にはアクションと同じ数の出力ニューロンがあります。各入力は各出力に完全に接続されます。(したがって、実際には、上記のマトリックスのようになります)

私の入力ベクトルは 1xn 行ベクトルで、n は入力ニューロンの数です。現在の状態に対応するインデックスが 1 になることを除いて、入力ベクトルのすべての値は 0 になります。

[0 0 0 1 0 0]

状態 4 のエージェントの入力ベクトルになります。

したがって、プロセスは次のようになります。

[0 0 0 1 0 0] X [ 4 7 9 3]
                [ 5 3 2 9]
                [ 3 5 6 9]
                [ 9 3 2 6]
                [ 2 5 7 8]
                [ 8 2 3 5]

ランダムなサンプルの重み行列を作成した場所。

結果は次のようになります。

[9 3 2 6]

つまり、貪欲なポリシーが選択された場合、アクション 1 が選択され、4 番目の入力ニューロンと最初の出力ニューロンの間の接続が次のように強化されます。

dw = dw_old + learning_rate*(reward + discount*network_output - dw_old)

(SARSA アルゴリズムから取得した式)

ただし、この実装は私を納得させません。私が読んだことによると、ネットワークの重みを使用して状態とアクションのペアの Q 値を計算する必要がありますが、そのような値を表す必要があるかどうかはわかりません。(特に、重みの値が 0 から 1 の間にしか含まれていないことがよくあるためです。)

何かアドバイス?

4

1 に答える 1

2

要約: 出力値を 0 から 1 の間に制限しないことを除いて、現在のアプローチは正しいです。

このページにはすばらしい説明があります。ここで要約します。SARSA について具体的に論じているわけではありませんが、書かれていることはすべて翻訳されるべきだと思います。

結果ベクトルの値は、実際には、各状態に関連付けられた Q 値に対するニューラル ネットワークの推定値を表す必要があります。このため、通常、許容値の範囲を 0 から 1 の間に制限しないことをお勧めします (そのため、ある種のシグモイド活性化関数を使用するのではなく、接続の重みを掛けた値を合計するだけです)。

状態をどのように表現するかについては、1 つのオプションは、エージェントが持っている、または理論的に持っている可能性のあるセンサーの観点からそれらを表すことです。たとえば、次の例では、ロボットに 3 つの「フィーラー」センサーがあり、それぞれが 3 つの状態のいずれかになります。一緒に、それらはロボットがどの状態にあるかについて取得するすべての情報をロボットに提供します.

ここに画像の説明を入力

ただし、エージェントに完全な情報を提供したい場合は、このページの最後の方に示されているように、現在の状態を正確に伝えるセンサーがあると想像できます。これは、ネットワークが現在設定されている方法とまったく同じように機能し、1 つの入力が各状態を表します。

于 2015-05-03T18:35:23.347 に答える