問題タブ [hessian-matrix]
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.
r - R の optim からの間違った Hessian
極値分析を行っています。さまざまな理由から、fevd パッケージを使用したくありません (最初の理由は、他の方法ではできないことを微調整できるようにしたいからです)。私は自分のコードを書きました。それはほとんど非常に単純で、すべてを解決したと思っていました。しかし、一部のパラメーターの組み合わせでは、対数尤度分析 ( optimに基づく) から得られるヘッシアンは正しくありません。
一歩ずつ進んでいきます。私のコード - またはその選択した部分 - は次のようになります。
場合によっては、すべてがうまく機能します。私のルーチンと fevd ルーチンを実行すると、まったく同じ結果が得られます。場合によっては (shape=-0.29 が非常に強い負/ワイブルの場合の特定のケース)、私のルーチンは負の分散とファンキーなヘシアンを与えます。常に間違っているわけではありませんが、一部のパラメーターの組み合わせは明らかに有効なヘッシアンを与えていません (注: パラメーターはまだ正しく推定されています。つまり、fevd の結果と同じですが、共分散行列は完全にオフになっています)。
2 つの手順のヘッセ行列を比較したこの投稿を見つけましたが、実際、最適化は不安定なようです。ただし、ルーチンで maxLik を単純に置き換えると、まったく収束しません (収束が発生した場合でも)。
正しい初期値であっても、異なる初期値を与えようとしましたが、収束しません。
私の例では最適なルーチンが正しく使用されていると思うので、データを提供していません。簡単に言うと、パラメータの組み合わせによっては、数値結果が安定しません。私の質問は:
1) maxLik の使用方法に何か不足がありますか?
2) ヘシアンを抽出できる maxLik 以外の最適化ルーチンはありますか?
ありがとう
scikit-learn - scikit-learnでのロジスティック回帰の後にヘッセ行列を取得する方法は?
パッケージ scikit-learn を使用して、適度に大きなデータセット (300k 行、2k 列。私にとってはかなり大きい!) でロジスティック回帰を計算しています。
現在、scikit-learn は信頼区間を生成しないため、自分で計算しています。そのためには、最小値で評価されたロジスティック関数のヘッセ行列を計算して反転する必要があります。scikit-learn は最適化中に既に Hessian を計算しているので、取得できれば効率的です。
でsklearn.classification.LogisticRegression
、最小値で評価されたヘッシアンを取得する方法はありますか?
注: これは中間ステップであり、実際にはヘッセ行列の逆行列の対角要素のみが必要です。誰かがそこにたどり着くためのより簡単な方法を持っているなら、私はそれを学びたいです.
matlab - 関数の記号ヘッセ行列を見つける
疑似コード functionf(x,y)=x+y
があり、Matlab を使用してシンボリック ヘッセ行列 (2x2 2 次偏微分行列) を見つけたいと考えています。どうすればいいですか?
これは私の最初の試みであり、正しい構文とはかけ離れています:
r - ヘッセ行列を計算する次元誤差 (最尤法)
for ループを介して Hessian を 8x8 に強制しているのに、2x1 であるというエラーが表示されるのはなぜですか?
8x8 Hessian を実行して、nx8 リグレッサー データセットで maxLik を生成します。Hessian[i,j]<- で強制されているにもかかわらず、Hessian が 8x8 ではなく 2x1 であるというエラーが発生します。
- データセット x は nxk (4406x8) です。
- param (推定量の最初の反復、maxLik の下の start= 引数) ベクトルは 8 個の数値文字列であるため、loglambda は (nxk)%*%(8x1) nx1 ベクトルです。右?
- モーメントはnx1 * nx1、つまり要素の乗算としてnx1です。右?
- ヘッセ行列の各要素は、合計された kx1 ベクトルであるため、スカラーである必要があります (瞬間 %*% ラムダからの結果)。コードのこの部分は準拠していません。
主な qn は、パーツが正しい次元でなくても (おそらく)、Hessian[i,j <- -sum(vector) はスカラーを形成する必要があり、1:8 ループの {i,j} を介して8x8。なぜそれが機能しないのですか?
r - Hessian は -1 * optim で関数の最大値を見つけるときの Hessian です
関数の最大値を見つけたい:
次のコードを使用して「徹底的な」検索を使用してそれを行うことができます。
関数の最大値は11872
whend1 = 76
とd2 = 80
です。
optim
以下のコードを使用して最大値を見つけることもできます。
上記の関数を で乗算し-1
て最大値を取得したところ、このコードによって返される最大値が真の最大値の負の値であることに気付きました。また、このコードによって返される Hessian は、真の Hessian * -1 です。
私は今までこれに気づかず、optim
ページに記載されているのを見ませんでした. 私は心配する必要がありますか?もしそうなら、どのような状況で?
optim
最大値を見つけるときに元の関数の -1 * ではなく、元の関数の真の Hessian を返すステートメントにオプションはありますか? または、(最小値を検索するのではなく)最大値を検索し、ヘッシアンを自分で修正すると、ヘッセ行列に-1が掛けられることに注意する必要がありますか?
python - ベイジアン ニューラル ネットワーク: ヘシアンの計算
それらのより良い理解/直感を得るために、PythonでいくつかのタイプのANNアルゴリズムをコーディングしようとしています。私の目標は実用的ではなく教育的なものであるため、Scikit-learn やその他のすぐに使用できるパッケージは使用していません。問題の例として、MNIST データベース ( http://yann.lecun.com/exdb/mnist/ ) を使用します。
単純な 1 隠れ層 NN と畳み込み NN を実行しましたが、2 次の最適化方法を回避することに成功したため、ヘッセ行列を計算しませんでした。ただし、その後、ハイパーパラメーターを最適化するために、ヘッシアンの計算が必須であるベイジアン NN に行き着きました。
私の完全に接続されたネットワークには、784 の入力、300 の隠れユニット、および 10 の出力ユニットがあります。これらはすべて、238200 の重み (+ バイアス) になります。Hessian (勾配の外積による) を計算または概算しようとすると、Python は "MemoryError" を通知します。重みの数を 40000 まで減らしてエラー メッセージが表示されなくても、数分後にコンピューターが動かなくなります。私が理解しているように、問題は望ましい行列が非常に巨大であることです。ベイジアン NN に関するいくつかの記事を調べたところ、作成者は通常、10 または 20 以下の入力と隠れユニットのネットワーク アーキテクチャを使用しているため、パラメーターが私よりもはるかに少ないことに気付きました。しかし、私はそのような制限の明確な声明を見たことがありません.
MNIST の NN にベイジアン アプローチを適用するにはどうすればよいですか?
より一般的に: この (238200 の重み) またはさらに大きなアーキテクチャでベイジアン アプローチを適用することは可能ですか? それとも、比較的小規模なネットワークに適しているのでしょうか?
python - Python のオプティマイザ モジュールは、特異ヘッセ行列を使用したオブジェクト関数をサポートしていますか?
境界制約と線形不等式制約(つまり、合計 wi*xi ≤ b)を使用して、制約付き最小化を解きたいと考えています。ただし、オブジェクト関数のヘッセ行列は特異な場合があります。
メソッドを使用してminimize
inscipy.optimize
モジュールを試しましたが、うまくいきませんでした。SLSQP
次のように単純化された問題:
オプティマイザが間違った結果を出していることがわかります。法案に適合するpythonモジュールはありますか?ありがとう。
python - ヘッセ行列を計算するために Theano でスカラーとベクトルを組み合わせる
Theano を使用して、ベクトルといくつかのスカラーに関して関数のヘッセ行列を計算しようとしています (編集: つまり、基本的に、ヘッセ行列を計算しているベクトルにスカラーを追加する必要があります) . 最小限の例を次に示します。
私の最初の試みは:
失敗するものAssertionError: tensor.hessian expects a (list of) 1 dimensional variable as 'wrt'
私の2番目の試みは、A、b、およびcを次のものと組み合わせることでした:
失敗するものDisconnectedInputError: grad method was asked to compute the gradient with respect to a variable that is not part of the computational graph of the cost, or is used only by a non-differentiable operator: Join.0
この場合、ヘッセ行列を計算する正しい方法は何ですか?
更新:私が探しているものを明確にするために、A が 2 要素ベクトルであるとします。次に、ヘシアンは次のようになります。
サンプル関数の場合は次のy
ようになります。
したがって、関数を定義する場合:
次に、正常に計算できると仮定するhy
と、次の出力が期待されます。
私の実際のアプリケーションでは、A には 25 個の要素があり、y
より複雑ですが、考え方は同じです。