Ch.1 §1.1 — Vectors and Linear Combinations

벡터 덧셈·스칼라 곱·선형결합의 대수적 정의와 기하학적 구조

Gilbert Strang의 Introduction to Linear Algebra §1.1을 상세히 다룬다. 벡터의 두 핵심 연산(덧셈, 스칼라 곱)을 정의하고, 선형결합 cv+dw의 기하학적 의미를 분석한다. 1개·2개·3개 벡터의 선형결합이 만드는 집합(직선·평면·공간)을 직관적으로 이해하고, 이것이 선형방정식 Ax=b와 어떻게 연결되는지 살펴본다.

Math
Linear Algebra
저자

Kwangmin Kim

공개

2026년 04월 06일

1 선형대수의 두 기본 연산

선형대수학 전체가 두 연산 위에 세워진다.

  1. 벡터 덧셈 \(\mathbf{v} + \mathbf{w}\)
  2. 스칼라 곱 \(c\mathbf{v}\)

이 두 연산만으로 행렬, 부분공간, 고유값, SVD에 이르는 모든 것을 구성할 수 있다. 단순해 보이지만, 이 두 연산이 결합된 선형결합 \(c\mathbf{v} + d\mathbf{w}\) 가 선형대수의 심장이다 (Strang, 2009, §1.1).


2 벡터의 표현

2.1 열벡터와 성분

정의: \(n\) 차원 벡터

\(n\) 개의 실수를 수직으로 쌓은 열벡터(column vector):

\[\mathbf{v} = \begin{bmatrix} v_1 \\ v_2 \\ \vdots \\ v_n \end{bmatrix} \in \mathbb{R}^n\]

\(v_i\)\(i\) 번째 성분(component)이다. 스칼라 \(v_i\) 와 벡터 \(\mathbf{v}\) 를 구분하기 위해 벡터는 굵은 소문자로 쓴다.

공간 절약을 위해 행벡터 형태 \(\mathbf{v} = (v_1, v_2, \ldots, v_n)\) 으로 쓰기도 한다. 그러나 이것은 표기의 편의일 뿐, 실체는 열벡터이다. 행벡터 \([v_1\ v_2\ \cdots\ v_n]\) 은 절대적으로 다른 객체다 — 이것은 열벡터의 전치(transpose) \(\mathbf{v}^\top\) 이다.

2.2 벡터의 세 가지 표현

같은 벡터 \(\mathbf{v} = (4, 2)\) 를 세 가지 방식으로 볼 수 있다:

표현 방식 의미
두 숫자 \((4, 2)\) 성분 목록 — 계산의 기반
화살표 원점에서 점 \((4, 2)\) 까지의 방향과 크기
평면의 점 좌표 \((4, 2)\) 위치

세 관점 모두 동등하다. 수치 계산은 성분으로, 기하학적 직관은 화살표로 생각한다.

2.3 위치 벡터: 두 점의 차이

평면 위 점 \(P\) 는 좌표 \((x, y)\) 를 갖는다. 이를 원점에서 \(P\) 까지의 화살표로 읽으면 위치 벡터(position vector) \(\mathbf{OP}\) 가 된다. 원점 \(O\) 의 위치 벡터는 영벡터 \(\mathbf{0}\) 이므로:

\[\mathbf{OP} = \mathbf{P} - \mathbf{O} = \mathbf{P}\]

두 점 \(P_1 = (x_1, y_1)\)\(P_2 = (x_2, y_2)\) 를 잇는 벡터도 같은 뺄셈으로 얻는다.

\[\mathbf{P_1 P_2} = \mathbf{P_2} - \mathbf{P_1} = (x_2 - x_1, y_2 - y_1)\]

왜 중요한가: 벡터는 “위치”가 아니라 “변위(displacement)”이다. 두 점의 차이로 벡터를 구성하는 이 조작이 §벡터 방정식에서 직선·평면의 파라메트릭 표현으로 확장된다.


3 벡터 덧셈

정의: 벡터 덧셈

\[\mathbf{v} + \mathbf{w} = \begin{bmatrix} v_1 \\ v_2 \\ \vdots \\ v_n \end{bmatrix} + \begin{bmatrix} w_1 \\ w_2 \\ \vdots \\ w_n \end{bmatrix} = \begin{bmatrix} v_1 + w_1 \\ v_2 + w_2 \\ \vdots \\ v_n + w_n \end{bmatrix}\]

성분별로 따로따로 더한다. 다른 방법은 없다.

“사과와 오렌지를 더할 수 없다.” Strang의 표현이다. 벡터의 각 성분은 서로 다른 단위·의미를 가질 수 있다. 성분끼리만 더하는 이유가 여기에 있다 (Strang, 2009, §1.1).

3.1 예시: 2차원

\[\mathbf{v} = \begin{bmatrix} 1 \\ 5 \end{bmatrix}, \quad \mathbf{w} = \begin{bmatrix} 3 \\ 3 \end{bmatrix} \implies \mathbf{v} + \mathbf{w} = \begin{bmatrix} 4 \\ 8 \end{bmatrix}\]

3.2 예시: 3차원

\[\mathbf{v} = \begin{bmatrix} 1 \\ 1 \\ -1 \end{bmatrix}, \quad \mathbf{w} = \begin{bmatrix} 2 \\ 3 \\ 4 \end{bmatrix} \implies \mathbf{v} + \mathbf{w} = \begin{bmatrix} 3 \\ 4 \\ 3 \end{bmatrix}\]

3.3 기하학적 해석: 평행사변형 법칙

\(\mathbf{v}\) 의 끝점에서 \(\mathbf{w}\) 를 이으면 합벡터 \(\mathbf{v} + \mathbf{w}\) 가 된다. 이것을 head-to-tail 덧셈이라 한다. 원점, \(\mathbf{v}\), \(\mathbf{w}\), \(\mathbf{v}+\mathbf{w}\) 의 네 점은 평행사변형을 이룬다.

교환 법칙 \(\mathbf{v} + \mathbf{w} = \mathbf{w} + \mathbf{v}\) 는 이 평행사변형의 두 경로가 같은 꼭짓점에 도달한다는 것이다.

3.4 영벡터

\(\mathbf{v} + (-\mathbf{v}) = \mathbf{0}\) 이다. 영벡터 \(\mathbf{0}\) 은 숫자 \(0\) 이 아니다 — 모든 성분이 \(0\) 인 벡터이다. 모든 선형공간은 영벡터를 포함한다.

3.5 뺄셈의 기하학

\(\mathbf{v} - \mathbf{w}\)\(\mathbf{w}\) 의 끝점에서 \(\mathbf{v}\) 의 끝점을 향하는 벡터다. \(\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} 5 \\ 0 \end{bmatrix}\]


4 스칼라 곱

정의: 스칼라 곱 (Scalar Multiplication)

실수 \(c\) 와 벡터 \(\mathbf{v}\) 의 곱:

\[c\mathbf{v} = c \begin{bmatrix} v_1 \\ v_2 \\ \vdots \\ v_n \end{bmatrix} = \begin{bmatrix} cv_1 \\ cv_2 \\ \vdots \\ cv_n \end{bmatrix}\]

\(c\)스칼라(scalar)라 부르는 이유: 벡터를 스케일링(scaling)하기 때문이다.

스칼라 \(c\) 에 따른 효과:

\(c\) 의 범위 기하학적 효과
\(c > 1\) 같은 방향, 더 길어짐
\(0 < c < 1\) 같은 방향, 짧아짐
\(c = 0\) 영벡터 \(\mathbf{0}\)
\(-1 < c < 0\) 반대 방향, 짧아짐
\(c < -1\) 반대 방향, 더 길어짐

벡터를 2배 하는 방법은 두 가지다: \(\mathbf{v} + \mathbf{v}\) 또는 \(2\mathbf{v}\). 두 결과는 동일하다.

4.1 덧셈·스칼라 곱의 대수 성질

정리: 벡터 공간의 8가지 공리 (성분별 연산이 만족하는 성질)

모든 \(\mathbf{u}, \mathbf{v}, \mathbf{w} \in \mathbb{R}^n\) 과 스칼라 \(c, d \in \mathbb{R}\) 에 대해:

덧셈

  1. 교환법칙: \(\mathbf{u} + \mathbf{v} = \mathbf{v} + \mathbf{u}\)
  2. 결합법칙: \((\mathbf{u} + \mathbf{v}) + \mathbf{w} = \mathbf{u} + (\mathbf{v} + \mathbf{w})\)
  3. 항등원: \(\mathbf{v} + \mathbf{0} = \mathbf{v}\)
  4. 역원: \(\mathbf{v} + (-\mathbf{v}) = \mathbf{0}\)

스칼라 곱

  1. 스칼라와의 결합법칙: \((cd)\mathbf{v} = c(d\mathbf{v})\)
  2. 벡터에 대한 분배법칙: \(c(\mathbf{u} + \mathbf{v}) = c\mathbf{u} + c\mathbf{v}\)
  3. 스칼라에 대한 분배법칙: \((c + d)\mathbf{v} = c\mathbf{v} + d\mathbf{v}\)
  4. 곱셈 항등원: \(1 \cdot \mathbf{v} = \mathbf{v}\)

왜 성질을 명시하는가: 이 8가지가 바로 Ch.3에서 정의할 벡터 공간(vector space)의 공리이다. \(\mathbb{R}^n\) 의 성분별 연산이 이 공리를 자동으로 만족하기 때문에, 같은 규칙이 함수 공간·행렬 공간·다항식 공간에서도 그대로 성립한다. 한 집합에서 증명된 모든 정리를 다른 집합에 그대로 적용할 수 있다는 것이 “공리화”의 힘이다.


5 선형결합

5.1 정의

정의: 선형결합 (Linear Combination)

벡터 \(\mathbf{v}_1, \mathbf{v}_2, \ldots, \mathbf{v}_k \in \mathbb{R}^n\) 과 스칼라 \(c_1, c_2, \ldots, c_k \in \mathbb{R}\) 에 대해:

\[c_1\mathbf{v}_1 + c_2\mathbf{v}_2 + \cdots + c_k\mathbf{v}_k\]

를 이 벡터들의 선형결합(linear combination)이라 한다. \(c_i\)계수(coefficient)라 부른다.

두 벡터의 경우, 네 가지 특수한 선형결합:

\[\underbrace{1 \cdot \mathbf{v} + 1 \cdot \mathbf{w}}_{\text{합}}, \quad \underbrace{1 \cdot \mathbf{v} - 1 \cdot \mathbf{w}}_{\text{차}}, \quad \underbrace{0 \cdot \mathbf{v} + 0 \cdot \mathbf{w}}_{\text{영벡터}}, \quad \underbrace{c \cdot \mathbf{v} + 0 \cdot \mathbf{w}}_{c\mathbf{v}}\]

5.2 예시: 구체적인 선형결합

\[\mathbf{v} = \begin{bmatrix} 1 \\ 1 \\ 0 \end{bmatrix}, \quad \mathbf{w} = \begin{bmatrix} 2 \\ 3 \\ 1 \end{bmatrix}\]

\(c = 2, d = -1\) 로 선형결합을 구하면:

\[2\mathbf{v} - \mathbf{w} = 2\begin{bmatrix} 1 \\ 1 \\ 0 \end{bmatrix} - \begin{bmatrix} 2 \\ 3 \\ 1 \end{bmatrix} = \begin{bmatrix} 2-2 \\ 2-3 \\ 0-1 \end{bmatrix} = \begin{bmatrix} 0 \\ -1 \\ -1 \end{bmatrix}\]

3개 벡터의 선형결합:

\[\mathbf{u} = \begin{bmatrix} 1 \\ 0 \\ 3 \end{bmatrix}, \quad \mathbf{v} = \begin{bmatrix} 1 \\ 2 \\ 1 \end{bmatrix}, \quad \mathbf{w} = \begin{bmatrix} 2 \\ 3 \\ -1 \end{bmatrix}\]

\[\mathbf{u} + 4\mathbf{v} - 2\mathbf{w} = \begin{bmatrix} 1 \\ 0 \\ 3 \end{bmatrix} + \begin{bmatrix} 4 \\ 8 \\ 4 \end{bmatrix} + \begin{bmatrix} -4 \\ -6 \\ 2 \end{bmatrix} = \begin{bmatrix} 1 \\ 2 \\ 9 \end{bmatrix}\]


6 선형결합이 만드는 기하학적 구조

이것이 §1.1의 핵심 질문이다. “모든 \(c\)\(d\) 를 취하면 \(c\mathbf{v} + d\mathbf{w}\) 가 만드는 집합은 무엇인가?”

6.1 벡터 1개의 선형결합

1개 벡터 \(\{c\mathbf{u}\}\) → 직선

비영벡터 \(\mathbf{u}\) 의 스칼라 배 \(c\mathbf{u}\) (모든 \(c \in \mathbb{R}\))는 원점을 지나는 직선을 채운다.

\(c > 0\) 이면 \(\mathbf{u}\) 방향, \(c < 0\) 이면 반대 방향, \(c = 0\) 이면 원점. 이 직선은 양방향으로 무한히 뻗는다.

왜 중요한가: 모든 선형대수 문제는 결국 “어떤 벡터들이 어떤 공간을 채우는가?”로 귀결된다. 1개 벡터는 1차원(직선), 2개는 2차원(평면), \(k\) 개는 최대 \(k\) 차원 공간을 채운다.

6.2 벡터 2개의 선형결합

2개 벡터 \(\{c\mathbf{u} + d\mathbf{v}\}\) → 평면 (전형적인 경우)

\(\mathbf{v}\)\(\mathbf{u}\) 의 스칼라 배가 아닐 때(두 벡터가 같은 직선 위에 없을 때), 모든 \(c, d \in \mathbb{R}\) 에 대한 선형결합 \(c\mathbf{u} + d\mathbf{v}\) 는 원점을 지나는 2차원 평면을 채운다.

직관: \(c\mathbf{u}\) 직선 위의 각 점에서 \(d\mathbf{v}\) 직선을 더하면 평면이 “깔린다”.

예시: \(\mathbf{v} = (1, 1, 0)^\top\), \(\mathbf{w} = (0, 1, 1)^\top\) 의 선형결합

\[c\mathbf{v} + d\mathbf{w} = \begin{bmatrix} c \\ c + d \\ d \end{bmatrix}\]

이 평면의 특징: 두 번째 성분 = 첫 번째 + 세 번째 성분. 즉 \(v_2 = v_1 + v_3\) 을 만족하는 모든 3차원 벡터의 집합이다. \((1, 2, 3)\) 은 이 평면에 없다 (\(2 \neq 1 + 3\)).

예외 (종속 벡터): 만약 \(\mathbf{v} = 2\mathbf{u}\) 라면, \(c\mathbf{u} + d\mathbf{v} = c\mathbf{u} + 2d\mathbf{u} = (c + 2d)\mathbf{u}\) 로, 여전히 직선만 채운다. 두 벡터가 독립적이어야 평면이 만들어진다.

6.3 벡터 3개의 선형결합

3개 벡터 \(\{c\mathbf{u} + d\mathbf{v} + e\mathbf{w}\}\) → 3차원 공간 (전형적인 경우)

\(\mathbf{w}\)\(\mathbf{u}\)\(\mathbf{v}\) 의 선형결합이 아닐 때, 모든 \(c, d, e \in \mathbb{R}\) 에 대한 선형결합은 3차원 전체 공간 \(\mathbb{R}^3\) 을 채운다.

직관: \(\mathbf{u}\)-\(\mathbf{v}\) 평면에 속하지 않는 \(\mathbf{w}\) 를 더하면 평면 밖으로 나갈 수 있다. 모든 방향이 열린다.

예외: \(\mathbf{w}\)\(\mathbf{u}\)-\(\mathbf{v}\) 평면 안에 있으면(\(\mathbf{w} = c_0\mathbf{u} + d_0\mathbf{v}\) ), 3개 벡터의 선형결합도 평면을 벗어나지 못한다.

6.4 요약: 선형결합의 기하학

벡터 수 전형적인 경우 생성 집합 핵심 조건
1개 \(\mathbf{u}\) 직선 (1차원) \(\mathbf{u} \neq \mathbf{0}\)
2개 \(\mathbf{u}, \mathbf{v}\) 평면 (2차원) \(\mathbf{v} \neq c\mathbf{u}\)
3개 \(\mathbf{u}, \mathbf{v}, \mathbf{w}\) 3차원 공간 \(\mathbb{R}^3\) \(\mathbf{w} \notin \text{span}\{\mathbf{u}, \mathbf{v}\}\)
\(k\)\(\in \mathbb{R}^n\) 최대 \(k\) 차원 부분공간 벡터들이 선형독립

이 표의 “핵심 조건”이 나중에 배울 선형독립(linear independence)의 씨앗이다.


7 \(n\) 차원으로의 확장

2차원·3차원에서 쌓은 직관은 \(n\) 차원에서도 그대로 적용된다.

  • \(n\) 차원 벡터의 덧셈: 여전히 성분별 덧셈
  • \(n\) 차원의 선형결합: \(c_1\mathbf{v}_1 + \cdots + c_k\mathbf{v}_k\), 여전히 성분별 계산
  • \(n\) 차원 단위 큐브의 대각선 \((1, 1, \ldots, 1)\) 의 길이: \(\sqrt{n}\)

\(n = 10\) 인 벡터를 그릴 수는 없지만, 계산 규칙은 \(n = 2\) 와 완전히 동일하다. 이것이 선형대수의 “인상적인 특징”이다 (Strang, 2009, §1.1).

ML에서의 \(n\) 차원: 이미지 하나가 \(28 \times 28 = 784\) 픽셀이면 784차원 벡터다. 텍스트 임베딩은 768차원이다. 선형결합으로 이 고차원 공간을 다루는 것이 딥러닝의 기본 구조다.


8 선형결합과 선형방정식의 연결

선형결합은 선형방정식 풀기와 본질적으로 같은 문제다.

\[c\begin{bmatrix} 2 \\ -1 \end{bmatrix} + d\begin{bmatrix} -1 \\ 2 \end{bmatrix} = \begin{bmatrix} 1 \\ 0 \end{bmatrix}\]

를 푸는 것은 두 방정식을 푸는 것과 동일하다:

\[2c - d = 1\] \[-c + 2d = 0\]

이 연립방정식의 해 \(c = 2/3, d = 1/3\) 이 선형결합의 계수다.

열 그림(Column Picture): 계수 \(c\)\(d\) 를 찾는 문제는 “벡터 \(\mathbf{b} = (1, 0)^\top\) 이 두 열벡터 \((2, -1)^\top\)\((-1, 2)^\top\) 의 어떤 선형결합인가?”라는 질문이다. 이것이 나중에 배울 Ax=b의 열 관점(column picture)이다 (mit-01 포스트 참조).


9 Span과 선형결합

정의: Span (생성)

벡터 집합 \(\{\mathbf{v}_1, \ldots, \mathbf{v}_k\}\) 의 모든 가능한 선형결합의 집합을 이 벡터들의 생성(span)이라 한다.

\[\text{span}\{\mathbf{v}_1, \ldots, \mathbf{v}_k\} = \{c_1\mathbf{v}_1 + \cdots + c_k\mathbf{v}_k \mid c_1, \ldots, c_k \in \mathbb{R}\}\]

\(\mathbf{b}\) 가 벡터들의 span 안에 있다”는 말은 \(\mathbf{b}\) 를 그 벡터들의 선형결합으로 표현할 수 있다는 뜻이다. 이것이 선형방정식 \(A\mathbf{x} = \mathbf{b}\) 의 해가 존재하는 조건이다: \(\mathbf{b} \in \text{span}(\text{열벡터들})\).


10 벡터 방정식: 직선과 평면의 파라메트릭 표현

선형결합의 기하학을 방정식 형태로 쓰면 벡터 방정식(vector equation) 또는 파라메트릭 표현이 된다. 이는 Ch.3 §3.5 완전해 \(\mathbf{x} = \mathbf{x}_p + \mathbf{x}_n\) 의 기초 형태이기도 하다.

10.1 원점을 지나는 직선

\(y = mx\) 위의 한 점 \((1, m) = \mathbf{v}\) 을 잡으면, 직선 위의 모든 점은 \(\mathbf{v}\) 의 스칼라 배로 표현된다.

\[\mathbf{x} = t\mathbf{v}, \quad t \in \mathbb{R}\]

파라미터 \(t\) 가 실수 전체를 움직일 때 \(\mathbf{x}\) 가 직선 전체를 그린다. 이것이 1개 벡터의 span이 직선이라는 사실의 방정식 형태이다.

10.2 일반 직선

\(y = mx + b\) 는 원점을 지나는 직선을 \(b\) 만큼 평행이동한 것이다. 직선 위의 한 점 \(\mathbf{p}_0\) (예: \((0, b)\))를 출발점으로 잡고 방향 벡터 \(\mathbf{v}_1 = (1, m)\) 을 더하면:

\[\mathbf{x} = \mathbf{p}_0 + t\mathbf{v}_1\]

중요 관찰: \(\mathbf{p}_0\) 는 “직선 위의 아무 한 점”이면 족하다. 수직 이동일 필요 없다. \(\mathbf{v}_1\) 도 “직선과 평행한 아무 비영벡터”이면 된다. 이 자유도가 곧 §Reparametrization의 이유이기도 하다.

예시: \(y = 3x + 2\) 위 두 점 \((1, 5), (2, 8)\) 을 잡으면:

\[\mathbf{x} = \mathbf{p}_0 + t\mathbf{v}_1 = (1, 5) + t(1, 3)\]

10.3 평면

평면은 1개 벡터로는 부족하다. 두 벡터의 span이 평면을 만들려면 두 벡터가 선형독립이어야 한다. 평행한 두 벡터 \(\mathbf{v}_1 \parallel \mathbf{v}_2\) 라면 \(\mathbf{v}_2 = k\mathbf{v}_1\) 이어서:

\[a\mathbf{v}_1 + b\mathbf{v}_2 = (a + bk)\mathbf{v}_1\]

가 되어 여전히 직선만 그린다.

평면 위 한 점 \(\mathbf{p}_0\) 와 평행하지 않은 두 벡터 \(\mathbf{v}_1, \mathbf{v}_2\) 가 있으면:

\[\mathbf{x} = \mathbf{p}_0 + t_0\mathbf{v}_1 + t_1\mathbf{v}_2\]

예시: \(x + 2y + 3z = 4\) 위 세 점 \((1, 1, \tfrac{1}{3}), (1, 2, -\tfrac{1}{3}), (0, 0, \tfrac{4}{3})\) 을 잡아 방향 벡터 두 개를 구하면:

\[\mathbf{x} = (1, 1, \tfrac{1}{3}) + t_0(0, 1, -\tfrac{2}{3}) + t_1(-1, -1, 1)\]

10.4 연결 지점

  • Ch.2 연립방정식: 위 표현을 특수해 + 영공간 벡터들의 선형결합으로 보면 \(\mathbf{x}_p + c_1\mathbf{x}_{n_1} + c_2\mathbf{x}_{n_2} + \cdots\) 형태가 된다.
  • Ch.3 §3.5: \(A\mathbf{x} = \mathbf{b}\) 의 완전해가 정확히 이 파라메트릭 형태이다.
  • Ch.4 직교성: \(\mathbf{v}_1, \mathbf{v}_2\) 가 직교하면 평면 위 점의 좌표 해석이 단순해진다.

11 볼록결합과 아핀결합 (연장선)

선형결합의 제약을 바꾸면 다른 개념이 나온다.

결합 유형 계수 조건 기하학적 의미
선형결합 제약 없음 직선/평면/공간 전체
아핀결합 \(\sum c_i = 1\) 점들을 지나는 초평면
볼록결합 \(c_i \geq 0\), \(\sum c_i = 1\) 두 점 사이의 선분 (삼각형, 다면체)

예시: \(\mathbf{u}\), \(\mathbf{v}\), \(\mathbf{w}\) 의 볼록결합 \(c\mathbf{u} + d\mathbf{v} + e\mathbf{w}\) (\(c, d, e \geq 0\), \(c + d + e = 1\))는 세 꼭짓점 \(\mathbf{u}\), \(\mathbf{v}\), \(\mathbf{w}\) 로 이루어진 삼각형 내부를 채운다. 머신러닝의 볼록 최적화, 베이즈 추론의 혼합 모형에서 이 개념이 등장한다.


12 응용 분야

분야 선형결합의 역할 구체적 예시
머신러닝 모델 출력 = 입력의 선형결합 \(\hat{y} = w_1x_1 + \cdots + w_p x_p\)
딥러닝 각 레이어 = 선형결합 + 활성화 함수 \(\mathbf{z} = W\mathbf{x} + \mathbf{b}\)
자연어 처리 단어 임베딩의 의미 합성 king - man + woman ≈ queen
컴퓨터 그래픽스 색 혼합, 보간(interpolation) RGB 혼합 = 기저색의 선형결합
통계학 회귀 모형의 예측값 \(\hat{y} = \beta_0 + \beta_1 x_1 + \cdots\)
신호처리 푸리에 분해 신호 = 사인파의 선형결합

13 코드 예시

13.1 Step 1: Low-level 구현

from typing import Union

Scalar = Union[int, float]
Vector = list[float]

def add(v: Vector, w: Vector) -> Vector:
    """벡터 덧셈: 성분별 합산"""
    assert len(v) == len(w), "차원이 같아야 한다"
    return [vi + wi for vi, wi in zip(v, w)]

def scalar_mul(c: Scalar, v: Vector) -> Vector:
    """스칼라 곱: 각 성분에 c를 곱한다"""
    return [c * vi for vi in v]

def linear_combination(coefficients: list[Scalar], vectors: list[Vector]) -> Vector:
    """
    선형결합: c1*v1 + c2*v2 + ... + ck*vk
    모든 계수-벡터 쌍을 스칼라 곱한 뒤 합산한다.
    """
    assert len(coefficients) == len(vectors), "계수와 벡터 수가 같아야 한다"
    n = len(vectors[0])
    result = [0.0] * n
    for c, v in zip(coefficients, vectors):
        scaled = scalar_mul(c, v)
        result = add(result, scaled)
    return result

# 예시 1: 두 벡터의 선형결합
v = [1.0, 1.0, 0.0]
w = [0.0, 1.0, 1.0]

print("v + w =", add(v, w))              # [1, 2, 1]
print("2v - w =", linear_combination([2, -1], [v, w]))   # [2, 1, -1]
print("v =", linear_combination([1, 0], [v, w]))          # [1, 1, 0]

# 예시 2: span을 격자점으로 시각화
combinations = []
for c in [-1, 0, 1, 2]:
    for d in [-1, 0, 1, 2]:
        comb = linear_combination([c, d], [v, w])
        combinations.append((c, d, comb))

for c, d, result in combinations[:5]:
    print(f"  c={c}, d={d}: {c}*v + {d}*w = {result}")

13.2 Step 2: NumPy 구현

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# --- 기본 연산 ---
v = np.array([1, 1, 0], dtype=float)
w = np.array([0, 1, 1], dtype=float)

add_vw    = v + w                          # [1, 2, 1]
scaled_2v = 2 * v                          # [2, 2, 0]
comb      = 2 * v - w                      # [2, 1, -1]

print("v + w =", add_vw)
print("2v    =", scaled_2v)
print("2v - w=", comb)

# --- 선형결합이 만드는 평면 시각화 ---
C = np.linspace(-2, 2, 15)
D = np.linspace(-2, 2, 15)
CC, DD = np.meshgrid(C, D)

# 각 (c, d) 쌍에서 c*v + d*w 계산
v2 = np.array([1, 1, 0])
w2 = np.array([0, 1, 1])

# 결과 벡터의 3개 성분
X = CC * v2[0] + DD * w2[0]  # = CC (v2[0]=1, w2[0]=0)
Y = CC * v2[1] + DD * w2[1]  # = CC + DD
Z = CC * v2[2] + DD * w2[2]  # = DD

fig = plt.figure(figsize=(7, 5))
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z, alpha=0.4, color='steelblue')

# 두 기저벡터 화살표 표시
origin = [0, 0, 0]
ax.quiver(*origin, *v2, color='red',   length=1, label=r'$\mathbf{v}$', arrow_length_ratio=0.2)
ax.quiver(*origin, *w2, color='green', length=1, label=r'$\mathbf{w}$', arrow_length_ratio=0.2)

ax.set_xlabel('x'); ax.set_ylabel('y'); ax.set_zlabel('z')
ax.set_title(r'모든 $c\mathbf{v} + d\mathbf{w}$ 가 만드는 평면')
ax.legend()
plt.tight_layout()
plt.show()

# --- span 포함 여부 확인 ---
def in_span_2d(target: np.ndarray, v: np.ndarray, w: np.ndarray, tol: float = 1e-9) -> tuple[bool, float, float]:
    """
    target = c*v + w*d 를 만족하는 c, d 가 존재하는지 최소제곱으로 확인한다.
    A @ [c, d] = target 을 풀어 잔차가 0이면 span 내부에 있다.
    """
    A = np.column_stack([v, w])
    coeffs, residuals, rank, _ = np.linalg.lstsq(A, target, rcond=None)
    approx = A @ coeffs
    is_in_span = np.linalg.norm(approx - target) < tol
    return is_in_span, coeffs[0], coeffs[1]

b1 = np.array([1.0, 2.0, 1.0])   # 평면 내부 (c=1, d=1)
b2 = np.array([1.0, 2.0, 3.0])   # 평면 외부

for b, label in [(b1, 'b1=(1,2,1)'), (b2, 'b2=(1,2,3)')]:
    in_s, c, d = in_span_2d(b, v2.astype(float), w2.astype(float))
    print(f"{label}: span 내부={in_s}, c≈{c:.3f}, d≈{d:.3f}")

13.3 Step 3: 선형결합의 계수 역추적

# cv + dw = b 를 만족하는 c, d 를 구하는 문제
# 이것이 나중에 Ax = b 풀기의 기초가 된다

import numpy as np

v = np.array([2.0, -1.0])
w = np.array([-1.0, 2.0])
b = np.array([1.0, 0.0])

# 방법 1: np.linalg.solve (2x2 연립방정식)
A = np.column_stack([v, w])   # A = [v | w], 2x2 행렬
coeffs = np.linalg.solve(A, b)
c, d = coeffs
print(f"c = {c:.4f}, d = {d:.4f}")     # c = 2/3, d = 1/3
print(f"검증: {c:.4f}*v + {d:.4f}*w = {c*v + d*w}")  # [1, 0] 확인

14 핵심 요약

선형결합 \(c_1\mathbf{v}_1 + \cdots + c_k\mathbf{v}_k\) 에서 알아야 할 세 가지:

  1. 대수: 성분별 계산 — \(k\) 차원이든 \(n\) 차원이든 동일한 규칙
  2. 기하: \(k\) 개의 독립 벡터는 \(k\) 차원 부분공간을 생성한다 (직선 → 평면 → 공간)
  3. 방정식: “이 벡터들로 \(\mathbf{b}\) 를 만들 수 있는가?” = Ax = b 의 해 존재 여부

이 세 관점이 Ch.2(소거법), Ch.3(부분공간), Ch.4(직교성)로 이어지는 연결고리다.


15 관련 주제

선행 지식

후속 주제

다른 카테고리 연결

Subscribe

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