問題タブ [temporal-difference]

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.

0 投票する
1 に答える
288 参照

machine-learning - 時間差の更新ルール

更新ルール TD(0) Q-Learning:

Q(t-1) = (1-alpha) * Q(t-1) + (alpha) * (Reward(t-1) + gamma* Max( Q(t) ) )
次に、現在のベスト アクション (最適化) またはランダム アクション (エクスプローラー) のいずれかを実行します。

MaxNextQ は、次の状態で取得できる最大 Q です...


しかし、TD(1) では、更新ルールは次のようになると思います。

Q(t-2) = (1-alpha) * Q(t-2) + (alpha) * (Reward(t-2) + gamma * Reward(t-1) + gamma * gamma * Max( Q(t) ) )

私の質問:
この用語gamma * Reward(t-1)は、私が常に最善を尽くすことを意味しt-1ます.. これは探索を妨げると思います..
誰かヒントをくれませんか?

ありがとう

0 投票する
1 に答える
158 参照

temporal-database - 時系列の比較

私はこのタスクに頭を悩ませようとしていますが、これを行うための標準的な方法や、役立つライブラリがあるかどうか疑問に思っています。

特定のイベントは、いくつかのデータソースS1...SNで追跡および計測されます。記録される情報は、イベントタイプとタイムスタンプです。同じタイプのイベントが連続して複数発生する場合もあれば、断続的に発生する場合もあります。「欠落」イベントが発生する可能性があります。つまり、ソースの1つがそれを見逃した場合、およびその逆の場合、ソースが「誤検知」を導入した場合です。通常、異なるソースでの同じイベントの観測には時間差があります。この時間差には、ソースの物理的な場所によって一定の要素がありますが、ネットワークの遅延やその他の要因によって変化する要素が含まれる場合もあります。

すべてのソースでの観測を単一の「観測イベント」にグループ化し、欠落イベントと誤検知を検出できるようにするために使用する必要がある最適な最大時間間隔を見つけるアルゴリズムを見つける必要があります。

解決策が本当にアルゴリズムではなく統計分野のどこかにあるのだろうかと思います。任意の入力をいただければ幸いです。

0 投票する
3 に答える
1294 参照

artificial-intelligence - Delphi / PascalのTD(λ)(時間差学習)

Tic-Tac-Toeを再生する人工ニューラルネットワークがありますが、まだ完成していません。


私がまだ持っているもの:

  • すべてのタイムステップまたは移動「t」の整数値を持つ報酬配列「R[t]」(1 =プレーヤーAが勝ち、0 =引き分け、-1 =プレーヤーBが勝ちます)
  • 入力値は、ネットワークを介して正しく伝播されます。
  • 重みを調整するための式:

ここに画像の説明を入力してください


何が欠けている:

  • TD学習:TD(λ)アルゴリズムを使用してネットワークのエラーを「逆伝播」する手順がまだ必要です。

しかし、私はこのアルゴリズムを本当に理解していません。


これまでの私のアプローチ...

遠位状態はそれほど多くの報酬を得てはならないため、トレース減衰パラメータλは「0.1」である必要があります。

学習率は、両方のレイヤー(入力と非表示)で「0.5」です。

報酬が遅れる場合です。ゲームが終了するまで、報酬は「0」のままです。すると、報酬は、最初のプレーヤーの勝利の場合は「1」、2番目のプレーヤーの勝利の場合は「-1」、引き分けの場合は「0」になります。


私の質問:

  • ネットのエラー(TDエラー)はいつどのように計算しますか?
  • エラーの「バックプロパゲーション」をどのように実装できますか?
  • TD(λ)を使用して重みをどのように調整しますか?

よろしくお願いします:)

0 投票する
3 に答える
635 参照

delphi - Delphi:ニューラルネットワーククラスのEInvalidOp(TD-lambda)

ニューラルネットワーククラスについて、次のドラフトがあります。このニューラルネットワークはTDラムダで学習する必要があります。これは、getRating()関数を呼び出すことによって開始されます。

ただし、残念ながら、次の行で約1000回の反復を行った後、EInvalidOp(無効な読み込みポイント操作)エラーが発生します。

このエラーはなぜですか?コードに間違いが見つかりません:(助けてくれませんか?よろしくお願いします!

0 投票する
1 に答える
1228 参照

machine-learning - 時間差学習の更新

Tesauro の TD-Gammon プログラムについて読み、三目並べに実装したいと思っていますが、専門用語がわからないため、高校生の私にはほとんどすべての情報にアクセスできません。

ここの最初の方程式http://www.stanford.edu/group/pdplab/pdphandbook/handbookch10.html#x26-1310009.2

「一般的な教師あり学習パラダイム」を提供します。式の左辺の w sub t は、タイム ステップ t でのパラメーター ベクトルであると言えます。「タイムステップ」とは正確にはどういう意味ですか?ボードの状態の値を出力するように設計された三目並べニューラル ネットワークのフレームワーク内で、タイム ステップは、特定のゲームでプレイされたピースの数を参照しますか? たとえば、文字列「xoxoxoxox」で表されるボードはタイム ステップ 9 にあり、ボード「xoxoxoxo」はタイム ステップ 8 にあるでしょうか? それとも、タイム ステップは、トレーニングが開始されてからの経過時間を指しますか?

w sub t は特定の時間ステップの重みベクトルなので、これはすべての時間ステップに独自の評価関数 (ニューラル ネットワーク) があることを意味しますか? では、たった 1 つの手でボードの状態を評価するには、2 つの手でボードの状態をフィードするのとは異なる NN にフィードする必要がありますか? 私が知る限り、Tesauro はすべてのボードの状態を評価するために 1 つの NN しか使用しなかったため、ここで何かを誤解していると思います (ただし、TD-Gammon に関する信頼できる情報を見つけることは困難です)。

出力の勾配が w sub t ではなく w に関して取得されるのはなぜですか?

これらのアイデアを明確にしていただきありがとうございます。私のプロジェクトに関するアドバイスや、アクセシブルな読み物に関する提案をいただければ幸いです。

0 投票する
0 に答える
343 参照

neural-network - Neural Network Reinforcement Learning Requiring Next-State Propagation For Backpropagation

I am attempting to construct a neural network incorporating convolution and LSTM (using the Torch library) to be trained by Q-learning or Advantage-learning, both of which require propagating state T+1 through the network before updating the weights for state T.

Having to do an extra propagation would cut performance and that's bad, but not too bad; However, the problem is that there is all kinds of state bound up in this. First of all, the Torch implementation of backpropagation has some efficiency shortcuts that rely on the back propagation happening immediately after the forward propagation, which an additional propagation would mess up. I could possibly get around this by having a secondary cloned network sharing the weight values, but we come to the second problem.

Every forward propagation involving LSTMs is stateful. How can I update the weights at T+1 when propagating network(T+1) may have changed the contents of the LSTMs? I have tried to look at the discussion of TD weight updates as done in TD-Gammon, but it's obtuse to me and that's for feedforward anyway, not recurrent.

How can I update the weights of a network at T without having to advance the network to T+1, or how do I advance the network to T+1 and then go back and adjust the weights as if it were still T?

0 投票する
1 に答える
19051 参照

machine-learning - Q学習 vs 時間差 vs モデルベースの強化学習

私は大学で「Intelligent Machines」というコースにいます。強化学習の 3 つの方法が紹介され、それらをいつ使用するかについての直感が与えられました。引用します。

  1. Q-Learning - MDP が解けない場合に最適です。
  2. 時間差学習 - MDP が既知であるか、学習できるが解決できない場合に最適です。
  3. モデルベース - MDP を学習できない場合に最適です。

ある方法を他の方法よりもいつ選択するかを説明する良い例はありますか?

0 投票する
1 に答える
207 参照

machine-learning - 関数近似なしの勾配時間差ラムダ

GTD(λ) のすべての形式では、θ といくつかの重みベクトル w を使用して、関数近似の観点からそれを定義しているようです。

線形関数近似の収束特性から勾配法の必要性が広まっていることは理解していますが、重要度のサンプリングには GTD を利用したいと考えています。

関数近似なしで GTD を利用することは可能ですか? もしそうなら、更新方程式はどのように形式化されていますか?

0 投票する
1 に答える
124 参照

python - 時間差分学習におけるダブルカウント

私は一時的な差分学習の例 ( https://www.youtube.com/watch?v=XrxgdpduWOU ) に取り組んでおり、報酬を二重にカウントしているように見えるため、Python の実装で次の方程式に問題があります。とQ。

以下のグリッドを 2 次元配列としてコーディングした場合、現在の位置は (2, 2) であり、目標は (2, 3) であり、最大報酬が 1 であると仮定します。Q(t) を現在の位置の平均とします。 r(t+1) は 1 であり、最大 Q(t+1) も 1 であると仮定すると、Q(t) は 2 に近づきます (ガンマが 1 であると仮定)。これは正しいですか、それとも Q(n) (n は終点) は 0 であると仮定する必要がありますか?

ここに画像の説明を入力

グリッド

コードを含めるように編集 - get_max_q 関数を変更して、それが終点であり、値がすべて 1 を下回っている場合は 0 を返すようにしました (報酬は 1 にすぎないため、より正確であると思います)。ただし、これが正しいアプローチであるかどうかはわかりません (以前は、終点のときに 1 を返すように設定していました)。

0 投票する
1 に答える
194 参照

algorithm - バックギャモンでブロット露出を効率的に計算する方法

here で説明されているように、td-gammon に似たバックギャモンのアルゴリズムを実装しようとしています。

論文で説明されているように、td-gammon の初期バージョンは、優れたプレー エージェントを作成する特徴空間で生のボード エンコーディングのみを使用していましたが、世界クラスのエージェントを取得するには、優れたプレーに関連するいくつかの事前計算された特徴を追加する必要があります。遊ぶ。最も重要な機能の 1 つは、しみの露出です。

ブロット露出は次のように定義されます

特定のブロットについて、対戦相手がブロットをヒットできるようにする 36 のうちのロールの数。総ブロット露出は、対戦相手が任意のブロットをヒットできるようにする 36 のうちのロールの数です。しみの露出は以下に依存します。(a) しみの前にいるすべての敵の男性の位置。(b) ブロットと敵兵の間のブロッキング ポイントの数と位置、および (c) バー上の敵兵の数、およびバー上の敵兵は再びボードに入ることができるロール。 -しみがヒットする前に入力してください。

この機能を効率的に計算するためにさまざまなアプローチを試みましたが、計算がまだ遅すぎて、高速化する方法がわかりません。

td-gammon アプローチは、特定のダイス ロールに対して可能なすべてのボード ポジションを評価することに注意してください。そのため、すべてのプレーヤーのダイス ロールの各ターンでは、可能なすべてのボード ポジションに対してこの機能を計算する必要があります。

大まかな数値: ターンごとに約 30 のボード ポジションがあり、平均的なゲームが 50 ターン続くと仮定すると、1,000,000 回のゲーム シミュレーションを実行するには、(x * 30 * 50 * 1,000,000) / (1000 * 60 * 60 * 24) 日かかります。ここで、x は機能を計算するミリ秒数です。x = 0.7 とすると、1,000,000 ゲームをシミュレートするのに約 12 日かかります。

それが妥当なタイミングかどうかはよくわかりませんが、かなり速いアプローチが必要だと感じています。

だからここに私が試したことがある:

アプローチ1(ダイスロールによる)

可能な 21 個のダイスのロールごとに、再帰的にチェックしてヒットが発生することを確認します。この手順の主な主力は次のとおりです。

この関数が行うことは、サイコロの値の配列を入力として受け取ることです (つまり、プレイヤーが 1,1 を振った場合、配列は [1,1,1,1] になります)。関数は、ヒットがあるかどうかを再帰的にチェックします。関数 LegalMovesOfDie は、その特定のサイコロの値の正当な動きを計算します。

アプローチ 2 (ブロットによる)

このアプローチでは、最初にすべてのしみを見つけてから、各しみについて可能なすべてのサイコロの値をループして、ヒットが発生するかどうかを確認します。この関数は最適化されているため、サイコロの値がヒットを登録すると、次のブロットには再度使用しません。また、ブロットの前にある移動のみを考慮するように最適化されています。私のコード:

メソッド transitions.HitBlot2 は、ブロットの前にある移動のみが考慮されることを保証する、blotPosition パラメーターを取ります。

これらの実装はどちらも非常に遅く、プロファイラーを使用したところ、再帰が原因であることが判明したため、次のようにリファクタリングを試みました。

  1. 再帰の代わりに for ループを使用するには (醜いコードですが、はるかに高速です)
  2. parallel.foreach を使用して、一度に 1 つのサイコロの値をチェックする代わりに、これらを並行してチェックします。

これは、機能の 50000 回の計算に対する私の実行の平均タイミング結果です (各アプローチのタイミングは同じデータで行われたことに注意してください)。

  1. 再帰を使用したアプローチ 1: 計算あたり 2.28 ミリ秒
  2. 再帰を使用したアプローチ 2: 計算あたり 1.1 ミリ秒
  3. for ループを使用したアプローチ 1: 計算あたり 1.02 ミリ秒
  4. for ループを使用したアプローチ 2: 計算あたり 0.57 ミリ秒
  5. parallel.foreach を使用したアプローチ 1: 計算あたり 0.75 ミリ秒 6 parallel.foreach を使用したアプローチ 2: 計算あたり 0.75 ミリ秒

タイミングが非常に不安定であることがわかりました (ニューラル ネットワークの重みのランダムな初期化に依存する可能性があります) が、約 0.7 ミリ秒が達成可能であるように思われます。

私の質問は次のとおりです。これが合理的かどうか知っている人はいますか? トレーニングを減らすことができる、私が認識していないより高速なアルゴリズムはありますか?

最後の情報: 私はかなり新しいマシンで実行しています。Intel Cote (TM) i7-5500U CPU @2.40 GHz。

さらに情報が必要な場合はお知らせください。提供いたします。

ありがとう、オフィル