LA 응용 선형대수 Vectors, Matrices, and Least Squares 컴자료 포털

Applied Linear Algebra

벡터에서 최소제곱까지, 계산으로 쓰는 선형대수.

Boyd와 Vandenberghe의 응용 선형대수 흐름을 따라가되, 원문 직역 대신 한국어로 다시 설명하는 학습용 웹 교재입니다. 파일 하나를 열어도 바로 읽을 수 있게 만들었습니다.

검색 조건에 맞는 챕터가 없습니다.

1장. 벡터: 숫자 여러 개를 한 번에 다루는 법

벡터는 여러 숫자를 순서 있게 묶은 대상이다. 좌표, 신호, 가격, 성적, 추천 점수처럼 현실의 많은 정보는 벡터로 차분하게 정리된다.

1.1 벡터

벡터 \(x\)는 보통 \(x=(x_1,\ldots,x_n)\)처럼 쓴다. 여기서 \(n\)은 길이 또는 차원이고, \(x_i\)는 \(i\)번째 성분이다. 예를 들어 어떤 학생의 세 과목 점수를 \(x=(88,76,93)\)으로 두면, 벡터 하나가 작은 성적표 역할을 한다.

벡터를 열로 쓰든 행으로 쓰든 핵심은 같다. 성분의 순서가 의미를 가진다는 점이다. \((키,몸무게)\)와 \((몸무게,키)\)는 생김새가 비슷해도 완전히 다른 약속이다.

1.2 벡터 덧셈

같은 길이의 벡터끼리는 성분별로 더한다. \(x+y=(x_1+y_1,\ldots,x_n+y_n)\)이다. 두 장바구니의 품목별 수량을 합치거나, 오늘과 내일의 작업량을 더하는 느낌으로 보면 된다.

영벡터 \(0=(0,\ldots,0)\)은 더해도 아무 변화가 없다. 음벡터 \(-x\)는 \(x+(-x)=0\)을 만족한다. 수학도 가끔은 정리정돈을 좋아한다.

1.3 스칼라-벡터 곱

숫자 하나 \(\alpha\)와 벡터 \(x\)의 곱은 \(\alpha x=(\alpha x_1,\ldots,\alpha x_n)\)이다. 모든 성분을 같은 비율로 키우거나 줄인다. 월급이 1.1배가 되면 급여 벡터의 모든 항목이 1.1배가 되는 식이다.

\(\alpha=0\)이면 모든 것이 \(0\)으로 접히고, \(\alpha=-1\)이면 방향이 반대로 뒤집힌다. 벡터의 세계에서 스칼라는 확대, 축소, 반전의 손잡이다.

1.4 내적

내적은 두 벡터의 성분을 하나씩 곱해 모두 더한 값이다. \(x^Ty=x_1y_1+\cdots+x_ny_n\). 결과는 벡터가 아니라 숫자다.

내적은 가중합을 표현할 때 특히 자연스럽다. 가격 벡터 \(p\)와 수량 벡터 \(q\)가 있으면 총비용은 \(p^Tq\)다. 또 두 벡터가 얼마나 비슷한 방향을 보는지도 내적이 말해 준다.

1.5 벡터 계산의 복잡도

길이 \(n\)인 벡터 두 개를 더하려면 대략 \(n\)번의 덧셈이 필요하다. 스칼라-벡터 곱도 \(n\)번의 곱셈이 필요하고, 내적은 \(n\)번의 곱셈과 \(n-1\)번의 덧셈이 필요하다.

그래서 이런 연산은 보통 \(O(n)\) 시간이라고 말한다. 성분이 두 배로 늘면 일도 대략 두 배로 는다. 계산량의 세계에서는 성실함이 곧 비용이다.

정리

벡터는 순서 있는 숫자 묶음이며, 덧셈과 스칼라 곱은 성분별로 작동한다. 내적은 두 벡터에서 하나의 숫자를 뽑아내며, 기본 벡터 연산의 계산량은 대체로 벡터 길이에 비례한다.

2장. 선형 함수: 예측의 첫 번째 문장

선형 함수는 입력 벡터에 가중치를 곱해 더하는 단순한 규칙이다. 단순하지만 계산하기 쉽고 해석하기 좋아서 응용 선형대수의 든든한 출발점이 된다.

2.1 선형 함수

함수 \(f:\mathbf{R}^n\to\mathbf{R}\)가 \(f(x)=a^Tx\)처럼 쓰이면 선형 함수다. 입력 \(x\)의 각 성분에 가중치 \(a_i\)를 곱해 더한다.

선형성은 두 가지 성질로 요약된다. \(f(x+y)=f(x)+f(y)\), \(f(\alpha x)=\alpha f(x)\). 입력을 합치면 출력도 합쳐지고, 입력을 키우면 출력도 같은 비율로 커진다. 약속을 잘 지키는 함수다.

2.2 테일러 근사

복잡한 함수도 한 점 근처에서는 선형 함수처럼 보일 때가 많다. \(z\) 근처의 \(f(x)\)는 대략 \(f(z)+\nabla f(z)^T(x-z)\)로 근사할 수 있다.

이 식에서 \(\nabla f(z)\)는 기울기 벡터다. 작은 이동 \(x-z\)가 출력에 얼마나 영향을 주는지 알려 준다. 멀리서 보면 산맥이 복잡해도, 발밑의 작은 구간은 기울어진 바닥처럼 보이는 것과 비슷하다.

2.3 회귀 모델

회귀 모델은 관측값 \(y\)를 입력 특성 \(x\)의 선형 함수로 설명하려는 시도다. 흔히 \(\hat y=\beta^Tx+v\)처럼 쓰며, \(\beta\)는 계수 벡터, \(v\)는 절편이다.

예측은 완벽한 수정구슬이 아니라 잘 훈련된 견적서에 가깝다. 모델은 데이터의 큰 흐름을 잡고, 오차는 실제 세계가 남긴 여백을 말해 준다.

정리

선형 함수는 \(a^Tx\) 꼴의 가중합이며, 입력의 합과 배율을 출력에서도 보존한다. 테일러 근사는 비선형 함수를 국소적으로 선형화하고, 회귀 모델은 선형식을 이용해 관측값을 설명하고 예측한다.

3장. 노름과 거리: 크고 작고 가깝고 먼 것들

벡터를 다루려면 크기와 차이를 재는 자가 필요하다. 노름, 거리, 표준편차, 각도는 그 자의 눈금들이다.

3.1 노름

벡터 \(x\)의 유클리드 노름은 \(\|x\|=\sqrt{x_1^2+\cdots+x_n^2}\)이다. 원점에서 \(x\)까지의 길이라고 생각하면 된다.

노름은 항상 \(0\) 이상이고, \(\|x\|=0\)은 \(x=0\)일 때뿐이다. 또한 \(\|\alpha x\|=|\alpha|\|x\|\)이고, \(\|x+y\|\leq \|x\|+\|y\|\)이다. 마지막 부등식은 돌아가는 길이 지름길보다 짧을 수 없다는 상식의 수학 버전이다.

3.2 거리

두 벡터 \(x\), \(y\) 사이의 거리는 \(\|x-y\|\)이다. 두 벡터가 성분별로 얼마나 다른지를 하나의 숫자로 요약한다.

데이터 분석에서 거리는 유사도의 반대말처럼 쓰인다. 거리가 작으면 두 대상은 비슷하고, 거리가 크면 다르다. 물론 어떤 성분을 넣고 어떤 단위로 재는지에 따라 판단은 크게 달라진다.

3.3 표준편차

데이터 벡터 \(x\)의 평균을 \(\bar x\)라 하면, 평균에서 벗어난 정도는 \(x-\bar x\mathbf{1}\)로 볼 수 있다. 표준편차는 이 편차 벡터의 크기를 적절히 조정한 값이다.

대략 말해 표준편차가 작으면 값들이 평균 근처에 모여 있고, 크면 제법 흩어져 있다. 평균이 대표 얼굴이라면 표준편차는 단체사진의 흩어진 정도다.

3.4 각도

두 영이 아닌 벡터 \(x\), \(y\)의 각도 \(\theta\)는 \(\cos\theta=\frac{x^Ty}{\|x\|\|y\|}\)로 정의된다. 내적이 크면 방향이 비슷하고, \(0\)이면 직교한다.

각도는 크기보다 방향을 본다. 문서 검색에서 단어 빈도 벡터의 길이는 문서 길이에 영향을 받지만, 각도는 내용의 방향성에 더 민감하다.

3.5 복잡도

노름 계산은 제곱, 덧셈, 제곱근으로 이루어지며 길이 \(n\)에 대해 \(O(n)\) 시간이 든다. 거리도 \(x-y\)를 만든 뒤 노름을 계산하므로 \(O(n)\)이다.

각도 계산에는 내적과 두 노름이 필요하지만 여전히 전체 계산량은 \(O(n)\)이다. 차원이 커지면 한 번의 비교도 가볍지 않으니, 데이터가 커질수록 이런 기본 비용을 무시하면 안 된다.

정리

노름은 벡터의 크기를, 거리는 두 벡터의 차이를, 표준편차는 데이터의 산포를, 각도는 방향의 유사성을 측정한다. 이 계산들은 대부분 벡터 길이에 비례하는 시간 안에 수행된다.

4장. 클러스터링: 비슷한 것끼리 조용히 모으기

클러스터링은 라벨이 없는 데이터에서 비슷한 대상끼리 그룹을 만드는 방법이다. 정답지를 받기 전, 데이터 스스로의 친목 관계를 살피는 일이다.

4.1 클러스터링

클러스터링의 목표는 데이터 벡터 \(x_1,\ldots,x_N\)을 몇 개의 그룹으로 나누는 것이다. 같은 그룹 안의 점들은 서로 가깝고, 다른 그룹의 점들과는 멀기를 바란다.

하지만 “가깝다”는 말은 거리 정의와 특성 선택에 기대고 있다. 키와 몸무게만 볼 때의 가까움, 소비 패턴까지 볼 때의 가까움은 다를 수 있다.

4.2 클러스터링 목적식

대표적인 목적은 각 점이 자기 클러스터 중심과 가깝도록 만드는 것이다. 점 \(x_i\)가 중심 \(z_{c_i}\)에 배정되면 비용은 보통 \(\|x_i-z_{c_i}\|^2\)들의 합으로 둔다.

즉 \(\sum_{i=1}^N \|x_i-z_{c_i}\|^2\)를 작게 만들고 싶다. 이 값은 클러스터 내부의 흩어짐을 재는 숫자다. 작을수록 그룹 안이 덜 어수선하다.

4.3 \(k\)-평균 알고리즘

\(k\)-평균 알고리즘은 클러스터 수 \(k\)를 정한 뒤 반복한다. 먼저 각 점을 가장 가까운 중심에 배정하고, 그다음 각 클러스터의 평균으로 중심을 다시 계산한다.

이 두 단계를 비용이 더 이상 크게 줄지 않을 때까지 반복한다. 알고리즘은 단순하지만 시작 중심에 따라 결과가 달라질 수 있다. 첫인상이 이렇게 중요하다.

4.4 예시

고객 데이터를 구매 빈도와 평균 결제액으로 나타내면, \(k\)-평균은 저빈도 소액 고객, 고빈도 소액 고객, 고액 고객 같은 그룹을 찾을 수 있다. 이미지 색상 벡터를 모으면 대표 색상 팔레트를 만들 수도 있다.

예시는 멋지지만 조심할 점도 있다. 스케일이 큰 특성이 거리 계산을 지배할 수 있으므로, 필요하면 표준화나 정규화를 먼저 해야 한다.

4.5 응용

클러스터링은 고객 세분화, 문서 묶기, 이미지 압축, 이상치 탐색, 추천 시스템의 전처리 등에 쓰인다. 라벨이 없을 때 데이터의 구조를 훑어보는 빠른 망원경 같은 도구다.

다만 클러스터는 발견된 진실이라기보다 선택한 거리, 특성, \(k\), 초기값이 함께 만든 요약이다. 좋은 분석가는 결과를 받아 적는 데서 멈추지 않고, 왜 그런 묶음이 나왔는지 되묻는다.

정리

클러스터링은 비슷한 데이터끼리 묶는 비지도 학습 방법이다. \(k\)-평균은 배정과 중심 갱신을 반복해 클러스터 내부 제곱거리의 합을 줄이며, 응용 전에는 거리와 스케일의 의미를 점검해야 한다.

5장. 선형 독립: 꼭 필요한 방향만 남기기

여러 벡터가 있을 때 어떤 벡터가 다른 벡터들의 조합으로 이미 설명된다면 새 정보가 아니다. 선형 독립은 중복 없는 방향을 가려내는 언어다.

5.1 선형 종속

벡터 \(a_1,\ldots,a_k\) 중 하나가 나머지의 선형 결합으로 표현되면 이들은 선형 종속이다. 즉 어떤 계수들이 모두 \(0\)은 아니면서 \(c_1a_1+\cdots+c_ka_k=0\)을 만족하면 종속이다.

반대로 그런 계수가 없다면 선형 독립이다. 독립인 벡터들은 서로의 일을 대신해 주지 않는다. 팀 프로젝트에서는 조금 차갑지만, 수학에서는 아주 좋은 덕목이다.

5.2 기저

어떤 공간의 기저는 그 공간을 만들 수 있는 선형 독립 벡터들의 모음이다. \(\mathbf{R}^n\)에서는 \(n\)개의 독립 벡터가 전체 공간의 기저가 된다.

기저가 있으면 모든 벡터를 그 기저 벡터들의 선형 결합으로 표현할 수 있다. 좌표란 결국 “이 기저들을 얼마씩 섞었는가”를 적은 조리법이다.

5.3 정규직교 벡터

벡터들이 서로 직교하고 각각의 노름이 \(1\)이면 정규직교라고 한다. 즉 \(q_i^Tq_j=0\) for \(i\neq j\), 그리고 \(\|q_i\|=1\)이다.

정규직교 벡터는 계산을 산뜻하게 만든다. 어떤 벡터 \(x\)를 \(q_i\) 방향으로 얼마나 갖고 있는지는 단순히 \(q_i^Tx\)로 구할 수 있다. 방향들이 서로 간섭하지 않기 때문이다.

5.4 그람-슈미트 알고리즘

그람-슈미트 알고리즘은 독립 벡터 \(a_1,\ldots,a_k\)에서 정규직교 벡터 \(q_1,\ldots,q_k\)를 만든다. 첫 벡터를 정규화하고, 다음 벡터마다 이미 만든 방향 성분을 빼낸 뒤 남은 부분을 정규화한다.

핵심 단계는 \( \tilde q_i=a_i-(q_1^Ta_i)q_1-\cdots-(q_{i-1}^Ta_i)q_{i-1} \)이다. 그런 다음 \(q_i=\tilde q_i/\|\tilde q_i\|\)로 만든다. 새 벡터에서 기존 방향의 그림자를 지우는 셈이다.

정리

선형 종속은 어떤 벡터가 다른 벡터들의 조합으로 중복된다는 뜻이고, 기저는 공간을 중복 없이 생성하는 벡터 모음이다. 정규직교 벡터는 계산을 단순하게 하며, 그람-슈미트 알고리즘은 독립 벡터들을 정규직교 모음으로 바꾼다.

6장 행렬: 숫자를 줄 세우면 함수가 된다

행렬은 표처럼 보이지만, 선형대수에서는 벡터를 다른 벡터로 보내는 장치다. 복잡한 계산을 가지런히 묶어 두는 훌륭한 서랍장이기도 하다.

행렬

행렬 \(A\)는 숫자를 직사각형으로 배열한 것이다. \(m \times n\) 행렬은 행이 \(m\)개, 열이 \(n\)개이며, 원소는 보통 \(A_{ij}\)처럼 쓴다. 여기서 \(i\)는 행, \(j\)는 열이다.

중요한 감각은 이것이다. \(A \in \mathbf{R}^{m \times n}\)는 \(n\)차원 벡터를 받아 \(m\)차원 벡터를 내놓을 준비가 된 물건이다. 즉 행렬의 모양은 계산의 입구와 출구를 알려 준다.

영행렬과 항등행렬

영행렬 \(0\)은 모든 원소가 0인 행렬이다. 벡터를 곱하면 모든 신호를 꺼 버린다. 반대로 항등행렬 \(I\)는 벡터를 그대로 돌려보낸다. \(Ix=x\)다.

\(I_n\)은 \(n \times n\) 정사각행렬이며 대각선 원소만 1이고 나머지는 0이다. 계산 세계의 "아무 일도 안 함" 연산자라고 생각하면 편하다.

전치, 덧셈, 노름

전치 \(A^T\)는 행과 열을 맞바꾼다. \(A\)가 \(m \times n\)이면 \(A^T\)는 \(n \times m\)이다. 행렬 덧셈은 같은 크기끼리만 가능하고, 원소별로 더한다.

행렬의 크기도 잴 수 있다. 프로베니우스 노름은 모든 원소의 제곱을 더한 뒤 제곱근을 취한다.

\[ \|A\|_F = \sqrt{\sum_{i=1}^m \sum_{j=1}^n A_{ij}^2}. \]

행렬-벡터 곱

행렬-벡터 곱 \(y=Ax\)에서 \(y_i\)는 \(A\)의 \(i\)번째 행과 \(x\)의 내적이다.

\[ y_i = A_{i1}x_1 + A_{i2}x_2 + \cdots + A_{in}x_n. \]

다른 시각도 유용하다. \(Ax\)는 \(A\)의 열벡터들을 \(x\)의 성분만큼 섞은 선형결합이다. 즉 \(x\)는 열들을 얼마나 넣을지 정하는 조리법이다.

복잡도

\(m \times n\) 행렬과 \(n\)-벡터를 곱하려면 보통 \(mn\)번 정도의 곱셈과 덧셈이 필요하다. 그래서 크기가 커지면 계산량도 빠르게 커진다.

하지만 행렬이 희소하면, 즉 대부분의 원소가 0이면 이야기가 달라진다. 실제로 0이 아닌 원소만 저장하고 계산하면 시간과 메모리를 크게 아낄 수 있다.

정리

행렬은 벡터를 벡터로 보내는 선형 규칙이며, 크기는 입력과 출력 차원을 말한다. 전치, 덧셈, 노름은 행렬을 다루는 기본 도구이고, 행렬-벡터 곱은 행별 내적 또는 열들의 선형결합으로 이해할 수 있다.

7장 행렬 예제: 행렬은 이미 여기저기 숨어 있다

행렬은 추상적인 표가 아니라 변환, 선택, 네트워크, 신호 처리 같은 실제 작업의 공용 문법이다. 한번 눈에 들어오면 꽤 자주 보인다.

기하 변환

2차원 점 \(x=(x_1,x_2)\)에 행렬을 곱하면 회전, 확대, 축소, 반사 같은 기하 변환을 표현할 수 있다. 예를 들어 각도 \(\theta\)만큼 회전하는 행렬은

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

이고, \(Rx\)는 원점을 중심으로 회전한 점이다. 선형 변환은 원점을 고정한다는 특징이 있다.

선택 행렬

선택 행렬은 벡터의 일부 성분을 뽑아내거나 순서를 바꾸는 행렬이다. 예를 들어 \(x=(x_1,x_2,x_3)\)에서 첫째와 셋째 성분만 고르면

\[ \begin{bmatrix} 1 & 0 & 0 \\ 0 & 0 & 1 \end{bmatrix}x = \begin{bmatrix} x_1 \\ x_3 \end{bmatrix}. \]

데이터에서 특정 열을 고르거나 표본 일부를 뽑는 일도 이런 관점으로 볼 수 있다.

접속 행렬

그래프의 접속 행렬는 노드와 간선의 연결 관계를 행렬로 적는다. 간선에 방향을 정하고, 간선이 나가는 노드에는 \(-1\), 들어오는 노드에는 \(1\), 관련 없는 노드에는 \(0\)을 둔다.

이 행렬은 네트워크 흐름, 전기 회로, 도로망, 공급망에서 유용하다. 행렬 하나가 "어디서 나와 어디로 들어가는가"를 조용히 기록한다.

컨볼루션

합성곱은 주변 값들을 가중 평균처럼 섞어 새 값을 만드는 연산이다. 신호를 부드럽게 하거나, 이미지에서 경계를 찾거나, 시간열 자료의 패턴을 감지할 때 쓰인다.

1차원에서 필터 \(h=(h_1,\ldots,h_k)\)를 신호 \(x\)에 적용하면 각 출력은 근처 입력들의 가중합이 된다. 적절한 행렬 \(C\)를 만들면 이 과정을 \(y=Cx\)로 표현할 수 있다.

정리

기하 변환, 성분 선택, 그래프 연결, 합성곱은 모두 행렬로 표현할 수 있다. 행렬을 알아보는 눈은 여러 응용 분야에서 같은 계산 구조를 발견하게 해 준다.

8장 선형방정식: 조건을 만족하는 벡터를 찾아서

선형방정식은 "이 규칙을 통과하면 어떤 벡터가 나올까?"라는 질문이다. 데이터 모델, 공학 계산, 최적화의 입구에서 자주 만난다.

선형 함수와 아핀 함수

선형 함수는 \(f(x)=Ax\)처럼 행렬 곱으로 표현된다. 핵심 성질은 중첩이다.

\[ f(\alpha x + \beta z) = \alpha f(x) + \beta f(z). \]

아핀 함수는 여기에 상수항이 붙은 \(f(x)=Ax+b\)이다. 선형 함수는 원점을 원점으로 보내지만, 아핀 함수는 전체를 \(b\)만큼 밀어낼 수 있다.

선형 함수 모델

많은 모델은 입력 특징 \(x\)와 계수 \(\theta\)의 내적으로 예측값을 만든다.

\[ \hat{y} = x^T\theta. \]

여러 데이터 포인트를 한꺼번에 모으면 \(\hat{y}=X\theta\)가 된다. \(X\)의 각 행은 한 관측값의 특징이고, \(\theta\)는 특징별 영향력을 담은 벡터다.

선형방정식 시스템

연립선형방정식은 보통 \(Ax=b\)로 쓴다. 여기서 \(A\)는 계수 행렬, \(x\)는 미지수 벡터, \(b\)는 목표 벡터다.

해가 없을 수도, 하나일 수도, 무수히 많을 수도 있다. 기하적으로는 여러 직선, 평면, 초평면의 교집합을 찾는 일이다. 계산적으로는 \(b\)가 \(A\)의 열들의 선형결합으로 표현되는지 묻는 일이다.

정리

선형 함수는 \(Ax\), 아핀 함수는 \(Ax+b\)로 표현된다. 선형 모델은 특징을 가중합해 예측을 만들고, \(Ax=b\)는 행렬의 열들을 섞어 목표 벡터를 만들 수 있는지 묻는다.

9장 선형 동역학계: 오늘의 벡터가 내일을 만든다

동역학계는 시간이 흐르며 상태가 변하는 시스템이다. 선형 동역학계에서는 다음 상태가 현재 상태의 행렬 곱으로 정해진다.

선형 동역학 시스템

가장 기본적인 형태는

\[ x_{t+1}=Ax_t \]

이다. \(x_t\)는 시각 \(t\)의 상태, \(A\)는 한 단계 동안 시스템이 어떻게 변하는지 나타내는 행렬이다. 여러 단계 뒤에는 \(x_t=A^t x_0\)가 된다.

개체군 동역학

나이대별 개체 수를 벡터로 두면 인구 변화도 행렬로 표현할 수 있다. 어떤 나이대가 다음 시점에 생존해 다음 나이대로 이동하는지, 어떤 나이대가 새 개체를 낳는지 행렬에 넣는다.

이런 모델은 단순하지만 장기 추세를 보는 데 강력하다. 특히 특정 구조가 반복될 때 행렬의 고유한 성장 패턴이 드러난다.

감염병 동역학

감염병 모델에서도 상태를 벡터로 둔다. 예를 들어 감수성, 감염, 회복 집단의 크기를 성분으로 두고, 한 시점에서 다음 시점으로 이동하는 비율을 행렬에 담을 수 있다.

현실의 감염병은 비선형 요소가 많지만, 선형 모델은 초기 확산이나 작은 변화 근처의 움직임을 이해하는 첫 근사로 쓸 수 있다.

질점의 운동

질량의 위치와 속도를 상태 \(x_t=(p_t,v_t)\)로 두면 운동도 선형 근사로 나타낼 수 있다. 일정한 시간 간격 \(\Delta t\)에서 단순 모델은

\[ \begin{bmatrix} p_{t+1} \\ v_{t+1} \end{bmatrix} = \begin{bmatrix} 1 & \Delta t \\ 0 & 1 \end{bmatrix} \begin{bmatrix} p_t \\ v_t \end{bmatrix} \]

처럼 쓸 수 있다. 힘이나 마찰을 더하면 행렬과 입력항이 조금 더 풍성해진다.

공급망 동역학

공급망에서는 재고, 주문, 생산량 같은 상태가 시간에 따라 변한다. 한 공정의 출력이 다음 공정의 입력이 되므로 행렬은 흐름과 지연을 표현한다.

작은 조정이 반복되면 전체 재고가 안정될 수도 있고, 오히려 출렁임이 커질 수도 있다. 행렬 모델은 이런 증폭과 감쇠를 점검하는 간단한 실험실이 된다.

정리

선형 동역학계는 \(x_{t+1}=Ax_t\)로 상태의 변화를 설명한다. 인구, 감염, 운동, 공급망은 모두 상태 벡터와 전이 행렬로 모델링할 수 있으며, 반복 적용은 \(A^t\)로 나타난다.

10장 행렬 곱셈: 변환을 이어 붙이는 법

행렬 곱셈은 단지 표끼리 계산하는 규칙이 아니다. 선형 함수를 차례로 적용했을 때 생기는 하나의 새 선형 함수를 만드는 일이다.

행렬-행렬 곱

\(A\in\mathbf{R}^{m\times n}\), \(B\in\mathbf{R}^{n\times p}\)이면 곱 \(C=AB\)는 \(m\times p\) 행렬이다. 원소는

\[ C_{ij} = \sum_{k=1}^n A_{ik}B_{kj} \]

로 계산한다. \(C\)의 \(j\)번째 열은 \(A\)가 \(B\)의 \(j\)번째 열에 작용한 결과다.

선형 함수의 합성

선형 함수 \(f(x)=Bx\), \(g(y)=Ay\)를 차례로 적용하면

\[ g(f(x)) = A(Bx) = (AB)x \]

가 된다. 즉 행렬 곱 \(AB\)는 "먼저 \(B\), 그다음 \(A\)"라는 합성 변환이다. 순서가 중요하다. 보통 \(AB \ne BA\)다.

행렬의 거듭제곱

정사각행렬 \(A\)는 자기 자신과 곱할 수 있다. \(A^2=AA\), \(A^3=AAA\)이며, \(A^0=I\)로 둔다.

행렬 거듭제곱은 같은 선형 변환을 반복하는 상황에서 나온다. 동역학계 \(x_{t+1}=Ax_t\)에서 \(t\)단계 뒤 상태가 \(A^t x_0\)인 이유가 바로 이것이다.

QR 분해

QR 분해는 행렬 \(A\)를

\[ A = QR \]

로 나타낸다. \(Q\)의 열들은 서로 직교하고 길이가 1이며, \(R\)은 위삼각행렬이다. 직교 열들은 계산을 안정적이고 깔끔하게 만들어 준다.

QR 분해는 최소제곱 문제, 선형방정식 풀이, 수치 알고리즘에서 자주 쓰인다. 복잡한 행렬을 "방향이 좋은 부분"과 "계수 정리 부분"으로 나누는 셈이다.

정리

행렬 곱셈은 선형 함수의 합성을 표현하며, 곱의 순서는 적용 순서를 반영한다. 행렬 거듭제곱은 반복 변환을 나타내고, QR 분해는 행렬 계산을 안정적으로 다루는 중요한 도구다.

11장 역행렬: 되돌릴 수 있는 계산과 그렇지 않은 계산

역행렬은 행렬이 한 일을 되돌리는 장치다. 하지만 모든 행렬이 되돌릴 수 있는 것은 아니며, 그 불가능성에도 꽤 유익한 정보가 숨어 있다.

왼쪽 역과 오른쪽 역

\(A\)가 정사각행렬이 아니어도 한쪽 역원은 있을 수 있다. 왼쪽 역행렬 \(L\)은

\[ LA = I \]

를 만족한다. 이는 \(A\)가 입력 정보를 잃지 않을 때 가능하다. 오른쪽 역행렬 \(R\)은

\[ AR = I \]

를 만족하며, 원하는 출력을 만들 만큼 \(A\)의 출력 범위가 충분할 때 가능하다.

역행렬

정사각행렬 \(A\)에 대해 \(A^{-1}A=I\)이고 \(AA^{-1}=I\)인 행렬 \(A^{-1}\)가 있으면 \(A\)는 가역이다. 이때 \(A^{-1}\)는 \(A\)가 한 선형 변환을 정확히 되돌린다.

가역 행렬은 정보를 찌그러뜨리거나 접어 겹치지 않는다. 서로 다른 입력은 서로 다른 출력으로 간다.

선형방정식 풀기

\(A\)가 가역이면 \(Ax=b\)의 해는 하나뿐이고

\[ x=A^{-1}b \]

다. 실제 계산에서는 보통 \(A^{-1}\)를 직접 구해 곱하기보다, 분해나 소거법으로 \(Ax=b\)를 푸는 편이 더 안정적이다.

예시

대각행렬 \(D=\operatorname{diag}(d_1,\ldots,d_n)\)은 모든 \(d_i\ne0\)일 때 가역이며, 역행렬은 \(\operatorname{diag}(1/d_1,\ldots,1/d_n)\)이다.

직교행렬 \(Q\)는 \(Q^TQ=I\)를 만족하므로 \(Q^{-1}=Q^T\)다. 회전처럼 길이와 각도를 보존하는 변환은 되돌리기도 깔끔하다.

의사역행렬

행렬이 정사각이 아니거나 가역이 아닐 때도 비슷한 역할을 하는 도구가 있다. 의사역행렬 \(A^\dagger\)는 최소제곱 해를 표현하는 데 특히 중요하다.

방정식 \(Ax=b\)가 정확히 풀리지 않으면, 대신 \(\|Ax-b\|\)를 가장 작게 만드는 \(x\)를 찾는다. 적절한 조건에서 이 해는

\[ x=A^\dagger b \]

로 쓸 수 있다. 즉 의사역행렬은 "완벽히 되돌리기는 어렵지만, 가장 그럴듯하게 되돌려 보자"는 실용적인 합의다.

정리

왼쪽 역원과 오른쪽 역원은 정보 보존과 출력 가능성을 각각 말해 준다. 정사각 가역행렬은 선형방정식을 유일하게 풀게 해 주며, 의사역행렬은 정확한 해가 없거나 역행렬이 없을 때 최소제곱 관점의 해를 제공한다.

12장 최소제곱: 딱 맞지 않을 때 가장 덜 민망하게 맞추기

방정식이 너무 많아 정확한 해가 없을 때, 우리는 포기하지 않고 오차의 제곱합을 가장 작게 만드는 벡터를 찾는다.

최소제곱 문제

최소제곱 문제는 보통 \(A x \approx b\) 꼴로 나타난다. 여기서 \(A\)는 \(m \times n\) 행렬이고, \(m > n\)인 경우가 흔하다. 즉 조건은 많은데 조절할 변수는 적다. 그래서 \(A x = b\)를 정확히 만족하는 \(x\)가 없을 수 있다. 최소제곱은 잔차 \(r = A x - b\)의 길이, 더 정확히는 \(\|A x - b\|^2\)를 최소로 만드는 \(x\)를 고른다.

제곱을 쓰는 이유는 계산이 부드럽고, 큰 실수를 더 엄하게 벌주며, 미분했을 때 깔끔한 선형 방정식으로 이어지기 때문이다. 이 문제는 데이터를 설명하는 모델, 센서 측정값 보정, 물리 실험의 계수 추정처럼 현실의 삐걱거림을 수학적으로 다루는 기본 도구다.

해법

최소제곱해 \(\hat{x}\)에서는 잔차 \(A\hat{x}-b\)가 \(A\)의 열공간에 수직이다. 말하자면 \(b\)를 \(A\)의 열들이 만들 수 있는 공간 위로 그림자처럼 내린 것이다. 이 조건은 \(A^T(A\hat{x}-b)=0\)이고, 따라서 정규방정식 \[ A^T A \hat{x} = A^T b \] 로 정리된다.

\(A\)의 열들이 선형독립이면 \(A^T A\)는 가역이고 해는 \[ \hat{x} = (A^T A)^{-1}A^T b \] 이다. 단, 이 공식은 개념을 보기에는 좋지만 실제 계산에서는 늘 최고의 선택은 아니다. 숫자가 예민해질 수 있기 때문이다. 공식은 지도이고, 계산 알고리즘은 신발이다. 여행에는 신발이 꽤 중요하다.

최소제곱 문제 풀기

작은 문제에서는 정규방정식을 풀어도 충분하다. 하지만 \(A^T A\)를 만들면 조건수가 대략 제곱으로 나빠질 수 있어, 큰 문제나 민감한 문제에서는 QR 분해가 더 안정적이다. \(A = QR\)로 두면 \(\|A x-b\| = \|Q R x-b\|\)를 이용해 더 안전하게 \(\hat{x}\)를 구할 수 있다.

실제 계산에서는 문제의 크기, 희소성, 정확도 요구에 따라 방법을 고른다. 행렬이 크고 대부분 0이라면 희소 행렬 알고리즘이 중요하고, 데이터가 계속 들어오는 상황이라면 반복법이나 온라인 갱신도 고려한다.

예시

직선 맞추기는 대표적인 예다. 데이터 \((t_i, y_i)\)에 대해 \(y_i \approx \theta_1 + \theta_2 t_i\)라고 두면, 각 행은 \([1\;\;t_i]\), 미지수는 \(\theta = (\theta_1,\theta_2)\)가 된다. 최소제곱은 점들과 직선 사이 세로 오차의 제곱합을 최소화한다.

또 다른 예는 여러 센서가 같은 양을 조금씩 다르게 측정할 때다. 각 측정식이 완벽히 일치하지 않아도, 최소제곱은 전체 측정값과 가장 조화로운 추정치를 준다. 현실 데이터는 대개 예의 바르게 한 줄로 서 있지 않으니, 이런 타협 기술은 아주 실용적이다.

정리

최소제곱은 \(\|A x-b\|^2\)를 최소화하는 문제다. 해는 잔차가 \(A\)의 열공간에 수직이라는 조건에서 나오며, 정규방정식 \(A^T A\hat{x}=A^T b\)로 표현된다. 계산에서는 안정성을 위해 QR 같은 방법을 자주 쓴다.

13장 최소제곱 데이터 피팅: 데이터에게 너무 잘 보이려다 망하지 않기

모델이 데이터를 설명하도록 계수를 고르되, 새 데이터 앞에서도 체면을 지키는지 확인하는 장이다.

데이터 피팅

데이터 피팅에서는 관측값 \(y_i\)를 특징 벡터 \(x_i\)의 함수로 근사한다. 선형 모델은 \[ \hat{y}_i = \theta_1 f_1(x_i)+\cdots+\theta_p f_p(x_i) \] 처럼 쓴다. 여기서 \(f_j\)는 특징 함수이고, \(\theta_j\)는 학습할 계수다. 모든 데이터에 대해 행렬 \(A\)를 만들면 문제는 다시 \(A\theta \approx y\)가 된다.

중요한 점은 "선형"이라는 말이 입력 \(x\)에 대해 꼭 직선이라는 뜻은 아니라는 것이다. \(\theta\)에 대해 선형이면 최소제곱으로 다룰 수 있다. 그래서 \(1, x, x^2\), \(\sin x\), 로그 변환 같은 특징을 넣어도 계수에 대해 선형이면 같은 틀로 해결된다.

검증

모델이 좋은지는 훈련 오차만 보면 안 된다. 이미 본 데이터에 잘 맞는 것은 성실한 암기일 수도 있다. 그래서 데이터를 훈련 세트와 검증 세트로 나누고, 검증 오차 \[ \frac{1}{m_{\mathrm{val}}}\sum_i (\hat{y}_i-y_i)^2 \] 를 확인한다. 새 데이터에서 오차가 작아야 실제로 쓸 만한 모델이다.

특징이 너무 많거나 차수가 너무 높으면 훈련 오차는 줄어들지만 검증 오차는 커질 수 있다. 이를 과적합이라 부른다. 모델은 데이터를 믿되, 데이터의 우연한 잡담까지 철학으로 받아들이면 안 된다.

특성 설계

특징 공학은 원래 입력에서 더 설명력 있는 열을 만드는 일이다. 집값 예측이라면 면적, 방 개수뿐 아니라 면적당 방 수, 위치 지표, 오래된 정도 같은 특징을 만들 수 있다. 좋은 특징은 단순한 모델도 꽤 똑똑하게 만든다.

다항식 특징을 쓰면 곡선을 맞출 수 있고, 주기적 현상에는 \(\sin\)과 \(\cos\)가 어울린다. 범주형 변수는 원-핫 인코딩으로 열을 만들 수 있다. 하지만 특징을 늘릴수록 계산량과 과적합 위험도 함께 늘어난다. 결국 핵심은 표현력과 절제의 균형이다.

정리

데이터 피팅은 특징 행렬 \(A\)와 관측 벡터 \(y\)로 최소제곱 문제를 만든다. 검증은 모델이 암기꾼인지 실력자인지 가려 주며, 특징 공학은 모델이 볼 수 있는 정보를 설계한다. 좋은 피팅은 낮은 훈련 오차보다 믿을 만한 일반화에 가깝다.

14장 최소제곱 분류: 숫자로 점수 매기고, 가장 그럴듯한 이름 붙이기

분류 문제를 연속값 예측처럼 풀어 보고, 그 결과를 클래스 결정 규칙으로 바꾸는 방법을 배운다.

분류

분류는 입력 \(x\)를 몇 개의 라벨 중 하나로 배정하는 문제다. 이메일이 스팸인지 아닌지, 손글씨 숫자가 무엇인지, 환자 상태가 어느 범주에 가까운지 판단하는 일이 여기에 속한다. 회귀가 숫자를 예측한다면, 분류는 이름표를 붙인다.

선형 분류에서는 점수 \(w^T x + v\)를 계산하고 그 부호나 크기로 클래스를 정한다. 결정 경계는 \(w^T x+v=0\)인 초평면이다. 이 경계가 데이터를 잘 가르면 모델은 단순하면서도 해석하기 쉽다.

최소제곱 분류기

이진 분류에서는 라벨을 보통 \(+1\)과 \(-1\)로 둔다. 특징 행렬 \(A\)와 라벨 벡터 \(y\)가 있을 때 \(A\theta \approx y\)를 최소제곱으로 풀고, 새 입력 \(x\)에 대해 \(\tilde{x}^T\theta\)의 부호를 본다. 여기서 \(\tilde{x}\)는 상수항을 포함하도록 확장한 특징 벡터일 수 있다.

이 방법은 빠르고 구현이 쉽다. 다만 분류에 특화된 손실을 쓰는 로지스틱 회귀나 서포트 벡터 머신처럼 경계 근처의 판단을 세밀하게 다루지는 않는다. 그래도 기준선 모델로는 훌륭하고, 선형대수 관점에서 분류를 이해하는 데 매우 좋은 출발점이다.

다중 클래스 분류기

클래스가 \(K\)개이면 라벨을 길이 \(K\)의 벡터로 표현할 수 있다. 예를 들어 세 번째 클래스는 \((0,0,1,0,\ldots,0)\)처럼 둔다. 그러면 계수도 행렬 \(\Theta\)가 되고, \[ A\Theta \approx Y \] 를 푸는 문제가 된다.

새 데이터에 대해 점수 벡터 \(s=\tilde{x}^T\Theta\)를 계산하고, 가장 큰 성분의 인덱스를 예측 클래스로 고른다. 즉 "각 후보에게 점수를 주고 1등을 뽑는" 방식이다. 클래스 간 점수가 비슷하면 모델이 헷갈린다는 신호로 볼 수 있고, 이런 정보는 후처리나 검토 과정에서 유용하다.

정리

최소제곱 분류는 라벨을 숫자나 원-핫 벡터로 바꾸어 \(A\theta \approx y\) 또는 \(A\Theta \approx Y\)를 푼다. 예측은 점수의 부호나 최대 성분으로 결정한다. 단순하고 빠르지만, 분류 전용 방법과 비교해 한계도 함께 이해해야 한다.

15장 다목적 최소제곱: 한 가지 소원만 들어주는 요술램프는 현실에 없다

여러 목표를 동시에 만족시키려 할 때, 가중치를 두어 균형 잡힌 최소제곱 문제로 만드는 방법을 다룬다.

다목적 최소제곱

다목적 최소제곱은 여러 오차 항을 한꺼번에 줄이는 문제다. 예를 들어 \[ \|A x-b\|^2 + \lambda \|C x-d\|^2 \] 를 최소화할 수 있다. 첫 항은 원래 목표, 둘째 항은 추가 목표나 제약에 가까운 요구를 나타낸다. \(\lambda\)는 둘 사이의 목소리 크기를 조절하는 가중치다.

이 문제는 쌓아서 하나의 최소제곱으로 볼 수 있다. \[ \left\|\begin{bmatrix} A \\ \sqrt{\lambda}C \end{bmatrix}x - \begin{bmatrix} b \\ \sqrt{\lambda}d \end{bmatrix}\right\|^2 \] 이 표현 덕분에 기존 최소제곱 알고리즘을 그대로 활용할 수 있다.

제어

제어 문제에서는 원하는 상태에 가까이 가는 것과 입력을 너무 크게 쓰지 않는 것이 함께 중요하다. 예를 들어 \(x\)가 제어 입력이라면 \(\|A x-b\|^2\)는 목표 상태 오차, \(\lambda\|x\|^2\)는 에너지 사용량을 나타낼 수 있다.

\(\lambda\)가 작으면 목표 추적을 더 공격적으로 하고, 크면 입력을 아낀다. 좋은 제어기는 목적지에 도착할 뿐 아니라 도착하는 방식도 얌전하다. 브레이크와 액셀을 동시에 이해하는 모델이 필요한 셈이다.

추정과 역문제

추정과 역문제에서는 관측값으로부터 원인을 되짚는다. \(A x \approx b\)에서 \(b\)는 측정값이고 \(x\)는 알고 싶은 원래 신호나 파라미터다. 문제는 \(A\)가 정보를 잃어버리거나 잡음이 섞이면 역으로 푸는 일이 불안정해진다는 점이다.

그래서 추가 목표를 둔다. 예를 들어 해가 너무 요동치지 않게 \(\|D x\|^2\)를 줄이거나, 기준값 \(x_0\)에 가깝게 \(\|x-x_0\|^2\)를 넣는다. 이렇게 하면 측정값을 설명하면서도 말이 되는 해를 고르게 된다.

정규화된 데이터 피팅

정규화된 데이터 피팅은 과적합을 줄이기 위해 계수의 크기에 벌점을 준다. 대표적인 릿지 회귀는 \[ \|A\theta-y\|^2+\lambda\|\theta\|^2 \] 를 최소화한다. \(\lambda\)가 커질수록 계수는 작아지고, 모델은 더 부드럽고 조심스러워진다.

정규화는 "데이터를 잘 맞춰라"와 "너무 복잡하게 굴지 마라"를 동시에 말한다. 이 균형은 검증 데이터를 통해 고르는 것이 좋다. \(\lambda\)를 바꿔 가며 검증 오차를 확인하면, 모델의 과감함을 실제 성능에 맞게 조율할 수 있다.

복잡도

최소제곱 문제의 계산량은 행렬의 크기와 구조에 크게 좌우된다. 조밀한 \(m \times n\) 행렬에서 \(m \ge n\) 이면 QR 기반 풀이는 대략 \(O(mn^2)\) 규모의 연산이 든다. \(n\)이 커지면 단순히 "컴퓨터가 하겠지"라고 말하기 어려워진다. 컴퓨터도 가끔은 표정이 있다.

희소 행렬, 반복법, 문제 분해, 전처리 같은 기법은 큰 문제를 현실적인 시간 안에 풀게 해 준다. 또한 다목적 문제를 쌓아 만든 행렬은 행 수가 늘어나므로, 목표를 추가할수록 계산 비용도 함께 확인해야 한다. 모델링의 욕심은 계산서와 같이 온다.

정리

다목적 최소제곱은 여러 목표를 가중합으로 묶고, 쌓은 행렬을 통해 표준 최소제곱처럼 푼다. 제어, 역문제, 정규화된 피팅에서 핵심 역할을 하며, 가중치 선택과 계산 복잡도까지 함께 고려해야 제대로 쓸 수 있다.

16장. 제약이 있는 최소제곱

최소제곱에 “반드시 지켜야 할 약속”을 붙이면, 데이터에 잘 맞추면서도 조건을 어기지 않는 해를 찾게 된다.

제약 최소제곱 문제

보통의 최소제곱은 \( \|Ax-b\|^2 \)를 작게 만드는 \(x\)를 찾는다. 제약 최소제곱은 여기에 선형 조건 \(Cx=d\)를 더한다.

\[ \begin{array}{ll} \text{minimize} & \|Ax-b\|^2 \\ \text{subject to} & Cx=d. \end{array} \] 여기서 \(A\)는 맞추고 싶은 관계, \(b\)는 관측값, \(C x=d\)는 반드시 만족해야 하는 규칙이다. 예를 들어 예산 합계가 정확히 1이어야 한다거나, 어떤 출력이 정확히 목표값이어야 한다는 식이다.

제약은 단순한 장식이 아니다. \(A x \approx b\)는 “가능하면 잘 맞추자”이고, \(C x=d\)는 “이건 꼭 지키자”다. 수학도 사회생활을 한다. 부탁과 약속의 무게가 다르다.

해법

해를 구할 때 핵심은 라그랑주 승수다. 목적함수를 \( \|Ax-b\|^2 \)로 두고 제약 \(Cx=d\)를 붙이면, 최적해 \( \hat x \)와 승수 \(z\)는 다음 블록 선형방정식을 만족한다.

\[ \begin{bmatrix} 2A^TA & C^T \\ C & 0 \end{bmatrix} \begin{bmatrix} \hat x \\ z \end{bmatrix} = \begin{bmatrix} 2A^Tb \\ d \end{bmatrix}. \] 앞의 행은 “목적함수가 더 줄어들 방향이 제약과 균형을 이룬다”는 조건이고, 뒤의 행은 제약 자체다.

승수 \(z\)는 제약을 지키기 위해 목적함수의 기울기를 얼마나 밀어내야 하는지를 알려준다. 그래서 \(z\)는 보조 변수처럼 보이지만, 실제로는 제약의 압력을 수치로 기록한 영수증에 가깝다.

제약 최소제곱 문제 풀기

실제 계산에서는 위의 KKT 시스템을 직접 풀거나, QR 분해를 이용해 더 안정적으로 푼다. 제약 \(Cx=d\)를 먼저 만족하는 하나의 점 \(x_0\)를 찾고, \(C v=0\)을 만족하는 방향 \(v\)들만 남기는 방법도 자주 쓴다.

\(C\)의 영공간 기저를 \(N\)이라 하면 모든 가능한 해는 \(x=x_0+Ny\)로 쓸 수 있다. 그러면 문제는 \[ \text{minimize } \|A(x_0+Ny)-b\|^2 \] 가 되어, 다시 평범한 최소제곱으로 돌아온다. 제약을 없앤 것이 아니라, 제약을 자동으로 지키는 좌표로 이사한 셈이다.

정리

제약 최소제곱은 \(Ax\approx b\)와 \(Cx=d\)를 함께 다룬다. 라그랑주 승수는 KKT 시스템을 만들고, 영공간 방법은 제약을 만족하는 변수만 남겨 보통 최소제곱으로 바꾼다.

17장. 제약 최소제곱의 응용

제약 최소제곱은 포트폴리오, 제어, 추정처럼 “잘하고 싶지만 조건도 지켜야 하는” 현실 문제에 바로 들어맞는다.

포트폴리오 최적화

포트폴리오 최적화에서는 투자 비중 \(w\)를 고른다. 보통 총 투자금 제약 \( \mathbf 1^T w=1 \)을 두고, 기대 수익이나 위험을 함께 고려한다. 수익률 벡터를 \(r\), 목표 수익을 \(\rho\)라 하면 \(r^T w=\rho\) 같은 제약도 붙일 수 있다.

위험은 자산 수익률의 변동을 담은 행렬로 표현된다. 예를 들어 \(R w\)가 포트폴리오 수익의 시나리오별 편차를 나타내면 \(\|R w\|^2\)를 줄이는 문제는 변동성을 낮추려는 시도다.

이때 해석은 깔끔하다. “돈을 전부 배치하고, 원하는 기대 수익을 맞추면서, 흔들림은 가능한 작게 하라.” 투자 조언은 아니지만 선형대수 입장에서는 제법 예의 바른 문장이다.

선형 이차 제어

선형 이차 제어에서는 상태 \(x_t\)와 입력 \(u_t\)가 선형 동역학 \[ x_{t+1}=A_t x_t+B_t u_t \] 를 따른다. 목표는 상태가 원하는 경로를 따라가게 하면서 입력을 너무 크게 쓰지 않는 것이다.

비용은 흔히 \[ \sum_t \|x_t-x_t^{\mathrm{des}}\|^2+\lambda \sum_t \|u_t\|^2 \] 처럼 생긴다. 동역학은 제약이고, 추적 오차와 입력 크기는 최소화할 항이다. 즉 제어 문제는 큰 벡터 하나에 시간별 상태와 입력을 모두 쌓으면 제약 최소제곱으로 볼 수 있다.

선형 이차 상태 추정

상태 추정에서는 시스템의 실제 상태를 직접 다 보지 못한다. 대신 관측 \[ y_t=C_t x_t+v_t \] 와 동역학 \[ x_{t+1}=A_t x_t+w_t \] 를 함께 사용한다.

관측 오차와 동역학 오차를 동시에 작게 만드는 \(x_1,\ldots,x_T\)를 찾으면, “센서도 믿고, 물리 법칙도 믿되, 둘 다 완벽하다고 우기지는 않는” 추정기가 된다. 칼만 필터와 스무딩의 기본 감각도 여기에 닿아 있다.

정리

포트폴리오는 예산과 수익 제약 아래 위험을 줄이고, 선형 이차 제어는 동역학 제약 아래 추적 오차와 입력 크기를 줄인다. 상태 추정은 관측과 모델 사이의 균형점을 찾는다.

18장. 비선형 최소제곱

모델이 \(Ax\)처럼 곧게 서 있지 않아도, 국소적으로는 선형처럼 다루며 한 걸음씩 답에 가까워질 수 있다.

비선형 방정식과 최소제곱

비선형 최소제곱은 잔차 함수 \(r(x)\)에 대해 \[ \text{minimize } \|r(x)\|^2 \] 를 푸는 문제다. 여기서 \(r(x)\)는 직선적이지 않을 수 있다. 예를 들어 지수 모델, 거리 기반 모델, 로지스틱 모델의 오차가 모두 여기에 들어온다.

\(r(x)=0\)을 정확히 풀 수 있으면 비선형 방정식 풀이가 되고, 불가능하거나 데이터가 시끄러우면 \(\|r(x)\|^2\)를 작게 만드는 근사해를 찾는다. 현실 데이터는 보통 후자다. 현실은 늘 살짝 삐뚤고, 그래서 통계가 밥값을 한다.

가우스-뉴턴 알고리즘

가우스-뉴턴 방법은 현재점 \(x^{(k)}\) 근처에서 잔차를 선형화한다. \[ r(x^{(k)}+\Delta x)\approx r(x^{(k)})+Dr(x^{(k)})\Delta x. \] 여기서 \(Dr(x^{(k)})\)는 야코비안이다.

다음 이동량은 선형화된 문제 \[ \text{minimize}_{\Delta x}\ \|r(x^{(k)})+Dr(x^{(k)})\Delta x\|^2 \] 를 풀어 얻고, \(x^{(k+1)}=x^{(k)}+\Delta x\)로 갱신한다. 잘 맞는 근처에서는 빠르고 우아하지만, 시작점이 엉뚱하면 우아함이 잠깐 휴가를 간다.

레벤버그-마쿼트 알고리즘

레벤버그-마쿼트 방법은 가우스-뉴턴 이동에 안정 장치를 붙인다. \[ \text{minimize}_{\Delta x}\ \|r(x)+Dr(x)\Delta x\|^2+\lambda \|\Delta x\|^2. \] \(\lambda\)가 크면 조심스럽게 작은 걸음을 걷고, 작으면 가우스-뉴턴처럼 과감해진다.

이 방식은 비선형 모델 피팅에서 매우 실용적이다. “방향은 똑똑하게, 보폭은 겸손하게”라는 태도를 수식으로 만든 셈이다.

비선형 모델 피팅

비선형 모델 피팅에서는 관측값 \(y_i\)와 모델 \(\hat y_i=f(x_i,\theta)\) 사이의 차이를 잔차로 둔다. \[ r_i(\theta)=f(x_i,\theta)-y_i. \] 목표는 \(\sum_i r_i(\theta)^2\)를 작게 하는 파라미터 \(\theta\)를 찾는 것이다.

지수 감쇠, 포화 곡선, 위치 추정, 카메라 보정 같은 문제는 선형식 하나로는 부족하다. 하지만 잔차를 만들고 야코비안을 계산할 수 있으면 최소제곱의 도구 상자를 계속 쓸 수 있다.

비선형 최소제곱 분류

분류에서도 비선형 최소제곱을 쓸 수 있다. 예를 들어 점수 함수 \(f(x_i,\theta)\)가 라벨 \(y_i\)에 가까워지도록 \[ \sum_i (f(x_i,\theta)-y_i)^2 \] 를 줄인다. \(f\)가 비선형이면 경계도 곡선이 된다.

이 접근은 확률적 손실 함수만큼 세련된 해석을 항상 주지는 않지만, 구현과 계산이 간단하고 최소제곱 알고리즘을 그대로 활용할 수 있다는 장점이 있다.

정리

비선형 최소제곱은 잔차 \(r(x)\)의 제곱합을 줄인다. 가우스-뉴턴은 잔차를 선형화해 반복하고, 레벤버그-마쿼트는 이동량 벌점을 더해 안정성을 높인다.

19장. 제약이 있는 비선형 최소제곱

비선형 잔차와 비선형 제약이 함께 등장하면, 우리는 문제를 조금씩 길들이며 풀어야 한다.

제약 비선형 최소제곱

제약 비선형 최소제곱은 보통 \[ \begin{array}{ll} \text{minimize} & \|r(x)\|^2 \\ \text{subject to} & c(x)=0 \end{array} \] 꼴이다. 잔차 \(r(x)\)도 비선형이고, 제약 \(c(x)\)도 비선형일 수 있다.

선형 제약 때처럼 한 번의 큰 선형 시스템으로 끝나지 않는 경우가 많다. 대신 현재점 근처에서 \(r\)과 \(c\)를 선형화하고, 작은 제약 최소제곱 문제를 반복해서 푼다.

페널티 알고리즘

벌점 방법은 제약 위반을 목적함수에 넣어 버린다. \[ \text{minimize } \|r(x)\|^2+\mu \|c(x)\|^2. \] \(\mu\)가 커질수록 제약 위반은 더 비싸진다. 즉 \(c(x)\neq 0\)인 해는 점점 불편한 자리에 앉게 된다.

장점은 구현이 쉽다는 것이다. 원래의 제약 문제를 비제약 비선형 최소제곱처럼 풀 수 있다. 단점은 \(\mu\)가 너무 크면 수치적으로 빡빡해져 계산이 불안정해질 수 있다는 점이다.

증강 라그랑주 알고리즘

증강 라그랑지안 방법은 벌점과 라그랑주 승수를 함께 쓴다. 대략적으로는 \[ \|r(x)\|^2+z^T c(x)+\mu \|c(x)\|^2 \] 같은 형태를 반복적으로 최소화하고, 제약 위반을 보고 승수 \(z\)를 갱신한다.

벌점만 쓰는 방법보다 균형이 좋다. 제약을 무작정 큰 벌금으로만 다스리지 않고, 승수가 “어느 방향으로 제약을 맞춰야 하는지”를 기억해 준다.

비선형 제어

비선형 제어에서는 동역학이 \[ x_{t+1}=f_t(x_t,u_t) \] 처럼 주어진다. 목표는 원하는 상태를 따라가면서 입력 비용을 낮추고, 동시에 비선형 동역학을 만족하는 것이다.

시간별 \(x_t,u_t\)를 모두 변수로 묶으면, 동역학은 비선형 제약이 되고 추적 오차와 입력 크기는 잔차가 된다. 따라서 비선형 제어는 제약 비선형 최소제곱의 대표적인 무대다.

실제 알고리즘은 선형화, 근사, 반복, 보폭 조절의 조합이다. 멋진 로봇 동작 뒤에는 대개 이런 소박한 계산 루틴이 꾸준히 일하고 있다.

정리

제약 비선형 최소제곱은 비선형 잔차와 제약을 함께 다룬다. 벌점 방법은 제약 위반을 비용으로 넣고, 증강 라그랑지안은 승수와 벌점을 결합해 더 안정적인 반복을 만든다.

부록 A-D. 기호, 계산량, 미분, 더 공부하기

본문의 계산을 읽기 위한 작은 공구함이다. 기호를 정리하고, 알고리즘 비용을 가늠하며, 미분과 최적화의 기본 언어를 맞춘다.

표기법

벡터는 보통 \(x\), \(b\), \(u\)처럼 쓰고, 행렬은 \(A\), \(C\), \(R\)처럼 쓴다. \(A^T\)는 전치, \(A^{-1}\)은 역행렬, \(A^\dagger\)는 의사역행렬을 뜻한다.

노름 \( \|x\| \)는 특별한 말이 없으면 유클리드 노름 \[ \|x\|=\sqrt{x_1^2+\cdots+x_n^2} \] 이다. 내적은 \(a^T b\), 행렬의 열공간은 \(\mathcal R(A)\), 영공간은 \(\mathcal N(A)\)로 쓸 수 있다.

최소제곱에서 \(Ax-b\)는 잔차다. 잔차가 작다는 말은 모델이 데이터를 잘 설명한다는 뜻이지만, 잔차가 0이라는 말은 모델이 진실이라는 뜻은 아니다. 모델에게도 과한 칭찬은 금물이다.

복잡도

계산량은 입력 크기가 커질 때 연산 수가 얼마나 늘어나는지를 대략 말해준다. 예를 들어 \(m\times n\) 행렬과 벡터의 곱은 대략 \(O(mn)\)이고, 조밀한 \(n\times n\) 선형시스템 풀이는 보통 \(O(n^3)\) 규모다.

최소제곱을 정규방정식 \(A^TAx=A^Tb\)로 풀면 단순하지만 수치 안정성이 나빠질 수 있다. QR 분해는 보통 더 안정적이며, 큰 희소 문제에서는 구조를 이용한 반복법이 중요해진다.

미분과 최적화

스칼라 함수 \(f(x)\)의 그래디언트 \(\nabla f(x)\)는 가장 빨리 증가하는 방향을 가리킨다. 벡터 함수 \(r(x)\)의 미분은 야코비안 \(Dr(x)\)로 모은다.

제곱 잔차 함수 \(F(x)=\|r(x)\|^2\)의 그래디언트는 \[ \nabla F(x)=2Dr(x)^T r(x) \] 이다. 이 식 하나가 가우스-뉴턴, 레벤버그-마쿼트, 여러 최적화 알고리즘의 출발점이 된다.

최적화에서는 정확한 답보다 좋은 반복이 더 중요할 때가 많다. 시작점, 보폭, 종료 조건, 스케일링이 결과를 바꾼다. 그래서 알고리즘은 수식만이 아니라 태도다. 급하면 돌아가고, 불안하면 작게 걷는다.

더 공부할 길

다음 단계로는 수치선형대수, 볼록최적화, 통계적 추정, 제어 이론을 이어서 공부하면 좋다. 최소제곱은 이 과목들 사이를 잇는 작은 다리처럼 작동한다.

연습할 때는 공식을 외우기보다 문제를 세 줄로 번역해 보자. 변수는 무엇인가, 작게 만들 것은 무엇인가, 반드시 지켜야 할 조건은 무엇인가. 이 세 질문에 답하면 대부분의 모델링 문제가 훨씬 덜 무섭다.

정리

기호는 생각을 압축하고, 계산량은 방법의 규모를 알려주며, 미분은 최적화의 방향 감각을 준다. 더 공부할 길은 넓지만 출발점은 단순하다. 잔차, 제약, 반복을 또렷이 보자.