주제: 1-8 텐서 Shape 실전 (Broadcasting, Batch/Seq/Hidden)
문제 설정
딥러닝 코드에서 가장 흔한 오류 중 하나는 shape mismatch입니다. 모델 계산 과정을 이해하려면 텐서 차원을 정확히 추적할 수 있어야 합니다.
핵심 차원은 batch, sequence, hidden입니다.
직관 비유
- batch: 한 번에 처리하는 데이터 묶음
- sequence: 데이터의 순서 길이
- hidden: 모델 내부 표현 차원
1. Batch Dimension
여러 데이터를 동시에 처리할 때 배치 차원을 사용합니다.
batch = 4
feature = 3
X shape = (4, 3)
기호 의미
- B: batch size
- D: feature dimension
왜 필요한가
GPU 병렬 연산을 활용해 처리량을 높일 수 있습니다.
주의점
batch 차원은 보통 첫 번째 차원입니다.
2. Sequence Dimension
NLP에서는 순서 길이(토큰 길이) 차원이 중요합니다.
임베딩 후 일반 shape은 (B, S, H)입니다.
| dimension | 의미 |
|---|---|
| B | batch size |
| S | sequence length |
| H | hidden size |
B = 2, S = 5, H = 768
shape = (2, 5, 768)
3. Hidden Dimension
hidden dimension은 토큰 내부 표현 벡터의 크기입니다.
왜 필요한가
표현 가능한 특징 공간이 커집니다.
주의점
hidden 차원이 커질수록 계산량/메모리 사용량이 증가합니다.
4. Broadcasting
서로 다른 shape 텐서를 자동 확장해 연산하는 기능입니다.
X shape = (B, S, H)
bias shape = (H)
Y = X + bias
(H) -> (B, S, H)로 맞춰져 연산됩니다.
수식 표현
y = x + b
왜 필요한가
불필요한 메모리 복사 없이 효율적으로 연산할 수 있습니다.
주의점
broadcast 규칙을 잘못 이해하면 shape 오류가 발생합니다.
5. Transformer 텐서 흐름 예
input_ids: (B, S)
embedding: (B, S, H)
Q, K, V: (B, S, H)
QK^T: (B, S, S)
output: (B, S, H)
주의점
attention에서는 sequence 간 상호작용으로 S x S 행렬이 만들어집니다.
코드-수식 연결
| 수식 | PyTorch 코드 | 설명 |
|---|---|---|
| X ∈ R^(B,S,H) | x.shape | 텐서 shape 확인 |
| broadcast | x + bias | 자동 확장 연산 |
| QK^T | torch.matmul(Q, K.transpose(-1,-2)) | attention score |
자주 하는 오해 5개
- batch 차원과 sequence 차원을 혼동한다
- broadcasting이 실제 메모리 복사를 항상 만든다고 생각한다
- hidden dimension은 항상 동일하다고 생각한다
- attention 계산에서 shape 변화를 추적하지 않는다
- shape 오류를 단순 오타로만 본다
체크리스트 (스스로 설명 가능해야 하는 질문)
- (B,S,H) 텐서의 각 차원은 무엇을 의미하는가?
- broadcasting은 어떤 규칙으로 동작하는가?
- bias가 hidden 차원에 어떻게 적용되는가?
- Transformer attention에서 QK^T shape은 무엇인가?
- sequence 길이가 길어지면 계산 비용은 어떻게 변하는가?