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)는 안되는 이유도 이해했다.
그리고 하나 느낀 것은 파이토치 문서가 되게 잘되어 있다.
설명이 깔끔한데 한글이 아니네.. 아쉽.
댓글을 작성해보세요.