問題タブ [diffsharp]
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.
generics - F# Generic Math: op_GreaterThan を使用した関数の書き方
F# では、一般的な数学ステップ関数をどのように記述しますか?
(Oliver) Heaviside ステップ関数は、x が負の場合は 0 を返し、そうでない場合は 1 を返す関数です。
これまでの私の試みの要約は次のとおりです。
コンパイラのメッセージ: エラー FS0001: 型パラメーターに制約がありません 'when ^T : comparison'
FSC は次のように述べています: エラー FS0010: パターンに予期しない中置演算子があります
動機:
Ian の Cumulative-Normal 関数と Black-Scholes 関数をここで書き換えて、自動微分 (DiffSharp) を使用しようとしています。Ian の Cumulative Normal は float で動作します。AutoDiff.DualG を含む任意の数値型で動作する汎用バージョンが欲しいです。累積正規関数に「より大きい」ステートメントが含まれています。
編集:グスタボ、ありがとう、私はあなたの答えを受け入れました-単純なステップ関数がコンパイルされるようになりました。
しかし、累積法線のケースでは役に立たないようです。このコードを考えると:
FSI は次のように述べています。
CDFをジェネリックにする方法を知っている人はいますか?
automatic-differentiation - 高階自動微分の理解
最近、機械学習の目的で自分自身の基本的なリバース モード ADを完成させたばかりなので、この分野について学びたいと思っていますが、より高次の方法で難しい壁にぶつかっています。
基本的なリバース AD は美しくシンプルで理解しやすいですが、より高度な内容は抽象的すぎて技術的すぎて、インターネット上で適切な説明を見つけることができませんでした (実際、理解するのにかなりの時間がかかりました)。基本的なリバース AD も存在します。)
基本的に、微積分のコンテキストで二次導関数を取得する方法は理解していますが、逆 AD グラフを変換して二次導関数を取得する方法がわかりません。
edge_pushingのようなアルゴリズムでは、これらの破線の接続は何を意味するのでしょうか?
ライブラリ DiffSharp を調査したところ、ヘッセ行列の計算に正逆微分のようなものを使用していることに気付きました。実行中、デバッガーを介して、実際に1回の実行で順方向と逆方向のステップが混在していることを実際に確認しました。そのメカニズムの背後にある原則は何ですか?
DiffSharp は、ヤコビアン ベクトル積を使用して、変数ごとにヘッシアンを計算します。これは、R^m -> R^n マッピングです。元のグラフからそれを取得するにはどうすればよいですか? 逆 AD は R -> R^n マッピングですが、余分な次元はどこから来るのですか?
最後に、ネストされた AD はどのように機能しますか?
c# - C#でDiffSharpのDMとDVを乗算するには?
次のコードがあります。
問題は、ステートメントW * v
であり、それは言う"Operator * cannot be applied to operands of type DM and DV"
. F# では、この方法で乗算されます。この行列とベクトルを C# で乗算するにはどうすればよいですか?
f# - System.Double[,] を DenseMatrix に変換する
Diffsharp の hessian 関数は、System.Double[,] と呼ばれるものを返します。または、変数にカーソルを合わせると、float[,] として表示されます。このオブジェクトは解析が少し難しいようです。理由はわかりません。この質問は関連していますが、特定のサイズのマトリックスのみを扱うため、答えは一般的ではないようです。
このオブジェクトを DenseMatrix にマッサージする次の方法よりもクリーンな方法があるかどうか疑問に思っています。返される行列は常に正方です。
これを変更したい:
これに、しかしきれいに:
これが私のコードです。これは、残りの F# コードの中で少しぎこちなく見えます。
c# - C# DiffSharp v0.7.7 FSharp.Core v4.4.0.0 を探す
C# で最新バージョンの DiffSharp (v0.7.7) を使用しようとしています。次のエラーが発生し続けます。
エラー 3 アセンブリ 'DiffSharp, Version=0.7.7.0, Culture=neutral, PublicKeyToken=null' uses 'FSharp.Core, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' これは、参照されたアセンブリ 'FSharp よりも新しいバージョンを持っています.Core、バージョン = 4.3.0.0、文化 = ニュートラル、PublicKeyToken = b03f5f7f11d50a3a'
FSharp.Core Version 4.4.0.0 を探しているようです。私の知る限り、そのようなものは存在しません。それとも私が間違っていますか?私は Windows 10 で Visual Studio 2012 を使用しており、考えられるすべてのものを完全に更新しました。私の .Net ビルドは 4.6.1 です。
スタック オーバーフローにも記載されているこの修正を試みました:ファイルまたはアセンブリ FSharp.Core, Version=4.0.0.0 Azure Web Role を読み込めませんでした
しかし、それは何ももたらしませんでした。
このような経験をした人はいますか?
どんな考え/アイデア/解決策も大歓迎です。