問題タブ [numerical-stability]
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.
matlab - ロジスティック損失関数の値と勾配を計算する際の数値オーバーフローの回避
現在、MATLAB でロジスティック損失関数を含む機械学習アルゴリズムを実装しようとしています。残念ながら、数値のオーバーフローが原因で問題が発生しています。
一般に、特定の入力に対してs
、ロジスティック関数の値は次のようになります。
ロジスティック損失関数の傾きは次のとおりです。
私のアルゴリズムでは、 の値はs = X*beta
. これは、データ ポイントとデータ ポイントごとの特徴 (つまり) を含むX
行列で、は各特徴の係数のベクトルであり、となります。N
P
size(X)=[N,P]
beta
P
size(beta)=[P 1]
の与えられた値に対するロジスティック関数の平均値と勾配を計算することに特に興味がありbeta
ます。
の値に対するロジスティック関数の平均値beta
は次のとおりです。
の値に対するロジスティック関数の勾配の平均値b
は次のとおりです。
ご了承くださいsize(dL) = [P 1].
私の問題は、これらの式が数値オーバーフローを生成し続けることです。問題は事実上、exp(s)=Inf
いつs>1000
、exp(s)=0
いつ、という事実から生じます。s<-1000.
s
浮動小数点演算で任意の値を取ることができるソリューションを探しています。理想的には、ベクトル化された/効率的な方法で値と勾配を評価できるソリューションも本当にありがたいです。
r - R の OLS - lm() が行列計算に異なる答えを与える
R で線形代数を使用して OLS 推定量の手動計算を行っていたところ、R の組み込み回帰関数 lm() に対して別の答えが得られました。なぜ違いがあるのか 誰にも教えてもらえますか?R は OLS を実行していませんか?
c# - javascript での「二重」等価のテスト
Clipper ライブラリの実験的な C# "float" バージョンを JavaScript に翻訳しました。最新のサンドボックス バージョンには、翻訳が難しいと思われる関数IsAlmostEqualがあります。数値の安定性の問題により、== 演算子を使用して二重等価を比較することはできないため、この関数はこれらの問題を処理するために必要です。
-9223372036854775808 - aInt
-9223372036854775808 - bInt
BigInteger ライブラリなどを使用して計算するのは簡単BitConverter.DoubleToInt64Bits
ですが、難しいです。
IsAlmostEqual
関数を JavaScriptに変換する方法はありますか? または具体的にどのようBitConverter.DoubleToInt64Bits
にjavascriptに実装するのですか?
数値安定性とロバスト性:
http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm
http://www.mpi-inf.mpg.de/~kettner/pub/nonrobust_cgta_06.pdf
http:// cpc.cs.qub.ac.uk/MRSN/higham.pdf
http://www.2ality.com/2012/04/number-encoding.html
math - クォータニオンと数値安定性
単位四元数と、それらを使用して回転を表現および構成する方法について学んでいます。ウィキペディアは、行列表現よりも数値的に安定していると述べていますが、参照を提供していません。回転行列ではなく単位四元数を使用して回転を処理する方が数値的に安定している理由を誰かが私に説明できますか (できればいくつかの数学的推論を使用して) (たとえば、OpenGL アプリケーションの場合)。ジンバルロックを回避しているからでしょうか?
python - numpy.random.multinomial を使用するときに値エラーを回避するにはどうすればよいですか?
この乱数発生器を使用すると: numpy.random.multinomial
、取得し続けます:
私は常にこのソフトマックス関数の出力を渡しています:
このエラーが発生したことを除いて、パラメーター ( pvals
)にもこれを追加しました。
しかし、それは解決しませんでした。このエラーを確実に回避する正しい方法は何ですか?
編集:これは、このコードを含む関数です
python - numpy.random.multinomial の悪い出力?
私はこの機能を持っています:
への呼び出しの出力で呼び出します。
実行すると、ある時点でアサーションエラーが発生しました。これはどのように可能ですか?numpy.random.multinomial の出力はワンホット ベクトルであることが保証されていませんか?
次に、アサーション エラーを削除したところ、次のようになりました。
欠けている細字がありますか、それとも単に壊れているだけですか?
matlab - 数値的に安定した実装
Matlab でベクトルの正規化された指数を計算する必要があります。
簡単に書く
V の要素のオーバーフローが log(realmax) = 709.7827 より大きい。(アンダーフロー条件についてはわかりません。)
数値的な不安定性を回避するには、どのように実装すればよいですか?
更新: オーバーフローを回避する方法について、優れた回答を受け取りました。ただし、コードのアンダーフローの可能性についてのご意見をお待ちしております。
c++ - 三角関数計算のソースコード
決定論的であり、異なるプラットフォーム (コンパイラ) で同じ結果を提供する必要があるプログラムの場合、組み込みの三角関数は使用できません。これは、それを計算するアルゴリズムがシステムによって異なるためです。結果値が異なることがテストされました。
(編集: すべてのクライアントで実行されるゲーム シミュレーションで使用されるため、結果は最後のビットまでまったく同じである必要があります。これらのクライアントは、シミュレーションを機能させるために、シミュレーションの状態がまったく同じである必要があります。エラーは、時間の経過とともにますます大きなエラーになる可能性があり、ゲーム状態の crc も同期のチェックとして使用されます)。
したがって、私が思いついた唯一の解決策は、独自のカスタム コードを使用してこれらの値を計算することでした。問題は、(驚くべきことに) 三角関数のすべてのセットの使いやすいソース コードを見つけるのが非常に難しいことです。
これは、sin 関数用に取得したコード ( https://codereview.stackexchange.com/questions/5211/sine-function-in-cc ) を変更したものです。これはすべてのプラットフォームで決定論的であり、値は標準の sin の値とほぼ同じです (両方ともテスト済み)。
しかし、asin、atan、tan (sin/cos 以外) など、他の関数に適したものは見つかりませんでした。
これらの関数は、標準のものほど正確ではありませんが、少なくとも 8 つの数字があればよいでしょう。