모두의 AI
머신러닝AI논문
로딩 중…

배우기

🏅내 업적

Ch.04

행렬 곱셈과 선형 변환: 공간을 돌리고 늘리는 마법

챕터별 수학 도식화

챕터를 선택하면 아래 도식이 해당 챕터 내용으로 바뀌어요. 중급 수학 흐름을 한눈에 보세요.

정사각 격자 → AAA → 기울어진 격자

왼쪽 같은 좌표의 점이 오른쪽으로 한 번에 옮겨져요. 격자 전체가 같이 늘어납니다.

주황 배지의 A: 이 그림에서 쓰는 행렬 AAA(선형 변환)입니다. 왼쪽 좌표 x\mathbf{x}x에 곱해 오른쪽 점 AxA\mathbf{x}Ax를 만듭니다.

입력출력a₁a₂xAxℝ²: 입력용 2차원 실수 공간(좌표 쌍). 회귀분석의 R제곱과는 다른 기호입니다.ℝ²실수 좌표평면 · 입력ℝ²: 변환 결과를 그리는 2차원 실수 공간. 이 그림에서는 입력과 같은 차원입니다.ℝ²실수 좌표평면 · 출력A회색 점선 = A=I 일 때 정사각형

같은 평면에서 정사각 격자가 행렬 A로 평행사변형되고, 점이 x에서 Ax로 옮겨집니다.

입력 / 큰 틀|AAA|도달 면|x↦Ax\mathbf{x} \mapsto A\mathbf{x}x↦Ax

이 그림만 기억해요

T(x)=AxT(\mathbf{x})=A\mathbf{x}T(x)=Ax. TTT는 “벡터를 행렬 AAA로 옮기는 선형 변환”을 가리키는 이름(함수 기호)이에요. 그래서 T(x)T(\mathbf{x})T(x)는 “x\mathbf{x}x에 TTT를 적용한 결과”이고, 계산으로는 AxA\mathbf{x}Ax와 같은 말입니다.
파란 영역 = 행렬 AAA의 두 열 벡터가 만든 평행사변형(열들이 펼치는 면). 선형 변환의 결과 T(x)=AxT(\mathbf{x})=A\mathbf{x}T(x)=Ax는 항상 그 안(두 열의 조합으로만 만들 수 있는 범위)에만 찍혀요.
행렬 곱셈은 단순히 수많은 숫자를 더하고 곱하는 지루한 연산이 아닙니다. 사실 행렬은 원본 데이터를 회전시키고, 비틀고, 압축하는 '디지털 사진 편집기의 스마트 필터'와 완벽하게 같은 역할을 합니다. 이번 장에서는 하나의 데이터(벡터)를 편집기(행렬)에 넣어 전혀 다른 차원으로 변환시키는 '선형 변환(Linear Transformation)'의 심연을 들여다봅니다. 딥러닝 모델의 가장 근본적인 뼈대인 y=Wx+b\mathbf{y} = W\mathbf{x} + \mathbf{b}y=Wx+b가 어떤 수학적 의미를 품고 작동하는지 자세히 파헤쳐 보겠습니다.

행렬 곱셈과 선형 변환: 공간을 자유자재로 편집하기

1. 선형 변환 (Linear Transformation): 이미지 편집기의 '자유 변형' 툴
개념: 투명한 격자무늬(모눈) 위에 그려진 이미지를 포토샵으로 불러왔다고 상상해 보세요. 마우스로 모서리를 잡고 이미지를 대각선으로 쭉 늘리거나, 45도 회전시키거나, 비스듬하게 눕혀서 찌그러뜨리는 모든 작업이 기하학에서 말하는 '선형 변환'입니다.
엄격한 규칙: 단, 이 변형 툴에는 절대 깨져서는 안 되는 두 가지 프로그램 규칙이 있습니다. 첫째, 이미지의 정중앙인 원점 (0,0)(0,0)(0,0)은 변형 후에도 반드시 같은 자리에 있어야 합니다. 둘째, 원래 직선이었던 선은 변형 후에도 휘어짐 없이 꼿꼿한 직선을 유지해야 하며, 서로 평행했던 선들은 끝까지 평행해야 합니다.
2. 행렬과 벡터의 곱 (AxA\mathbf{x}Ax): 원본 사진에 필터 적용하기
개념: 여기서 벡터 x\mathbf{x}x는 아직 아무런 효과도 주지 않은 '원본 데이터(점의 위치)'이고, 행렬 AAA는 특정한 각도와 비율로 찌그러뜨리는 '스마트 필터(변환 규칙)'입니다. 원본에 필터를 씌우는 행동을 수학으로는 AxA\mathbf{x}Ax (행렬 AAA가 벡터 x\mathbf{x}x에 작용한다)라고 표기합니다.
딥러닝에서의 활용: 인공 신경망의 한 층(Layer)은 이 기법을 이용해 y=Wx+b\mathbf{y} = W\mathbf{x} + \mathbf{b}y=Wx+b 라는 핵심 수식을 만들어냅니다.
* WWW (가중치 행렬): 데이터를 AI가 분석하기 좋은 새로운 각도와 비율로 찌그러뜨립니다(선형 변환).
* b\mathbf{b}b (편향 벡터): 찌그러진 이미지를 마우스로 드래그해서 통째로 옆으로 살짝 이동시킵니다(평행 이동).
이렇게 '변형'과 '이동'을 거쳐 탄생한 결과물 y\mathbf{y}y가 다음 층으로 전달되는 것입니다.
3. 행렬과 행렬의 곱 (ABABAB): 여러 개의 필터 순서대로 겹쳐 바르기
개념: 행렬 AAA와 행렬 BBB를 곱한다는 것은, 두 가지 편집 필터를 연속해서 적용한다는 뜻입니다. 주의할 점은 ABABAB라고 적혀 있다면, 수식은 오른쪽에서 왼쪽으로 흐르기 때문에 BBB 필터를 먼저 적용하고, 그 결과물에 AAA 필터를 덮어씌운다는 뜻입니다.
핵심 수식 (AB≠BAAB \neq BAAB=BA): 순서가 왜 중요할까요? 이미지를 '가로로 2배 길게 늘리기' 한 다음 '90도 회전'을 하면 위아래로 길쭉한 이미지가 됩니다. 반대로 '90도 회전'을 먼저 한 다음 '가로로 2배 길게 늘리기'를 하면 양옆으로 뚱뚱한 이미지가 됩니다. 이처럼 행렬 곱셈은 순서를 바꾸면 전혀 다른 결과가 나오므로 AB≠BAAB \neq BAAB=BA (교환 법칙 성립 안 함)라는 사실이 매우 중요합니다.
4. 행렬 곱의 차원 맞추기: 규격이 맞는 케이블 연결하기
개념: 여러 개의 필터를 겹칠 때는 앞뒤 단자의 규격이 맞아야 연결할 수 있습니다. 즉, 앞 행렬의 '가로 길이(열)'와 뒤 행렬의 '세로 길이(행)'가 완벽히 일치해야만 두 데이터가 맞물려 연산이 진행됩니다.
핵심 수식: (m×n)(m \times n)(m×n) 크기의 행렬과 (n×p)(n \times p)(n×p) 크기의 행렬을 곱하면, 맞닿은 nnn 차원은 연산 과정을 통해 흡수되어 사라지고 (m×p)(m \times p)(m×p)라는 새로운 크기의 행렬이 출력됩니다. 실무 코드에서는 내가 가진 데이터 묶음 XXX와 모델의 가중치 WWW의 규격을 강제로 맞추기 위해, 표의 가로세로를 휙 뒤집는 전치(Transpose) 연산을 사용하여 Y=XWTY = XW^{\mathsf{T}}Y=XWT 형태로 규격을 깔끔하게 맞춰 연산합니다.
5. 변환 예시: 3차원을 평면에 ‘눌러’ 표현하기
예시 1 3차원 점 (x1,x2,x3)(x_1,x_2,x_3)(x1​,x2​,x3​)을 z=0z=0z=0인 xyxyxy평면으로 내려놓는(세 번째 좌표를 버리는) 선형 변환을 행렬로 쓰면 다음과 같습니다.
A=(100010000)A=\begin{pmatrix}1&0&0\\0&1&0\\0&0&0\end{pmatrix}A=​100​010​000​​
규칙: x↦Ax\mathbf{x}\mapsto A\mathbf{x}x↦Ax. 아래는 같은 곱을 행마다 내적으로 풀어 쓴 과정입니다.
1단계 — 식 세우기 입력 x=(x1,x2,x3)T\mathbf{x}=(x_1,x_2,x_3)^{\mathsf T}x=(x1​,x2​,x3​)T에 대해
Ax=(100010000)(x1x2x3)A\mathbf{x}=\begin{pmatrix}1&0&0\\0&1&0\\0&0&0\end{pmatrix}\begin{pmatrix}x_1\\x_2\\x_3\end{pmatrix}Ax=​100​010​000​​​x1​x2​x3​​​
2단계 — 각 행과 x\mathbf{x}x의 내적 (iii번째 성분 = AAA의 iii번째 행 · x\mathbf{x}x)
y1=1⋅x1+0⋅x2+0⋅x3=x1,y2=0⋅x1+1⋅x2+0⋅x3=x2,y3=0⋅x1+0⋅x2+0⋅x3=0.\begin{aligned} y_1 &= 1\cdot x_1+0\cdot x_2+0\cdot x_3 = x_1,\\ y_2 &= 0\cdot x_1+1\cdot x_2+0\cdot x_3 = x_2,\\ y_3 &= 0\cdot x_1+0\cdot x_2+0\cdot x_3 = 0. \end{aligned}y1​y2​y3​​=1⋅x1​+0⋅x2​+0⋅x3​=x1​,=0⋅x1​+1⋅x2​+0⋅x3​=x2​,=0⋅x1​+0⋅x2​+0⋅x3​=0.​
3단계 — 결과 벡터
Ax=(y1y2y3)=(x1x20)A\mathbf{x}=\begin{pmatrix}y_1\\y_2\\y_3\end{pmatrix}=\begin{pmatrix}x_1\\x_2\\0\end{pmatrix}Ax=​y1​y2​y3​​​=​x1​x2​0​​
즉 x1,x2x_1,x_2x1​,x2​는 그대로 두고 x3x_3x3​만 0으로 만듭니다. 기하적으로는 원점을 지나는 xyxyxy평면에 대한 정사영(orthogonal projection)이며, “한 축의 정보를 제거하는” 필터를 행렬 한 번의 곱으로 적은 예입니다. Ch.02에서 다룬 내적·투영 직관과도 연결됩니다.
실무자를 위한 핵심 요약: 행렬 곱셈은 데이터를 1차원적인 숫자로 보지 않고, 다차원 공간에서 찌그러뜨리고 회전시키는 '동적인 공간 변환 툴(y=Wx+b\mathbf{y} = W\mathbf{x} + \mathbf{b}y=Wx+b)'입니다. 여러 층을 쌓아 올릴 때는 규격((m×n)×(n×p)(m \times n) \times (n \times p)(m×n)×(n×p))을 맞추는 것이 가장 중요하며, 변환의 순서(AB≠BAAB \neq BAAB=BA)가 결과를 완전히 뒤바꾼다는 사실을 항상 명심해야 합니다.
수십만 개의 픽셀을 단 한 번에 처리하는 병렬 처리의 마법
고해상도 사진 한 장만 해도 픽셀이 수백만 개입니다. 이걸 '픽셀 하나씩' for 문으로 돌리면 CPU는 숨이 차고, 학습은 현실적으로 불가능에 가깝습니다. 행렬 곱셈은 이 수많은 숫자를 하나의 거대한 표(행렬)로 묶은 뒤, 변환 규칙 역시 또 하나의 행렬로 표현합니다. 그래서 '필터를 씌운다'는 직관이 곧바로 단 한 번의 곱셈 연산으로 번역됩니다.
GPU(그래픽 카드)는 이 행렬 곱을 수천 개의 코어가 동시에 나눠 맡도록 설계되어 있습니다. 텐서플로·파이토치에서 흔히 보는 배치 GEMM(General Matrix Multiply)은, 샘플 여러 개를 행으로 쌓은 XXX에 가중치 WWW를 한꺼번에 곱해 Y=XWTY = XW^{\mathsf{T}}Y=XWT 한 방으로 미니배치 전체를 밀어 넣는 연산입니다. 딥러닝이 '엄청난 데이터'를 '눈 깜짝할 새'에 소화하는 이유는, 결국 행렬이라는 공통 포맷 덕분에 하드웨어가 병렬을 극대화할 수 있기 때문입니다.
모든 인공지능 모델을 관통하는 단 하나의 공통 언어
넷플릭스 추천, 자율주행의 차선 인식, 챗GPT의 문장 생성처럼 겉모습은 전부 다르지만, 속을 들여다보면 '행렬로 특징을 섞고, 차원을 맞추고, 다음 층으로 넘긴다'는 문법이 반복됩니다. 완전연결층·임베딩·어텐션 스코어까지 이름만 바뀔 뿐, 뿌리에는 Y=XWTY = XW^{\mathsf{T}}Y=XWT 같은 행렬 × 행렬 패턴이 자주 등장합니다.
이 감각이 있으면 Shape mismatch가 났을 때 '어느 블록 크기가 안 맞는지'를 빨리 짚을 수 있습니다. 앞 행렬의 열과 뒤 행렬의 행이 같아야만 곱이 정의된다는 규칙은, 마치 케이블 규격을 맞추는 것과 같습니다. 한 번 이 '공통 언어'에 익숙해지면, 분야가 달라도 논문·코드·로그를 읽을 때 같은 지도로 길을 찾는 느낌이 납니다.
1) 트랜스포머와 어텐션: 단어들 사이의 '관심 지도'를 행렬로
챗GPT류 모델의 심장인 어텐션은, 문장 안의 단어들이 서로 얼마나 관련 있는지 점수 행렬로 한꺼번에 계산합니다. 대표적으로 쿼리 QQQ와 키 KKK를 곱한 QKTQK^{\mathsf{T}}QKT 는 '이 단어가 저 단어를 얼마나 볼지'에 대한 원시 점수를 빠르게 채워 넣습니다. 여기에 소프트맥스·VVV 가중합이 얹혀 스케일된 닷-프로덕트 어텐션이 완성되죠. 한 줄로 말하면, 행렬 곱으로 관계도를 찍고, 그다음 같은 문법으로 가중합을 하는 구조입니다.
2) 선형층·배치 학습: 미니배치 전체를 한 번에
완전연결층은 y=Wx+b\mathbf{y} = W\mathbf{x} + \mathbf{b}y=Wx+b의 반복입니다. 실제 학습에서는 샘플 NNN개를 행으로 쌓은 XXX에 대해 Y=XWT+1bTY = XW^{\mathsf{T}} + \mathbf{1}\mathbf{b}^{\mathsf{T}}Y=XWT+1bT처럼 한 번에 처리합니다. 합성곱도 채널·공간을 펼치면 결국 큰 행렬 곱으로 이해할 수 있어, 프레임워크가 내부적으로 GEMM을 쓰는 이유와도 맞닿아 있습니다.
3) 임베딩·추천: '의미 벡터'끼리 맞대보기
단어·사용자·아이템을 벡터로 만든 뒤, 내적이나 행렬 곱으로 유사도·점수를 내면 추천·검색·랭킹이 돌아갑니다. 결국 '누가 누구와 가까운가'를 행렬 한 장으로 요약해 버리는 셈입니다.
1) PCA·차원 축소: 천 차원을 '그림자'로 낮추기
인간은 3차원 이상을 직관적으로 그리기 어렵지만, 데이터는 흔히 수백·수천 차원입니다. PCA 같은 방법은 공분산을 행렬로 두고, 고유벡터 방향(분산이 큰 축)을 골라 데이터를 그 위에 투영합니다. 이 투영은 선형 변환(행렬 곱)으로 쓰면, '불필요한 방향은 눌러 없애고 핵심 축만 남긴다'는 뜻이 됩니다. 시각화용 2D 산점도 한 장이 사실은 고차원 구름을 행렬로 눌러 만든 그림자라고 보면 됩니다.
2) 기하 직관: 나중에 나오는 고유값·행렬식의 예습
같은 선형 변환이라도 어떤 방향은 늘고 줄고 다르게 작용합니다. 그 '특별한 방향'이 고유벡터이고, 늘림 비율이 고유값입니다. 지금 장에서 익힌 열이 만드는 평행사변형·합성 ABABAB 감각이 있으면, Ch.05 이후의 가역성·행렬식·스펙트럼 이야기가 한결 덜 낯설어집니다.
3) 컴퓨터 그래픽스: 화면에 올리기까지도 행렬
게임·CAD에서 물체를 회전·이동·원근 투영할 때도 동차 좌표와 행렬 곱이 쓰입니다. '3D 장면을 2D 화면에 찍는다'는 것도 결국 좌표를 행렬로 한 번에 옮긴다는 이야기입니다. 딥러닝과 CG가 다른 분야처럼 보여도, 공간을 행렬로 다룬다는 점에서는 같은 도구상자를 공유합니다.
아래 표는 차원 규칙과 자주 쓰는 공식을 모았습니다. 풀이 예시는 대표 유형별로 단계를 적었습니다.
  • 기호ABABAB
  • 의미AAA의 열 수 = BBB의 행 수일 때 정의
  • 기호(AB)ij(AB)_{ij}(AB)ij​
  • 의미AAA의 iii행과 BBB의 jjj열의 내적
  • 기호AxA\mathbf{x}Ax
  • 의미AAA의 행들과 x\mathbf{x}x의 내적들로 이루어진 벡터
  • 기호(AB)T(AB)^{\mathsf T}(AB)T
  • 의미BTATB^{\mathsf T}A^{\mathsf T}BTAT
  • 기호합성
  • 의미x↦A(Bx)=(AB)x\mathbf{x}\mapsto A(B\mathbf{x})=(AB)\mathbf{x}x↦A(Bx)=(AB)x
  • 기호선형층
  • 의미y=Wx+b\mathbf{y}=W\mathbf{x}+\mathbf{b}y=Wx+b (가중치 WWW, 편향 b\mathbf{b}b)
기호의미
ABABABAAA의 열 수 = BBB의 행 수일 때 정의
(AB)ij(AB)_{ij}(AB)ij​AAA의 iii행과 BBB의 jjj열의 내적
AxA\mathbf{x}AxAAA의 행들과 x\mathbf{x}x의 내적들로 이루어진 벡터
(AB)T(AB)^{\mathsf T}(AB)TBTATB^{\mathsf T}A^{\mathsf T}BTAT
합성x↦A(Bx)=(AB)x\mathbf{x}\mapsto A(B\mathbf{x})=(AB)\mathbf{x}x↦A(Bx)=(AB)x
선형층y=Wx+b\mathbf{y}=W\mathbf{x}+\mathbf{b}y=Wx+b (가중치 WWW, 편향 b\mathbf{b}b)
① 차원 곱하기 전 안쪽 두 수가 같아야 합니다.
② 배치 행이 샘플이면 같은 WWW를 행마다 적용해 `GEMM`으로 처리합니다.

풀이 예시

예시 1 — 곱의 모양
문제: AAA가 4×74\times 74×7, BBB가 7×37\times 37×3이면 ABABAB는?
풀이: 4×34\times 34×3.

예시 2 — 합성 순서
문제: x\mathbf{x}x에 BBB 다음 AAA를 적용한 행렬은?
풀이: ABABAB.

예시 3 — 전치
문제: (AB)T(AB)^{\mathsf T}(AB)T는?
풀이: BTATB^{\mathsf T}A^{\mathsf T}BTAT.

예시 4 — 열 관점
문제: Ae2A\mathbf{e}_2Ae2​는?
풀이: AAA의 두 번째 열.

예시 5 — 배치
문제: 행이 샘플인 XXX에 선형층을 한 번에?
풀이: XWTXW^{\mathsf T}XWT 형태를 자주 씁니다.

연습 문제

선형 변환 T(x)=AxT(\mathbf{x})=A\mathbf{x}T(x)=Ax가 만족해야 하는 성질로 항상 옳은 것은?
1 / 10