AI공부 · 선형대수

선형결합, 스팬, 기저

2장. 선형결합, 스팬, 기저

이 장을 마치면 좌표를 “기저 벡터를 몇 배씩 늘려 더하라는 지시”로 읽고, 벡터 몇 개로 어디까지 닿을 수 있는지(스팬)와 그중 쓸모없는 벡터가 있는지(선형 종속)를 판단할 수 있습니다.

2.1 좌표를 스칼라로 다시 보기

1장에서는 좌표 [3, −2]를 “오른쪽으로 3, 아래로 2 걸어라”는 길 안내로 읽었습니다. 이번 장은 같은 숫자를 다르게 읽습니다. 각 좌표를 “스칼라”, 즉 무언가를 몇 배로 늘이는 숫자로 봅니다. 이 관점이 선형대수의 중심입니다.

그럼 무엇을 늘이는가? xy 좌표계에는 특별한 벡터 두 개가 있습니다.

  • î (아이 햇): 오른쪽을 가리키는 길이 1짜리 벡터 [1, 0]. “x 방향 단위벡터”라고도 부릅니다.
  • ĵ (제이 햇): 위를 가리키는 길이 1짜리 벡터 [0, 1]. “y 방향 단위벡터”입니다.

글자 위의 모자(^)는 “길이가 1인 벡터”라는 표시입니다. 이제 [3, −2]를 이렇게 읽습니다.

  1. x 좌표 3은 î를 3배로 늘리는 스칼라
  2. y 좌표 −2는 ĵ를 뒤집고 2배로 늘리는 스칼라
  3. 이렇게 늘인 두 벡터를 더한 것이 곧 [3, −2]
좌표 [3, −2] = î를 3배 + ĵ를 −2배ĵ3î−2ĵ[3, −2]î = [1, 0] 오른쪽 1칸ĵ = [0, 1] 위쪽 1칸두 벡터를 합쳐 기저라 부른다
좌표를 스칼라로 읽기 · [3, −2] = 3î + (−2)ĵ

수식으로 쓰면 이렇습니다.

3
−2
= 3î + (−2)ĵ = 3 1
0
+ (−2) 0
1

“늘인 벡터 두 개를 더한다”는 이 아이디어가 이 장 전체의 주인공입니다. 1장의 두 연산(스칼라 곱, 덧셈)을 한 번에 쓰는 것입니다.

기저(basis)라는 이름. î와 ĵ를 함께 좌표계의 기저라고 부릅니다. 좌표를 스칼라로 볼 때, 그 스칼라가 실제로 늘이는 대상이 바로 기저 벡터입니다. 건축으로 치면 모든 치수를 재는 기준 자(척)에 해당합니다. 더 정확한 정의는 2.8에서 다룹니다.

2.2 기저는 바꿀 수 있다

î와 ĵ는 “표준” 기저일 뿐, 유일한 선택이 아닙니다. 다른 벡터 두 개를 기저로 골라도 완전히 쓸 만한 새 좌표계가 생깁니다.

예를 들어 오른쪽 위를 가리키는 v = [1, 2]와 오른쪽 아래를 가리키는 w = [3, −1]을 기저로 골랐다고 합시다. 숫자 두 개 (a, b)를 주면 “v를 a배, w를 b배 해서 더하라”는 뜻이 됩니다.

  • (1, 0) → v 그 자체 → 표준 좌표로 [1, 2]
  • (0, 1) → w 그 자체 → 표준 좌표로 [3, −1]
  • (1, 1) → v + w → 표준 좌표로 [4, 1]

같은 숫자 쌍 (1, 1)이 표준 기저에서는 [1, 1]을, 이 새 기저에서는 [4, 1]을 가리킵니다. 숫자만으로는 벡터가 정해지지 않습니다. 어떤 기저를 쓰는지가 늘 숨어 있습니다.

이 두 벡터로 평면의 모든 점에 닿을 수 있을까? 그렇습니다. v와 w는 서로 다른 방향을 가리키기 때문에, 두 스칼라를 잘 고르면 어떤 2차원 벡터든 만들 수 있습니다. 비스듬한 격자를 깔았다고 생각하면 됩니다. 격자가 기울어졌어도 평면을 빈틈없이 덮습니다.

현장 비유. 같은 건물이라도 도면의 기준선을 어디에 두느냐에 따라 치수 숫자가 달라집니다. 정북 기준 도면과 대지 경계선 기준 도면은 같은 기둥을 다른 숫자로 적습니다. 기둥은 그대로인데 “기준”이 바뀐 것입니다. 기저를 바꾸는 것이 이와 같습니다. 서로 다른 좌표계 사이를 정확히 옮기는 방법은 시리즈 뒷부분에서 다룹니다.

2.3 선형결합과 ‘선형’이라는 이름

벡터 몇 개를 각각 스칼라배 해서 더하는 것을 그 벡터들의 선형결합(linear combination)이라고 합니다.

av + bw   (a, b는 아무 실수)

2.1의 3î + (−2)ĵ도, 2.2의 v + w도 전부 선형결합입니다.

왜 “선형(직선)”이라고 부를까? 어원은 아니지만 기억하기 좋은 그림이 있습니다. 스칼라 하나를 고정하고 다른 하나만 자유롭게 바꾸면, 결과 벡터의 끝이 직선을 그립니다.

  • b = 1로 고정하고 a만 바꾸면 → a·v + w의 끝은 “w 끝을 지나고 v 방향으로 뻗은 직선” 위를 움직입니다
  • 즉 손잡이 하나를 돌리면 직선 하나가 그려집니다

두 손잡이 비유. 선형결합을 손잡이 두 개가 달린 기계로 생각합시다. 왼쪽 손잡이는 a(v를 몇 배), 오른쪽 손잡이는 b(w를 몇 배)를 정합니다. 두 손잡이를 돌릴 때마다 화살표 끝이 움직입니다. 다음 절의 질문은 이것입니다. “손잡이를 마음대로 돌리면 화살표 끝이 어디까지 갈 수 있나?”

2.4 스팬: 2차원에서 생기는 세 가지 경우

스팬(span)은 주어진 벡터들의 선형결합으로 닿을 수 있는 모든 벡터의 모음입니다. 손잡이를 마음대로 돌려서 화살표 끝이 갈 수 있는 모든 곳이라고 보면 됩니다.

1장에서 선형대수는 덧셈과 스칼라 곱 두 연산이 중심이라고 했습니다. 스팬은 결국 이 질문입니다. “이 벡터들과 두 연산만으로 어디까지 갈 수 있나?”

2차원 벡터 두 개의 스팬은 세 경우뿐입니다.

경우두 벡터의 관계스팬예
대부분서로 다른 방향평면 전체[1, 2]와 [3, −1]
운 나쁜 경우같은 직선 위 (한쪽이 다른 쪽의 배수)원점을 지나는 직선 하나[1, 2]와 [2, 4]
특수한 경우둘 다 영벡터원점 한 점[0, 0]과 [0, 0]

두 번째 경우를 자세히 봅시다. [2, 4]는 [1, 2]의 2배입니다. 그래서 a·[1, 2] + b·[2, 4] = (a + 2b)·[1, 2]가 됩니다. 손잡이가 두 개여도 결국 [1, 2] 방향으로 늘이고 줄이는 일밖에 못 합니다. 화살표 끝은 그 직선을 벗어나지 못합니다.

판별 요령. 두 2차원 벡터가 같은 직선 위에 있는지는 “한쪽이 다른 쪽의 몇 배인가”로 확인합니다. [3, 6]과 [1, 2]는 3배 관계라 같은 직선, [3, 6]과 [1, 3]은 어떤 수를 곱해도 안 맞으니 다른 방향입니다.

2.5 벡터 하나는 화살표, 여러 개는 점

스팬을 그림으로 그리려면 화살표 수천 개를 한꺼번에 그려야 해서 금방 복잡해집니다. 그래서 벡터가 여러 개일 때는 화살표 대신 화살표 끝의 점만 찍습니다. (꼬리는 여전히 원점에 있다고 생각합니다.)

  • 끝이 어떤 직선 위에 있는 모든 벡터 → 그냥 그 직선을 떠올립니다
  • 모든 2차원 벡터 → 화살표는 지우고 끝없이 펼쳐진 평면 자체를 떠올립니다

규칙 정리: 벡터 하나를 다룰 때는 화살표로, 벡터 모음을 다룰 때는 점으로 생각합니다. 이 규칙으로 2.4를 다시 말하면, 대부분의 벡터 쌍은 스팬이 “평면 전체”이고, 같은 직선 위에 있으면 스팬이 “직선 하나”입니다.

AI 미리 보기. 데이터 분석에서 점 그래프(산점도)를 그리는 것이 바로 이 관점입니다. 데이터 한 건이 벡터 하나이고, 그 끝점을 찍은 것이 산점도의 점 하나입니다.

2.6 3차원에서의 스팬

벡터 두 개. 3차원 공간에서 서로 다른 방향을 가리키는 벡터 두 개를 잡습니다. 두 손잡이를 돌려 만든 선형결합의 끝점들을 모두 모으면, 원점을 지나는 평평한 판(평면) 하나가 생깁니다. 이 판이 두 벡터의 스팬입니다. 방 한가운데를 비스듬히 가르는 무한히 큰 유리판을 떠올리면 됩니다.

벡터 세 개. 손잡이를 하나 더 달아 세 번째 벡터 u를 추가합니다. 선형결합은 똑같이 정의합니다. 스칼라 세 개를 골라 각 벡터에 곱하고 모두 더합니다.

av + bw + cu

이때 두 가지 일이 일어날 수 있습니다.

세 번째 벡터 u의 위치스팬이유
처음 두 벡터의 판 위에 있음그대로 판 하나u를 아무리 늘이고 더해도 판을 벗어나지 못한다
판 밖을 가리킴 (무작위로 고르면 거의 항상 이쪽)3차원 공간 전체새 방향이 생겨 모든 3차원 벡터에 닿는다

두 번째 경우를 그림으로 이해하기. u를 늘이고 줄이면, 처음 두 벡터가 만든 판이 u 방향으로 위아래로 밀려 움직인다고 생각합시다. 판이 위아래로 끝없이 쓸고 지나가며 공간 전체를 채웁니다. 다른 표현으로는, 자유롭게 돌릴 수 있는 손잡이 세 개를 3차원의 세 방향에 하나씩 온전히 쓰는 것입니다.

2.7 선형 종속과 선형 독립

2차원에서 두 벡터가 같은 직선 위에 있을 때, 3차원에서 세 번째 벡터가 이미 판 위에 있을 때, 공통점이 있습니다. 벡터 하나가 쓸모없습니다. 빼버려도 스팬이 줄어들지 않습니다.

이런 상태를 선형 종속(linearly dependent)이라고 합니다. 같은 말을 이렇게도 할 수 있습니다. “그중 한 벡터를 나머지 벡터들의 선형결합으로 나타낼 수 있다.” 이미 나머지의 스팬 안에 들어 있기 때문입니다. 반대로 모든 벡터가 스팬에 새 차원을 하나씩 보태면 선형 독립(linearly independent)이라고 합니다.

예판정이유
[1, 2], [2, 4]종속[2, 4] = 2 × [1, 2]
[1, 2], [3, −1]독립서로 다른 방향
[1, 0, 0], [0, 1, 0], [1, 1, 0]종속세 번째 = 첫째 + 둘째
[1, 0, 0], [0, 1, 0], [0, 0, 1]독립각자 다른 축 방향

팀 비유. 프로젝트 팀원 셋 중 한 명이 다른 두 명이 하는 일을 섞어서만 할 수 있다면, 그 사람이 빠져도 팀이 할 수 있는 일의 범위는 그대로입니다. 이 팀은 “종속”입니다. 셋 다 각자만 할 수 있는 일이 있다면 “독립”입니다.

2.8 기저의 정확한 정의

영상은 퍼즐 하나를 남기고 끝납니다. 기저의 정식 정의는 이렇습니다.

어떤 공간의 기저란, 그 공간을 스팬하는 선형 독립인 벡터들의 집합이다.

2.1에서는 기저를 “좌표(스칼라)가 늘이는 대상”이라고만 했습니다. 왜 정식 정의에 “스팬”과 “선형 독립” 두 조건이 다 필요할까요? 직접 생각해본 뒤 아래를 읽으세요.

조건 1 — 공간을 스팬해야 한다. 좌표계라면 공간의 모든 벡터를 숫자로 적을 수 있어야 합니다. 기저의 선형결합이 닿지 못하는 벡터가 있다면 그 벡터는 좌표로 적을 방법이 없습니다. 예를 들어 [1, 2] 하나만으로는 평면의 대부분 벡터를 적을 수 없습니다.

조건 2 — 선형 독립이어야 한다. 쓸모없는 벡터가 끼어 있으면 같은 벡터를 여러 가지 숫자로 적을 수 있게 됩니다. 기저가 [1, 0], [0, 1], [1, 1] 셋이라면 [1, 1]은 “(1, 1, 0)”으로도 “(0, 0, 1)”로도 적힙니다. 좌표는 벡터 하나에 숫자 묶음 하나가 딱 대응해야 쓸모가 있습니다(1장의 일대일 대응).

정리: 스팬 조건은 “모든 벡터를 적을 수 있다”를, 독립 조건은 “적는 방법이 하나뿐이다”를 보장합니다. 둘이 합쳐져야 좌표계가 됩니다.

덤으로 알게 되는 사실. 2차원 기저는 반드시 벡터 2개, 3차원 기저는 반드시 3개입니다. 하나 적으면 스팬이 부족하고, 하나 많으면 종속이 됩니다. 그래서 “차원”이란 “기저 벡터의 개수”라고도 말할 수 있습니다.

2.9 AI와의 연결

  1. 임베딩은 선형결합으로 해석됩니다. word2vec(2013) 같은 단어 임베딩에서 “왕” 벡터 − “남자” 벡터 + “여자” 벡터를 계산하면 “여왕” 벡터 근처에 닿는다는 유명한 예가 있습니다. LLM 내부 표현에서도 늘 이렇게 깔끔하게 성립하는 것은 아니지만, 의미를 벡터의 덧셈·뺄셈으로 다루는 감각을 잡기에 좋은 예입니다. 단어 벡터를 더하고 빼는(스칼라 1, −1을 곱해 더하는) 선형결합입니다.
  2. 신경망 한 층의 출력은 선형결합입니다. 출력 하나 = 입력값들 × 가중치를 모두 더한 것. 학습이란 이 가중치(스칼라)를 조절하는 일입니다.
  3. 스팬은 “모델이 표현할 수 있는 범위”입니다. 뉴런 몇 개가 만들 수 있는 출력의 범위가 그 뉴런 벡터들의 스팬입니다. 뉴런들이 서로 종속이면 수가 많아도 표현력이 늘지 않습니다.
  4. 선형 종속 = 중복 데이터, 그리고 경량화의 근거. 설비 센서 10개 중 하나가 다른 센서 값의 합으로 계산된다면 그 센서는 정보를 더하지 않습니다. 모델 경량화 기법(LoRA, 저랭크 압축)은 “큰 가중치 행렬도 실제로는 몇 개의 독립 방향만으로 거의 표현된다”는 사실을 이용합니다. 이 내용은 뒤의 “랭크” 장에서 다시 만납니다.

2.10 코드 실습

실습 1 — 좌표를 기저의 선형결합으로 확인하기

import numpy as np

i_hat = np.array([1, 0])
j_hat = np.array([0, 1])

print(3 * i_hat + (-2) * j_hat)   # [ 3 -2]  좌표 그대로 나온다

# 다른 기저로 같은 숫자 (1, 1)을 읽으면?
v = np.array([1, 2])
w = np.array([3, -1])
print(1 * v + 1 * w)              # [4 1]  기저가 바뀌면 가리키는 벡터도 바뀐다

실습 2 — 스팬을 점으로 찍어보기

스칼라 a, b를 무작위로 많이 뽑아 선형결합의 끝점을 찍습니다. 독립인 쌍은 평면을 채우고, 종속인 쌍은 직선 하나에 몰립니다.

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'AppleGothic'

rng = np.random.default_rng(0)
a = rng.uniform(-3, 3, 2000)
b = rng.uniform(-3, 3, 2000)

def span_points(v, w):
    return np.outer(a, v) + np.outer(b, w)   # 각 행이 a*v + b*w

fig, axes = plt.subplots(1, 2, figsize=(10, 5))
for ax, (v, w, title) in zip(axes, [
    (np.array([1, 2]), np.array([3, -1]), '독립: 평면을 채운다'),
    (np.array([1, 2]), np.array([2, 4]),  '종속: 직선 하나'),
]):
    p = span_points(v, w)
    ax.scatter(p[:, 0], p[:, 1], s=2, alpha=0.4)
    ax.set_title(title); ax.set_aspect('equal'); ax.grid(True)
    ax.set_xlim(-12, 12); ax.set_ylim(-12, 12)
plt.show()

실습 3 — 선형 독립을 숫자로 판정하기 (미리 보기)

import numpy as np

A = np.array([[1, 0, 0],
              [0, 1, 0],
              [1, 1, 0]])      # 각 행이 벡터 하나
print(np.linalg.matrix_rank(A))  # 2 → 벡터는 3개인데 독립 방향은 2개 → 종속

B = np.eye(3)                     # [1,0,0], [0,1,0], [0,0,1]
print(np.linalg.matrix_rank(B))  # 3 → 독립

matrix_rank는 “독립인 방향이 몇 개인가”를 세어줍니다. 벡터 개수와 같으면 독립, 작으면 종속입니다. 원리는 행렬을 배운 뒤 다룹니다.

2.11 용어 정리

한국어영어뜻
단위벡터unit vector길이가 1인 벡터
î, ĵi-hat, j-hatx 방향, y 방향 단위벡터 [1, 0], [0, 1]
기저basis공간을 스팬하는 선형 독립 벡터들 = 좌표의 기준
선형결합linear combination벡터들을 각각 스칼라배 해서 더한 것
스팬span선형결합으로 닿을 수 있는 모든 벡터의 모음
선형 종속linearly dependent빼도 스팬이 줄지 않는 쓸모없는 벡터가 있음
선형 독립linearly independent모든 벡터가 새 방향을 하나씩 보탬
영벡터zero vector모든 성분이 0인 벡터, 원점

2.12 연습문제

기본

  1. [5, −3]을 î와 ĵ의 선형결합으로 써라.
  2. 기저가 v = [1, 1], w = [−1, 1]일 때, 숫자 쌍 (2, 1)은 표준 좌표로 어떤 벡터인가?
  3. 다음 두 벡터는 독립인가 종속인가? (a) [2, −1]과 [−6, 3] (b) [1, 4]와 [4, 1]
  4. [0, 0]과 [3, 5]의 스팬은 무엇인가?

응용

  1. 3번 (a)의 스팬을 말로 설명하라. 그 스팬에 [4, −2]는 들어 있는가? [1, 1]은?
  2. 3차원 벡터 [1, 0, 0], [0, 1, 0], [2, 3, 0]의 스팬은 무엇이고, 선형 독립인가?
  3. 기저 v = [1, 2], w = [3, −1]로 표준 벡터 [7, 0]을 만들려면 a, b는 얼마여야 하나? (a·v + b·w = [7, 0])
  4. 2차원에서 벡터 3개는 왜 항상 선형 종속인지 설명하라.
해설 펼치기
  1. [5, −3] = 5î + (−3)ĵ. 좌표가 곧 î, ĵ에 곱하는 스칼라입니다.
  2. 2·[1, 1] + 1·[−1, 1] = [2 − 1, 2 + 1] = [1, 3].
  3. (a) 종속. [−6, 3] = −3 × [2, −1]. (b) 독립. 어떤 수 k로도 k·[1, 4] = [4, 1]이 안 됩니다(k = 4면 4·4 = 16 ≠ 1).
  4. [3, 5] 방향의 직선. 영벡터는 몇 배를 해도 0이라 스팬에 아무것도 보태지 않습니다. 그래서 영벡터가 끼면 항상 종속입니다.
  5. 원점을 지나고 [2, −1] 방향으로 뻗은 직선입니다. [4, −2] = 2·[2, −1]이라 들어 있습니다. [1, 1]은 [2, −1]의 몇 배로도 만들 수 없어 들어 있지 않습니다.
  6. 스팬은 xy 평면(z = 0인 판). [2, 3, 0] = 2·[1, 0, 0] + 3·[0, 1, 0]이라 종속입니다.
  7. 연립방정식 a + 3b = 7, 2a − b = 0. 두 번째 식에서 b = 2a, 첫 식에 넣으면 a + 6a = 7 → a = 1, b = 2. 확인: [1, 2] + 2·[3, −1] = [7, 0].
  8. 2차원 평면의 기저는 2개면 충분합니다(2.8). 독립인 두 벡터가 이미 평면 전체를 스팬하므로, 세 번째 벡터는 반드시 그 스팬 안에 있습니다. 두 벡터가 처음부터 종속이면 말할 것도 없습니다. 어느 쪽이든 하나는 쓸모없습니다.

다음 장 예고: 3장 “선형 변환과 행렬”. 공간을 통째로 변형하는 시각으로 행렬을 이해합니다.