ComputerScience/ML

Einstein summation notation

WhyJ 2021. 4. 5. 18:40

아인슈타인 표기법으로 이를 libaray function으로 구현한것이다.

 

 

아인슈타인 표기법 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 아인슈타인 표기법(Einstein notation) 또는 아인슈타인의 합 규약(Einstein summation convention)은 수학의 선형대수학을 물리학에 응용하면서 좌표계에 관한 공식을 다룰

ko.wikipedia.org

Tensorflow, pytorch, numpy 등에 구현되어있고,  einops라는 lib도 존재한다.

 

github.com/arogozhnikov/einops

 

arogozhnikov/einops

Deep learning operations reinvented (for pytorch, tensorflow, jax and others) - arogozhnikov/einops

github.com

이 함수는 행렬에 대한 다양한 함수들, transpose, dot product, outer product, multilpication등을 각기 외우지 않아도 einsum 함수하나로 이것들을 모두 사용가능하게 해준다. 

 

 

기본적인 함수의 폼은 다음과 같다.

 

Result = einsum(' ,□□,-> ', arg1,arg2,arg3)

 

numpy 에서는 np.einsum, pytorch에서는 torch.einsum, Tensorflow에서는 tf.einsum 으로 구현되어있다.

이를 실제 tensor 연산 예제를 통해 비교해보면 이해하기 더 수월하다.

 

 

다음 행렬연산을 예로 들어보자.

 

a = torch.arange(6).reshape(2, 3)
b = torch.arange(3)
c = torch.einsum('ik,k->i', [a, b])

출력값은

tensor([ a, b])

형태로 출력이 된다.

 

 

 

[참고자료]

EINSUM IS ALL YOU NEED - rockt.github.io/2018/04/30/einsum