n차원 배열에 특별한 능력 두 가지
딥러닝의 신비를 걷어내면 텐서는 결국 n차원 배열이야. NumPy의 ndarray와 같은 개념이지. 다만 PyTorch 텐서에는 NumPy 배열과 구별되는 특징이 두 가지 있어:
- 장치 투명성. 인자 하나만 바꾸면 같은 코드가 CPU, NVIDIA GPU(CUDA), Apple Silicon GPU(MPS)에서 돌아가.
- Autograd. 각 연산이 계산 그래프에 자신을 기록할 수 있어서, PyTorch가 나중에 역전파로 그래프를 거슬러 올라가 기울기를 계산해.
차원은 이렇게 읽으면 돼:
- 0D 스칼라: 숫자 하나.
torch.tensor(3.14) - 1D 벡터: 숫자 한 줄.
torch.tensor([1, 2, 3]) - 2D 행렬: 행과 열로 된 표. 행 × 열
- 3D: 행렬을 묶은 배치. 시퀀스에서는
(batch, seq_len, features)형태가 흔해. - 4D: 이미지 배치. PyTorch의 NCHW 관례에서는
(batch, channels, height, width)로 나타내.
수학자라면 '텐서'에는 공변성과 반변성까지 포함된 더 엄격한 뜻이 있다고 항의할 거야. 딥러닝에서는 이 단어를 빌려와 'autograd가 붙은 n차원 배열'이라는 느슨한 뜻으로 써. 프레임워크와 문서, 논문도 모두 이 뜻을 따르니 여기서는 그 흐름에 올라타자.
가볍게 경고 하나만 할게. 모양은 PyTorch에서 가장 쓸모 있는 디버깅 도구야. 뭔가 깨지면 가장 먼저 print(x.shape)를 실행해. 이 습관은 일찍 들일수록 좋아.