問題タブ [sarsa]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
artificial-intelligence - QラーニングとSARSAの違いは何ですか?
SARSAがポリシーに準拠しているのに対し、Q ラーニングはポリシーに準拠していないことはわかっていますが、それらの式を見ると、これら 2 つのアルゴリズムの違いを理解するのは (私には) 困難です。
著書Reinforcement Learning: An Introduction (Sutton と Barto 著) によると。SARSA アルゴリズムでは、ポリシーが与えられると、対応するアクション値関数 Q (状態 s およびアクション a、タイムステップ t で)、つまり Q(s t , a t ) は次のように更新できます。
Q(s t , a t ) = Q(s t , a t ) + α*(r t + γ*Q(s t+1 , a t+1 ) - Q(s t , a t ))
一方、Q 学習アルゴリズムの更新手順は次のとおりです。
Q(s t , a t ) = Q(s t , a t ) + α*(r t + γ*max a Q(s t+1 , a) - Q(s t , a t ))
次のように書くこともできます
Q(s t , a t ) = (1 - α) * Q(s t , a t ) + α * (r t + γ*max a Q(s t+1 , a))
ここで、γ (ガンマ) は割引係数で、r tはタイムステップ t で環境から受け取った報酬です。
これら 2 つのアルゴリズムの違いは、Q ラーニングが次の最大ポリシー値を検索するのに対し、SARSA は次のポリシー値のみを検索するという事実ですか?
TLDR(および私自身の答え)
私が最初に質問して以来、この質問に答えてくれたすべての人に感謝します。Q-Learning で遊んでいるgithub リポジトリを作成し、経験的に違いを理解しました。それはすべて、次善のアクションをどのように選択するかにかかっています。これは、アルゴリズムの観点からは、実装方法に応じて、平均、最大、または最良のアクションになる可能性があります。
もう 1 つの主な違いは、この選択がいつ行われるか (オンラインとオフラインなど) と、それが学習にどのように/なぜ影響するかです。2019 年にこれを読んでいて、より実践的な人であれば、RL のおもちゃの問題で遊ぶことが、おそらく違いを理解するための最良の方法です。
最後の重要な注意点として、Suton & Barto とウィキペディアの両方が、次の状態の最高/最大アクションと報酬に関して、混合、混乱、または間違った公式表現を頻繁に使用していることです。
r(t+1)
実際には
r(t)
これが、これで行き詰まった人に役立つことを願っています。
machine-learning - SARSA-Lambda 実装でのエピソード間の適格性トレースの再初期化
私はこの SARSA-Lambda 実装 (つまり、適格性トレースを含む SARSA) を見ていますが、まだ取得していない詳細があります。
(画像はhttp://webdocs.cs.ualberta.ca/~sutton/book/ebook/node77.htmlから)
したがって、エージェントが特定の時間ステップで選択したものだけではなく、すべての Q(s,a) が更新されることを理解しています。また、各エピソードの開始時に E マトリックスがリセットされないことも理解しています。
図 7.12 のパネル 3 がエピソード 1 の最終状態であったとしましょう。
エピソード 2 の開始時に、エージェントは東ではなく北に移動し、これが -500 の報酬を与えると仮定しましょう。これは、前のエピソードで訪れたすべての州にも影響しませんか?
現在のエピソードで訪れた状態に報酬を与えることが目的である場合、各エピソードの開始時にすべての e(s,a) 値を含む行列がリセットされないのはなぜですか? この実装では、前のエピソードで訪れた状態が、この新しいエピソードでエージェントによって行われたアクションに対して「罰せられる」または「報われる」ように見えます。
machine-learning - 勾配離散を使用した SARSA の実装
テーブル ルックアップを使用して、SARSA アルゴリズム (ワンステップと適格性トレースの両方を使用) を正常に実装しました。本質的に、各行が状態に対応し、各列がアクションに対応する q 値マトリックスがあります。
何かのようなもの:
各時間ステップで、行列から行が選択され、ポリシーに応じてアクションが選択され、SARSA ルールに従って更新されます。
現在、勾配降下法を使用してニューラル ネットワークとして実装しようとしています。
私の最初の仮説は、2 層ネットワークを作成することでした。入力層には状態と同じ数の入力ニューロンがあり、出力層にはアクションと同じ数の出力ニューロンがあります。各入力は各出力に完全に接続されます。(したがって、実際には、上記のマトリックスのようになります)
私の入力ベクトルは 1xn 行ベクトルで、n は入力ニューロンの数です。現在の状態に対応するインデックスが 1 になることを除いて、入力ベクトルのすべての値は 0 になります。
状態 4 のエージェントの入力ベクトルになります。
したがって、プロセスは次のようになります。
ランダムなサンプルの重み行列を作成した場所。
結果は次のようになります。
つまり、貪欲なポリシーが選択された場合、アクション 1 が選択され、4 番目の入力ニューロンと最初の出力ニューロンの間の接続が次のように強化されます。
(SARSA アルゴリズムから取得した式)
ただし、この実装は私を納得させません。私が読んだことによると、ネットワークの重みを使用して状態とアクションのペアの Q 値を計算する必要がありますが、そのような値を表す必要があるかどうかはわかりません。(特に、重みの値が 0 から 1 の間にしか含まれていないことがよくあるためです。)
何かアドバイス?
algorithm - SARSA での適格性トレースの実装
私は SARSA アルゴリズムの MATLAB 実装を作成しており、1 ステップの実装を作成することに成功しました。
現在、適格性トレースを使用するように拡張しようとしていますが、得られる結果はワンステップよりも悪いものです。(つまり、アルゴリズムはより遅い速度で収束し、エージェントがたどる最終パスはより長くなります。)
基本的に、q 値は nXm 重み行列に格納されます。ここで、n = アクションの数、m = 状態の数です。適格性トレース値は、e_trace マトリックスに保管されます。ワンステップと ET のどちらを使用するかによって、dw の 2 つの定義のいずれかを使用します。どこが間違っているのかわかりません。アルゴリズムは、次のように実装されています: http://webdocs.cs.ualberta.ca/~sutton/book/ebook/node77.html
の
ネットワーク内のすべての重みの重みの変化 (つまり、すべての Q(s,a) ペアの値の変化) を定義し、学習率によって調整されたネットワークに供給されます。
最初は重みと e 値が 0 に設定されていることを付け加えておきます。
何かアドバイス?
deep-learning - qlearning と組み合わせたディープ ニューラル ネットワーク
状態空間として Kinect カメラからのジョイント位置を使用していますが、SARSA または Qlearning にフィードするには大きすぎる (1 秒あたり 25 ジョイント x 30) と思います。
現在、教師あり学習を使用してユーザーの動きを特定のジェスチャーに関連付ける Kinect Gesture Builder プログラムを使用しています。しかし、それには監視されたトレーニングが必要であり、私はそこから離れたい. アルゴリズムは、私が自分でデータを分類するときに、関節間の特定の関連性を検出する可能性があると考えています (たとえば、手を挙げて、左に一歩、右に一歩)。
そのデータをディープ ニューラル ネットワークにフィードし、それを強化学習アルゴリズムに渡すと、より良い結果が得られると思います。
最近、これに関する論文がありました。https://www.cs.toronto.edu/~vmnih/docs/dqn.pdf
Accord.net にはディープ ニューラル ネットワークと RL の両方があることは知っていますが、それらを組み合わせた人はいますか? 洞察はありますか?
python - Sarsa アルゴリズム、Q 値がゼロになる傾向があるのはなぜですか?
OpenAI ジムから Frozen Lake 環境を解決するための Sarsa アルゴリズムを実装しようとしています。私はすぐにこれに取り組み始めましたが、私はそれを理解していると思います.
また、Sarsa アルゴリズムがどのように機能するかを理解しています。疑似コードを見つけるサイトはたくさんあります。すべての手順に従って問題にこのアルゴリズムを実装しましたが、すべてのエピソードの後に最終的な Q 関数を確認すると、すべての値がゼロになる傾向があり、その理由がわかりません。
これが私のコードです。誰かがなぜそれが起こるのか教えてくれることを願っています。