5장과 6장의 보간은 주어진 점을 정확히 지나는 곡선을 찾았습니다. 그런데 측정값에는 잡음이 섞여 있고, 점이 수백 개라면 모두 지나는 곡선은 잡음까지 충실히 따라 그립니다. 이 장은 생각을 바꿉니다. 점을 지나지 말고, 점들과의 오차를 가장 작게 만드는 단순한 곡선을 찾자는 것입니다. 오차를 제곱해서 더하면 문제는 선형대수의 사영이 되고, 그 해를 정규 방정식으로 구할지 QR 분해로 구할지에 따라 정확도가 몇 자릿수나 달라집니다. 같은 생각을 데이터 대신 함수에 적용하면 르장드르·체비쇼프 직교 다항식이 나오고, 오차의 최댓값을 줄이는 최소최대 근사로 가면 계산기와 수학 라이브러리가 sinx와 ex를 계산하는 방법에 닿습니다.
잡음 데이터의 맞춤을 과결정 선형계 Ac≈y의 최소제곱 문제로 세우고, 정규 방정식과 잔차의 직교 조건을 사영으로 설명한다.
정규 방정식이 조건수를 제곱한다는 것을 보이고, 하우스홀더 QR로 같은 문제를 안정하게 푼다.
다항식 차수를 학습 오차가 아니라 검증 오차로 고르고, 과적합을 알아본다.
가중 최소제곱과 후버 손실의 IRLS로 이상치에 강한 맞춤을 만든다.
연속 최소제곱을 내적 공간의 사영으로 보고, 그람–슈미트로 르장드르 다항식을 만들며, 체비쇼프 계수의 감소 속도로 함수의 매끄러움을 읽는다.
체비쇼프 등진동 정리로 최소최대 근사를 판정하고, 레메즈 알고리즘을 한 단계씩 돌려 본다.
이 수식이 없었다면소행성 케레스의 재발견
1801년 1월 피아치(Giuseppe Piazzi)가 발견한 소행성 케레스는 몇 주 관측된 뒤 태양 뒤로 숨어 버렸습니다. 남은 것은 궤도의 짧은 호에 해당하는 잡음 섞인 관측 몇십 개였습니다. 젊은 가우스(Carl Friedrich Gauss)는 이 관측으로 궤도를 계산해 그해 말 다시 나타날 위치를 예측했고, 천문학자들은 그 근처에서 케레스를 다시 찾았습니다. 가우스는 1809년 책에서 이때 쓴 방법이 "오차의 제곱합을 최소로 하는" 원리라고 밝혔습니다. 같은 원리는 르장드르(Adrien-Marie Legendre)가 1805년에 먼저 출판했습니다.
방정식보다 관측이 많고, 관측마다 오차가 있어 모든 식을 동시에 만족하는 답은 없습니다. 최소제곱은 "가장 덜 틀린" 답을 고르는 원칙이고, 오늘날 GPS 위치 결정, 센서 보정, 회귀 분석, 신경망의 손실 함수가 모두 이 원리의 후손입니다.
잡음 섞인 관측 m개→미지수 n개 (m ≫ n)→min ‖A c − y‖²→궤도·보정 곡선·회귀 모형
잡음 데이터와 보간의 실패
서미스터 보정 곡선
온도 센서(서미스터)를 보정하려고 기준 온도계 옆에 두고 12번 측정했습니다. 저항–온도 관계는 매끄러운 곡선이어야 하는데, 측정값에는 ±0.2 정도의 잡음이 있습니다. 5장의 방법으로 12개 점을 모두 지나는 11차 다항식을 만들면 점 사이에서 곡선이 크게 출렁이고, 측정하지 않은 온도에서의 예측은 엉망이 됩니다. 점을 지나는 것이 목표가 아니라, 점들 뒤에 숨은 추세를 찾는 것이 목표입니다.
보간과 근사의 차이는 미지수와 조건의 개수에 있습니다. m개의 점 (xi,yi)를 n+1개의 계수를 가진 모형 p(x)=c0ϕ0(x)+⋯+cnϕn(x)로 설명하려 할 때, m=n+1이면 보간(정사각 선형계), m>n+1이면 식이 미지수보다 많은 과결정계(overdetermined system)입니다.
를 구하는 문제를 선형 최소제곱(linear least squares) 문제라 한다. c^를 최소제곱 해, r=y−Ac^를 최소제곱 잔차라 한다.
그림 7-1. 잡음이 섞인 12개 점. 모든 점을 지나는 11차 다항식(빨강)은 잡음까지 따라가 점 사이와 양 끝에서 크게 벗어난다. 계수가 4개뿐인 3차 다항식(초록)은 어느 점도 정확히 지나지 않지만 참 곡선(점선)에 훨씬 가깝다. 4절의 시뮬레이터에서 직접 확인한다.
왜 하필 제곱일까요? 세 가지 이유가 있습니다. 첫째, 제곱합은 c의 매끄러운 이차 함수라 미분해서 0으로 놓으면 선형 방정식이 나옵니다. 둘째, 기하적으로 유클리드 거리이므로 답이 직교 사영입니다. 셋째, 잡음이 서로 독립인 정규 분포를 따르면 최소제곱 해는 최대 가능도 추정량이 되고, 가우스–마르코프 정리에 따르면 잡음의 평균이 0이고 분산이 같으며 서로 무상관이기만 해도 선형 불편 추정량 가운데 분산이 가장 작습니다. 대신 제곱은 큰 잔차를 매우 무겁게 벌하므로 이상치 하나에 결과가 끌려갑니다. 이 약점은 5절에서 다룹니다.
정규 방정식과 사영
세 점, 미지수 둘
점 (0,1),(1,3),(2,2)에 직선 y=c0+c1x를 맞추려 합니다. 식은 세 개(c0=1, c0+c1=3, c0+2c1=2), 미지수는 둘입니다. 세 식을 동시에 만족하는 직선은 없습니다. 제곱합을 최소로 하는 직선을 어떻게 한 번에 구할까요?
목적 함수 F(c)=∥Ac−y∥2=c⊤A⊤Ac−2c⊤A⊤y+y⊤y의 기울기를 0으로 놓으면 ∇F=2A⊤Ac−2A⊤y=0입니다.
정리 7.2 (정규 방정식과 잔차의 직교성)c^가 최소제곱 해일 필요충분조건은
A⊤Ac^=A⊤y⟺A⊤(y−Ac^)=0
이다. 곧 잔차 r은 A의 모든 열에 수직이다. A의 열이 일차독립(계수 n)이면 A⊤A는 대칭 양정치이고 해는 유일하다.
증명의 핵심.A⊤r=0인 c^와 임의의 c=c^+d에 대해 y−Ac=r−Ad이고, r⊥Ad이므로 피타고라스 정리로 ∥y−Ac∥2=∥r∥2+∥Ad∥2≥∥r∥2. 등호는 Ad=0일 때뿐이고, 열이 일차독립이면 d=0이다. 양정치성은 d⊤A⊤Ad=∥Ad∥2>0(d=0)에서 나온다. ∎
이 정리는 그림 한 장으로 요약됩니다. Ac가 만들 수 있는 벡터 전체는 A의 열공간C(A)이고, Rm 안의 n차원 평면입니다. y는 보통 이 평면 밖에 있습니다. 평면 위에서 y에 가장 가까운 점은 y에서 평면에 내린 수선의 발p=Ac^이고, 잔차는 그 수선입니다(LinearBook 9장: 직교성과 사영).
그림 7-2. 최소제곱의 기하. A의 열 a1,a2가 펼치는 평면이 모형이 만들 수 있는 모든 예측값이다. 데이터 y에서 평면까지 가장 짧은 선분은 수선이고, 그 발 p가 최소제곱 예측값이다. 잔차 r이 각 열에 수직이라는 조건을 식으로 쓴 것이 정규 방정식이다.
예제 7.1 (직선 맞춤을 손으로) 점 (0,1),(1,2),(2,4),(3,5)에 직선 y=c0+c1x를 최소제곱으로 맞추어라.
A의 열은 (1,1,1,1)과 (0,1,2,3). A⊤A=[46614], A⊤y=[∑yi∑xiyi]=[1225].
검산: ∑ri=0(첫째 열에 수직), ∑xiri=0−0.3+0.6−0.3=0(둘째 열에 수직). 상수항이 있는 모형에서는 잔차의 합이 항상 0이고, 맞춘 직선은 데이터의 무게중심 (xˉ,yˉ)=(1.5,3)을 지난다.
함수 정규방정식_최소제곱(A, y) // A: m×n, 열이 일차독립
G ← AᵀA // n×n 대칭 양정치, 비용 약 m n²
g ← Aᵀy // 비용 m n
L ← 촐레스키(G) // G = L Lᵀ, 비용 약 n³/3
z ← 전진대입(L, g) // L z = g
c ← 후진대입(Lᵀ, z) // Lᵀ c = z반환 c
아래 시뮬레이터의 왼쪽은 데이터 평면, 오른쪽은 m=3일 때의 R3입니다. 데이터 세 점의 높이 y1,y2,y3이 R3의 한 점 y가 되고, 직선 두 계수가 만들 수 있는 예측값 (c0+c1x1,c0+c1x2,c0+c1x3)은 평면을 이룹니다. 왼쪽 그림에서 잔차 제곱의 넓이 합을 줄이는 일과 오른쪽 그림에서 수선을 내리는 일이 같은 일임을 확인해 보세요.
SIMULATOR
최소제곱은 사영이다: 데이터 평면과 ℝ³
데이터: 점을 위아래로 끌기
ℝ³: 끌어서 회전
직선 고르기
데이터 y예측 A c (열공간 위)잔차 r열 a₁ = (1,1,1), a₂ = (0,1,2)
계수 (c₀, c₁)—
‖r‖² (제곱 넓이 합)—
Aᵀr = (a₁·r, a₂·r)—
r과 평면의 각—
해볼 것: ① '직접 고르기'에서 c₀, c₁ 슬라이더로 제곱 넓이 합을 최대한 줄여 보세요. 최소가 되는 순간 Aᵀr이 (0, 0)이 되고 잔차가 평면에 수직(90°)이 됩니다. ② 세 점을 한 직선 위에 놓으면 y가 평면 안으로 들어가 잔차가 0이 됩니다. ③ ℝ³ 그림을 돌려 평면을 옆에서 보면 수선이 정확히 직각인 것이 보입니다. 모델: x = 0, 1, 2 고정, 모형 y = c₀ + c₁x.
정규 방정식의 조건수 제곱 문제와 QR
교과서 공식이 자릿수를 버린다
정규 방정식은 짧고 외우기 쉽습니다. 그런데 10차 다항식을 [0,1]의 50개 점에 맞추면 정규 방정식으로 구한 계수는 소수 셋째 자리에서 틀리고, 12차에서는 촐레스키 분해가 아예 실패합니다. 데이터에는 잡음도 없었습니다. 무엇이 자릿수를 먹었을까요?
2장에서 본 대로 선형계 Gx=g를 배정밀도로 풀면 상대 오차가 대략 κ(G)εmach까지 커질 수 있습니다(εmach≈2.2×10−16, 2장, 12장). 직사각 행렬의 조건수는 특이값으로 정의합니다.
정의 7.3 (직사각 행렬의 조건수) 열이 일차독립인 A∈Rm×n의 특이값을 σ1≥⋯≥σn>0이라 할 때 κ2(A)=σ1/σn이다(LinearBook: 특이값 분해).
최소제곱 문제 자체의 민감도는 대략 κ(A)(잔차가 크면 κ(A)2항이 붙지만 그 계수는 잔차 크기에 비례)인데, 정규 방정식이라는 알고리즘은 잔차와 상관없이 κ(A)2의 선형계를 풉니다. κ(A)=108이면 κ(A⊤A)=1016이고, 배정밀도의 16자리가 모두 사라집니다. 2장의 용어로 정규 방정식은 후방 안정하지 않은 알고리즘입니다.
예제 7.2 (로이힐리 행렬)A=1ϵ010ϵ, 참 해 c=(1,2), y=Ac=(3,ϵ,2ϵ)로 두자.
특이값은 2+ϵ2과 ϵ이므로 κ(A)≈2/ϵ. ϵ=10−7이면 κ(A)≈1.4×107으로 배정밀도에서 충분히 다룰 만하다.
A⊤A=[1+ϵ2111+ϵ2]. ϵ2=10−14은 1에 더하면 유효 숫자 두세 자리만 남는다. 실제로 배정밀도의 정규 방정식(촐레스키)은 c^=(1.02247,1.97753)을 낸다. 상대 오차 약 10−2.
ϵ=10−8이면 1+ϵ2이 정확히 1로 반올림되어 A⊤A가 특이 행렬이 되고 촐레스키가 실패한다.
같은 문제를 하우스홀더 QR로 풀면 ϵ=10−7에서 오차 1.8×10−15, ϵ=10−8에서도 4×10−16 수준이다. A 자체는 전혀 나쁘지 않았다.
처방은 A⊤A를 만들지 않는 것입니다. A=QR(Q는 열이 정규직교인 m×n, R은 n×n 상삼각)로 분해하면 직교 행렬은 길이를 바꾸지 않으므로
∥Ac−y∥2=∥Rc−Q⊤y∥2+∥(I−QQ⊤)y∥2.
둘째 항은 c와 무관하다. 첫째 항은 Rc^=Q⊤y일 때 0이 된다. κ(R)=κ(A)이므로 조건수가 제곱되지 않는다.
정리 7.5 (QR에 의한 최소제곱)A=QR이 얇은 QR 분해이고 A의 열이 일차독립이면 최소제곱 해는 상삼각계 Rc^=Q⊤y의 해다. 하우스홀더 반사로 계산한 QR 최소제곱은 후방 안정하다. 곧 계산된 c^는 A와 y를 O(εmach)의 상대 크기만큼 바꾼 문제의 정확한 해다.
함수 QR_최소제곱(A, y) // 하우스홀더, A는 m×nfor k = 1 … n
v ← A[k:m, k] // k번째 열의 아래쪽
v[1] ← v[1] + sign(v[1])·‖v‖ // 상쇄를 피하는 부호 선택
A[k:m, k:n] ← A[k:m, k:n] − 2 v (vᵀ A[k:m, k:n]) / (vᵀv)
y[k:m] ← y[k:m] − 2 v (vᵀ y[k:m]) / (vᵀv) // Qᵀy를 같이 만든다end
c ← 후진대입(A[1:n, 1:n], y[1:n]) // R c = (Qᵀy)의 위쪽 n개반환 c // 비용 약 2mn² − 2n³/3
비용은 m≫n에서 정규 방정식(약 mn2)의 두 배 정도입니다. 그 값으로 자릿수를 log10κ(A)개 더 지킵니다. 더 나쁜 경우(열이 거의 일차종속)에는 특이값 분해로 작은 특이값을 잘라 내는 방법이 가장 튼튼하지만 비용이 몇 배 더 듭니다(LinearBook: 그람–슈미트와 QR). 아래 표는 [0,1]의 등간격 50개 점에서 계수가 모두 1인 n차 다항식을 잡음 없이 다시 맞춘 결과입니다.
차수 n
κ(A)
κ(A⊤A)
정규 방정식 계수 오차
QR 계수 오차
2
2.2×10¹
4.9×10²
4.6×10⁻¹⁴
1.6×10⁻¹⁵
4
6.4×10²
4.1×10⁵
3.6×10⁻¹¹
7.1×10⁻¹⁴
6
2.0×10⁴
3.9×10⁸
2.2×10⁻⁸
1.1×10⁻¹²
8
6.3×10⁵
3.9×10¹¹
8.6×10⁻⁶
2.7×10⁻¹¹
10
2.0×10⁷
4.1×10¹⁴
6.9×10⁻³
2.0×10⁻⁹
12
6.8×10⁸
4.6×10¹⁷
촐레스키 실패
3.4×10⁻⁹
계수 오차는 최대 절댓값 오차입니다. 정규 방정식의 오차가 대략 κ(A)2εmach를, QR의 오차가 대략 κ(A)εmach를 따라가는 것이 보입니다. 단항식 기저 1,x,x2,… 자체도 범인입니다. [0,1]에서 x9과 x10은 거의 같은 모양이라 열이 거의 평행합니다. 기저를 [−1,1]로 옮기거나 체비쇼프 다항식으로 바꾸면 κ(A)가 극적으로 줄어듭니다. 6절에서 이 생각을 끝까지 밀고 갑니다.
SIMULATOR
정규 방정식 vs QR: 차수가 오르면 누가 자릿수를 잃나
기저
κ(A)·εκ(A)²·ε정규 방정식 오차QR 오차
κ(A)—
κ(AᵀA)—
정규 방정식 오차—
QR 오차—
해볼 것: ① 기본 설정에서 빨간 곡선이 주황 점선(κ²ε)을, 초록 곡선이 회색 점선(κε)을 따라 오르는 것을 보세요. ② 기저를 [−1, 1]로 옮기기만 해도 κ(A)가 수천 배 줄어듭니다. ③ 체비쇼프 기저에서는 κ(A)가 차수 18에서도 10 이하라 두 방법이 모두 거의 완벽합니다. 알고리즘보다 기저 선택이 먼저입니다. 모델: 등간격 m개 점, 참 계수가 모두 1인 다항식, 잡음 없음. 오차는 계수의 최대 절댓값 오차.
다항식 차수와 과적합, 검증 오차
차수를 올리면 잔차는 항상 줄어든다
최소제곱 잔차 ∥r∥는 차수를 하나 올릴 때마다 줄거나 그대로입니다. 새 기저 함수의 계수를 0으로 두면 이전 해와 같으니, 최소값이 커질 수는 없습니다. 그러면 차수는 높을수록 좋을까요? 점이 12개면 11차에서 잔차가 정확히 0이 됩니다. 그것이 그림 7-1의 빨간 곡선이었습니다.
문제는 우리가 원하는 것이 측정한 점에서의 오차가 아니라 측정하지 않은 점에서의 오차라는 데 있습니다. 측정한 점(학습 데이터)에서 잰 오차를 학습 오차(training error), 맞춤에 쓰지 않은 점에서 잰 오차를 검증 오차(validation error)라 합니다. 차수를 올리면 학습 오차는 계속 줄지만, 어느 순간부터 모형이 추세 대신 잡음을 외우기 시작해 검증 오차가 커집니다. 이것이 과적합(overfitting)입니다.
잡음의 표준편차가 σ이면 아무리 좋은 모형도 새 측정값과의 RMS 오차를 σ보다 작게 만들 수 없습니다. 학습 오차가 σ보다 훨씬 작아졌다는 것은 잡음을 외웠다는 신호입니다. 반대로 차수가 너무 낮으면 학습·검증 오차가 모두 큽니다(과소적합). 오차를 "모형이 참 함수를 표현하지 못해서 생기는 부분(편향)"과 "잡음에 따라 맞춘 곡선이 흔들리는 부분(분산)"으로 나누면, 차수를 올릴수록 편향은 줄고 분산은 커집니다.
예제 7.3 (차수 고르기) 참 함수 f(x)=sin2πx를 [0,1]에서 12번 측정했다(잡음 표준편차 σ=0.2). 따로 측정한 40개 점을 검증용으로 남겨 두고, 차수별로 QR 최소제곱 맞춤의 RMS 오차를 쟀다(아래 시뮬레이터의 기본 데이터).
차수
0
1
2
3
4
5
7
9
10
11
학습 RMS
0.724
0.521
0.512
0.217
0.135
0.105
0.065
0.050
0.006
0.000
검증 RMS
0.625
0.466
0.508
0.229
0.238
0.259
0.352
0.285
0.820
1.133
학습 오차는 단조 감소해 11차(보간)에서 0이 된다. 검증 오차는 3차에서 최소 0.229로 잡음 수준 0.2에 가깝고, 10차 이후 급격히 커진다. 3차를 고른다. sin2πx는 한 주기에 극값이 둘이므로 3차 다항식이 모양을 잡기에 충분하다는 것과도 맞는다.
데이터가 적어 검증용으로 떼어 둘 여유가 없으면 교차 검증(cross-validation)을 씁니다. 데이터를 k묶음으로 나눠 하나씩 돌아가며 검증에 쓰고 평균을 냅니다. 선형 최소제곱에서는 한 점씩 뺀 검증(LOOCV) 오차를 다시 맞추지 않고도 ri/(1−hii)로 바로 계산할 수 있습니다. 여기서 hii는 사영 행렬 H=A(A⊤A)−1A⊤의 대각 원소입니다. 또 하나의 처방은 계수의 크기에 벌점을 주는 정칙화(regularization)로, ∥Ac−y∥2+λ∥c∥2을 최소화하는 능형 회귀(티호노프 정칙화)가 대표적입니다.
SIMULATOR
차수 슬라이더: 학습 오차와 검증 오차
데이터와 맞춘 다항식
RMS 오차 – 차수 (로그 축)
학습 점 (12개)검증 점 (40개)맞춘 다항식 · 학습 오차검증 오차
학습 RMS—
검증 RMS—
검증 최소 차수—
잡음 수준 σ—
해볼 것: ① 차수를 0에서 11까지 올리며 위 그림의 곡선과 아래 그래프의 두 오차를 함께 보세요. 학습 오차(초록)는 계속 내려가지만 검증 오차(빨강)는 U자를 그립니다. ② σ를 0.02로 줄이면 높은 차수도 덜 위험해지고 최적 차수가 올라갑니다. ③ '새 잡음'을 여러 번 눌러 최적 차수가 데이터에 따라 흔들리는 것을 보세요. 모델: 학습 점은 [0, 1]을 12칸으로 나눈 각 칸 안의 임의 위치, 맞춤은 t = 2x − 1 변수의 QR 최소제곱.
가중 최소제곱과 강건 회귀
센서 하나가 튀었다
여섯 개의 측정 가운데 하나가 통신 오류로 엉뚱한 값을 냈습니다. 최소제곱 직선은 그 한 점 쪽으로 크게 기울어, 나머지 다섯 점 모두에서 틀려 버립니다. 잔차를 제곱하면 큰 잔차 하나가 작은 잔차 여럿보다 훨씬 무겁기 때문입니다. 이상치가 어느 점인지 미리 모른다면 어떻게 할까요?
먼저 측정마다 신뢰도가 다를 때입니다. i번째 측정의 잡음 표준편차가 σi로 알려져 있으면, 정밀한 측정의 잔차를 더 무겁게 쳐야 합니다.
정의 7.6 (가중 최소제곱) 가중치 wi>0에 대해 ∑iwiri2을 최소화하는 문제. W=diag(wi)라 하면 정규 방정식은 A⊤WAc=A⊤Wy이고, 실제 계산은 각 행에 wi를 곱한 (WA)c≈Wy를 QR로 푼다. 잡음이 독립이고 분산이 σi2이면 wi=1/σi2이 최선이다.
이상치는 어느 점의 σi가 큰지 모르는 경우입니다. 그래서 잔차를 보고 가중치를 스스로 정합니다. 제곱 대신 큰 잔차에서 덜 가파르게 자라는 손실 ρ(r)을 쓰는데, 대표가 후버 손실(Huber loss)입니다.
작은 잔차는 최소제곱처럼, 큰 잔차는 절댓값(L1)처럼 다룬다. δ는 "보통 잔차"의 크기로, 흔히 잡음 표준편차의 1.345배를 쓴다.
∑ρ(ri)을 최소화하는 조건 ∑ρ′(ri)∂ri/∂c=0은 ∑w(ri)ri∂ri/∂c=0으로 쓸 수 있고, 이는 가중치 w(ri)를 고정했을 때의 가중 최소제곱 조건과 같습니다. 그래서 가중치를 고정하고 풀고, 새 잔차로 가중치를 다시 계산하는 반복이 자연스럽습니다.
함수 IRLS(A, y, δ) // 반복 재가중 최소제곱
c ← QR_최소제곱(A, y) // 보통 최소제곱으로 출발repeat
r ← y − A c
w_i ← 1 (|r_i| ≤ δ)
w_i ← δ/|r_i| (|r_i| > δ) // 큰 잔차의 영향을 깎는다
c ← QR_최소제곱(√W A, √W y)
until c가 거의 변하지 않음
반환 c
예제 7.4 (이상치 하나)x=0,1,…,5에서 y=(1.1,1.4,2.1,2.4,3.1,8). 앞의 다섯 점은 y≈1+0.5x 근처이고 마지막 점이 이상치다.
보통 최소제곱: y=0.167+1.140x. 기울기가 참 기울기 0.5의 두 배가 넘는다.
후버 IRLS(δ=0.3): y=0.900+0.590x. 수렴했을 때 이상치의 가중치는 δ/∣r∣=0.3/4.15≈0.07로 줄어 있다.
L1 회귀(w=1/∣r∣의 IRLS): y=1.100+0.500x. 세 점 (0,1.1),(2,2.1),(4,3.1)을 정확히 지나는 직선으로, 이상치를 뺀 다섯 점의 최소제곱 y=1.02+0.50x와 기울기가 같다. L1 해는 이처럼 데이터 점 몇 개를 지나는 경우가 많다.
후버 손실은 볼록이라 IRLS가 하나의 답으로 수렴하지만, 이상치가 아주 크고 많으면 여전히 영향을 받습니다. 영향을 완전히 끊는 손실(투키의 이중가중 등)은 볼록이 아니어서 출발점에 따라 답이 달라집니다. 이상치가 데이터의 절반 가까이면 RANSAC처럼 작은 부분집합을 무작위로 골라 맞추고 동의하는 점을 세는 방법을 씁니다. 컴퓨터 비전에서 두 사진의 대응점으로 변환을 추정할 때가 대표적입니다.
SIMULATOR
이상치 끌기: 최소제곱 · 후버 · L¹
점을 끌어 이상치 만들기
최소제곱후버 (점 크기 = 가중치)L¹
최소제곱—
후버—
L¹—
IRLS 반복 수—
해볼 것: ① 맨 오른쪽 점을 위아래로 크게 끌어 보세요. 빨간 직선은 따라 흔들리지만 초록 실선(후버)과 보라 점선(L¹)은 거의 그대로입니다. ② δ를 3까지 키우면 모든 잔차가 문턱 안에 들어가 후버가 최소제곱과 같아집니다. ③ 두 점을 동시에 이상치로 만들면 L¹도 흔들리기 시작합니다. 모델: 직선 y = c₀ + c₁x, IRLS는 변화가 10⁻¹⁰ 미만이 될 때까지(최대 100회, L¹은 수렴이 느려 대개 100회를 다 씁니다). L¹의 가중치는 1/max(|r|, 10⁻⁶).
연속 최소제곱과 직교 다항식
점이 아니라 함수를 근사하기
계산기 회로나 수학 라이브러리는 ex를 [−1,1] 전체에서 다항식으로 근사하고 싶습니다. 데이터는 유한 개의 점이 아니라 구간 위의 연속 함수입니다. 오차의 제곱합 대신 오차 제곱의 적분을 최소로 하면 어떻게 될까요? 그리고 단항식 기저를 쓰면 3절의 조건수 문제가 다시 나타날까요?
합을 적분으로 바꾸면 됩니다. 구간 [a,b]와 양의 가중 함수 w(x)에 대해 내적⟨f,g⟩=∫abf(x)g(x)w(x)dx와 노름 ∥f∥=⟨f,f⟩을 정의하면, 함수도 벡터처럼 다룰 수 있습니다. n차 이하 다항식 전체 Pn이 "열공간" 역할을 합니다.
정리 7.7 (연속 최소제곱의 정규 방정식)∥f−p∥을 최소화하는 p=∑k=0nckϕk∈Pn은 f−p⊥ϕj(j=0,…,n)로 결정되며, 이는
k=0∑n⟨ϕj,ϕk⟩ck=⟨ϕj,f⟩,j=0,…,n
이다. 기저가 직교하면(⟨ϕj,ϕk⟩=0, j=k) 행렬이 대각이 되어 ck=⟨f,ϕk⟩/⟨ϕk,ϕk⟩로 바로 풀린다.
단항식 ϕk=xk를 [0,1], w=1로 쓰면 ⟨xj,xk⟩=1/(j+k+1)이고, 정규 방정식의 행렬은 유명한 힐베르트 행렬(Hilbert matrix)입니다. 그 조건수는 5×5에서 4.8×105, 10×10에서 1.6×1013으로, 10차 근사만 해도 배정밀도의 자릿수 대부분이 사라집니다. 3절과 같은 병입니다. 처방도 같습니다. 기저를 직교화합니다.
예: π2=x2−⟨1,1⟩⟨x2,1⟩⋅1−⟨x,x⟩⟨x2,x⟩x=x2−22/3−0. 홀짝 대칭 때문에 짝수 차와 홀수 차는 저절로 직교한다.
이 다항식들을 Pk(1)=1이 되도록 크기를 맞춘 것이 르장드르 다항식(Legendre polynomials)P0=1, P1=x, P2=21(3x2−1), P3=21(5x3−3x)입니다. 매번 앞의 모든 다항식에 대한 사영을 뺄 필요는 없습니다. 직교 다항식은 항상 세 항 점화식을 만족합니다.
3차 근사 p3=∑k≤3ckPk의 L2 오차는 4.72×10−3, 최대 오차는 1.12×10−2(x=1에서).
비교: 원점에서의 3차 테일러 다항식 1+x+x2/2+x3/6의 최대 오차는 x=1에서 e−8/3=0.0516. 같은 차수인데 르장드르 근사가 4.6배 정확하다. 테일러는 한 점 근처에 집중하고, 최소제곱은 구간 전체에 오차를 고르게 나눈다.
SIMULATOR
그람–슈미트로 르장드르 다항식 만들기와 연속 최소제곱
함수와 근사
오차 f − pₙ
보기
계수 c₀ … cₙ—
L² 오차—
최대 오차—
해볼 것: ① '그람–슈미트'에서 n을 0부터 올리며 xⁿ(점선)에서 앞 다항식들의 사영(회색)을 빼면 직교 다항식 πₙ(초록)이 남는 것을 보세요. 아래 그림은 πₙ·πⱼ의 적분이 0인지 보여 줍니다. ② '연속 최소제곱'에서 |x|나 계단 함수를 고르면 꺾인 곳과 불연속점에서 오차가 오래 남습니다(계단에서는 깁스 현상). ③ eˣ에서 테일러 비교를 켜면 테일러 오차는 x = 1로 갈수록 커지지만 르장드르 오차는 구간 전체에 고르게 퍼집니다. 모델: 내적 적분은 합성 심프슨(2000칸).
체비쇼프 전개와 계수 감소
몇 차까지 써야 하는가
르장드르 계수는 차수가 오를수록 줄어들었습니다(1.18,1.10,0.36,0.070,0.010,0.0011). 이 감소 속도를 보면 몇 차에서 멈춰야 원하는 정확도가 나오는지 알 수 있지 않을까요? 그리고 계수를 적분 없이 빠르게 구할 수는 없을까요?
가중 함수를 w(x)=1/1−x2로 바꾸면 또 하나의 직교 다항식열이 나옵니다. x=cosθ로 치환하면 이 가중치는 dx/1−x2=−dθ가 되어 사라지고, 직교 다항식은 놀랍도록 단순해집니다.
정의 7.9 (체비쇼프 다항식)Tk(cosθ)=coskθ로 정의되는 k차 다항식 Tk를 (제1종) 체비쇼프 다항식(Chebyshev polynomial)이라 한다. T0=1, T1=x, Tk+1=2xTk−Tk−1이고, ∫−11TjTk1−x2dx=0(j=k), =π(j=k=0), =π/2(j=k≥1)이다.
점화식은 삼각함수의 합 공식 cos(k+1)θ+cos(k−1)θ=2cosθcoskθ 그대로이고, 직교성은 ∫0πcosjθcoskθdθ=0 그대로입니다. 곧 체비쇼프 전개 f(x)=∑akTk(x)는 f(cosθ)의 코사인 푸리에 급수입니다. 그래서 계수는 체비쇼프 점 xj=cosN(j+1/2)π에서의 함숫값에 이산 코사인 변환을 하면 O(NlogN)에 얻어집니다(8장의 FFT). Tk는 [−1,1]에서 ∣Tk∣≤1이므로 꼬리를 잘라 낸 오차는 버린 계수의 합으로 바로 묶입니다.
f(x)−k=0∑nakTk(x)≤k=n+1∑∞∣ak∣.
정리 7.10 (매끄러움과 계수 감소)f의 체비쇼프 계수 ak에 대해
f,f′,…,f(ν−1)이 절대연속이고 f(ν)가 유계 변동 V를 가지면 ∣ak∣≤πk(k−1)⋯(k−ν)2V, 곧 ∣ak∣=O(k−ν−1).
f가 [−1,1]을 품는 베른슈타인 타원 Eρ(초점 ±1, 장반경과 단반경의 합 ρ>1) 안에서 해석적이고 ∣f∣≤M이면 ∣ak∣≤2Mρ−k, 곧 계수가 기하급수적으로 준다.
아이디어.ak=π2∫0πf(cosθ)coskθdθ를 부분적분할 때마다 1/k이 하나씩 나온다(푸리에 계수와 같은 원리). 해석적이면 적분 경로를 복소 평면으로 밀어 ρ−k를 얻는다. ∎
계수를 로그 눈금으로 그리면 함수의 성격이 그대로 보입니다. ex는 어디서나 해석적이라 계수가 1.27,1.13,0.27,0.044,0.0055,5.4×10−4,4.5×10−5,3.2×10−6으로 매 차수 열 배 가까이 줄고, 15차 근처에서 기계 엡실론에 닿습니다. 1/(1+25x2)은 x=±i/5에 극이 있어 타원이 좁고(ρ≈1.22) 감소가 느립니다. 5장의 룽게 함수가 체비쇼프 노드에서도 꽤 많은 점을 요구한 이유입니다. ∣x∣는 꺾인 점 때문에 k−2, 계단 함수는 k−1로 줄어듭니다. 이 계수의 꼴은 다음 장에서 푸리에 계수의 감소로 다시 만납니다.
잘린 체비쇼프 급수의 오차는 대체로 첫 번째 버린 항 an+1Tn+1(x)이 지배하고, Tn+1은 [−1,1]에서 +1과 −1을 n+2번 번갈아 찍는 함수입니다. 그래서 잘린 체비쇼프 급수의 오차 곡선은 거의 고른 진동을 합니다. ex의 3차 체비쇼프 절단은 최대 오차 6.07×10−3으로, 첫 버린 계수 a4=5.47×10−3과 거의 같습니다. 다음 절에서 이 "거의"를 "정확히"로 바꿉니다. 소프트웨어 Chebfun은 이 원리로 함수를 체비쇼프 계수가 기계 엡실론 아래로 떨어질 때까지 자동으로 전개해 숫자처럼 다룹니다.
SIMULATOR
체비쇼프 계수 막대: 매끄러움이 감소 속도를 정한다
f와 n차 체비쇼프 절단
|aₖ| (로그 축)
f(x)쓰는 계수 · 절단 급수버리는 계수오차(확대)
최대 오차—
|an+1|—
Σk>n |aₖ| (상한)—
감소 꼴—
해볼 것: ① eˣ에서 막대가 직선(기하급수)으로 떨어져 n ≈ 15에서 10⁻¹⁶ 바닥에 닿는 것을 보세요. ② |x|와 sign(x)를 비교하면 막대 끝이 각각 k⁻², k⁻¹ 기울기의 완만한 선입니다. 홀수 계수(|x|) 또는 짝수 계수(sign)는 대칭성 때문에 0입니다. ③ cos 10x는 n이 10을 넘을 때까지 계수가 줄지 않다가 그 뒤 급격히 떨어집니다. 진동을 표현하려면 진동수만큼의 차수가 먼저 필요합니다. 모델: 계수는 체비쇼프 점 256개에서의 이산 코사인 합.
최소최대 근사와 등진동: 레메즈 알고리즘
최악의 경우를 보장하라
수학 라이브러리의 exp는 "평균적으로" 정확해서는 안 됩니다. 어떤 입력에서든 오차가 정해진 한계 아래여야 합니다. 그러면 최소화할 것은 제곱 적분이 아니라 최대 오차∥f−p∥∞=maxx∈[a,b]∣f(x)−p(x)∣입니다. 이 최소화 문제는 미분해서 0으로 놓는 방법이 통하지 않습니다. 최댓값 함수는 매끄럽지 않기 때문입니다.
∥f−p∥∞을 최소화하는 p∗∈Pn을 최소최대 근사(minimax approximation) 또는 최량 균등 근사라 합니다. 연속 함수에 대해 존재하고 유일하며, 놀랍게도 오차 곡선의 모양만 보고 판정할 수 있습니다.
정리 7.11 (체비쇼프 등진동 정리)f가 [a,b]에서 연속일 때, p∈Pn이 최소최대 근사일 필요충분조건은 오차 e=f−p가 n+2개의 점 x0<x1<⋯<xn+1에서 크기 ∥e∥∞를 부호를 번갈아 가며 찍는 것이다:
e(xi)=(−1)is∥e∥∞,s=±1,i=0,…,n+1.
충분성의 핵심. 등진동하는 p보다 좋은 q가 있다면, q−p=ep−eq는 n+2개 점에서 ep와 같은 부호를 가진다(∣eq∣<∣ep∣이므로). 부호가 n+1번 바뀌니 q−p는 근이 n+1개 있는 n차 이하 다항식, 곧 0이다. 모순. ∎
등진동 정리에서 체비쇼프 다항식의 또 다른 얼굴이 나옵니다. 최고차 계수가 1인 n차 다항식 가운데 [−1,1]에서 최댓값이 가장 작은 것은 21−nTn이고 그 최댓값은 21−n입니다(xn을 n−1차 이하로 최소최대 근사한 오차가 21−nTn이고, 이것이 n+1개 점에서 등진동하기 때문). 5장의 체비쇼프 노드가 보간 오차의 ∏(x−xi)를 최소로 만든 이유가 바로 이것입니다(5장).
예제 7.6 (ex의 1차 최소최대 근사, [0,1])p(x)=c0+c1x를 구하라.
ex는 아래로 볼록하므로 오차 e(x)=ex−c0−c1x도 볼록이다. 등진동점 3개는 양 끝 0,1과 내부의 극점 x∗ 하나다.
1−c0=−(c1−c0−c1x∗)에서 c0=21(1+c1(1−x∗))=0.894067. 최대 오차 E=1−c0=0.105933.
비교: 연속 최소제곱 1차 근사 0.873127+1.690309x의 최대 오차는 0.154845. 최소제곱은 L2에서, 최소최대는 L∞에서 최선이다.
일반적인 경우에는 등진동점을 미리 알 수 없으므로 추측하고 고치기를 되풀이합니다. 이것이 레메즈 알고리즘(Remez exchange algorithm)입니다.
함수 레메즈(f, n, [a, b])
x₀ < … < x_{n+1} ← 처음 기준점 // 보통 체비쇼프 극점 cos(iπ/(n+1))repeat// n+2개 미지수 (c₀…cₙ, E)의 선형계: 기준점에서 정확히 등진동하게
c₀ + c₁xᵢ + … + cₙxᵢⁿ + (−1)ⁱ E = f(xᵢ), i = 0 … n+1
e(x) ← f(x) − p(x) // 촘촘한 격자에서 계산
새 기준점 ← e의 극값 중 부호가 번갈아 바뀌는 n+2개 (전역 최대 포함)
until max|e| ≈ |E| // 기준점에서의 높이 = 전체 최댓값반환 p, |E|
매 단계에서 ∣E∣는 최소최대 오차의 아래 한계(드 라 발레 푸생 정리), max∣e∣는 위 한계입니다. 두 값이 만나면 끝입니다. 매끄러운 함수에서는 이 간격이 2차로 줄어 몇 번 만에 수렴합니다. ex의 [−1,1] 3차 근사는 체비쇼프 극점에서 출발하면 첫 단계에 ∣E∣=5.474×10−3, max∣e∣=5.581×10−3, 둘째 단계에 두 값이 5.528×10−3에서 넷째 자리까지 일치하고, 셋째 단계에 배정밀도 수준으로 만납니다.
ex, [−1,1], 3차 근사
최대 오차
최소최대 대비
테일러(원점)
5.16×10⁻²
9.3배
등간격 4점 보간
9.98×10⁻³
1.81배
르장드르 최소제곱(L2 최선)
1.12×10⁻²
2.02배
체비쇼프 4점 보간
6.66×10⁻³
1.20배
체비쇼프 급수 절단
6.07×10⁻³
1.10배
최소최대(레메즈)
5.53×10⁻³
1
표가 실무의 교훈을 줍니다. 체비쇼프 절단이나 체비쇼프 보간은 계산이 훨씬 쉬운데도 최소최대보다 10~20%만 나쁩니다. 그래서 대부분의 응용에서는 체비쇼프 근사로 충분하고, 수학 라이브러리처럼 마지막 한 비트가 중요한 곳에서만 레메즈로 다듬습니다. 실제 라이브러리는 먼저 범위 축소(예: ex=2ker, ∣r∣≤21ln2)로 구간을 좁힌 뒤 그 작은 구간에서 낮은 차수의 최소최대 다항식(또는 유리 함수)을 호너 방법으로 계산합니다(4장).
SIMULATOR
레메즈 알고리즘 한 단계씩: 오차가 등진동할 때까지
처음 기준점
현재 오차 e(x)±E (기준점 높이)기준점체비쇼프 절단 오차
단계—
|E| (아래 한계)—
max|e| (위 한계)—
상대 간격—
단계
|E|
max|e|
(max|e| − |E|)/|E|
해볼 것: ① 등간격 출발에서 '레메즈 한 단계'를 누를 때마다 빨간 기준점이 오차 곡선의 봉우리로 옮겨 가고, 봉우리 높이가 주황 띠(±E)에 맞춰지는 것을 보세요. ② |x|나 룽게 함수는 수렴이 느리고 간격이 줄어드는 데 몇 단계가 더 걸립니다. ③ 체비쇼프 절단 오차를 겹치면 이미 거의 등진동하고, 최소최대보다 조금만 큰 것이 보입니다. 모델: 오차 극값은 3000칸 격자에서 찾고, 처음 기준점에는 작은 흔들림을 줍니다(대칭 함수 |x|, 룽게, sin 4x에서 선형계가 퇴화하지 않도록. eˣ의 체비쇼프 극점 출발은 흔들림 없이 본문 수치와 같습니다).
잡음 데이터는 보간하지 않고 과결정계 Ac≈y의 최소제곱 해로 맞춘다. 해는 y를 열공간에 직교 사영한 것이고, 조건은 정규 방정식 A⊤Ac^=A⊤y, 곧 A⊤r=0이다.
정규 방정식은 κ(A⊤A)=κ(A)2의 선형계를 풀어 자릿수를 두 배로 잃는다. 하우스홀더 QR로 Rc^=Q⊤y를 풀면 후방 안정하고, 비용은 약 두 배다. 기저를 [−1,1]의 직교 다항식으로 바꾸면 κ(A) 자체가 작아진다.
차수를 올리면 학습 오차는 항상 줄지만 검증 오차는 U자를 그린다. 차수는 검증 오차(또는 교차 검증)로 고르고, 학습 오차가 잡음 수준 σ보다 훨씬 작으면 과적합이다.
측정 정밀도가 다르면 가중치 wi=1/σi2의 가중 최소제곱, 이상치가 있으면 후버 손실이나 L1을 IRLS로 푼다. 큰 잔차의 가중치를 δ/∣r∣로 깎는 반복이다.
함수의 연속 최소제곱은 내적 ∫fgw에 대한 사영이다. 단항식 기저의 정규 행렬은 힐베르트 행렬(κ≈1013, n=10)이므로 직교 다항식을 쓴다. 르장드르(w=1), 체비쇼프(w=1/1−x2)는 세 항 점화식을 만족하고 계수가 ck=⟨f,ϕk⟩/⟨ϕk,ϕk⟩로 따로 구해진다.
Tk(cosθ)=coskθ이므로 체비쇼프 전개는 코사인 급수이고 계수는 FFT로 구한다. 해석적 함수는 계수가 ρ−k로, ν번 미분 가능한 함수는 k−ν−1 정도로 준다. 절단 오차 ≤∑k>n∣ak∣.
최소최대 근사는 오차가 n+2개 점에서 같은 크기로 부호를 바꾸는 것(등진동)으로 판정한다. 레메즈 알고리즘은 기준점에서 등진동하도록 풀고, 오차의 봉우리로 기준점을 옮기기를 되풀이한다. 체비쇼프 근사는 최소최대에 매우 가깝다.
확인 퀴즈
Q1. 점 (0,1),(1,2),(2,4),(3,5)에 최소제곱 직선을 맞추었다. 잔차의 합 ∑ri는?
상수항이 있는 모형에서는 첫째 열 (1, …, 1)이 잔차에 수직이어야 하므로 ∑ri=0이 항상 성립한다. 예제 7.1의 잔차 (0.1, −0.3, 0.3, −0.1)의 합도 0이다. 0.2는 잔차 제곱합이다.
Q2. κ(A)=106인 최소제곱 문제를 배정밀도(ε≈10−16)의 정규 방정식으로 풀면 계수의 상대 오차는 대략 어느 정도까지 커질 수 있는가?
κ(A⊤A)=κ(A)2=1012이므로 오차는 1012×10−16=10−4 정도까지 커질 수 있다. QR을 쓰면 대략 κ(A)ε=10−10 수준이다.