np.einsum의 이해

numpy에서 einsum 함수는 딥러닝 모델 설계 과정에서 종종 보이고 매우 편리한 함수이다.

여러 가지 용례는 아래 링크를 참고하자.

Understanding NumPy’s einsum
I’m struggling to understand exactly how einsum works. I’ve looked at the documentation and a few examples, but it’s not seeming to stick.Here’s an example we went over in class:C = np.einsum(&qu...

einsum에 대해 간단히 이해해 보자면,

  1. output의 shape는 무조건 함수의 파라미터에서 제시한 바로 유지가 된다.
  2. output의 shape로 제시되지 않은 변수는 모두 합해진다. 단, 입력의 여러 곳에서 겹치는 파라미터가 있으면 해당하는 수는 "곱해진 후" 합해진다.

예를 들어 아래 수식은 inner-product을 나타낸다. output shape는 scalar, input shape의 i 위치의 수들은 모두 곱해진 후 더해진다.

np.einsum("i, i -> ", vec, vec)

다른 예로 아래 수식은 matrix multiplication을 나타낸다. output shape는 2차원 배열, j끼리는 모두 곱한 후 합해지고, output shape에서 i와 k가 제시되었으므로 해당 차원은 더해지거나 하지 않고 그대로 유지된다.

만약 output shape가 ik가 아니라 blank로, 스칼라라면, j축 변수끼리는 모두 곱해지고 그 후 i,k축 변수가 모두 더해져 하나의 스칼라로 만들어질 것이다.

np.einsum("ij, jk -> ik", A, B)