NumPy를 처음 배울 때 이런 경험을 한 적 있습니다. for 루프로 100만 개 데이터를 처리하는 코드가 10초 걸렸는데, 행렬 연산으로 바꿨더니 0.1초로 줄었습니다. 100배 빨라진 겁니다. 코드는 오히려 더 짧아졌고요. 그때 처음으로 "아, 행렬이 그냥 수학 개념이 아니구나"라는 걸 실감했습니다.
머신러닝에서 행렬이 필수인 이유는 단순히 "그렇게 만들었기 때문"이 아닙니다. 대규모 데이터를 가장 빠르고 효율적으로 처리할 수 있는 수학적 구조가 행렬이기 때문입니다. 오늘은 그 이유를 구체적으로 따라가 보겠습니다.

벡터화 — for 루프를 행렬로 바꾸면 어떻게 되는가
데이터 100만 개에 가중치 w=2를 곱하는 작업을 두 가지 방식으로 해봅니다.
result = []
for x in data: # 100만 번 반복
result.append(x * 2)
# 소요 시간: 약 10초
# 방식 2: 행렬 연산 (NumPy)
result = data * 2 # 한 줄
# 소요 시간: 약 0.1초
→ 100배 차이. 코드는 오히려 더 짧아짐
왜 이런 차이가 날까요. for 루프는 매 반복마다 명령을 새로 내리고 메모리에 접근합니다. 행렬 연산은 데이터 전체를 하나의 덩어리로 묶어 한 번의 명령으로 처리합니다. 이걸 벡터화(Vectorization)라고 합니다. 머신러닝에서 데이터가 항상 행렬 형태로 표현되는 근본 이유입니다.
GPU가 행렬을 좋아하는 이유
GPU가 머신러닝에 필수가 된 이유도 행렬입니다. CPU와 GPU의 차이를 비유로 설명하면 이렇습니다. CPU는 아주 유능한 직원 8명이 순서대로 일하는 구조입니다. GPU는 조금 덜 유능한 직원 수천 명이 동시에 일하는 구조입니다.
행렬 곱셈은 각 원소의 계산이 서로 독립적입니다. A×B 행렬에서 결과 행렬의 (1,1) 원소를 계산하는 것과 (2,3) 원소를 계산하는 것이 서로 영향을 주지 않습니다. 그래서 수천 개를 동시에 계산할 수 있고, GPU는 바로 이 병렬 계산에 최적화된 하드웨어입니다.
C[0][0] = A[0] · B 열0 ← 독립적으로 계산 가능
C[0][1] = A[0] · B 열1 ← 독립적으로 계산 가능
C[1][0] = A[1] · B 열0 ← 독립적으로 계산 가능
...
→ 모든 원소를 동시에 병렬 계산 가능
→ GPU 코어 수천 개가 동시에 달라붙는 이유
신경망 층을 통과한다는 것의 수학적 의미
신경망의 각 층은 수학적으로 하나의 행렬 곱셈입니다. y = Wx + b. 여기서 W(가중치 행렬)는 단순한 숫자 판이 아닙니다. 입력 데이터를 새로운 공간으로 변환하는 선형 변환입니다.
데이터가 층을 통과하면서 회전하거나, 늘어나거나, 압축됩니다. 이 변환이 반복되면서 처음엔 구분하기 어려웠던 데이터가 점점 분류하기 쉬운 형태로 바뀝니다. 고양이 사진이 수천 차원의 픽셀 값으로 들어와서 "고양이 = 0.95"라는 숫자로 나오는 과정이 모두 행렬 곱셈의 연속입니다.
↓ W1 × x + b1 (행렬 곱셈 + 편향)
은닉층1: h1 (256차원)
↓ W2 × h1 + b2
은닉층2: h2 (128차원)
↓ W3 × h2 + b3
출력층: y (10차원: 숫자 0~9 확률)
→ 모든 층이 행렬 곱셈으로 연결됨
딥러닝 모델을 설계한다는 건 사실 이 행렬들의 크기와 개수를 설계하는 겁니다. 레이어 크기를 512로 하느냐 256으로 하느냐는 곧 행렬의 행과 열 수를 결정하는 것과 같습니다.
경사하강법과 행렬의 연결
학습 과정에서 가중치를 업데이트하는 경사하강법도 행렬 없이는 불가능합니다. GPT 같은 모델은 가중치가 수천억 개입니다. 이를 하나씩 계산하면 한 번의 학습 스텝에 천 년이 걸릴 수도 있습니다.
역전파에서 계산되는 모든 편미분값을 그레디언트 행렬로 묶어서 한 번에 업데이트합니다. 이 연재에서 다룬 편미분, 야코비안 행렬, 연쇄법칙이 모두 여기서 결합됩니다.
반복문 기반 연산과 행렬 기반 연산의 차이를 정리하면 이렇습니다.
| 특징 | 반복문 기반 | 행렬 기반 |
|---|---|---|
| 연산 속도 | 매우 느림 | 압도적으로 빠름 |
| 코드 가독성 | 복잡한 다중 루프 | 간결한 수식 한 줄 |
| 하드웨어 활용 | CPU 직렬 연산 | GPU/TPU 병렬 가속 |
| 데이터 표현 | 개별 값의 나열 | 공간상의 벡터 덩어리 |
고차원 공간을 다루는 언어로서의 선형대수학
인간의 뇌는 3차원 이상을 시각화하기 어렵습니다. 하지만 머신러닝 모델은 수천 차원의 공간에서 작동합니다. 선형대수학은 이 고차원 공간을 수학적으로 완벽하게 다룰 수 있는 언어입니다.
이 연재에서 다룬 개념들이 모두 연결됩니다. 편미분으로 각 가중치의 기울기를 구하고, 야코비안 행렬로 층 간 기울기를 전달하고, 공분산 행렬과 고윳값으로 데이터의 주요 방향을 찾고, SVD로 행렬을 분해해서 숨겨진 패턴을 발견합니다. 이 모든 게 선형대수학이라는 하나의 체계 안에서 작동합니다.
결국 AI는 거대한 행렬 연산의 결과물이다
ChatGPT에 질문을 입력하면 텍스트가 수천 차원의 벡터로 변환되고, 수백 개의 층을 거치면서 수천억 번의 행렬 곱셈이 일어나고, 최종적으로 다음 단어의 확률 분포가 출력됩니다. 그 결과가 자연스러운 문장으로 나오는 겁니다.
행렬이 그냥 숫자 판처럼 보일 때와 데이터를 변환하는 선형 변환으로 이해될 때, 모델을 보는 시각이 완전히 달라집니다. 레이어를 추가한다는 게 공간 변환을 하나 더 쌓는다는 의미가 되고, 차원을 줄인다는 게 정보를 압축하는 과정이라는 게 보이기 시작합니다. 수학을 아는 것과 모르는 것의 차이가 여기서 납니다.
'데이터 과학 수학' 카테고리의 다른 글
| 훈련 99% 검증 67%, 과적합을 잡는 L1·L2 규제의 원리 (0) | 2026.04.10 |
|---|---|
| 딥러닝의 심장, 역전파(Backpropagation)와 연쇄 법칙의 마법 (0) | 2026.04.09 |
| 데이터의 뼈대만 남기다, 주성분 분석(PCA)의 마법과 원리 (0) | 2026.04.07 |
| 공간의 변하지 않는 축, 고윳값과 고유벡터의 기하학적 의미 (0) | 2026.04.06 |
| 데이터의 그릇, 벡터와 행렬의 본질과 머신러닝 연산 (0) | 2026.04.05 |