問題タブ [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.
python - PyBrains Q-Learning 迷路の例。州の価値観とグローバル ポリシー
PyBrains 迷路の例を試しています
私のセットアップは次のとおりです。
右下隅(1、8)は吸収状態です
mdp.py に追加の罰状態 (1, 7) を入れました。
ここで、1000 回実行し、各実行中に 200 回のインタラクションを行った後、エージェントがどのようにして私の処罰状態が良好な状態であると判断するのか理解できません (四角が白であることがわかります)。
最終実行後にすべての状態とポリシーの値を確認したいと思います。それ、どうやったら出来るの?この行がいくつかの値を返すことがわかりましたがtable.params.reshape(81,4).max(1).reshape(9,9)
、それらが値関数の値に対応しているかどうかはわかりません
machine-learning - Q学習 vs 時間差 vs モデルベースの強化学習
私は大学で「Intelligent Machines」というコースにいます。強化学習の 3 つの方法が紹介され、それらをいつ使用するかについての直感が与えられました。引用します。
- Q-Learning - MDP が解けない場合に最適です。
- 時間差学習 - MDP が既知であるか、学習できるが解決できない場合に最適です。
- モデルベース - MDP を学習できない場合に最適です。
ある方法を他の方法よりもいつ選択するかを説明する良い例はありますか?
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 の両方があることは知っていますが、それらを組み合わせた人はいますか? 洞察はありますか?
algorithm - 強化学習を使用してボードゲームのポリシーをニューラルネットワークに教える方法は?
強化学習を使用して、ニューラル ネットワークにボード ゲームのポリシーを教える必要があります。具体的なアルゴリズムとして Q 学習を選択しました。
ニューラルネットに次の構造を持たせたい:
- レイヤー -
rows * cols + 1
ニューロン - 入力 - ボード上の連続するフィールドの値 (0
空の場合、1
または2
プレーヤーを表す)、その状態でのアクション (自然数) - レイヤー - (??) ニューロン - 非表示
- レイヤー - 1 ニューロン - 出力 - 特定の状態でのアクションの値 (float)
私の最初のアイデアは、状態、アクション、および値のマップを作成することから始め、次にニューラル ネットワークを教えようとすることでした。教育プロセスがうまくいかない場合は、ニューロンの数を増やして最初からやり直すことができます。
しかし、すぐにパフォーマンスの問題に遭遇しました。まず、単純なインメモリ Pythondict
からデータベースに切り替える必要がありました (十分な RAM がありません)。現在、データベースがボトルネックになっているようです (単純に言えば、考えられる状態が非常に多いため、アクションの値の取得にかなりの時間がかかっています)。計算には数週間かかります。
中間にマップのレイヤーがなくても、その場でニューラル ネットワークを教えることは可能だと思います。しかし、隠れ層で適切な数のニューロンを選択するにはどうすればよいでしょうか? 長期間保存された (学習した) データが失われていることをどのように確認できますか?
deep-learning - Deepmind ディープ Q ネットワーク (DQN) 3D 畳み込み
DQNネットワークで深層心理の論文を読んでいました。1つを除いて、私はそれについてほとんどすべてを得ました。これまで誰もこの質問をしなかった理由はわかりませんが、とにかく少し奇妙に思えます。
私の質問: DQN への入力は 84*84*4 の画像です。最初の畳み込み層は、8*8 の 32 個のフィルターと stide 4 で構成されています。この畳み込みフェーズの結果を正確に知りたいですか? つまり、入力は 3D ですが、すべて 2D のフィルターが 32 個あります。3 番目の次元 (ゲームの最後の 4 フレームに相当) は畳み込みにどのように関与しますか?
何か案は?ありがとうアミン
python - スライスによる Q ネットワークの損失の Tensorflow 実装
TensorFlow での深層強化学習による人間レベルの制御 (Mnih et al. 2015) で説明されているように、Q ネットワークを実装しています。
Q 関数を近似するために、ニューラル ネットワークを使用します。Q 関数は、状態とアクションを Q 値と呼ばれるスカラー値にマップします。つまり、Q(s,a) = qvalue のような関数です。
ただし、状態とアクションの両方を入力として受け取る代わりに、状態のみを入力として受け取り、指定された順序で合法的なアクションごとに 1 つの要素を持つベクトルを出力します。したがって、Q(s,a) は Q'(s) =array([val_a1, val_a2, val_a3,...])
になります。ここで、val_a1
Q(s,a1) です。
これにより、損失関数をどのように変更するかという問題が生じます。損失関数は、ターゲット (y) と Q(s,a) の差で計算される L2 損失関数です。
私の考えは、新しい TF 操作を作成し、トレーニングするアクションを示すバイナリ マスクを使用して、それをネットワークの出力で乗算することです。問題[0, 0, val_a3, 0, ...]
のアクションがa3
.
そして、新しい操作の結果を損失操作にフィードし、TF が最小化します。
質問:
これは正しい考えですか?または、これを解決するより良い方法はありますか?
これは TensorFlow でどのように解決できますか?
似たようなものに SO スレッドがあります ( Tensor 内の単一値の調整 -- TensorFlow
tf.placeholder
) が、実行時にネットワークにフィードできるa を使用して列の値を選択したいと思います。その例の静的リストをプレースホルダーに置き換えるだけでは機能しないようです。
machine-learning - 三目並べの機械学習 - 有効な動き
私は機械学習をいじっています。特に、状態とアクションがあり、ネットワークのパフォーマンスに応じて報酬を与える Q-Learning です。
手始めに、単純な目標を設定しました。ネットワークをトレーニングして、三目並べ (ランダムな対戦相手に対して) の有効な動きをアクションとして出力するようにします。私の問題は、ネットワークがまったく学習しないか、時間の経過とともに悪化することです。
私が最初にしたことは、トーチとそのための深い q 学習モジュールに連絡することでした: https://github.com/blakeMilner/DeepQLearning .
次に、ランダムなプレーヤーがニューラル ネットワークと競合する単純な三目並べゲームを作成し、これをこのサンプルhttps://github.com/blakeMilner/DeepQLearning/blob/master/test.luaのコードにプラグインしました。ネットワークの出力は、それぞれのセルを設定するための 9 つのノードで構成されます。
ネットワークが空のセル (X または O がない) を選択した場合、移動は有効です。これに従って、正の報酬 (ネットワークが空のセルを選択した場合) と負の報酬 (ネットワークが占有セルを選択した場合) を与えます。
問題は、決して学習していないように見えることです。私は多くのバリエーションを試しました:
- 三目並べフィールドを 9 つの入力 (0 = 空のセル、1 = プレーヤー 1、2 = プレーヤー 2) または 27 の入力 (たとえば、空のセル 0 [空 = 1、プレーヤー 1 = 0、プレーヤー 2 = 0) としてマッピングします。 ]))
- 隠しノードの数を 10 から 60 の間で変化させます
- 最大60kの反復を試みた
- 学習率を 0.001 から 0.1 の間で変化させます
- 失敗に対して負の報酬を与えるか、成功に対してのみ報酬を与える、さまざまな報酬値
何も機能しません:(
ここで、いくつか質問があります。
- これは Q-Learning での私の最初の試みなので、根本的に間違っていることはありますか?
- 変更する価値のあるパラメーターは何ですか? 「脳」にはたくさんのことがあります: https://github.com/blakeMilner/DeepQLearning/blob/master/deepqlearn.lua#L57。
- 隠しノードの数として適切な数は?
- https://github.com/blakeMilner/DeepQLearning/blob/master/deepqlearn.lua#L116で定義されている単純なネットワーク構造は、この問題に対して単純すぎますか?
- せっかちすぎて、さらに多くの反復をトレーニングする必要がありますか?
ありがとうございました、
-マティアス
python - Deep Q Network が単純な Gridworld (Tensorflow) をマスターしないのはなぜですか? (Deep-Q-Netの評価方法)
私は Q ラーニングとディープ ニューラル ネットワークに慣れようとしています。
実装をテストして試してみるために、単純なグリッドワールドを試してみることにしました。N x N グリッドがあり、左上隅から始まり、右下で終了します。可能なアクションは、左、上、右、下です。
私の実装はこれに非常に似ていますが(良いものであることを願っています)、何も学習していないようです。完了する必要がある合計ステップを見ると (グリッドサイズが 10x10 の場合、平均は約 500 になると思いますが、非常に低い値と高い値もあります)、他の何よりもランダムなように見えます。
畳み込み層の有無にかかわらず試してみて、すべてのパラメーターをいじってみましたが、正直なところ、実装の何かが間違っているのか、それともより長くトレーニングする必要があるのか (私はかなりの時間トレーニングさせます)、それとも何なのかわかりませんこれまで。しかし、少なくとも収束するように見えます。これは、1 つのトレーニング セッションでの損失値のプロットです。
では、この場合の問題は何ですか?
しかし、さらに重要なのは、この Deep-Q-Net をどのように「デバッグ」できるかということです。教師ありトレーニングには、トレーニング、テスト、および検証セットがあり、たとえば、精度とリコールを使用してそれらを評価することができます。次回は自分で修正できるように、Deep-Q-Nets を使用した教師なし学習にはどのようなオプションがありますか?
最後に、コードは次のとおりです。
これはネットワークです:
そしてここでトレーニング:
あなたが持っているかもしれないすべての助けとアイデアに感謝します!