np.einsum의 이해
numpy에서 einsum 함수는 딥러닝 모델 설계 과정에서 종종 보이고 매우 편리한 함수이다.
여러 가지 용례는 아래 링크를 참고하자.
einsum에 대해 간단히 이해해 보자면,
- output의 shape는 무조건 함수의 파라미터에서 제시한 바로 유지가 된다.
- 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)