검색
← 모듈 로드맵

선형대수 1: 벡터 · 행렬 · 내적 · 행렬 곱 · 노름

강의 · 입문자 · KAITABASE 정리

벡터 · 내적 · 코사인 유사도 · 노름 · 행렬 곱 · 역행렬 · 랭크를 2~3차원 숫자로 손계산하는 선형대수 기초

먼저 알아야 할 것

사칙연산 · 제곱근피타고라스 정리넘파이 배열 기초

다루는 내용

머신러닝의 기본 언어인 선형대수 첫 수업입니다. 스칼라 · 벡터 · 행렬 · 텐서, 내적과 코사인 유사도, L1 · L2 · L∞ 노름과 거리, 행렬-벡터 곱을 신경망 층 Wx+b로 읽는 법, 행렬 곱의 모양 규칙 · 계산량 · 배치 계산을 다룹니다. 2×2 역행렬로 연립방정식을 풀고 랭크 · 다중공선성의 뜻까지 넘파이로 검산한 예제로 익힙니다.

해설

선형대수 1: 벡터 · 행렬 · 내적 · 행렬 곱 · 노름

머신러닝에서 데이터 한 건은 벡터, 데이터 묶음과 모델의 가중치는 행렬입니다. 신경망 한 층의 계산도 "행렬 곱 + 덧셈"입니다. 이 수업은 벡터와 행렬, 내적과 코사인 유사도, 노름, 행렬-벡터 곱과 행렬 곱, 전치 · 역행렬 · 랭크를 2~3차원 숫자로 직접 계산하며 익힙니다.

항목내용
참고 자료Dive into Deep Learning 2.3절 'Linear Algebra' · d2l.ai/chapter_preliminaries/linear-algebra.html
트랙 · 수준수학 · 기초
이 수업의 범위스칼라 · 벡터 · 행렬 · 텐서, 벡터 덧셈 · 스칼라배, 내적과 각도, 코사인 유사도, L1 · L2 · L∞ 노름, 행렬-벡터 곱(선형 변환), 행렬 곱과 계산량, 전치 · 단위 행렬 · 역행렬, 선형 독립과 랭크, 배치 계산
먼저 알면 좋은 것사칙연산, 제곱근, 피타고라스 정리, 실습 준비의 넘파이 기초

들어가기 전에

한눈에 보기

  • 데이터 한 건을 특성 벡터로, 데이터 묶음을 데이터 행렬로 표현합니다.
  • 내적으로 두 벡터가 얼마나 같은 방향인지(코사인 유사도) 계산합니다.
  • 노름으로 벡터의 크기를 재고, L1 · L2가 정규화에 어떻게 쓰이는지 압니다.
  • 행렬-벡터 곱을 "입력을 다른 공간으로 옮기는 변환"으로 읽고, 신경망 층 Wx+bWx + b와 연결합니다.
  • 행렬 곱의 모양 규칙과 계산량, 역행렬 · 랭크의 뜻을 압니다.

1. 스칼라 · 벡터 · 행렬 · 텐서

직관(해설용 비유): 스칼라는 숫자 하나(온도 25도), 벡터는 숫자를 한 줄로 세운 목록(집 한 채의 면적 · 방 수 · 연식), 행렬은 표(집 100채 × 특성 3개), 텐서는 표를 여러 장 겹친 것(사진 한 장 = 가로 × 세로 × 색 3채널)입니다.

이름차원 수표기예
스칼라(scalar)0xx학습률 0.01
벡터(vector)1x∈Rd\mathbf{x} \in \mathbb{R}^d특성 3개인 집: (84,3,12)(84, 3, 12)
행렬(matrix)2X∈Rn×d\mathbf{X} \in \mathbb{R}^{n \times d}집 nn채 × 특성 dd개
텐서(tensor)3 이상X∈Rh×w×c\mathsf{X} \in \mathbb{R}^{h \times w \times c}이미지 높이 × 너비 × 채널

Rd\mathbb{R}^d는 "실수 dd개로 된 벡터들의 모임"이라는 뜻입니다. 이 과정에서는 벡터를 기본적으로 세로(열) 벡터로 보고, 데이터 행렬 X\mathbf{X}는 행 하나가 예제 하나가 되도록 둡니다.

벡터 덧셈과 스칼라배

같은 자리끼리 더하고, 스칼라는 모든 원소에 곱합니다.

a+b=(a1+b1,…,ad+bd),c a=(ca1,…,cad)\mathbf{a} + \mathbf{b} = (a_1 + b_1, \dots, a_d + b_d), \qquad c\,\mathbf{a} = (c a_1, \dots, c a_d)

숫자로 해 보기(해설용): a=(1,2)\mathbf{a} = (1, 2), b=(3,−1)\mathbf{b} = (3, -1)이면 a+b=(4,1)\mathbf{a} + \mathbf{b} = (4, 1), 2a=(2,4)2\mathbf{a} = (2, 4)입니다. 경사 하강법의 갱신 w←w−η∇L\mathbf{w} \leftarrow \mathbf{w} - \eta \nabla L은 바로 "벡터에서 스칼라배한 벡터를 빼는" 계산입니다.

2. 내적: 두 벡터가 얼마나 같은 쪽을 보나

직관: 내적(dot product)은 "같은 자리끼리 곱해서 모두 더한 값"입니다. 두 벡터가 같은 방향이면 크고, 수직이면 0, 반대 방향이면 음수입니다.

a⊤b=∑i=1daibi=∥a∥2 ∥b∥2cos⁡θ\mathbf{a}^\top \mathbf{b} = \sum_{i=1}^{d} a_i b_i = \|\mathbf{a}\|_2 \, \|\mathbf{b}\|_2 \cos\theta
기호뜻
a⊤b\mathbf{a}^\top \mathbf{b}내적 (⊤\top는 전치 — 세로 벡터를 가로로 눕힘)
∥a∥2\Vert\mathbf{a}\Vert_2a\mathbf{a}의 길이(L2 노름)
θ\theta두 벡터 사이의 각도

숫자로 해 보기(해설용): a=(1,2,2)\mathbf{a} = (1, 2, 2), b=(2,0,1)\mathbf{b} = (2, 0, 1)입니다.

  1. 내적: 1⋅2+2⋅0+2⋅1=41 \cdot 2 + 2 \cdot 0 + 2 \cdot 1 = 4
  2. 길이: ∥a∥=1+4+4=3\|\mathbf{a}\| = \sqrt{1 + 4 + 4} = 3, ∥b∥=4+0+1=5≈2.236\|\mathbf{b}\| = \sqrt{4 + 0 + 1} = \sqrt{5} \approx 2.236
  3. cos⁡θ=4/(3×2.236)≈0.596\cos\theta = 4 / (3 \times 2.236) \approx 0.596 — 각도로 약 53도입니다.

코사인 유사도

cos⁡θ=a⊤b∥a∥ ∥b∥\cos\theta = \dfrac{\mathbf{a}^\top \mathbf{b}}{\|\mathbf{a}\|\,\|\mathbf{b}\|}를 코사인 유사도(cosine similarity)라고 합니다. 길이를 나눠 없애고 방향만 비교하므로, 문서 길이가 달라도 주제가 비슷하면 높게 나옵니다. 문장 임베딩 검색, 추천 시스템이 이 값을 씁니다. 자세한 쓰임은 임베딩과 벡터 유사도에서 봅니다.

왜 내적이 중요한가: 선형 모델의 예측 y^=w⊤x+b\hat{y} = \mathbf{w}^\top \mathbf{x} + b, 어텐션의 점수 q⊤k\mathbf{q}^\top \mathbf{k}, 검색의 유사도 — 머신러닝의 가장 흔한 계산이 모두 내적입니다. "가중치와 입력이 같은 방향일수록 큰 값"이라는 그림 하나로 많은 모델이 읽힙니다.

3. 노름: 벡터의 크기 재기

직관: 노름(norm)은 "원점에서 얼마나 먼가"를 재는 자입니다. 자를 대는 방식에 따라 이름이 다릅니다.

∥x∥1=∑i∣xi∣,∥x∥2=∑ixi2,∥x∥∞=max⁡i∣xi∣\|\mathbf{x}\|_1 = \sum_i |x_i|, \qquad \|\mathbf{x}\|_2 = \sqrt{\sum_i x_i^2}, \qquad \|\mathbf{x}\|_\infty = \max_i |x_i|
노름뜻비유(해설용)머신러닝 쓰임
L1절댓값의 합바둑판 길을 따라 걷는 거리라쏘 정규화 — 가중치를 0으로 만들기 쉬움
L2제곱합의 제곱근직선거리릿지 · 가중치 감쇠, 유클리드 거리
L∞가장 큰 절댓값가장 긴 한 변적대적 예제의 허용 범위

숫자로 해 보기(해설용): x=(3,−4)\mathbf{x} = (3, -4)이면 ∥x∥1=7\|\mathbf{x}\|_1 = 7, ∥x∥2=9+16=5\|\mathbf{x}\|_2 = \sqrt{9 + 16} = 5, ∥x∥∞=4\|\mathbf{x}\|_\infty = 4입니다.

두 점 사이의 거리는 차 벡터의 노름입니다. p=(1,1)\mathbf{p} = (1, 1), q=(4,5)\mathbf{q} = (4, 5)의 유클리드 거리는 ∥(3,4)∥2=5\|(3, 4)\|_2 = 5입니다. k-최근접 이웃, k-평균 군집화가 이 거리를 씁니다.

4. 행렬-벡터 곱: 입력을 변환하기

직관: 행렬 W\mathbf{W}에 벡터 x\mathbf{x}를 곱하면 새 벡터가 나옵니다. W\mathbf{W}의 행마다 x\mathbf{x}와 내적을 하는 것입니다. 행이 mm개면 출력도 mm개 — 즉 dd차원 입력을 mm차원으로 옮기는 변환입니다.

y=Wx,yi=∑j=1dWij xj,W∈Rm×d, x∈Rd, y∈Rm\mathbf{y} = \mathbf{W}\mathbf{x}, \qquad y_i = \sum_{j=1}^{d} W_{ij}\, x_j, \qquad \mathbf{W} \in \mathbb{R}^{m \times d},\ \mathbf{x} \in \mathbb{R}^{d},\ \mathbf{y} \in \mathbb{R}^{m}

숫자로 해 보기(해설용):

W=(1201−11),x=(31) ⇒ Wx=(1⋅3+2⋅10⋅3+1⋅1−1⋅3+1⋅1)=(51−2)\mathbf{W} = \begin{pmatrix} 1 & 2 \\ 0 & 1 \\ -1 & 1 \end{pmatrix},\quad \mathbf{x} = \begin{pmatrix} 3 \\ 1 \end{pmatrix} \ \Rightarrow\ \mathbf{W}\mathbf{x} = \begin{pmatrix} 1\cdot3 + 2\cdot1 \\ 0\cdot3 + 1\cdot1 \\ -1\cdot3 + 1\cdot1 \end{pmatrix} = \begin{pmatrix} 5 \\ 1 \\ -2 \end{pmatrix}

2차원 입력이 3차원 출력이 되었습니다. 신경망의 완전 연결 층(fully connected layer)은 정확히 이것에 편향을 더한 y=Wx+b\mathbf{y} = \mathbf{W}\mathbf{x} + \mathbf{b}입니다. 여기에 ReLU 같은 비선형 함수를 씌우고 층을 쌓으면 다층 퍼셉트론이 됩니다.

다른 읽기 방법 — 열의 섞음: Wx\mathbf{W}\mathbf{x}는 "W\mathbf{W}의 열들을 xjx_j만큼씩 섞은 것"이기도 합니다. 위 예는 3×(1,0,−1)+1×(2,1,1)=(5,1,−2)3 \times (1, 0, -1) + 1 \times (2, 1, 1) = (5, 1, -2)입니다. 이 읽기는 랭크(6절)를 이해할 때 쓸모 있습니다.

5. 행렬 곱: 변환을 이어 붙이기

C=AB,Cik=∑jAijBjk,(m×n)(n×p)→(m×p)\mathbf{C} = \mathbf{A}\mathbf{B}, \qquad C_{ik} = \sum_{j} A_{ij} B_{jk}, \qquad (m \times n)(n \times p) \to (m \times p)
규칙설명
모양앞 행렬의 열 수 nn = 뒤 행렬의 행 수 nn이어야 함
결합 법칙(AB)C=A(BC)(\mathbf{A}\mathbf{B})\mathbf{C} = \mathbf{A}(\mathbf{B}\mathbf{C}) — 항상 성립
교환 법칙AB≠BA\mathbf{A}\mathbf{B} \ne \mathbf{B}\mathbf{A} — 일반적으로 성립하지 않음
계산량곱셈 m⋅n⋅pm \cdot n \cdot p번

숫자로 해 보기(해설용) — 교환이 안 되는 예: A=(1234)\mathbf{A} = \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix}, B=(0110)\mathbf{B} = \begin{pmatrix} 0 & 1 \\ 1 & 0 \end{pmatrix}이면

AB=(2143) (열 바꾸기),BA=(3412) (행 바꾸기)\mathbf{A}\mathbf{B} = \begin{pmatrix} 2 & 1 \\ 4 & 3 \end{pmatrix}\ (\text{열 바꾸기}),\qquad \mathbf{B}\mathbf{A} = \begin{pmatrix} 3 & 4 \\ 1 & 2 \end{pmatrix}\ (\text{행 바꾸기})

로 서로 다릅니다. "어느 쪽에 곱하느냐"가 뜻을 바꿉니다.

배치 계산: 예제 여러 개를 한 번에

예제 nn개를 행으로 쌓은 X∈Rn×d\mathbf{X} \in \mathbb{R}^{n \times d}에 가중치 W∈Rd×k\mathbf{W} \in \mathbb{R}^{d \times k}를 곱하면 XW∈Rn×k\mathbf{X}\mathbf{W} \in \mathbb{R}^{n \times k} — 모든 예제의 출력이 한 번에 나옵니다. (행 = 예제로 두면 4절과 달리 W\mathbf{W}가 오른쪽에 옵니다. 표기 차이일 뿐 같은 계산입니다.)

숫자로 해 보기(해설용): X=(102011)\mathbf{X} = \begin{pmatrix} 1 & 0 & 2 \\ 0 & 1 & 1 \end{pmatrix}, W=(1−10211)\mathbf{W} = \begin{pmatrix} 1 & -1 \\ 0 & 2 \\ 1 & 1 \end{pmatrix}이면 첫 행은 (1+0+2, −1+0+2)=(3,1)(1 + 0 + 2,\ -1 + 0 + 2) = (3, 1), 둘째 행은 (0+0+1, 0+2+1)=(1,3)(0 + 0 + 1,\ 0 + 2 + 1) = (1, 3)입니다. 넘파이로 계산해도 같습니다.

왜 GPU가 필요한가: 행렬 곱은 서로 독립인 곱셈 · 덧셈이 아주 많아 한꺼번에 나눠 계산하기 좋습니다. 은닉층이 4,096 × 4,096인 층에 예제 1,024개를 넣으면 곱셈만 1024×4096×4096≈1721024 \times 4096 \times 4096 \approx 172억 번입니다(해설용 계산). 수천 개의 코어로 동시에 계산하는 GPU가 딥러닝의 핵심 하드웨어가 된 이유입니다.

mermaid
flowchart LR
  A[데이터 한 건: 특성 벡터 x] --> B[여러 건 쌓기: 데이터 행렬 X]
  B --> C[행렬 곱 XW: 모든 예제를 한 번에 변환]
  C --> D[편향 더하기 + 비선형 함수]
  D --> E[다음 층 또는 출력]
  A --> F[내적 · 코사인: 두 벡터 비교]
  A --> G[노름: 크기 · 거리 재기]

6. 전치 · 단위 행렬 · 역행렬 · 랭크

전치와 단위 행렬

  • 전치(transpose) A⊤\mathbf{A}^\top: 행과 열을 바꿉니다. (AB)⊤=B⊤A⊤(\mathbf{A}\mathbf{B})^\top = \mathbf{B}^\top \mathbf{A}^\top (순서가 뒤집힘).
  • 단위 행렬(identity) I\mathbf{I}: 대각선이 1, 나머지 0. Ix=x\mathbf{I}\mathbf{x} = \mathbf{x} — 아무것도 바꾸지 않는 변환입니다.
  • 대칭 행렬(symmetric): A⊤=A\mathbf{A}^\top = \mathbf{A}. 공분산 행렬이 대표적이고, 선형대수 2의 고유값 분해에서 주인공입니다.

역행렬과 연립방정식

직관: 역행렬(inverse) A−1\mathbf{A}^{-1}은 변환 A\mathbf{A}를 "되돌리는" 변환입니다. A−1A=I\mathbf{A}^{-1}\mathbf{A} = \mathbf{I}. 그래서 Ax=b\mathbf{A}\mathbf{x} = \mathbf{b}의 해는 x=A−1b\mathbf{x} = \mathbf{A}^{-1}\mathbf{b}입니다.

2 × 2 행렬은 공식이 있습니다.

A=(abcd),det⁡A=ad−bc,A−1=1ad−bc(d−b−ca)\mathbf{A} = \begin{pmatrix} a & b \\ c & d \end{pmatrix},\qquad \det\mathbf{A} = ad - bc,\qquad \mathbf{A}^{-1} = \frac{1}{ad - bc}\begin{pmatrix} d & -b \\ -c & a \end{pmatrix}

숫자로 해 보기(해설용): A=(2113)\mathbf{A} = \begin{pmatrix} 2 & 1 \\ 1 & 3 \end{pmatrix}, b=(3,5)\mathbf{b} = (3, 5)를 풉니다.

  1. det⁡A=2⋅3−1⋅1=5\det\mathbf{A} = 2 \cdot 3 - 1 \cdot 1 = 5
  2. A−1=15(3−1−12)\mathbf{A}^{-1} = \frac{1}{5}\begin{pmatrix} 3 & -1 \\ -1 & 2 \end{pmatrix}
  3. x=15(3⋅3−1⋅5, −1⋅3+2⋅5)=(0.8, 1.4)\mathbf{x} = \frac{1}{5}(3 \cdot 3 - 1 \cdot 5,\ -1 \cdot 3 + 2 \cdot 5) = (0.8,\ 1.4)
  4. 검산: 2(0.8)+1.4=32(0.8) + 1.4 = 3, 0.8+3(1.4)=50.8 + 3(1.4) = 5 ✓

왜 실무에서는 역행렬을 직접 안 구하나: 역행렬을 구한 뒤 곱하는 것보다 np.linalg.solve처럼 방정식을 바로 푸는 쪽이 빠르고 수치 오차도 작습니다. 선형 회귀의 정규방정식 (X⊤X)−1X⊤y(\mathbf{X}^\top\mathbf{X})^{-1}\mathbf{X}^\top\mathbf{y}도 실제 구현은 분해(QR, SVD 등)로 풉니다.

선형 독립과 랭크

직관: 벡터 묶음에서 어느 하나가 다른 벡터들의 섞음으로 만들어지면 "새 정보가 없는" 벡터입니다. 서로 이렇게 만들어지지 않으면 선형 독립(linearly independent)이고, 행렬에서 독립인 열(또는 행)의 최대 개수가 랭크(rank)입니다.

숫자로 해 보기(해설용): (1224)\begin{pmatrix} 1 & 2 \\ 2 & 4 \end{pmatrix}는 둘째 열이 첫째 열의 2배라 랭크가 1입니다. 행렬식도 1⋅4−2⋅2=01 \cdot 4 - 2 \cdot 2 = 0이라 역행렬이 없습니다. 이 행렬은 2차원 평면 전체를 한 직선 위로 눌러 버리므로, 눌린 결과에서 원래 점을 되찾을 수 없습니다. 데이터에서 "키(cm)"와 "키(m)" 열이 함께 있으면 이런 일이 생기고(다중공선성), 회귀 계수가 불안정해집니다.

연습 문제

1. a=(2,1)\mathbf{a} = (2, 1), b=(−1,2)\mathbf{b} = (-1, 2)의 내적과 코사인 유사도는? 두 벡터의 관계는?

풀이: 내적 =−2+2=0= -2 + 2 = 0, 코사인 유사도 0 — 서로 수직입니다.

2. x=(1,−2,2)\mathbf{x} = (1, -2, 2)의 L1 · L2 · L∞ 노름은?

풀이: L1 =1+2+2=5= 1 + 2 + 2 = 5, L2 =1+4+4=3= \sqrt{1 + 4 + 4} = 3, L∞ =2= 2입니다.

3. 모양이 (32×784)(32 \times 784)인 입력 배치에 (784×128)(784 \times 128) 가중치를 곱하면 출력 모양과 곱셈 횟수는?

풀이: 출력은 (32×128)(32 \times 128), 곱셈은 32×784×128=3,211,26432 \times 784 \times 128 = 3{,}211{,}264번입니다.

4. A=(4211)\mathbf{A} = \begin{pmatrix} 4 & 2 \\ 1 & 1 \end{pmatrix}의 역행렬은?

풀이: det⁡=4−2=2\det = 4 - 2 = 2, A−1=12(1−2−14)=(0.5−1−0.52)\mathbf{A}^{-1} = \frac{1}{2}\begin{pmatrix} 1 & -2 \\ -1 & 4 \end{pmatrix} = \begin{pmatrix} 0.5 & -1 \\ -0.5 & 2 \end{pmatrix}입니다. 검산: AA−1\mathbf{A}\mathbf{A}^{-1}의 첫 행 =(4⋅0.5−2⋅0.5, −4+4)=(1,0)= (4 \cdot 0.5 - 2 \cdot 0.5,\ -4 + 4) = (1, 0) ✓.

스스로 점검

  1. 신경망 층 y=Wx+b\mathbf{y} = \mathbf{W}\mathbf{x} + \mathbf{b}에서 W\mathbf{W}가 (256×512)(256 \times 512)이면 입력과 출력의 차원은?
    • 답: 입력 x\mathbf{x}는 512차원, 출력 y\mathbf{y}는 256차원입니다. 행 수가 출력, 열 수가 입력 차원입니다.
  2. 코사인 유사도가 내적보다 검색에 자주 쓰이는 이유는?
    • 답: 벡터 길이의 영향을 없애고 방향(뜻)만 비교하기 때문입니다. 길이가 다른 문서도 공정하게 비교할 수 있습니다.
  3. 행렬식이 0인 행렬은 왜 역행렬이 없나요?
    • 답: 공간을 더 낮은 차원으로 눌러 버려(랭크 부족) 서로 다른 입력이 같은 출력으로 가기 때문에, 출력에서 입력을 하나로 되찾을 수 없습니다.

용어 정리

용어쉬운 뜻
스칼라(scalar)숫자 하나
벡터(vector)숫자를 한 줄로 늘어놓은 것, 데이터 한 건
행렬(matrix)숫자 표, 데이터 묶음 또는 가중치
텐서(tensor)3차원 이상으로 쌓은 숫자 묶음
내적(dot product)같은 자리끼리 곱해 더한 값
코사인 유사도(cosine similarity)길이를 뺀 방향의 닮음, −1~1
노름(norm)벡터의 크기 (L1 · L2 · L∞)
행렬-벡터 곱행마다 내적해 새 벡터를 만드는 변환
전치(transpose)행과 열 바꾸기
단위 행렬(identity)아무것도 바꾸지 않는 행렬
역행렬(inverse)변환을 되돌리는 행렬
행렬식(determinant)2 × 2에서 ad−bcad - bc, 0이면 역행렬 없음
랭크(rank)독립인 열(행)의 최대 개수
선형 독립(linear independence)어느 벡터도 다른 벡터들의 섞음으로 못 만듦

더 깊이 보려면

D2L 2.3절은 스칼라 · 벡터 · 행렬 · 텐서, 텐서 연산의 성질, 합 · 평균 같은 축소(reduction), 내적, 행렬-벡터 곱, 행렬 곱, 노름을 PyTorch · 넘파이 코드와 함께 설명하고 연습 문제를 둡니다. 증명과 기하학적 해석을 더 원하면 머신러닝을 위한 수학의 2장(선형대수)과 3장(해석 기하)을 이어서 보세요.

다음에 볼 것

라이선스

이 글은 원문 번역이 아니라 KAITABASE가 직접 쓴 해설이며, 숫자 예는 모두 설명용으로 만들고 넘파이로 다시 계산해 확인했습니다. 참고 자료 D2L은 CC BY-SA 4.0(본문)으로 공개되어 있습니다.

출처

AI 원리부터 이해하기 · 수학 모듈

수학 모듈 학습

이 글은 수학 모듈의 학습 자료입니다. 전체 9개 자료 중 1번째입니다.

AI 기초 과정은 현재 진도 저장을 지원하지 않습니다.

출처·원문

원문 보기

요약만

본문 자체 작성 · 참고 자료 D2L(CC BY-SA 4.0)