행렬 연산 — AI의 핵심 도구
행렬 곱셈의 차원 규칙 (m×n)·(n×p)=(m×p)과 전치, 브로드캐스팅을 이해한다.
ChatGPT는 초당 수십억 번의 행렬 곱셈을 한다. Transformer 모델의 모든 연산 — Attention, Feed-Forward, Embedding — 은 결국 행렬 곱셈이다. 행렬 연산 — 수백만 개의 숫자를 한 번에 처리하는 AI의 핵심 엔진이다.
행렬은 숫자를 행과 열로 배열한 직사각형 표입니다
| 용어 | 설명 |
|---|---|
| 행렬 | 숫자를 2차원 격자로 배열한 것, AI 가중치의 기본 단위 |
| 텐서 | 다차원 배열을 GPU에서 효율적으로 연산할 수 있게 만든 자료구조 |
벡터가 1차원이라면, 행렬은 2차원 숫자 표입니다
3×4 행렬 = 3행 4열 = 12개 숫자
행렬(Matrix), 전치(Transpose), 브로드캐스팅(Broadcasting)
AI에서 행렬의 역할: 가중치(Weight) = 학습된 행렬 (모델의 지식) 입력(Input) = 데이터 행렬 (토큰 임베딩 등) 출력(Output) = 가중치 × 입력 (행렬 곱)
행렬 곱셈에는 차원 규칙이 있습니다
C_ij = Σ_k A_ik × B_kj 행렬 A의 i행과 행렬 B의 j열을 원소끼리 곱한 후 합산하면 결과 행렬 C의 (i,j) 원소가 됩니다.
(m × n) · (n × p) = (m × p) 핵심 규칙: A의 열 수(n)와 B의 행 수(n)가 같아야 곱셈이 가능합니다. 결과 행렬의 크기는 A의 행 수(m) × B의 열 수(p)입니다.
차원 규칙 쉽게 기억하기: (m×n) · (n×p) → (m×p) 안쪽 숫자(n)는 같아야 하고, 바깥 숫자(m, p)가 결과 크기! GPT-4: (배치×토큰×768) · (768×768) → (배치×토큰×768)
NumPy로 행렬 곱셈, 전치, 브로드캐스팅을 실습합니다
@ 연산자로 행렬 곱셈, .T로 전치, 스칼라 덧셈으로 브로드캐스팅을 수행한다.
왜 NumPy를 써야 할까? 속도 차이를 비교해봅시다
| 비교 | 순수 Python | NumPy |
|---|---|---|
| 코드 | 3중 for 루프 | A @ B 한 줄 |
| 100×100 행렬 | ~3초 | ~0.001초 |
| 속도 차이 | — | 3000배 빠름! |
NumPy가 빠른 이유: 1. C언어로 구현된 내부 연산 (Python 루프 없음) 2. SIMD 벡터 명령어 (CPU가 여러 숫자를 동시에 처리) 3. 메모리 연속 배치 (캐시 효율 극대화) GPU의 CUDA도 같은 원리로 행렬 곱셈을 가속합니다.
Transformer의 핵심 연산들은 모두 행렬 곱셈입니다
Transformer 내부의 행렬 연산: 1. 임베딩: 토큰 ID → 벡터 (룩업 = 행렬의 행 선택) 2. Attention: Q·Kᵀ → 유사도 행렬 → V에 가중합 3. Feed-Forward: 행렬 곱 + 활성화 함수 4. 출력: 히든 벡터 → 어휘 확률 (행렬 곱 + Softmax) GPT-4는 파라미터 수조 개 = 수조 개의 행렬 원소!
중첩 리스트로 행렬 곱셈을 직접 구현하고 차원 규칙을 체감합니다
3중 for 루프로 행렬 곱셈을 구현하고, (2×3)·(3×2)=(2×2) 차원 규칙을 확인한다.
| 행렬 곱셈 규칙 | 설명 |
|---|---|
| 차원 규칙 | (m×n) · (n×p) = (m×p) — 안쪽 n이 같아야 곱셈 가능 |
| 교환 불가 | A×B ≠ B×A — 행렬 곱셈은 교환 법칙 미성립 |
| NumPy 연산 | A @ B 또는 np.dot(A, B)로 행렬 곱셈 수행 |
| AI에서의 행렬 | 설명 |
|---|---|
| 가중치(Weight) | 학습된 행렬 — 모델의 지식이 저장된 곳 |
| 전치(Transpose) | 행↔열 교환 — Attention의 Q·Kᵀ 연산에 필수 |
| 브로드캐스팅 | 크기가 다른 배열 간 연산을 자동 확장하여 수행 |
Transformer의 모든 핵심 연산(Embedding, Attention, Feed-Forward)은 결국 행렬 곱셈입니다!
(3×4) 행렬과 (4×2) 행렬을 곱하면 결과 행렬의 크기는?
행렬 곱셈 A×B와 B×A는 항상 같은 결과를 낸다.
(2×5) 행렬과 (3×4) 행렬은 곱셈이 가능하다.
NumPy에서 행렬 곱셈을 수행하는 연산자는?