[기본기 0-1] 딥러닝을 위한 선형대수 기초
딥러닝 모델은 결국 벡터와 행렬을 반복 계산하는 구조입니다. 이 문서는 입문자가 수식을 읽고 코드와 연결할 수 있도록 선형대수 핵심만 압축 정리합니다.
딥러닝에서 데이터는 거의 항상 벡터 형태로 표현된다. 이미지도 숫자의 집합이고, 단어도 embedding 벡터이며, 배치 전체는 행렬이나 텐서가 된다. 그래서 선형대수는 별도의 이론이라기보다 신경망이 계산되는 기본 언어에 가깝다.
중요한 것은 공식을 외우는 것보다, 행렬곱이 "입력을 다른 특징 공간으로 다시 표현하는 과정"이라는 감각을 잡는 것이다. 그 관점이 잡히면 fully connected layer, attention, convolution도 결국 같은 언어로 읽힌다.
시각 자료로 먼저 보기
문제 설정
딥러닝의 거의 모든 레이어는 아래 한 줄로 표현됩니다.
이 식을 정확히 이해하려면 벡터, 행렬곱, 차원, 노름 개념이 필요합니다.
이 한 줄은 딥러닝 레이어의 뼈대다. x는 입력 벡터, W는 가중치 행렬, b는 보정값이고, 결과 y는 변환된 새 표현이다. 결국 신경망은 "표현을 계속 바꿔 가는 기계"라고 볼 수 있다.
왜 선형대수가 딥러닝의 시작인가
신경망 레이어의 기본 연산은 아래 한 줄입니다.
벡터, 행렬곱, 전치, 내적, 노름을 이해하면 대부분의 딥러닝 수식을 읽을 수 있습니다.
예를 들어 attention은 query와 key의 내적을 계산하고, CNN은 국소적인 선형 연산을 반복하며, diffusion 모델도 큰 틀에서는 행렬 기반 연산으로 구현된다. 즉 분야가 달라 보여도 내부 계산 구조는 선형대수 위에 서 있다.
직관 비유
- 벡터: 입력 정보 묶음(특징 벡터)
- 행렬: 벡터를 다른 벡터로 바꾸는 변환 기계
- bias(b): 결과를 미세하게 이동시키는 보정값
- 행렬곱: 입력을 새로운 특징 공간으로 이동시키는 과정
- 내적: 두 벡터가 얼마나 같은 방향인지 측정
- 노름: 벡터의 길이
1) 벡터(Vector)
벡터는 숫자들의 리스트입니다.
x = [2, 5, 3]
벡터 길이를 차원이라고 하며, 위 예시는 x ∈ R^3입니다.
| 벡터 | 차원 |
|---|---|
| [2, 5, 3] | 3 |
| [1, 4] | 2 |
2) 행렬(Matrix)
행렬은 숫자 표이며, 딥러닝에서는 "변환 장치"로 이해하면 쉽습니다.
W = [[1, 2],
[3, 4],
[5, 6]]
이때 W의 shape은 3 × 2입니다.
3) 핵심식: 선형 레이어
W: 가중치 행렬x: 입력 벡터b: bias 벡터y: 출력 벡터
왜 필요한가: 입력 특징을 다른 특징 공간으로 변환해 모델이 문제를 풀 수 있게 만듭니다.
W = [[1, 2],
[3, 4]]
x = [5, 6]
y = W @ x = [17, 39]
주의점: 행렬곱은 차원 규칙을 만족해야 합니다.
(m × n) · (n × k)에서 중간 차원 n이 같아야 합니다.
차원 관계 빠른표
| 변수 | 차원 |
|---|---|
| x | d |
| W | k × d |
| b | k |
| y | k |
(k × d)(d × 1) → (k × 1)
4) 전치(Transpose)
전치는 행과 열을 바꾸는 연산입니다.
A = [[1, 2, 3],
[4, 5, 6]]
A^T = [[1, 4],
[2, 5],
[3, 6]]
왜 필요한가: 내적 계산, attention 점수 계산(QK^T)에서 자주 등장합니다.
주의점: shape이 (m × n) -> (n × m)으로 바뀝니다.
5) 내적(Dot Product)
내적은 두 벡터가 얼마나 비슷한 방향인지 측정하는 값입니다.
x = [1, 2, 3]
y = [4, 5, 6]
x · y = 1*4 + 2*5 + 3*6 = 32
왜 필요한가: Transformer attention에서 토큰 유사도를 계산할 때 핵심 연산입니다.
주의점: 두 벡터의 차원이 같아야 합니다.
6) L2 노름 (벡터 길이)
x = [3, 4]
||x||_2 = sqrt(3^2 + 4^2) = 5
왜 필요한가: 정규화, 거리 계산, 수치 안정화에 쓰입니다.
7) 확률 기초와 언어모델 연결
언어모델은 다음 토큰 확률을 예측합니다. 따라서 P(x|y) 형태를 읽을 수 있어야 합니다.
이 체인 룰 관점이 Transformer/BERT/GPT를 이해할 때 중요한 기반이 됩니다.
8) Attention 수식 연결
QK^T: 토큰 간 유사도softmax: 가중치 정규화sqrt(d_k)로 나누는 이유: 차원 증가 시 점수 폭주를 완화해 학습 안정화
코드-수식 연결
| 수식 | PyTorch 코드 | 설명 |
|---|---|---|
y = Wx + b | y = W @ x + b | 선형 레이어 |
x · y | torch.dot(x, y) | 벡터 유사도 |
||x||_2 | torch.norm(x, p=2) | 벡터 길이 |
A^T | A.T | 전치 행렬 |
자주 하는 오해 5개
- 행렬곱을 원소별 곱(element-wise)으로 착각한다
- 벡터/행렬 차원을 확인하지 않고 계산을 시작한다
- 전치와 역행렬을 같은 개념으로 생각한다
- 내적과 행렬곱의 의미를 구분하지 못한다
- 노름(길이)과 거리(distance)를 혼동한다
체크리스트 (스스로 설명 가능해야 하는 질문)
- 왜 딥러닝 레이어는
y = Wx + b형태인가? - 행렬곱 차원 규칙
(m×n)(n×k)를 예시로 설명할 수 있는가? - 왜
W의 shape은(k × d)인가? - 행렬곱에서 중간 차원이 왜 같아야 하는가?
- 내적이 왜 유사도 신호로 쓰이는가?
- L2 노름은 무엇을 측정하며 어디에 쓰이는가?
- 벡터와 행렬의 차이를 한 문단으로 설명할 수 있는가?
- Attention에서
QK^T/sqrt(d_k)가 필요한 이유는 무엇인가?