1 선형대수학의 전체 지도
이 포스트는 Strang의 Introduction to Linear Algebra Ch.1에서 출발하여 선형대수학 전체 시리즈의 입구 역할을 한다. 아래는 앞으로 배울 내용의 로드맵이다. 각 장(chapter)이 이전 장 위에 쌓이는 구조이므로, 순서를 건너뛰지 않는 것이 중요하다.
| 장 | 핵심 질문 | 이 포스트와의 연결 |
|---|---|---|
| Ch.1 벡터 | 벡터를 어떻게 더하고, 곱하고, 조합하는가? | 이 포스트에서 다룬다 |
| Ch.2 연립방정식 | \(Ax = b\) 를 어떻게 체계적으로 푸는가? | 선형결합 \(c\mathbf{v} + d\mathbf{w}\) 이 \(Ax\) 의 정체이다 |
| Ch.3 벡터 공간 | 선형결합이 만드는 공간은 어떤 구조인가? | 선형결합의 집합 → 열 공간, 영 공간 |
| Ch.4 직교성 | 벡터들이 수직이면 무엇이 좋은가? | 내적 \(= 0\) 이 수직의 판별 기준이다 |
| Ch.5 행렬식 | 행렬이 가역인지 어떻게 아는가? | 행렬식 \(\neq 0\) 이면 선형결합으로 모든 \(b\) 에 도달 |
| Ch.6 고윳값 | 행렬이 벡터의 방향을 보존하는 경우는? | 고유벡터: \(A\mathbf{x} = \lambda\mathbf{x}\) — 스칼라 곱과 같은 효과 |
| Ch.7 양정치·SVD | 행렬의 “건강 상태”를 어떻게 판별하는가? | 내적 기반 이차형식 \(\mathbf{x}^T A\mathbf{x}\) 의 부호 |
이 포스트에서 정의하는 세 가지 — 선형결합, 내적, 노름 — 이 이후 모든 장의 기초가 된다.
2 왜 벡터에서 시작하는가
선형대수학의 출발점은 단순하다. 두 가지 연산—벡터 덧셈과 스칼라 곱—만 정의하면, 그 위에 행렬·부분공간·고유값·SVD까지 모든 것이 쌓인다.
Strang이 강조하는 핵심 메시지는 이것이다:
“선형대수학의 심장은 두 연산에 있다 — \(\mathbf{v} + \mathbf{w}\) 와 \(c\mathbf{v}\), 그리고 이를 결합한 선형결합 \(c\mathbf{v} + d\mathbf{w}\).” (Strang, 2009, Ch.1)
2차원·3차원에서 시작하지만, 이 직관은 \(n\) 차원 공간에서도 완벽하게 유지된다. 10차원 벡터를 그릴 수는 없지만, 연산 규칙은 2차원과 완전히 동일하다.
3 벡터의 기본 연산
3.1 벡터 덧셈 (Vector Addition)
\(n\) 차원 벡터 \(\mathbf{v} = (v_1, v_2, \ldots, v_n)\) 과 \(\mathbf{w} = (w_1, w_2, \ldots, w_n)\) 의 합은 성분별(component-wise) 덧셈으로 정의한다.
\[\mathbf{v} + \mathbf{w} = \begin{bmatrix} v_1 + w_1 \\ v_2 + w_2 \\ \vdots \\ v_n + w_n \end{bmatrix}\]
기하학적으로는 평행사변형의 대각선이다. \(\mathbf{v}\) 의 끝점에서 \(\mathbf{w}\) 를 이으면 합벡터 \(\mathbf{v} + \mathbf{w}\) 가 된다.
예시:
\[\mathbf{v} = \begin{bmatrix} 4 \\ 2 \end{bmatrix}, \quad \mathbf{w} = \begin{bmatrix} -1 \\ 2 \end{bmatrix} \implies \mathbf{v} + \mathbf{w} = \begin{bmatrix} 3 \\ 4 \end{bmatrix}\]
덧셈의 교환 법칙 \(\mathbf{v} + \mathbf{w} = \mathbf{w} + \mathbf{v}\) 는 성분끼리 비교하면 자명하다. 평행사변형에서는 “어느 방향으로 먼저 가도 같은 꼭짓점에 도달한다”는 의미이다.
3.2 스칼라 곱 (Scalar Multiplication)
실수 \(c\) 와 벡터 \(\mathbf{v}\) 의 곱은 각 성분에 \(c\) 를 곱한다.
\[c\mathbf{v} = \begin{bmatrix} cv_1 \\ cv_2 \\ \vdots \\ cv_n \end{bmatrix}\]
\(c > 1\) 이면 길어지고, \(0 < c < 1\) 이면 짧아지고, \(c < 0\) 이면 방향이 뒤집힌다. \(c = 0\) 이면 영벡터 \(\mathbf{0}\) 이 된다. 영벡터 \(\mathbf{0}\) 은 숫자 \(0\) 과 다르다 — 성분이 모두 0인 벡터이다.
4 선형결합 (Linear Combination)
벡터 \(\mathbf{v}\) 와 \(\mathbf{w}\) 의 선형결합(linear combination)은 스칼라 \(c, d\) 를 이용한 다음 표현이다.
\[c\mathbf{v} + d\mathbf{w}\]
\(c\) 와 \(d\) 가 모든 실수를 취할 때, 이 결합이 만드는 집합이 중요하다.
두 가지 기본 연산을 하나로 묶은 것이 선형결합이다. 특수한 경우들을 나열하면:
| \(c\) | \(d\) | 결과 |
|---|---|---|
| 1 | 1 | \(\mathbf{v} + \mathbf{w}\) (합) |
| 1 | \(-1\) | \(\mathbf{v} - \mathbf{w}\) (차) |
| 0 | 0 | \(\mathbf{0}\) (영벡터) |
| \(c\) | 0 | \(c\mathbf{v}\) (\(\mathbf{v}\) 방향 스케일링) |
4.1 선형결합이 만드는 기하학적 구조
\(n\) 차원 공간에서 벡터들의 선형결합이 만드는 집합이 어떤 모양인지가 선형대수학의 핵심 질문이다.
3차원 공간에서 벡터들의 선형결합 \(c_1\mathbf{u} + c_2\mathbf{v} + c_3\mathbf{w}\) 가 만드는 집합:
- 벡터 1개 \(\{c\mathbf{u}\}\) → 직선 (원점을 지나는 선)
- 벡터 2개 \(\{c\mathbf{u} + d\mathbf{v}\}\) → 평면 (원점을 지나는 2차원 평면)
- 벡터 3개 \(\{c\mathbf{u} + d\mathbf{v} + e\mathbf{w}\}\) → 3차원 전체 공간 \(\mathbb{R}^3\) (전형적인 경우)
“전형적인 경우”라는 단서가 중요하다. 세 번째 벡터 \(\mathbf{w}\) 가 이미 \(\mathbf{u}\) 와 \(\mathbf{v}\) 의 선형결합이라면, 3개 벡터로도 평면을 벗어나지 못한다. 이것이 나중에 배울 선형 독립(linear independence)과 기저(basis) 개념의 씨앗이다.
왜 중요한가: 선형결합은 선형대수학 전체를 관통한다.
- Ch.2: \(Ax\) 는 \(A\) 의 열들의 선형결합이다. “\(Ax = b\) 가 해를 가지는가?”는 “\(b\) 가 열들의 선형결합으로 표현 가능한가?”와 같은 질문이다
- Ch.3: 선형결합이 만드는 집합이 열 공간(Column Space) \(C(A)\) 이다. 열 공간의 차원이 랭크(rank)이다
- Ch.4: 데이터 \(b\) 가 열 공간 밖에 있으면 정확한 해가 없다. 이때 \(b\) 를 열 공간 위로 정사영(projection)하여 최적 근사해를 구한다 — 이것이 최소제곱법이다
- Ch.7: \(n\) 개 데이터 포인트를 \(p\) 개 벡터의 선형결합으로 표현할 수 있는지가 차원 축소(PCA, SVD)의 핵심 질문이다
5 내적 (Dot Product)
\(n\) 차원 벡터 \(\mathbf{v} = (v_1, \ldots, v_n)\) 과 \(\mathbf{w} = (w_1, \ldots, w_n)\) 의 내적은:
\[\mathbf{v} \cdot \mathbf{w} = v_1 w_1 + v_2 w_2 + \cdots + v_n w_n = \sum_{i=1}^{n} v_i w_i\]
두 벡터를 “곱해서 더하면” 하나의 스칼라가 나온다.
내적은 교환 법칙이 성립한다: \(\mathbf{v} \cdot \mathbf{w} = \mathbf{w} \cdot \mathbf{v}\).
5.1 내적의 직관: 수직성과 각도의 측정
수직 벡터의 내적은 0이다.
\[\mathbf{v} = \begin{bmatrix} 4 \\ 2 \end{bmatrix}, \quad \mathbf{w} = \begin{bmatrix} -1 \\ 2 \end{bmatrix} \implies \mathbf{v} \cdot \mathbf{w} = (4)(-1) + (2)(2) = 0\]
왜 수직이면 내적이 0인가? 피타고라스 정리에서 유도된다. \(\mathbf{v}\) 와 \(\mathbf{w}\) 가 수직이면 \(\|\mathbf{v}\|^2 + \|\mathbf{w}\|^2 = \|\mathbf{v} - \mathbf{w}\|^2\) 이다. 오른쪽을 전개하면 \(-2\mathbf{v} \cdot \mathbf{w}\) 항이 남고, 이를 0으로 만드는 조건이 \(\mathbf{v} \cdot \mathbf{w} = 0\) 이다 (Strang, 2009, §1.2).
내적의 부호는 두 벡터가 이루는 각도를 즉시 알려준다:
- \(\mathbf{v} \cdot \mathbf{w} > 0\) : 두 벡터의 각도 $< 90° $ (같은 방향에 가깝다)
- \(\mathbf{v} \cdot \mathbf{w} = 0\) : $= 90° $ (수직, 직교)
- \(\mathbf{v} \cdot \mathbf{w} < 0\) : $> 90° $ (반대 방향에 가깝다)
내적 \(= 0\) 이라는 조건은 Ch.4 직교성(Orthogonality)의 출발점이다. 행공간과 영공간이 직교한다는 사실, 투영 행렬, 그람-슈미트 과정, QR 분해 — 이 모든 것이 “내적이 0이면 수직”이라는 이 단순한 판별 기준에서 시작한다.
6 벡터의 길이와 단위벡터
6.1 길이 (노름, Norm)
벡터 \(\mathbf{v}\) 의 길이(노름)는 자기 자신과의 내적의 제곱근이다.
\[\|\mathbf{v}\| = \sqrt{\mathbf{v} \cdot \mathbf{v}} = \sqrt{v_1^2 + v_2^2 + \cdots + v_n^2}\]
2차원에서는 피타고라스 정리의 빗변이다. 3차원으로 확장하면 직육면체의 대각선이고, \(n\) 차원에서도 동일한 공식이 성립한다.
예시: \[\mathbf{v} = \begin{bmatrix} 1 \\ 2 \\ 3 \end{bmatrix} \implies \|\mathbf{v}\|^2 = 1 + 4 + 9 = 14 \implies \|\mathbf{v}\| = \sqrt{14}\]
\(n\) 차원 단위 큐브의 대각선 벡터 \((1, 1, \ldots, 1)\) 의 길이는 \(\sqrt{n}\) 이다. 차원이 커질수록 대각선이 길어진다는 것이 고차원의 직관이다.
6.2 단위벡터 (Unit Vector)
길이가 1인 벡터를 단위벡터(unit vector)라 한다. \(\mathbf{u} \cdot \mathbf{u} = 1\).
임의의 비영 벡터 \(\mathbf{v}\) 에서 단위벡터를 만들려면 길이로 나눈다:
\[\mathbf{u} = \frac{\mathbf{v}}{\|\mathbf{v}\|}\]
표준 기저벡터 \(\mathbf{i} = (1, 0)\), \(\mathbf{j} = (0, 1)\) 이 대표적인 단위벡터이다. 2차원에서 각도 \(\theta\) 방향의 단위벡터는 \((\cos\theta, \sin\theta)\) 이며, 단위원 위의 점에 해당한다.
왜 단위벡터가 중요한가: 방향만 남기고 크기를 제거한다. 코사인 유사도(cosine similarity)는 두 벡터를 단위벡터로 정규화한 뒤 내적을 구하는 것이다. 텍스트 문서의 방향(주제)을 비교할 때 길이(문서 길이)에 영향받지 않도록 하는 핵심 아이디어이다.
7 코사인 공식과 슈바르츠 부등식
비영 벡터 \(\mathbf{v}\) 와 \(\mathbf{w}\) 사이의 각도 \(\theta\) 는 다음으로 구한다.
\[\cos\theta = \frac{\mathbf{v} \cdot \mathbf{w}}{\|\mathbf{v}\| \|\mathbf{w}\|}\]
이를 슈바르츠 부등식(Schwarz Inequality)으로 이해하면: \(|\mathbf{v} \cdot \mathbf{w}| \leq \|\mathbf{v}\| \|\mathbf{w}\|\).
코사인은 \(-1\) 과 \(1\) 사이에 있으므로, 이 부등식이 성립해야 코사인 공식이 의미를 갖는다.
코사인 공식의 유도: 먼저 단위벡터 \(\mathbf{u} = \mathbf{v}/\|\mathbf{v}\|\), \(\mathbf{U} = \mathbf{w}/\|\mathbf{w}\|\) 를 구한다. 단위벡터끼리의 내적이 \(\cos\theta\) 임을 2차원 삼각함수 회전 변환으로 증명할 수 있다. 일반 벡터로 확장하면 위 공식이 된다 (Strang, 2009, §1.2).
슈바르츠 부등식이 말하는 것: “두 벡터의 내적은 길이의 곱보다 클 수 없다.” 등호는 \(\mathbf{v}\) 와 \(\mathbf{w}\) 가 평행할 때(\(\theta = 0\) 또는 $= 180° $)만 성립한다.
삼각 부등식: 슈바르츠 부등식의 결과로 \(\|\mathbf{v} + \mathbf{w}\| \leq \|\mathbf{v}\| + \|\mathbf{w}\|\) 가 따라온다. “두 변의 합은 나머지 한 변보다 크다”는 삼각형의 성질이다.
8 ML/DL에서의 응용
| 분야 | 활용 | 선형대수 개념 |
|---|---|---|
| 추천 시스템 | 사용자-아이템 유사도 측정 | \(\mathbf{u} \cdot \mathbf{v}\) (내적) |
| 자연어 처리 | 단어/문서 유사도 | \(\cos\theta = \mathbf{v} \cdot \mathbf{w} / (\|\mathbf{v}\|\|\mathbf{w}\|)\) |
| Attention 메커니즘 | Query-Key 관련도 | \(\text{score} = \mathbf{q} \cdot \mathbf{k}\) |
| 차원 축소 (PCA) | 분산이 최대인 방향 탐색 | 단위벡터 + 선형결합 |
| 신경망 레이어 | 가중합 = 입력의 선형결합 | \(c_1\mathbf{x}_1 + \cdots + c_n\mathbf{x}_n\) |
9 코드 예시
9.1 Step 1: Low-level 구현 (원리 이해)
import math
def dot_product(v: list, w: list) -> float:
"""내적 = 대응 성분끼리 곱한 뒤 합산"""
assert len(v) == len(w), "차원이 같아야 한다"
return sum(vi * wi for vi, wi in zip(v, w))
def norm(v: list) -> float:
"""L2 노름 = 각 성분 제곱합의 제곱근"""
return math.sqrt(dot_product(v, v))
def cosine_similarity(v: list, w: list) -> float:
"""코사인 유사도 = 내적 / (||v|| * ||w||)"""
return dot_product(v, w) / (norm(v) * norm(w))
def unit_vector(v: list) -> list:
"""단위벡터 = v / ||v||"""
n = norm(v)
return [vi / n for vi in v]
# 예시
v = [4, 2]
w = [-1, 2]
print(f"내적: {dot_product(v, w)}") # 0 → 수직
print(f"||v||: {norm([1, 2, 3]):.4f}") # sqrt(14) ≈ 3.7417
v = [3, 1]
w = [1, 3]
angle_rad = math.acos(cosine_similarity(v, w))
print(f"각도: {math.degrees(angle_rad):.1f}°") # 예상: 약 53.1°
# 선형결합 예시
c, d = 2, -1
u = [1, 0, 3]
v = [1, 2, 1]
linear_comb = [c * u[i] + d * v[i] for i in range(3)]
print(f"2u - v = {linear_comb}") # [1, -2, 5]9.2 Step 2: NumPy 구현 (실무 활용)
import numpy as np
import matplotlib.pyplot as plt
v = np.array([4, 2])
w = np.array([-1, 2])
# 내적
dot = np.dot(v, w) # 0 (수직)
dot_alt = v @ w # 동일 결과 (@ 연산자)
# 노름
norm_v = np.linalg.norm(np.array([1, 2, 3])) # sqrt(14)
# 코사인 유사도
v = np.array([3, 1])
w = np.array([1, 3])
cos_theta = np.dot(v, w) / (np.linalg.norm(v) * np.linalg.norm(w))
angle = np.degrees(np.arccos(cos_theta))
print(f"각도: {angle:.1f}°")
# 단위벡터
v = np.array([1, 1])
u = v / np.linalg.norm(v) # [1/sqrt(2), 1/sqrt(2)]
# 선형결합: 모든 가능한 cv + dw를 시각화
v = np.array([1, 0])
w = np.array([0, 1])
fig, ax = plt.subplots(figsize=(5, 5))
for c in np.linspace(-2, 2, 5):
for d in np.linspace(-2, 2, 5):
point = c * v + d * w
ax.scatter(*point, color='blue', s=30)
ax.axhline(0, color='gray', linewidth=0.5)
ax.axvline(0, color='gray', linewidth=0.5)
ax.set_title(r"$c\mathbf{v} + d\mathbf{w}$ 의 격자 구조")
ax.set_aspect('equal')
plt.tight_layout()
plt.show()10 노름 종류 비교 (Norm Types)
벡터의 크기를 측정하는 방법은 여러 가지가 있다. 머신러닝에서는 용도에 따라 다른 노름을 사용한다.
| 이름 | 기호 | 수식 | 특징 |
|---|---|---|---|
| L1 노름 (맨하탄) | \(\|\mathbf{x}\|_1\) | \(\sum_i \|x_i\|\) | 희소성(sparsity) 유도, 이상치에 강건 |
| L2 노름 (유클리드) | \(\|\mathbf{x}\|_2\) | \(\sqrt{\sum_i x_i^2}\) | 가장 일반적, 최소제곱법의 기반 |
| p-노름 | \(\|\mathbf{x}\|_p\) | \(\left(\sum_i \|x_i\|^p\right)^{1/p}\) | L1, L2의 일반화 |
| 최대 노름 | \(\|\mathbf{x}\|_\infty\) | \(\max_i \|x_i\|\) | 가장 큰 성분의 절댓값 |
| 프로베니우스 노름 | \(\|\mathbf{A}\|_F\) | \(\sqrt{\sum_{i,j} a_{ij}^2}\) | 행렬 버전의 L2 노름 |
import numpy as np
x = np.array([1, -2, 3])
# 다양한 노름 계산
l1 = np.linalg.norm(x, ord=1) # 맨하탄: |1|+|-2|+|3| = 6
l2 = np.linalg.norm(x) # 유클리드: sqrt(14) ≈ 3.742
linf = np.linalg.norm(x, ord=np.inf) # 최대: max(1,2,3) = 3
print(f"L1 노름: {l1}") # 6.0
print(f"L2 노름: {l2:.3f}") # 3.742
print(f"L∞ 노름: {linf}") # 3.0
# 두 벡터 사이의 거리
v = np.array([1, 2, 3])
w = np.array([4, 5, 6])
euclidean_dist = np.linalg.norm(v - w) # 유클리드 거리 ≈ 5.196
manhattan_dist = np.sum(np.abs(v - w)) # 맨하탄 거리 = 9
print(f"유클리드 거리: {euclidean_dist:.3f}")
print(f"맨하탄 거리: {manhattan_dist}")
# 프로베니우스 노름 (행렬)
A = np.array([[1, 2], [3, 4]])
fro = np.linalg.norm(A, 'fro') # sqrt(1+4+9+16) = sqrt(30) ≈ 5.477
print(f"프로베니우스 노름: {fro:.3f}")11 관련 주제
선행 지식
- 없음 (이 포스트가 선형대수의 출발점이다)
Ch.1~2: 벡터와 연립방정식
- 선형 방정식의 기하학적 해석 — \(Ax = b\) 를 행/열/행렬 관점으로
Ch.3: 벡터 공간 — 선형결합이 만드는 구조
Ch.4: 직교성 — 내적 \(= 0\) 에서 출발
- 직교 벡터와 부분공간 — 행공간 \(\perp\) 영공간
- 투영과 최소자승법 — 열 공간 위로의 정사영
- 정규직교 기저와 그람-슈미트 — QR 분해
Ch.6~7: 고윳값과 양정치 — 스칼라 곱의 확장
다른 카테고리 연결
- 최소제곱 회귀 — 내적이 정규방정식 \(A^\top A\hat{x} = A^\top b\) 에 등장
- Attention 메커니즘 — Transformer의 Query-Key 내적이 이 개념의 직접 응용