免责声明:我确实发布了数学堆栈交换或某种形式的帖子。但我从我的数学专业朋友那里听说,他们并没有真正使用爱因斯坦求和,但我知道机器学习使用了很多。因此我在这里发布了这个问题(作为优化算法性能)。
在研究矩阵计算时(例如,至少需要多少元素乘法),我试图计算以下梯度:
其中意味着在它们的ABC
第一个轴上收缩三个矩阵(例如2x3
,2x4
, 和与-轴相加)。基本上,它计算 3-matrix-contraction关于的范数梯度。然后再次计算该梯度的范数。2x5
3x4x5
2
ABC
A
A
这相当于:
或简化一点(由 证明autograd
):
我们可以用爱因斯坦求和形式写出来(被einsum
很多包的函数使用,比如numpy
,tensorflow
等等)
np.einsum('ia,ib,ic,jb,jc,jd,je,kd,ke->ka', A, B, C, B, C, B, C, B, C)
在写这篇文章时,我发现了矩阵B
,并且C
在求和中一次又一次地重复。我想知道我可以将那些“大量的 B 和 C”简化为某种矩阵功率吗?这应该使事情对数更快。我尝试手动简化但没有弄清楚。
非常感谢!如果我说的不正确,请纠正我。