Ch.7 Overview — 선형 변환 (Linear Transformations)

행렬을 함수로 바라보기: 정의, 기하 직관, 행렬 표현, 기저 변환, ML 응용

행렬 곱 \(\mathbf{A}\mathbf{x}\) 를 “벡터를 입력받아 벡터를 출력하는 함수” \(T(\mathbf{x})\) 로 재해석한다. 선형 변환의 두 공리(가법성·동차성)에서 출발해 기하학적 직관, 기저 선택과 행렬 표현의 대응, 기저 변환에 의한 유사 변환, 그리고 딥러닝·컴퓨터 그래픽스·PCA에서의 응용까지 일관된 관점으로 연결한다.

Math
Linear Algebra
저자

Kwangmin Kim

공개

2026년 04월 11일

1 왜 선형 변환인가 — 관점의 전환

지금까지 행렬을 다룬 방식은 크게 두 가지였다.

  • 행 관점 (row picture): \(\mathbf{A}\mathbf{x} = \mathbf{b}\) 를 “여러 선(또는 초평면)의 교점을 구하는 문제”로 본다.
  • 열 관점 (column picture): \(\mathbf{A}\mathbf{x}\) 를 “\(\mathbf{A}\) 의 열들의 선형결합”으로 본다.

두 관점 모두 행렬을 정적(static) 대상, 즉 “계수들의 묶음”으로 본다. Ch.7 에서는 세 번째 관점을 도입한다. 행렬을 함수(function) 로, 즉 벡터를 입력받아 벡터를 출력하는 변환으로 읽는다.

\[ T : \mathbb{R}^n \to \mathbb{R}^m, \qquad T(\mathbf{x}) = \mathbf{A}\mathbf{x} \]

이 관점이 왜 중요한가. 행렬을 계수표로 보는 한, 우리는 “계산 규칙”에 머무른다. 함수로 보면 질문이 달라진다.

  • 입력 공간 전체가 출력 공간의 어디로 옮겨지는가 (치역·이미지).
  • 입력 공간의 어떤 부분이 \(\mathbf{0}\) 으로 뭉개지는가 (커널·영공간).
  • 같은 변환을 다른 언어(기저) 로 쓰면 행렬의 모양이 어떻게 바뀌는가 (유사 변환).
  • 어떤 기저를 고르면 변환이 가장 단순한 형태(대각행렬, 조르당 형)가 되는가.

이 질문들은 대각화(Ch.6), 최소제곱(Ch.4), SVD(§6.7), 딥러닝의 선형 레이어, 컴퓨터 그래픽스의 아핀 변환을 하나의 언어로 묶는다 (Strang, 2009, Ch.7).

핵심 직관 — 격자를 늘리고 회전시키기

종이 위에 균일한 격자를 그렸다고 상상한다. 선형 변환은 이 격자를 다음 세 가지 규칙 아래에서 마음대로 주무르는 것이다.

  1. 원점은 원점 그대로 둔다.
  2. 직선은 직선으로 유지한다 (꺾거나 구부리지 않는다).
  3. 등간격은 등간격으로 유지한다 (한쪽 끝만 늘어나는 것은 허용하지 않는다).

이 세 조건을 지키면서 격자를 회전·확대·전단(shear)·사영하는 모든 조작이 선형 변환이다.


2 정의 (Definition)

정의: 선형 변환 (Linear Transformation)

벡터 공간 \(V\) 에서 벡터 공간 \(W\) 로 가는 함수 \(T : V \to W\) 가 모든 \(\mathbf{v}, \mathbf{w} \in V\) 와 모든 스칼라 \(c \in \mathbb{R}\) 에 대해 다음 두 조건을 만족하면 \(T\)선형 변환이라 한다.

  1. 가법성 (Additivity): \[T(\mathbf{v} + \mathbf{w}) = T(\mathbf{v}) + T(\mathbf{w})\]
  2. 동차성 (Homogeneity): \[T(c\mathbf{v}) = c\, T(\mathbf{v})\]

이 두 조건은 하나로 묶을 수 있다. 임의의 스칼라 \(a, b\) 와 벡터 \(\mathbf{v}, \mathbf{w}\) 에 대해 \[T(a\mathbf{v} + b\mathbf{w}) = a\, T(\mathbf{v}) + b\, T(\mathbf{w})\] 가 성립한다.

표기 정리

기호 의미
\(V, W\) 벡터 공간 (정의역·공역)
\(T : V \to W\) 선형 변환
\(\mathbf{v}, \mathbf{w}\) 입력 벡터
\(T(\mathbf{v})\) 출력 벡터
\(\ker T\) 커널: \(T(\mathbf{v}) = \mathbf{0}\) 을 만족하는 \(\mathbf{v}\) 들의 집합
\(\text{Im}\, T\) 치역(상): \(T(V) = \{T(\mathbf{v}) : \mathbf{v} \in V\}\)

두 공리가 주는 즉각적 귀결

  • \(T(\mathbf{0}) = \mathbf{0}\): 동차성에서 \(c = 0\) 을 대입하면 곧장 나온다.
  • 원점 보존: 선형 변환은 반드시 원점을 원점으로 보낸다. 평행이동 \(T(\mathbf{x}) = \mathbf{x} + \mathbf{b}\)\(\mathbf{b} \neq \mathbf{0}\) 이면 선형 변환이 아니다. 이를 피하기 위해 컴퓨터 그래픽스는 동차좌표(homogeneous coordinates)를 도입해 평행이동을 선형 변환으로 “위장”한다.
  • 직선 보존: \(\mathbf{u} + t\mathbf{v}\) 꼴의 직선은 \(T(\mathbf{u}) + t\, T(\mathbf{v})\) 로 옮겨져 여전히 직선이다.
  • 비율 보존: \(\mathbf{v}\)\(2\mathbf{v}\) 의 길이비는 \(T\) 통과 후에도 \(1 : 2\) 로 유지된다.
선형 변환이 아닌 함수의 전형 두 가지
  1. 평행이동: \(T(\mathbf{x}) = \mathbf{x} + \mathbf{b}\), \(\mathbf{b} \neq \mathbf{0}\). → 원점 보존 실패.
  2. 비선형 함수: \(T(x) = x^2\). → \(T(x + y) = (x+y)^2 \neq x^2 + y^2 = T(x) + T(y)\) 이므로 가법성 실패.

딥러닝에서 ReLU, Sigmoid 같은 활성화 함수는 모두 비선형이다. 덕분에 층을 쌓을수록 표현력이 폭발적으로 늘어난다. 반면 활성화 없이 선형 층만 쌓으면 \(\mathbf{A}_2 \mathbf{A}_1 \mathbf{x}\) 꼴이 되어 결국 하나의 선형 변환과 동등해지므로 깊이가 무의미해진다.


3 기하학적 직관 (Geometric Intuition)

정의만 보면 선형 변환은 추상적이다. 그러나 2차원에서 시각화하면 선형 변환의 전체 종류가 몇 개의 기본형으로 분류된다. \(2 \times 2\) 행렬은 \(\mathbf{e}_1 = (1, 0)\)\(\mathbf{e}_2 = (0, 1)\) 이 어디로 가는지만 정하면 모든 다른 벡터의 상이 자동으로 정해진다. 이것이 기하 직관의 출발점이다.

\[ \mathbf{v} = v_1 \mathbf{e}_1 + v_2 \mathbf{e}_2 \;\Longrightarrow\; T(\mathbf{v}) = v_1 T(\mathbf{e}_1) + v_2 T(\mathbf{e}_2) \]

기저 벡터의 이동만 추적하면 선형 변환 전체가 결정된다. 이 사실이 뒤에 “선형 변환 = 행렬” 이라는 대응을 낳는다.

3.1 대표적인 2D 선형 변환

변환 \(T(\mathbf{e}_1)\) \(T(\mathbf{e}_2)\) 행렬 기하 효과
항등 \((1,0)\) \((0,1)\) \(\mathbf{I}\) 아무것도 안 함
스케일 (\(k\)배 확대) \((k,0)\) \((0,k)\) \(k\mathbf{I}\) 중심 기준 등방 확대
회전 \(\theta\) \((\cos\theta, \sin\theta)\) \((-\sin\theta, \cos\theta)\) \(\mathbf{R}_\theta\) 원점 기준 회전
\(x\)축 반사 \((1,0)\) \((0,-1)\) \(\text{diag}(1,-1)\) \(y\) 좌표 부호 뒤집기
수평 전단 (shear) \((1,0)\) \((k,1)\) \(\begin{bmatrix}1 & k\\ 0 & 1\end{bmatrix}\) \(x\)축은 고정, 위로 갈수록 오른쪽 기울기
\(y=x\) 선 위로의 사영 \((0.5, 0.5)\) \((0.5, 0.5)\) \(\tfrac{1}{2}\begin{bmatrix}1 & 1\\ 1 & 1\end{bmatrix}\) 2차원을 1차원으로 찌그러뜨림

3.2 회전 행렬의 유도 — 기하 직관을 수식으로

각도 \(\theta\) 만큼 반시계 방향 회전을 시키는 변환 \(R_\theta\) 를 생각한다. 단위벡터 \(\mathbf{e}_1 = (1, 0)\) 을 원 위에서 각도 \(\theta\) 만큼 돌리면 \((\cos\theta, \sin\theta)\) 가 된다. \(\mathbf{e}_2 = (0, 1)\)\(\mathbf{e}_1\) 보다 이미 \(90^\circ\) 앞서 있으므로 \(\theta\) 만큼 더 돌리면 각도 \(\theta + 90^\circ\) 지점에 놓인다.

\[ R_\theta(\mathbf{e}_2) = (\cos(\theta + 90^\circ), \sin(\theta + 90^\circ)) = (-\sin\theta, \cos\theta) \]

두 상을 열로 나란히 세우면 회전 행렬이 얻어진다.

\[ \mathbf{R}_\theta = \begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix} \]

왜 이 유도가 중요한가. 회전 행렬의 성분을 외우는 사람은 많지만, 그것이 “기저 벡터를 어디로 보내는가”를 기록한 표에 불과하다는 사실을 잊기 쉽다. 이 관점이 체화되면 새로운 변환을 마주쳤을 때 “\(\mathbf{e}_1, \mathbf{e}_2\) 를 먼저 보자” 라는 반사가 생긴다.

3.3 비행렬 예시 — 선형 변환은 행렬보다 더 넓은 개념이다

선형 변환의 정의는 \(\mathbb{R}^n\) 에 국한되지 않는다. 벡터 공간이기만 하면 된다. 그러면 우리가 행렬로 인식하지 않던 연산들이 모두 선형 변환의 예가 된다.

  1. 미분 연산자 \(D : \mathcal{P}_n \to \mathcal{P}_{n-1}\), \(D(p) = p'\)
    • \((p + q)' = p' + q'\), \((cp)' = cp'\) 이므로 선형 변환이다.
  2. 적분 연산자 \(I : C[a, b] \to \mathbb{R}\), \(I(f) = \int_a^b f(x)\, dx\)
    • 적분의 선형성 그대로 두 공리를 만족한다.
  3. 푸리에 변환 \(\mathcal{F} : L^2 \to L^2\)
    • 주파수 성분으로의 분해도 선형 변환이다. 이 덕분에 “기저 변환”으로 해석할 수 있다.
  4. 시프트 연산자 \(S : \mathbb{R}^\infty \to \mathbb{R}^\infty\), \(S(x_1, x_2, \ldots) = (0, x_1, x_2, \ldots)\)

이들은 무한차원에서 정의되거나 기저가 자명하지 않은 공간에 작용한다. 그러나 기저를 선택하는 순간 이들도 모두 (무한차원) 행렬로 표현된다. 다음 절에서 이 대응을 명확히 한다.


4 행렬 표현 (Matrix Representation)

4.1 핵심 정리 — 기저가 있으면 모든 선형 변환은 행렬이다

정리: 선형 변환과 행렬의 대응

\(V\) 가 기저 \(\mathcal{B} = \{\mathbf{v}_1, \ldots, \mathbf{v}_n\}\) 을 갖는 \(n\) 차원 공간이고, \(W\) 가 기저 \(\mathcal{C} = \{\mathbf{w}_1, \ldots, \mathbf{w}_m\}\) 을 갖는 \(m\) 차원 공간이라 하자. 그러면 모든 선형 변환 \(T : V \to W\) 에 대응하는 유일한 \(m \times n\) 행렬 \([T]_{\mathcal{C} \leftarrow \mathcal{B}}\) 가 존재한다. 이 행렬의 \(j\) 번째 열\(T(\mathbf{v}_j)\) 를 출력 기저 \(\mathcal{C}\) 로 표현한 좌표이다.

이 정리는 “행렬이 무엇인가” 에 대한 가장 깊은 답을 준다. 행렬은 원래 존재하는 추상적 대상이 아니라, 선형 변환을 특정 기저 아래에서 표현한 좌표표이다.

4.2 왜 기저 벡터의 상만 알면 충분한가

임의의 \(\mathbf{v} \in V\) 는 기저로 유일하게 분해된다. \[ \mathbf{v} = c_1 \mathbf{v}_1 + c_2 \mathbf{v}_2 + \cdots + c_n \mathbf{v}_n \]

선형성을 차례로 적용하면

\[ T(\mathbf{v}) = c_1 T(\mathbf{v}_1) + c_2 T(\mathbf{v}_2) + \cdots + c_n T(\mathbf{v}_n) \]

따라서 \(T(\mathbf{v}_1), \ldots, T(\mathbf{v}_n)\) \(n\) 개의 출력만 알면 변환 \(T\) 전체가 결정된다. 이 \(n\) 개의 출력을 열로 나열한 것이 바로 \(T\) 의 행렬이다.

이 관점은 “무한히 많은 벡터를 어떻게 유한한 정보로 담는가” 라는 당혹감을 해소한다. 답: 기저 벡터 \(n\) 개의 상만 저장하면 된다.

4.3 직관 — 행렬 곱은 “좌표로 번역한 변환”

벡터 \(\mathbf{v}\) 를 기저 \(\mathcal{B}\) 좌표로 쓰면 열벡터 \([\mathbf{v}]_{\mathcal{B}} \in \mathbb{R}^n\) 이다. 그러면 다음 다이어그램이 성립한다.

\[ V \xrightarrow{\;T\;} W \quad\Longleftrightarrow\quad \mathbb{R}^n \xrightarrow{\;[T]_{\mathcal{C} \leftarrow \mathcal{B}}\;} \mathbb{R}^m \]

즉 “추상 공간에서의 선형 변환” 을 “좌표 공간에서의 행렬 곱” 으로 번역할 수 있고, 이 번역은 기저 선택만 고정되면 일대일 대응이다. 행렬 \(\mathbf{A}\) 와 선형 변환 \(T\) 는 본질적으로 같은 대상의 두 얼굴이다.

4.4 합성과 행렬 곱 — 왜 행렬 곱은 바로 “그렇게” 정의되었는가

두 선형 변환 \(S : U \to V\)\(T : V \to W\) 를 합성한 \(T \circ S : U \to W\) 도 선형 변환이다. 기저를 모두 고정하면 합성의 행렬은 각 변환의 행렬의 곱으로 표현된다.

\[ [T \circ S] = [T]\, [S] \]

행렬 곱이 그렇게 이상한 순서(앞 행렬의 과 뒤 행렬의 을 내적)로 정의된 이유가 여기에 있다. 합성 순서가 정확히 행렬 곱으로 번역되도록 정의한 것이다. 이 해석 없이 행렬 곱을 외우면 영원히 “왜 이렇게 생겼지?” 라는 물음이 남는다.


5 기저 변환과 유사 변환 (Change of Basis & Similarity)

5.1 같은 변환, 다른 옷

동일한 선형 변환 \(T : V \to V\) 을 기저 \(\mathcal{B}\) 에서 보면 행렬 \(\mathbf{A}\), 기저 \(\mathcal{B}'\) 에서 보면 행렬 \(\mathbf{B}\) 로 나타난다. 두 행렬은 같은 변환의 서로 다른 좌표 표현일 뿐이다. 이 둘이 어떻게 관계되는지가 기저 변환(change of basis)의 핵심이다.

정리: 기저 변환 공식

\(\mathbf{M}\) 을 기저 \(\mathcal{B}'\) 의 벡터들을 기저 \(\mathcal{B}\) 좌표로 적은 전이행렬(change-of-basis matrix) 이라 하자. 같은 선형 변환 \(T\) 의 두 행렬 표현은 다음과 같이 연결된다.

\[ \mathbf{B} = \mathbf{M}^{-1} \mathbf{A} \mathbf{M} \]

이 관계를 유사 변환(similarity transformation) 이라 하고, \(\mathbf{A}\)\(\mathbf{B}\)닮음 행렬(similar matrices) 이라 부른다.

5.2 읽는 법 — 세 단계 번역

공식 \(\mathbf{B} = \mathbf{M}^{-1} \mathbf{A} \mathbf{M}\) 을 오른쪽에서 왼쪽으로 읽으면 세 단계가 된다. 입력 벡터 \(\mathbf{x}\) 가 새로운 기저 \(\mathcal{B}'\) 좌표로 주어졌다고 하자.

  1. \(\mathbf{M}\mathbf{x}\): \(\mathcal{B}'\) 좌표를 \(\mathcal{B}\) 좌표로 번역.
  2. \(\mathbf{A}(\mathbf{M}\mathbf{x})\): \(\mathcal{B}\) 좌표에서 원래 변환 \(\mathbf{A}\) 적용.
  3. \(\mathbf{M}^{-1}(\mathbf{A}\mathbf{M}\mathbf{x})\): 결과를 다시 \(\mathcal{B}'\) 좌표로 역번역.

\(\mathbf{B}\) 는 “잠시 원어(기저 \(\mathcal{B}\))로 돌아가서 일을 처리한 뒤 현지 언어(\(\mathcal{B}'\))로 돌려받는” 절차를 하나의 행렬로 표현한 것이다.

5.3 왜 중요한가 — 대각화와 SVD의 공통 언어

  • 대각화 (§6.2): \(\mathbf{A} = \mathbf{S}\mathbf{\Lambda}\mathbf{S}^{-1}\) 은 정확히 기저 변환이다. 고유벡터를 기저로 선택하면 같은 변환이 대각행렬 \(\mathbf{\Lambda}\) 로 단순해진다. “행렬을 대각화한다” 는 말은 결국 “변환이 가장 단순해지는 기저를 찾는다” 는 뜻이다.
  • SVD (§6.7): \(\mathbf{A} = \mathbf{U}\mathbf{\Sigma}\mathbf{V}^\top\) 은 두 개의 서로 다른 기저(입력·출력 각각의 직교 기저) 아래에서 변환이 단순한 스케일링 \(\mathbf{\Sigma}\) 로 보인다는 사실의 선언이다.
  • 조르당 표준형: 대각화가 불가능할 때 최대한 단순한 꼴로 보여주는 기저를 찾은 결과이다.

이 세 분해 모두 공통 질문의 답이다. “이 변환이 가장 단순해지는 좌표계는 무엇인가?” 선형 변환 관점이 체화되어야 이 질문이 자연스럽게 보인다.


6 커널과 치역, 계수-영차원 정리

선형 변환은 두 개의 근본 부분공간을 낳는다. 하나는 \(\mathbf{0}\) 으로 뭉개지는 입력들, 다른 하나는 실제로 도달되는 출력들이다.

정의: 커널과 치역
  • 커널 (Kernel, Null Space): \(\ker T = \{\mathbf{v} \in V : T(\mathbf{v}) = \mathbf{0}\}\)
  • 치역 (Image, Range): \(\text{Im}\, T = \{T(\mathbf{v}) : \mathbf{v} \in V\} \subseteq W\)

의미 번역

  • \(\ker T\)\(T\)정보를 잃는 방향이다. 사영 행렬의 커널은 “사영 면에 수직인 방향” 이다. 그 방향의 정보는 변환 후 복구 불가능하다.
  • \(\text{Im}\, T\)\(T\)도달할 수 있는 출력 전체이다. 열공간과 같은 것이고, 행렬 관점에서는 \(\mathbf{A}\) 의 열들이 생성하는 부분공간이다.
정리: 계수-영차원 정리 (Rank-Nullity Theorem)

유한차원 벡터 공간 \(V\) 에서 정의된 선형 변환 \(T : V \to W\) 에 대해 \[ \dim(\ker T) + \dim(\text{Im}\, T) = \dim V \]

직관적 해석: \(V\) 가 가진 \(n\) 차원의 “정보 예산”을 \(T\) 는 두 곳에 나눠 쓴다. 일부는 \(\ker T\) 로 빠져 사라지고, 나머지는 \(\text{Im}\, T\) 에 남는다. 사영 행렬처럼 차원을 줄이는 변환은 커널에 예산을 많이 할당하고, 가역 변환은 커널이 \(\{\mathbf{0}\}\) 이라 모든 예산이 치역에 그대로 들어간다.

이 정리는 행렬 관점의 “열공간 차원 + 영공간 차원 = 열의 개수” (Ch.3 §3.6 네 개의 근본 부분공간) 와 정확히 같은 진술이다. 선형 변환 언어로 쓰면 공간 자체의 성질로 읽힌다.


7 단사·전사·동형 (Injective, Surjective, Isomorphism)

선형 변환은 일반 함수이기도 하므로 일대일위로의 개념이 적용된다.

성질 정의 선형 변환에서의 조건
단사 (Injective, one-to-one) 서로 다른 입력은 서로 다른 출력 \(\ker T = \{\mathbf{0}\}\)
전사 (Surjective, onto) 모든 \(\mathbf{w} \in W\) 가 어떤 \(\mathbf{v}\) 의 상 \(\text{Im}\, T = W\)
동형 (Isomorphism) 단사이면서 전사 역변환 \(T^{-1}\) 존재

왜 이 분류가 실무에 중요한가

  • 단사가 아닌 선형 레이어는 “다른 입력을 같은 출력으로 압축” 한다. Autoencoder 의 인코더가 이렇다. 원본 복구는 근사적으로만 가능하다.
  • 전사가 아닌 선형 레이어는 “출력 공간의 일부 방향에는 절대 도달할 수 없다”. 임베딩 차원이 충분하지 않을 때 이런 일이 일어난다.
  • \(\dim V = \dim W\) 이고 \(T\) 가 단사이면 자동으로 전사가 되며 (계수-영차원 정리), 이때 \(T\) 는 동형이다. 정방행렬의 “가역” 은 이 동형과 같은 개념이다.
특수 케이스: 선형형식(Linear Form)과 쌍대 공간

치역이 스칼라체 \(\mathbb{F}\) 인 선형 변환 \(\varphi: V \to \mathbb{F}\)선형형식(linear form, linear functional)이라 한다. \(V = \mathbb{R}^n\) 이면 선형형식은 행벡터 하나로 표현된다.

\[\varphi(\mathbf{x}) = \mathbf{a}^\top \mathbf{x} = a_1 x_1 + a_2 x_2 + \cdots + a_n x_n\]

쌍대기저(dual basis): 기저 \(\{\mathbf{e}_1, \ldots, \mathbf{e}_n\}\) 이 주어지면, 이에 대응하는 선형형식들 \(\{\alpha_1, \ldots, \alpha_n\}\) 이 유일하게 결정된다.

\[\alpha_i(\mathbf{e}_j) = \delta_{ij} = \begin{cases} 1 & (i = j) \\ 0 & (i \neq j) \end{cases}\]

\(\alpha_i\) 는 “\(i\) 번째 좌표만 뽑아내는 선형형식”이다. 모든 선형형식 \(\varphi\) 는 쌍대기저의 선형결합으로 유일하게 표현된다: \(\varphi = a_1 \alpha_1 + \cdots + a_n \alpha_n\).

\(V\) 의 쌍대공간 \(V^* = \{\varphi: V \to \mathbb{F} \mid \varphi \text{ 선형}\}\)\(V\) 와 동형이다 (\(\dim V^* = \dim V\)). 실무에서는 “행벡터 공간 = 열벡터 공간의 쌍대”로 이해하면 된다 — \(\mathbf{a}^\top \mathbf{x}\) 가 바로 \(\mathbf{a}^\top \in (\mathbb{R}^n)^*\)\(\mathbf{x}\) 에 대한 작용이다.

응용: 미적분의 미분형식, 텐서 해석의 공변·반변 성분 구분, 양자역학의 bra-ket \(\langle \varphi | \psi \rangle\). Strang 18.06 범위 밖이지만 선형대수 II·미분기하에서 재등장한다.


8 응용 분야

분야 선형 변환의 역할 구체적 예
딥러닝 Fully connected 층 \(\mathbf{y} = \mathbf{W}\mathbf{x} + \mathbf{b}\)\(\mathbf{W}\mathbf{x}\) 부분 \(\mathbf{W}\) 가 특징을 새로운 축으로 재배치
컴퓨터 그래픽스 회전·확대·전단 변환 3D 모델을 화면 좌표로 투영
신호처리 푸리에 변환 시간 기저 → 주파수 기저로의 기저 변환
PCA (통계/ML) 공분산 행렬의 고유 기저로 회전 분산이 가장 큰 방향을 축으로 선택
컴퓨터 비전 카메라 투영 행렬 3차원 세계 좌표를 2차원 이미지 평면으로
수치해석 이산 미분·적분 연산자 유한차분 행렬이 미분 연산자의 이산 표현
양자역학 관측 가능량 연산자 에르미트 행렬이 물리량을 기저로 표현

딥러닝 관점에서의 재조명. 선형층 \(\mathbf{W}\mathbf{x}\) 는 “입력 특징 공간을 다른 좌표계로 회전/확대/사영하는” 변환이다. 이어지는 비선형 활성화(ReLU 등)는 “그 좌표계에서 특정 방향만 살리는” 선택이다. 다시 말해 딥러닝의 층 구조는 기저 변환과 비선형 선택을 반복해 특징을 점진적으로 재정렬하는 과정으로 해석할 수 있다. 이 해석은 Ch.7 의 선형 변환 관점 없이는 성립하지 않는다.


9 예시 (손계산)

9.1 예시 1 — 회전 행렬의 합성

\(60^\circ\) 회전 후 \(30^\circ\) 회전을 합성하면 기하적으로 \(90^\circ\) 회전이어야 한다. 행렬로 직접 확인한다.

\[ \mathbf{R}_{30^\circ} \mathbf{R}_{60^\circ} = \begin{bmatrix} \tfrac{\sqrt{3}}{2} & -\tfrac{1}{2} \\ \tfrac{1}{2} & \tfrac{\sqrt{3}}{2} \end{bmatrix} \begin{bmatrix} \tfrac{1}{2} & -\tfrac{\sqrt{3}}{2} \\ \tfrac{\sqrt{3}}{2} & \tfrac{1}{2} \end{bmatrix} = \begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix} = \mathbf{R}_{90^\circ} \]

직관 확인: \(\mathbf{R}_{90^\circ}\)\(\mathbf{e}_1 \mapsto \mathbf{e}_2\), \(\mathbf{e}_2 \mapsto -\mathbf{e}_1\) 이다. 종이에 그려보면 정확히 반시계 \(90^\circ\) 이다. 합성 공식 \(T \circ S\) 의 행렬이 \(\mathbf{R}_{30^\circ}\mathbf{R}_{60^\circ}\) 라는 점, 그리고 행렬 곱 순서가 “나중 변환이 왼쪽” 이라는 점이 자연스럽게 확인된다.

9.2 예시 2 — 전단 변환의 기저 표현과 유사 변환

전단 행렬 \[ \mathbf{A} = \begin{bmatrix} 1 & 1 \\ 0 & 1 \end{bmatrix} \] 은 표준 기저에서는 “위로 갈수록 오른쪽으로 \(1\) 만큼 밀리는” 변환이다. 이제 새로운 기저 \(\mathcal{B}' = \{(1, 0), (1, 1)\}\) 를 선택한다. 전이행렬은 \[ \mathbf{M} = \begin{bmatrix} 1 & 1 \\ 0 & 1 \end{bmatrix}, \qquad \mathbf{M}^{-1} = \begin{bmatrix} 1 & -1 \\ 0 & 1 \end{bmatrix} \] 따라서 새 좌표에서 같은 변환은 \[ \mathbf{B} = \mathbf{M}^{-1} \mathbf{A} \mathbf{M} = \begin{bmatrix} 1 & -1 \\ 0 & 1 \end{bmatrix} \begin{bmatrix} 1 & 1 \\ 0 & 1 \end{bmatrix} \begin{bmatrix} 1 & 1 \\ 0 & 1 \end{bmatrix} = \begin{bmatrix} 1 & 1 \\ 0 & 1 \end{bmatrix} \] 의 계산 과정을 거친다. 이 예에서는 \(\mathbf{A}\)\(\mathbf{B}\) 가 같은 모양이지만, 일반적으로는 행렬 모양이 달라진다. 핵심은 “같은 변환이라도 기저를 바꾸면 행렬이 달라진다” 는 사실 자체이다.


10 코드 예시

10.1 Step 1 — 순수 Python으로 선형성 확인

# 선형 변환인지 두 공리로 직접 확인한다

def apply_T(v):
    """T(x, y) = (2x + y, x - y) — 선형인지 확인해볼 대상"""
    x, y = v
    return (2 * x + y, x - y)

def apply_NonLinear(v):
    """비선형 예: (x^2, y) — 가법성이 깨짐"""
    x, y = v
    return (x ** 2, y)

def check_linearity(T, trials=5):
    import random
    for _ in range(trials):
        u = (random.uniform(-3, 3), random.uniform(-3, 3))
        v = (random.uniform(-3, 3), random.uniform(-3, 3))
        c = random.uniform(-2, 2)

        # 가법성: T(u + v) ?= T(u) + T(v)
        lhs = T((u[0] + v[0], u[1] + v[1]))
        rhs_a = T(u)
        rhs_b = T(v)
        add_ok = all(abs(lhs[i] - (rhs_a[i] + rhs_b[i])) < 1e-9 for i in range(2))

        # 동차성: T(cu) ?= c T(u)
        lhs2 = T((c * u[0], c * u[1]))
        rhs2 = tuple(c * x for x in T(u))
        hom_ok = all(abs(lhs2[i] - rhs2[i]) < 1e-9 for i in range(2))

        if not (add_ok and hom_ok):
            return False
    return True

print("T is linear?     ", check_linearity(apply_T))
print("NonLinear linear?", check_linearity(apply_NonLinear))

해석: 두 공리를 랜덤 입력으로 검증한다. 가법성이나 동차성 중 하나라도 깨지면 선형 변환이 아니다. 정리를 외우는 것보다 코드로 한 번 확인하는 편이 체화에 훨씬 효과적이다.

10.2 Step 2 — NumPy로 기저 이미지에서 행렬 복원

import numpy as np

# 미지의 선형 변환 (블랙박스)
def T(v):
    return np.array([2 * v[0] + v[1], v[0] - v[1]])

# 표준 기저 벡터의 상을 모으면 행렬이 된다
e1 = np.array([1.0, 0.0])
e2 = np.array([0.0, 1.0])

A = np.column_stack([T(e1), T(e2)])
print("복원된 행렬 A =")
print(A)

# 임의의 벡터에 대해 T(v) 와 A @ v 가 일치하는지 확인
v = np.array([3.0, -2.0])
print("T(v)   =", T(v))
print("A @ v  =", A @ v)

해석: “행렬은 기저 벡터의 상을 열로 모은 것” 이라는 이론을 코드로 그대로 구현한다. 복잡한 내부 구현을 몰라도 \(T(\mathbf{e}_1)\)\(T(\mathbf{e}_2)\) 만 관측하면 변환 전체를 복원할 수 있다는 사실이 눈으로 확인된다.

10.3 Step 3 — 기저 변환 (Similarity Transformation) 검증

import numpy as np

# 원래 변환 (표준 기저에서)
A = np.array([[3.0, 1.0],
              [0.0, 2.0]])

# 새 기저 B' = {(1, 1), (1, -1)}
M = np.array([[1.0, 1.0],
              [1.0, -1.0]])

# 같은 변환을 새 기저에서 본 행렬
B = np.linalg.inv(M) @ A @ M
print("새 기저에서의 행렬 B =")
print(B)

# 핵심 확인: 고유값은 기저 변환 아래에서 보존된다
print("A의 고유값:", np.linalg.eigvals(A))
print("B의 고유값:", np.linalg.eigvals(B))

해석: 기저가 바뀌어도 고유값 같은 불변량(invariant) 은 보존된다. 이것이 “닮음 행렬은 같은 변환의 다른 옷” 이라는 주장의 수치적 증거이다. 행렬식, 트레이스, 랭크도 같은 이유로 불변이다.


11 정리

이번 개요에서 다룬 핵심을 한 문장으로 요약하면 다음과 같다.

선형 변환은 “원점·직선·등간격을 보존하는 벡터 함수” 이고, 행렬은 그것을 특정 기저로 번역한 좌표표이다.

세 가지 관점 전환이 이 장의 모든 결과를 낳는다.

  1. 행렬 \(\to\) 함수: \(\mathbf{A}\mathbf{x}\)\(T(\mathbf{x})\) 로 읽는다.
  2. 기저 벡터의 상 \(\to\) 행렬의 열: 변환 전체를 \(n\) 개의 관측으로 복원한다.
  3. 기저 변환 \(\to\) 유사 변환: 같은 변환의 가장 단순한 표현을 찾는 행위가 대각화·SVD이다.

이 관점은 Ch.6 의 고유값 분해, Ch.4 의 최소제곱, §6.7 의 SVD 를 하나의 언어로 묶고, 딥러닝과 컴퓨터 그래픽스에서의 선형 레이어를 “추상적 연산” 이 아니라 좌표계를 다시 짜는 작업 으로 이해하게 한다.


12 관련 주제

선행 지식

후속 주제

다른 카테고리 연결

교재 참조

  • Strang, Introduction to Linear Algebra, 4th Ed., Ch.7 §7.1–§7.3 (pp. 376–409)

Subscribe

Enjoy this blog? Get notified of new posts by email: