問題タブ [function-approximation]
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 - 強化学習で関数近似の重みをどのように更新しますか?
勾配降下を使用した私の SARSA は、重みを指数関数的に増加させ続けます。エピソード 4 ステップ 17 で値はすでに nan です
例えば:
自分が犯した間違いをどこで探すべきかわかりません。ここにいくつかのコード FWIW があります:
約 183 のバイナリ機能があります。
matlab - ルジャンドル多項式のプロット - 独自の方法で異なる結果を得る
次のように定義されたルジャンドル多項式をプロットしようとしています。
私はそれを簡単でゆっくりとした方法で行い、直接的でもう少し複雑な方法で行いました。どちらも同様の数値になりますが、まったく同じではありません。振幅が異なります。以下は、敬意を表したコードです (定義の添字 n+1 を n に調整していることに注意してください)。
方法 1:
図1:
方法 2:
図 2:
控えめに言っても、これは奇妙です。方法 1 では、P11 までのすべての多項式を計算していますが、最初の 6 つだけを使用してプロットします。何が起こっているのか誰か知っていますか?
trigonometry - 2 本の直線 y = 1000x と y = 999x の間の角度を推定する
線 y = 1000 x と y = 999 x の間の角度を推定する方法は?
私は電卓を使って 10^(-6) を得ましたが、手で概算する方法です。テイラー展開と関係ありますか?
machine-learning - 関数近似による Q ラーニングでは、手作りの機能を回避することは可能ですか?
私は機械学習の背景知識がほとんどないため、私の質問がばかげているように思われる場合はご容赦ください。
私が読んだことに基づいて、現時点で最高のモデルフリー強化学習アルゴリズムは Q-Learning であり、エージェントの世界の各状態とアクションのペアに q 値が与えられ、各状態で最高のアクションq 値が選択されます。その後、q 値は次のように更新されます。
Q(s,a) = (1-α)Q(s,a) + α(R(s,a,s') + (max_a' * Q(s',a'))) α は学習レート。
明らかに、高次元の問題では、状態の数が天文学的に大きくなり、q 値テーブルの格納が実行不可能になります。
そのため、Q ラーニングを実際に実装するには、状態 (特徴) の一般化による Q 値近似を使用する必要があります。たとえば、エージェントが Pacman の場合、機能は次のようになります。
- 最も近い点までの距離
- 最も近いゴーストまでの距離
- パックマンがトンネルに?
そして、すべての単一の状態の q 値の代わりに、すべての単一の機能の q 値のみが必要になります。
だから私の質問は:
強化学習エージェントが追加の機能を作成または生成することは可能ですか?
私が行ったいくつかの研究:
この投稿では、A Geramifard の iFDD メソッドについて言及しています。
- http://www.icml-2011.org/papers/473_icmlpaper.pdf
- http://people.csail.mit.edu/agf/Files/13RLDM-GQ-iFDD+.pdf
これは「機能の依存関係を発見する」方法ですが、論文では一連のバイナリ機能から始めることを想定しているため、それが機能の生成であるかどうかはわかりません。
私が見つけた別の論文は、Playing Atari with Deep Reinforcement Learningが適切であり、「さまざまなニューラル ネットワーク アーキテクチャを使用して高レベルの機能を抽出する」ものでした。
私は論文を読みましたが、まだ彼らのアルゴリズムを肉付けする/完全に理解する必要があります. これは私が探しているものですか?
ありがとう
algorithm - RGB/LAB 変換の高速近似アルゴリズム?
私は OpenGL を使用したデータ視覚化ツールに取り組んでおり、LAB 色空間は、扱っているデータを視覚化するための最もわかりやすい色空間です (データの 3 軸は色空間の 3 軸にマッピングされます)。LAB 値と RGB 値との間の近似変換のための高速 (たとえば、シェーダーでの実行に適した非整数累乗なし) アルゴリズムはありますか?
machine-learning - 動径基底補間はどのように機能しますか?
このプロットを理解する方法を誰か説明してもらえますか? これは、Radial 基底関数を使用した 2D 散布データの補間です。
http://www.alglib.net/interpolation/introductiontorbfs.php
このリンクでは、彼らはこの図を示しました。しかし、彼らがこの図を使って何を表現しようとしているのか理解できません。
(出典: alglib.net )
algorithm - 関数近似アルゴリズムの誤差範囲
「m」ビットの仮数部と「e」ビットの指数部を持つ浮動小数点数のセットがあるとします。さらに、関数 "f" を近似したいとします。
理論から、通常は「範囲縮小関数」が使用され、そのような関数からグローバル関数値が導出されることがわかっています。
たとえば let x = (sx,ex,mx) (sign exp and mantissa) then... log2(x) = ex + log2(1.mx) したがって、基本的に範囲縮小関数は「log2(1.mx)」です。 .
現在、逆数、平方根、log2、exp2 を実装していますが、最近、三角関数を使い始めました。しかし、グローバルエラーバウンド(特にulpエラー)が与えられた場合、範囲縮小関数のエラーバウンドを導出することが可能である場合、私はさまよっていました。この種の問題に関する研究はありますか?log2(x) といえば (例として) 私は言うことができるようになる.
「k ulp エラーを含む log2(x) が必要です。これを実現するには、浮動小数点システムを考えると、log2(1.mx) を p ulp エラーで概算する必要があります」
私が言ったように、私たちは浮動小数点数を扱っていることを知っていますが、フォーマットは一般的であるため、古典的な F32 である可能性がありますが、たとえば e=10、m = 8 などです。
私は実際にそのような種類の研究を示す参考文献を見つけることができません. 私が持っている参考文献 (つまりミュラーの本) はこのトピックをこのように扱っていないので、ある種の紙などを探していました。リファレンスを知っていますか?
私もそのような束縛を自分で導出しようとしていますが、簡単ではありません...
neural-network - Q-Learning と関数近似を使用して GridWorld を解く
私は単純な GridWorld (Russell & Norvig Ch. 21.2 で説明されているように 3x4) の問題を研究しています。Q-Learning と QTable を使用して解決しましたが、行列の代わりに関数近似を使用したいと考えています。
私は MATLAB を使用しており、ニューラル ネットワークと決定木の両方を試しましたが、期待した結果が得られませんでした。つまり、不適切なポリシーが見つかりました。このトピックに関するいくつかの論文を読んだことがありますが、それらのほとんどは理論的なものであり、実際の実装についてはあまり詳しく説明していません。
オフライン学習の方が簡単なので、私はオフライン学習を使用しています。私のアプローチは次のようになります。
- 決定木 (または NN) を 16 の入力バイナリ ユニット (グリッド内の各位置に 1 つずつ) と 4 つの可能なアクション (上、下、左、右) で初期化します。
- 多くの反復を行い、それぞれの qstate と計算された qvalue をトレーニング セットに保存します。
- トレーニング セットを使用して決定木 (または NN) をトレーニングします。
- トレーニング セットを消去し、ステップ 2 から繰り返します。トレーニングした決定木 (または NN) を使用して qvalues を計算します。
単純すぎて真実ではないように思えますが、実際には期待した結果が得られません。以下に MATLAB コードをいくつか示します。
半分の確率でランダムなアクションを選択します。updateq関数は次のとおりです。
どんな提案でも大歓迎です!
java - Java-関数の最小/最大またはステップ間隔での導関数の計算に関するアドバイスを探しています
Java の悪夢に変わった数学の問題についてのアドバイスを探しています。Web をスキャンしましたが、解決策が見つかりませんでした。同様のプログラムを調べましたが、残念ながらヘルプが見つかりませんでした。
問題の概要: Riemann-Siegel Z(t) 関数 (Z(t) を計算するコードを既に作成しています) の最小値または最大値のいずれかを見つけるメソッドを Java 内に実装しようとしています。その派生物。私がやろうとしていることを示すために、0 < t < 100 からの Z(t) のグラフは次のようになります。
Wolfram Alphaまたはここで関数を直接確認すると、私が抱えている「Java の悪夢」が非常に複雑に見えます。私が説明している問題は、数値解析の経験が浅いためかもしれませんが、それほど複雑ではありません。私がやろうとしていることの一般的な概要は
この関数の導関数がゼロであるすべての場所を計算するメソッドを Java 内に記述します (上のグラフでは、関数には 0 < t < 100 の間に約 30 個の値があります)。
メソッド内で、ステップ間隔を定義して、下限と上限を通じて関数を評価します。
次の 3 つの方法のいずれか - 1 つの方法で最大/最小を計算するか、2 つの方法で最大/最小を計算するか、導関数がゼロになる値を計算します。
これを既存のプログラムに追加します (問題を簡単にするためにテスト プログラムを作成しました。テスト プログラムは cos(x) を調べます)。
インターネットをスキャンして、これを見つけました。他にも多くの異なるアプローチを見つけましたが、どれもうまくいかないようです。提供されるすべてのソリューションは、ステップ間隔内の最大値/最小値/導関数を 1 つだけ計算するように見えます。新しい方法を利用するために、プログラムは、導関数がゼロであるか、関数が最大値または最小値を持つすべての値を見つける必要があります。例として、cos(x) には 0 < x < 50 の間に約 16 個のゼロがあります (新しいメソッドはこれらすべての値を検出します)。
これを簡単にするために、cos(x) 関数に対して分析できるテスト プログラムを作成しました。
public static void findDerivative
テストプログラムの目的は、メソッドが正しいかどうかをチェックすることです。導関数の近似値として 2 つの値を返しますが、ある程度は機能します。cos(x)のグラフを以下に示します。
プログラムによって出力される値は次のとおりです。
findDerivative メソッド内の Math.abs(dy) < 0.001 のため、導関数を 2 回計算する必要がありますが、近似値に近づきます。これを回避する次の方法はすべて成功していません。
ニュートン法で導関数を計算するように勧められました。Z(t) の導関数がわからないので、ニュートンを適用する方法がわかりません。
私がオンラインや他のウェブサイトで見つけたすべてのプログラムは、[a、b] からの間隔で「1 つの」最小値または最大値のみを直接計算します。上記のグラフと Z(t) 関数のグラフで、すべての最小値と最大値 (または、関数がゼロの場合) を探しています。[0, 100] の間隔の間で 1 つの最小値または最大値を計算しても役に立ちません。それらすべてを計算する方法が必要です。
私はもともと、これを行うことの難しさを過小評価していました。
誰か提案がありますか?cos(x) テスト プログラムでこれを行うにはどうすればよいでしょうか? これが機能するようになれば、自分で Z(t) プログラムを考え出すことができます。私はこれについて考えるのに多くの時間を費やし、睡眠を失いました. 私は自分でこれを回避する方法を考えることができませんでした。
これは、一般的な値の Z(t) 関数を計算するために使用しているものです (これらの問題を回避するために、以下のプログラムを理解する必要はありません)。