問題タブ [numpy-einsum]
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.
algorithm - 行列が繰り返されるが下付き文字が異なる場合の Einstein 総和の最適化
免責事項:数学スタック交換または何らかの種類への投稿についてはしました。しかし、数学を専攻している友人から、彼らは Einstein Summation を実際にはあまり使用していないと聞きましたが、機械学習がそれを多く使用していることは知っています。したがって、この問題をここに投稿しました(アルゴリズムのパフォーマンスの最適化として)。
行列計算に関する調査を行っているとき (たとえば、要素ごとの乗算が少なくとも必要な回数)、次の勾配を計算しようとしていました。
ここでABC
は、最初の軸で 3 つの行列を縮小することを意味します(たとえば2x3
、2x4
、 、および2x5
は3x4x5
、 -2
軸が合計されます)。基本的に、 に対する 3-matrix-contraction のノルムの勾配を計算ABC
しA
ます。次に、再び に対する勾配のノルムを計算しA
ます。
これは次と同等です。
または少し単純化します (によって証明されていますautograd
):
これは Einstein Summation 形式で記述できます ( 、einsum
などの多くのパッケージの関数で使用されます)。numpy
tensorflow
これを書いているとき、私は行列を見つけB
てC
、合計を何度も繰り返しています。これらの「たくさんの B と C」を何らかの行列乗数に単純化できるのでしょうか? これにより、対数的に高速になるはずです。手動で単純化しようとしましたが、わかりませんでした。
どうもありがとう!私が言っていることが正しくない場合は、修正してください。
numpy - numpy einsum を使用して高次元減算ブロードキャストを実行する
放送減算で困っています。私の問題は次のとおりです。L は整数、N は問題の変数の数であるx
shapeの配列があります。各要素に含まれる配列[L,N]
を計算する必要があります。L=1 の場合、これは減算でブロードキャストを実行することと同じです。[L,N,N]
l,i,j
x[l,i]-x[l,j]
x-x.T
たとえば、L=1 で N=3 の場合:
しかし、次元 L を大きくすると、物事はより複雑になり、np.einsum
関数の領域に入ります。そこで、L=2 の場合に、2 つの行を複製した例を再作成しようとしました。私が期待するのは、等しい要素を持つ 2 つの 3x3 行列を持つ 2x3x3 配列を取得することです。
返す
しかし、numpy einsum でこれを作成する方法は? 次の製品しか入手できません。
数値が大きくなったバッチ処理された減算または加算の特定の例はありますか?