210708 TIL

tensor broadcasting

일반적인 수학에서의 행렬 계산과 pytorch에서의 tensor의 계산은 조금 다르다.

덧셈과 뺄셈에서의 계산은 동일한 로직으로 작동된다고 생각하면 되고 pytorch에서 거기에 조금 더 나아간 로직(추가되는 로직)이 있는데 그것이 바로 broadcasting이다.

|x| = (2, 2)과 |y| = (2,)의 경우 y를 tilde(~) 시켜서 (1, 2) 형태로 만들고 더한다. 그림을 그려서 설명하면 조금 더 쉬워지는데 여기에는 그림과 수식을 그리기가 애매하여 이렇게 말로만 남겨둔다.

한가지 예를 더 들자면 

|x| = (1, 1, 2) 와 |y| = (2,) 를 덧셈한다고 하면, y를 tilde 하여 (1, 1, 2)로 계산을 한다.

강의 자료로만 추측컨데, 차원을 빙빙 돌려서 맞추는 것 같이 느껴진다.

이 부분에 대해서는 조금 더 자료를 찾아봐야될 것 같다.

2가지 조건을 만족하면 broadcastable 하다고 한다.

1. 각 텐서는 1개 이상의 차원을 갖고 있어야 한다.

2. 각 차원끼리 iterate(반복)하게 계산할 때, 뒤쪽에서 부터 시작하며 각 차원의 크기는 동일하던지 아니면, 그 중 하나가 1이거나 존재하지 않아야 한다.

이제 대강은 왜 그런지 이유를 알 것 같다.

|x| = (1, 1, 2) 와 |y| = (2,)를 예로 들어

1 - 1 - 2

* - * - 2

맨 뒤 : 같다

그 다음 뒤(가운데) : 존재하지 않아서 오케이

그 다음 뒤(맨 앞) : 존재하지 않아서 오케이

예시로 든 것들은 모두 이해했고, (1, 2, 2)와 (3, 2)는 안되는 이유도 이해했다.

그리고 하나 느낀 것은 파이토치 문서가 되게 잘되어 있다.

설명이 깔끔한데 한글이 아니네.. 아쉽.

댓글을 작성해보세요.

채널톡 아이콘