問題タブ [q-learning]
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.
c++ - サイズが不明な無向グラフの C++ データ構造
サイズが不明な無向グラフを探索し、隣接リストを作成するプログラムを作成しようとしています。通常はset<set<String>>
(部屋は文字列で識別されます) を作成しますが、これは C++ では不安定だと言われました。より良いデータ構造は何でしょうか?
machine-learning - Q ラーニングを物理システムに適用するにはどうすればよいですか?
私たちは、プロジェクトの回転倒立振子に Q 学習を適用しようとしている強化学習に興味がある 2 人のフランス人機械工学の学生です。David Silver の「youtube コース」を見て、Sutton & Barto の章を読みました。基本的な理論は簡単でした...しかし、振り子に関する肯定的な結果はまだ見られません。
これは、私たちが作成した回転倒立振子の写真と最新のテストのグラフで、エピソードごとの平均報酬 (緑色) を示しています。Python コードを実行するコンピューターは、ステッピング モーターを制御する Arduino と通信します。振り子の角度を与えるロータリーエンコーダーがあります(そこから角速度も計算します)。
最初のステップとして、離散 2 次元状態空間 (角度位置と速度) で Q 学習を使用することを選択しました。システムを何時間も稼働させましたが、改善の兆しはありません。アルゴリズムのパラメーター、可能なアクション、状態の数とその分割などを変更してみました。また、システムがかなり過熱する傾向があるため、学習を約 200 ステップのエピソードに分割し、その後に短い休息。速度と精度を上げるために、各エピソードの終わりに Q 値をバッチ更新します。
更新関数は次のとおりです。
コードの「メイン」部分は次のとおりです: Github ( https://github.com/Blabby/inverted-pendulum/blob/master/QAlgo.py )
ここで、テストが失敗する理由に関するいくつかの仮説を示します。 - システムが十分な時間実行されていない - 問題に適合していない探索 (e-greedy) - ハイパーパラメーターが最適化されていない - 私たちの物理システムが予想外すぎる
強化学習を物理システムに適用した経験のある人はいますか? 私たちは障害にぶつかり、助けやアイデアを探しています。
algorithm - 線形関数近似による Q 学習
関数近似で Q 学習アルゴリズムを使用する方法について、いくつかの役立つ指示を取得したいと思います。基本的な Q 学習アルゴリズムについては、例を見つけましたが、理解できたと思います。関数近似を使用する場合、問題が発生します。誰かがそれがどのように機能するかの短い例を通して説明してもらえますか?
私が知っていること:
- Q 値にマトリックスを使用する代わりに、機能とパラメーターを使用します。
- フィーチャとパラメータの線形結合で近似を行います。
- パラメータを更新します。
私はこの論文をチェックしました:関数近似によるQ学習
しかし、それを使用するための有用なチュートリアルが見つかりません。
手伝ってくれてありがとう!
pybrain - Q 学習係数のオーバーフロー
私は、ブラックボックス チャレンジ (www.blackboxchallenge.com) を使用して、強化学習を試してみました。
チャレンジ用のタスクと環境を作成し、PyBrain を使用してブラック ボックス環境に基づいてトレーニングしています。環境の要約は、浮動小数点数の numpy ndarray と一連のアクションである各状態に多数の機能があることです。トレーニング例では、36 個の機能と 4 個のアクションです。
Q_LinFA と QLambda_LinFA の両方の学習器を試しましたが、どちらも係数がオーバーフローしています (._theta 配列)。トレーニング中、値は問題なく開始され、すべて NaN になるまで急速に増加します。線形関数近似器を使用して Q ラーニングを自分で実装しようとしたときに、同様の問題が発生しました。また、機能を -1,1 に縮小しようとしましたが、これは何の役にも立ちませんでした。
私のコードは以下の通りです:
私の直感では、これら 2 つの実行時エラーに関係している可能性がありますが、それを理解することはできません。助けてください?
machine-learning - 強化学習 - エージェントはどのアクションを選択するかをどのように知るのでしょうか?
Q-Learningを理解しようとしている
基本的な更新式:
式とその機能は理解していますが、私の質問は次のとおりです。
エージェントはどのようにして Q(st, at) を選択することを知っていますか?
エージェントが何らかのポリシー π に従うことは理解していますが、そもそもこのポリシーをどのように作成しますか?
- 私のエージェントはチェッカーをしているので、モデルフリーのアルゴリズムに焦点を当てています。
- エージェントが知っているのは、現在の状態だけです。
- アクションを実行するときにユーティリティを更新することは理解していますが、そもそもそのアクションを実行することをどのように知っているのでしょうか。
現時点で私は持っています:
- その状態から実行できる各動きを確認します。
- 有用性が最も高い手を選択します。
- 行われた移動のユーティリティを更新します。
ただし、これは実際にはあまり解決しません。それでも、ローカルの最小値/最大値にとどまります。
締めくくりとして、私の主な質問は次のとおりです。
何も知らず、モデルフリーのアルゴリズムを使用しているエージェントの場合、最初のポリシーを生成して、取るべきアクションを知るにはどうすればよいでしょうか?
machine-learning - これは Checkers の Q-Learning の正しい実装ですか?
Q-Learningを理解しようとしていますが、
私の現在のアルゴリズムは次のように動作します。
1.利用可能な各アクションの即時報酬と効用に関する情報に状態をマッピングするルックアップ テーブルが維持されます。
2.各状態で、ルックアップ テーブルに含まれているかどうかを確認し、含まれていない場合は初期化します (デフォルトのユーティリティ 0 を使用)。
3.次の確率で実行するアクションを選択します。
4.以下に基づいて、現在の状態のユーティリティを更新します。
私は現在、自分のエージェントを単純なヒューリスティック プレイヤーと対戦させています。このプレイヤーは常に最高の即時報酬を与える動きをとります。
結果- 結果は非常に悪く、数百回のゲームの後でも、Q-Learning エージェントは勝つよりも多くを失っています。さらに、特に数百ゲームに達した後は、勝率の変化はほとんどありません。
何か不足していますか?私はいくつかのエージェントを実装しました:
(暗記学習、TD(0)、TD(ラムダ)、Q-Learning)
しかし、それらはすべて、同様の残念な結果をもたらしているようです。
neural-network - ニューラル ネットワークのグリッド ワールド表現
Q関数にニューラルネットワークを利用するQ学習アルゴリズムの2次元グリッド世界の状態をより適切に表現しようとしています。
チュートリアル「ニューラル ネットワークを使用した Q ラーニング」では、グリッドは整数 (0 または 1) の 3 次元配列として表されます。1 番目と 2 番目の次元は、グリッド ワールド内のオブジェクトの位置を表します。3 番目の次元は、それがどのオブジェクトであるかをエンコードします。
したがって、4 つのオブジェクトを含む 4x4 グリッドの場合、64 要素 (4x4x4) を含む 3 次元配列で状態を表します。これは、Meural ネットワークの入力層に 64 個のノードがあり、グリッド ワールドの状態を入力として受け入れることができることを意味します。
トレーニングに時間がかからないように、ニューラル ネットワークのノード数を減らしたいと考えています。では、グリッドの世界を double の 2 次元配列として表すことはできますか?
4x4 グリッドの世界を double の 2-d 配列として表現しようとし、さまざまなオブジェクトを表すためにさまざまな値を使用しました。たとえば、プレイヤーを表すのに 0.1 を使用し、ゴールを表すのに 0.4 を使用しました。しかし、これを実装すると、アルゴリズムはまったく学習を停止しました。
今、私の問題は、レイヤーで使用しているアクティベーション関数を変更する必要があることだと思います。現在、双曲線正接活性化関数を使用しています。入力値の範囲は (0 - 1) です。出力値の範囲は (-1 から 1) です。シグモイド関数も試しました。
これは質問するのが難しい問題だと思います。ネットワークのアーキテクチャに関する提案をいただければ幸いです。
アップデート
ゲームには 3 つのバリエーションがあります。 1. 世界は静的です。すべてのオブジェクトは同じ場所から始まります。2. プレイヤーの開始位置はランダムです。他のすべてのオブジェクトは同じままです。3. 各グリッドは完全にランダムです。
さらにテストを重ねると、最初の 2 つのバリアントを 2 次元配列表現で完成させることができることがわかりました。したがって、私のネットワーク アーキテクチャは問題ないと思います。私が発見したのは、私のネットワークが壊滅的な忘却の影響を非常に受けやすくなっているということです (3 次元配列を使用していたときよりもはるかに顕著です)。「体験再生」を使って学習させなければなりませんが、それでも3番目の亜種を完成させることはできません。がんばります。グリッドの世界表現を変更することでどれだけの違いが生じたかに、私はかなりショックを受けました。まったくパフォーマンスが向上していません。
c++ - ソフトマックスでアクション選択?
これはかなりばかげた質問かもしれませんが、一体何を..
現在、ボルツマン分布を使用するソフトマックスアクションセレクターを実装しようとしています。
私が少し確信が持てないのは、特定のアクションを使用するかどうかをどのように知ることができるかということです. 関数が確率を提供するということですが、それを使用して実行するアクションを選択するにはどうすればよいですか?