[선형대수 시리즈 1편] 프로그래머를 위한 선형대수 로드맵

English version

이번 글에서 다룰 내용

이 글은 선형대수 시리즈 전체의 지도를 먼저 보여 주는 글입니다.

  • 왜 프로그래머가 선형대수를 배워야 하는지 정리합니다.
  • 20차시를 어떤 흐름으로 배치했는지 설명합니다.
  • 각 구간이 머신러닝, 그래픽스, 검색, 추천 시스템과 어떻게 연결되는지 미리 보여 줍니다.
  • 이 시리즈를 읽을 때 어디까지는 꼭 보고, 어디부터는 목적에 따라 선택해도 되는지 안내합니다.

이번 글에서 새로 나오는 용어

  • 벡터 (vector): 여러 값을 순서 있게 묶어 표현하는 기본 대상입니다.
  • 행렬 (matrix): 벡터를 다른 벡터로 보내는 규칙을 담는 배열입니다.
  • 선형변환 (linear transformation): 덧셈과 스칼라배를 보존하는 변환입니다.
  • 기저 (basis): 공간 전체를 만들 수 있으면서도 중복이 없는 축의 집합입니다.
  • 차원 (dimension): 그 공간을 표현하는 데 필요한 최소 축의 수입니다.

핵심 아이디어

많은 사람이 선형대수를 "행렬 계산 과목" 정도로 기억합니다. 하지만 프로그래밍 관점에서 선형대수는 계산 규칙 모음보다 훨씬 큰 의미를 가집니다. 선형대수는 데이터를 벡터로 표현하고, 그 벡터를 행렬로 변환하고, 그 과정에서 어떤 정보가 보존되거나 사라지는지 설명하는 언어입니다.

예를 들어 검색 시스템의 문장 임베딩은 벡터입니다. 추천 시스템의 사용자 취향도 벡터입니다. 게임 엔진의 위치와 속도도 벡터입니다. 이미지 한 장 역시 픽셀값의 묶음으로 보면 벡터입니다. 그리고 이런 벡터를 다른 공간으로 보내는 규칙이 행렬입니다. 선형대수는 이 표현과 변환을 하나의 공통 문법으로 묶어 줍니다.

이 시리즈는 전통적인 "행렬식 먼저, 증명 많이" 흐름을 따르지 않습니다. 프로그래머가 가장 자주 마주치는 질문에서 출발합니다.

  • 데이터는 어떻게 벡터로 표현하는가?
  • 여러 특성(feature)을 섞는다는 것은 수학적으로 무엇인가?
  • 선형층은 실제로 무엇을 하는가?
  • 어떤 출력은 만들 수 있고 어떤 출력은 왜 만들 수 없는가?
  • 차원을 줄일 때 어떤 정보가 남고 어떤 정보가 사라지는가?

이 질문에 답하도록 시리즈를 네 구간으로 나눴습니다.

1) 벡터와 행렬의 언어 익히기

2편부터 8편까지는 가장 기초적인 표현 언어를 익히는 구간입니다. 스칼라벡터를 구분하고, 벡터의 덧셈과 스칼라배를 익히고, 길이와 내적으로 유사도를 읽고, 행렬을 표가 아니라 변환으로 이해합니다.

이 구간이 중요한 이유는 이후의 거의 모든 개념이 여기서 출발하기 때문입니다. 예를 들어 선형결합, 생성 범위(span), 기저 (basis), 정사영(projection)은 모두 벡터 덧셈과 스칼라배를 전제로 합니다. 또 신경망의 선형층을 이해하려면 행렬-벡터 곱을 열벡터의 선형결합으로 읽을 수 있어야 합니다.

2) Ax=b와 해의 구조 이해하기

9편부터 16편까지는 선형대수의 핵심 구조를 배웁니다. 연립일차방정식을 Ax=b로 묶어 보고, 가우스 소거법으로 풀고, 해가 하나인지 없는지 무한히 많은지 구분합니다. 그 다음에는 생성 범위(span), 선형독립, 기저, 차원, 부분공간, 열공간, 영공간, 계수(rank)와 영차원(nullity)을 차례로 다룹니다.

이 구간은 단순히 문제 푸는 기술을 배우는 단계가 아닙니다. 오히려 "이 행렬이 만들 수 있는 출력은 어디까지인가", "어떤 입력 정보는 왜 사라지는가", "중복 없는 축은 어떻게 고르는가"를 이해하는 단계입니다. 추천 시스템의 잠재 요인, 차원축소, 특성(feature) 중복 제거 같은 실무 주제가 이 구간과 직접 연결됩니다.

3) 직교와 근사 이해하기

17편과 18편에서는 직교와 정사영, 그리고 최소제곱을 다룹니다. 실제 데이터는 대개 딱 맞아떨어지지 않습니다. 센서 데이터에는 노이즈가 있고, 사용자 행동 데이터에는 흔들림이 있고, 관측값에는 오차가 있습니다. 이때 우리는 정확한 해 대신 가장 잘 맞는 근사 해를 찾습니다.

이 구간은 선형회귀의 수학적 뼈대를 이해하는 데 꼭 필요합니다. 왜 최소제곱이 자연스러운지, 왜 오차가 직교 조건으로 바뀌는지, 왜 정사영(projection)이 "가장 가까운 점"을 준다고 말할 수 있는지가 여기서 정리됩니다.

4) 분해와 차원축소 이해하기

19편과 20편에서는 고유값, 고유벡터, 특이값 분해(SVD)를 다룹니다. 이 부분은 많은 사람이 어렵다고 느끼지만, 사실 프로그래머에게는 가장 실용적인 파트 중 하나입니다.

  • 주성분 분석(PCA)은 분산이 큰 방향을 고유벡터로 찾는 데 초점을 둡니다.
  • 특이값 분해(SVD)는 임의의 행렬을 더 일반적으로 분해하는 도구라서, 직사각형 행렬과 저차원 근사까지 자연스럽게 다룹니다.
  • 페이지랭크(PageRank)는 지배적인 고유벡터를 찾는 관점으로 설명할 수 있습니다.

즉 시리즈의 후반부는 "멋진 고급 개념" 소개가 아니라, 앞에서 배운 표현·공간·직교 개념이 실제 분해 알고리즘으로 이어지는 마무리 구간입니다.

이 시리즈를 읽는 법

처음부터 20편을 모두 같은 깊이로 읽을 필요는 없습니다. 독자 유형에 따라 아래처럼 읽으면 더 효율적입니다.

  • 처음 배우는 독자: 1~8편을 먼저 읽고, 9~12편에서 Ax=b와 생성 범위(span)까지만 확실히 잡습니다.
  • 머신러닝 연결이 궁금한 독자: 1~8편, 17~20편을 우선 읽고, 중간의 기저·차원·계수(rank)를 보강합니다.
  • 수학 구조까지 탄탄히 이해하고 싶은 독자: 1~20편을 순서대로 읽되, 12~18편은 예제를 직접 계산해 보며 따라갑니다.

권장 학습 흐름은 다음과 같습니다.

벡터와 행렬 감각 -> Ax=b 구조 이해 -> 부분공간과 차원 -> 직교와 근사 -> 분해와 차원축소

20차시 구성

아래 표는 시리즈 전체 흐름입니다. 각 편에 한 줄 목표를 붙였습니다.

차시 파일명 주제 한 줄 목표
1편 01-roadmap 프로그래머를 위한 선형대수 로드맵 전체 흐름과 학습 경로를 잡는다
2편 02-scalars-and-vectors 스칼라와 벡터를 프로그래머의 눈으로 보기 데이터가 언제 벡터가 되는지 이해한다
3편 03-vector-addition-and-scalar-multiplication 벡터의 덧셈과 스칼라배, 선형성의 출발점 선형결합의 가장 기초를 익힌다
4편 04-norm-and-distance 길이와 거리: 오차를 수치로 읽는 법 벡터의 크기와 오차를 수치로 읽는다
5편 05-dot-product-and-cosine-similarity 내적과 코사인 유사도 방향 유사도와 직교의 출발점을 잡는다
6편 06-matrices-as-transformations 행렬은 표가 아니라 변환이다 행렬을 선형변환의 표현으로 읽는다
7편 07-matrix-vector-multiplication 행렬과 벡터의 곱은 무엇을 하는가 Ax를 열벡터 선형결합으로 해석한다
8편 08-matrix-multiplication-and-composition 행렬곱과 변환의 합성 행렬곱을 변환의 합성으로 이해한다
9편 09-linear-systems-ax-equals-b 연립일차방정식과 Ax=b 연립방정식을 하나의 구조로 묶어 본다
10편 10-gaussian-elimination 가우스 소거법 해를 구하는 절차와 피벗 구조를 읽는다
11편 11-solution-structures-of-linear-systems 해가 하나, 없음, 무한개일 때 해집합의 구조를 분류한다
12편 12-linear-combinations-and-span 선형결합과 생성 범위(span) 무엇을 만들 수 있는지를 공간으로 본다
13편 13-linear-independence 선형독립과 종속 중복 없는 정보가 무엇인지 판단한다
14편 14-basis-and-dimension 기저와 차원 최소 축과 자유도 개념을 잡는다
15편 15-subspaces-column-space-and-null-space 부분공간, 열공간, 영공간 행렬이 만들고 지우는 공간을 읽는다
16편 16-rank-and-nullity 계수(rank)와 영차원(nullity) 정보 보존량과 손실량을 요약한다
17편 17-orthogonality-and-projection 직교와 정사영 가장 가까운 근사의 구조를 이해한다
18편 18-least-squares-and-linear-regression 최소제곱과 선형회귀의 기초 정확한 해 대신 가장 좋은 근사를 찾는다
19편 19-eigenvalues-and-eigenvectors 고유값과 고유벡터 반복 변환에서 유지되는 축을 찾는다
20편 20-svd-and-dimensionality-reduction 특이값 분해(SVD)와 차원축소 입문 행렬 분해와 저차원 근사를 이해한다

단계별 예시

이 시리즈가 실제 프로그래밍 문제와 어떻게 이어지는지 하나의 큰 흐름으로 보면 이해가 쉬워집니다.

예시 1) 검색 시스템의 임베딩

문장 하나를 모델이 768차원 벡터로 바꾼다고 해 봅시다. 이때 문장은 더 이상 문자열만이 아니라, 수백 개 숫자로 이루어진 벡터가 됩니다. 2편과 3편은 이런 벡터를 어떻게 읽어야 하는지, 여러 특성(feature)을 섞는다는 것이 무엇인지 이해하게 해 줍니다.

그 다음 4편과 5편에서는 두 문장 벡터가 얼마나 비슷한지 거리와 내적으로 비교합니다. 검색 품질을 높일 때 자주 나오는 코사인 유사도도 여기서 자연스럽게 등장합니다.

예시 2) 신경망의 선형층

입력 특성(feature) 벡터 x가 있고, 가중치 행렬 W가 있다고 합시다. 선형층의 핵심 계산은 다음처럼 쓸 수 있습니다.

Wx

이 한 줄은 단순 계산이 아니라, 입력 벡터를 새로운 특성 공간(feature space)으로 보내는 변환입니다. 6편부터 8편은 이 계산을 단순한 공식을 넘어서 변환의 언어로 읽는 훈련을 합니다.

예시 3) 추천 시스템과 잠재 요인

사용자-아이템 상호작용 데이터는 보통 희소하고, 완벽하게 채워져 있지 않습니다. 이때 시스템은 일부 관측값에서 전체 구조를 추론하려고 합니다. 9편부터 16편은 바로 이런 문제를 이해하는 데 필요한 공간 개념을 제공합니다. 어떤 결과가 가능한지, 어떤 정보가 중복인지, 데이터가 실제로 몇 개의 독립 축으로 움직이는지를 읽을 수 있게 됩니다.

예시 4) 노이즈가 있는 현실 데이터

현실의 데이터는 Ax=b를 정확히 만족하지 않는 경우가 많습니다. 그래서 17편, 18편에서 정사영(projection)과 최소제곱이 중요해집니다. 가장 가까운 해를 고른다는 것이 무엇인지 이해하면, 선형회귀와 오차 최소화가 훨씬 덜 추상적으로 느껴집니다.

예시 5) 압축과 차원축소

마지막으로 19편과 20편에서는 행렬을 더 잘 읽기 위한 분해를 배웁니다. 어떤 축이 중요한지 찾고, 큰 구조만 남기고 나머지를 버리는 방식은 주성분 분석(PCA), 특이값 분해(SVD), 추천 시스템의 행렬 분해와 연결됩니다.

짧은 코드 감각

선형대수가 실제 코드로 어떻게 보이는지 아주 짧게 보면 다음과 같습니다.


x = np.array([1.0, 2.0])
W = np.array([[2.0, 0.0], [0.0, 3.0]])
y = W @ x
# y = [2.0, 6.0]

수학 기호로는 y = Wx 한 줄이지만, 코드에서는 배열 계산으로 바로 나타납니다. 이 시리즈는 이런 식의 코드와 수학 기호를 계속 연결해 가는 방향으로 진행합니다.

수학 주석

  • 선형대수의 중심 질문은 "무엇을 표현할 수 있는가"와 "그 표현을 얼마나 중복 없이 압축할 수 있는가"입니다.
  • 생성 범위(span), 기저(basis), 계수(rank), 고유값(eigenvalue), 특이값(singular value)은 서로 다른 이름처럼 보이지만 모두 이 질문의 다른 측면을 설명합니다.
  • 기저는 공간 전체를 만들 수 있으면서도 중복이 없는 벡터 집합이고, 차원은 그런 기저에 들어가는 벡터 개수입니다.
  • 선형변환은 덧셈과 스칼라배를 보존하는 변환입니다. 그래서 복잡한 입력도 기본 벡터들의 조합으로 이해할 수 있게 해 줍니다.
  • "정보가 보존된다"는 말은 무조건 모든 정보가 남는다는 뜻이 아니라, 변환이 가역적(invertible)인지, 계수(rank)가 충분한지, 어떤 방향이 영공간(null space)으로 사라지는지를 함께 봐야 한다는 뜻입니다.

자주 하는 오해

이 시리즈를 시작할 때 자주 생기는 오해가 있습니다.

"행렬 계산만 잘하면 된다"

계산 규칙만 외우면 초반 몇 편은 따라갈 수 있지만, 중반 이후의 생성 범위(span), 기저(basis), 계수(rank), 정사영(projection)이 갑자기 뜬금없이 느껴집니다. 선형대수는 계산보다 구조를 읽는 과목이라는 점을 초반부터 붙잡아야 합니다.

"고유값과 특이값 분해(SVD)만 알면 실무에 충분하다"

실무에서 자주 쓰이는 주제는 맞습니다. 하지만 앞의 벡터, 변환, 부분공간, 직교 개념 없이 후반부만 배우면 공식 사용은 가능해도 이유를 설명하기 어렵습니다. 그러면 라이브러리 호출은 해도 해석은 못 하는 상태가 되기 쉽습니다.

"선형 모델만 이해하면 실제 모델도 거의 다 설명된다"

선형대수는 강력한 뼈대이지만 현실의 많은 시스템은 비선형성(nonlinearity)을 함께 가집니다. 신경망의 활성화 함수, 비선형 최적화, 커널 기법처럼 선형대수만으로는 다 설명되지 않는 층이 있습니다. 다만 그 비선형 모델도 내부에서는 여전히 선형대수를 계속 사용합니다.

연습 또는 확장

아직 계산 연습을 시작하지 않아도 됩니다. 대신 아래 질문에 답해 보면 좋습니다.

  1. 내가 다루는 데이터 중 어떤 것이 벡터로 표현될 수 있는가?
  2. 그 벡터의 각 축은 무엇을 뜻하는가?
  3. 어떤 연산이 단순 저장 형식 변경이 아니라 실제 의미 있는 변환인가?
  4. 결과를 압축해야 한다면 어떤 정보는 남기고 어떤 정보는 버리고 싶은가?

그리고 실무 관점에서는 아래 키워드를 머릿속에만 먼저 넣어 두면 좋습니다.

  • 수치 안정성(numerical stability)
  • 조건수(condition number)
  • 정규화(regularization)
  • 계산 복잡도(computational complexity)

이 키워드는 시리즈 후반부나 실제 구현 단계에서 다시 등장합니다.

마무리

이 시리즈는 선형대수를 "프로그래머가 실제로 쓰는 수학"으로 다시 정리하는 것이 목표입니다.

  • 초반에는 벡터와 행렬의 언어를 익힙니다.
  • 중반에는 해와 공간의 구조를 이해합니다.
  • 후반에는 근사, 분해, 차원축소로 이어갑니다.
  • 중간중간 코드 감각과 실무 주석도 함께 붙여 나갈 것입니다.

다음 글에서는 가장 기본이 되는 스칼라벡터를 구분하면서, 숫자의 묶음이 언제 진짜 벡터가 되는지부터 시작합니다.

💬 댓글

이 글에 대한 의견을 남겨주세요