0

免責事項:数学スタック交換または何らかの種類への投稿についてはしました。しかし、数学を専攻している友人から、彼らは Einstein Summation を実際にはあまり使用していないと聞きましたが、機械学習がそれを多く使用していることは知っています。したがって、この問題をここに投稿しました(アルゴリズムのパフォーマンスの最適化として)。

行列計算に関する調査を行っているとき (たとえば、要素ごとの乗算が少なくとも必要な回数)、次の勾配を計算しようとしていました。

ハイレベル方程式

ここでABCは、最初の軸で 3 つの行列を縮小することを意味します(たとえば2x32x4、 、および2x53x4x5、 -2軸が合計されます)。基本的に、 に対する 3-matrix-contraction のノルムの勾配を計算ABCAます。次に、再び に対する勾配のノルムを計算しAます。

これは次と同等です。

伝統的な書き方

または少し単純化します (によって証明されていますautograd):

ここに画像の説明を入力

これは Einstein Summation 形式で記述できます ( 、einsumなどの多くのパッケージの関数で使用されます)。numpytensorflow

np.einsum('ia,ib,ic,jb,jc,jd,je,kd,ke->ka', A, B, C, B, C, B, C, B, C)

これを書いているとき、私は行列を見つけBC、合計を何度も繰り返しています。これらの「たくさんの B と C」を何らかの行列乗数に単純化できるのでしょうか? これにより、対数的に高速になるはずです。手動で単純化しようとしましたが、わかりませんでした。

どうもありがとう!私が言っていることが正しくない場合は、修正してください。

4

1 に答える 1