대부분의 식은 어렵다. 그 접선은 쉽다.
“작은 에서 “라고, “여기 근처에선 선형적으로 자란다”라고, “1차 근사로는”이라고 말할 때마다 우리는
아래 위젯에서 a (기준점)와 x (평가점)를 끌어보자. 일 때 의 접선은 정확히 — 작은 각 근사, 그림으로. x를 에서 멀어지게 끌면 오차가 거리의 제곱으로 자란다.
왜 근사하는가
세상을 움직이는 함수는 대부분 비선형이다 — 진자의 , 트랜지스터의 지수형 전류, 중력의 , 신경망의 softmax. 닫힌 형태로 풀 수 있는 경우는 거의 없다. 그래서 우리는 통제된 방식으로 정확도를 일부 내준다 — 관심 있는 점을 하나 잡고, 그 점 근처에서 비선형 함수를 가장 가까운 선형 함수로 갈아끼우고, “충분히 가까운” 영역에서만 답이 맞다고 받아들인다.
한 점에서의 접선
매끄러운 점 에서 함수 는 값 와 기울기 를 동시에 가진다 (미분 모듈에서 본 그대로). 를 지나면서 그 기울기를 가지는 유일한 직선이 바로
L_a(x) = f(a) + f'(a) · (x − a)
이것이 에서의 의 선형화다. 원래 함수와 두 가지 면에서 일치한다 — 기준점에서 값이 같고 (), 기준점에서 기울기도 같다 (). 두 조건을 동시에 만족하는 직선은 단 하나뿐이다. 위젯의 갈색 점선이 바로 그 직선이다. 를 에서 선형화하면 .
import math
# Linearization of f at a: L_a(x) = f(a) + f'(a) · (x − a).
# Choose anchor a, compare with the true value over a range of x.
def linearize(f, fprime, a):
fa, slope = f(a), fprime(a)
return lambda x: fa + slope * (x - a)
L0 = linearize(math.sin, math.cos, a=0) # tangent at 0 is y = x
[(round(x, 2), round(math.sin(x), 4), round(L0(x), 4))
for x in (0.05, 0.2, 0.5, 1.0)]
# → [(0.05, 0.0500, 0.0500), # < 0.0001 error
# (0.2, 0.1987, 0.2000), # 0.001
# (0.5, 0.4794, 0.5000), # 0.02
# (1.0, 0.8415, 1.0000)] # 0.16 — visibly bad오차는 제곱으로 자란다
매끄러운 함수에서 오차 는 편차 의 이차로 움직인다. 편차를 두 배로 늘리면 오차는 약 네 배가 되고, 절반으로 줄이면 오차는 1/4이 된다. 선형이 아니라 이차다 — 바로 이 점이 선형화를 유용하게 만든다. 기준점에 가까워질수록 격차가 매우 빠르게 좁혀진다.
구체적으로 의 근방에서는 선두 오차항이 이다. 그래서 비율은 일정하지 않고 에 따라 천천히 변한다 — 이 경우엔 삼차 항이 지배한다. 다른 함수들(, , )은 기준점에서 2차 도함수가 0이 아니므로 비율이 일정하다. 어느 쪽이든 경험칙은 똑같다 — “작은” 편차에서는 선형 근사가 잘 맞고, “큰” 편차에서는 빠르게 어긋난다.
# Error scales as (x − a)², not as (x − a). Quadratic, not linear.
# Doubling the deviation quadruples the error.
def error_ratio(f, L, a, x):
return (f(x) - L(x)) / (x - a) ** 2 if x != a else None
[error_ratio(math.sin, L0, 0, x) for x in (0.05, 0.1, 0.2, 0.4, 0.8)]
# → roughly all near −0.166 (≈ −1/6)
# The leading Taylor remainder for sin near 0 is −x³/6, so dividing by
# (x − a)² gives roughly −x/6, drifting slowly with x. The shape "error
# = constant·deviation²" is the dominant term in every linearization;
# all you have to read off is the constant.이게 어디에 나타나나 — 한 도구, 세 필러
선형화는 첫 번째 정직한 거짓말이다 — 굽은 곡선을, 그 부근에서만큼은 진실을 말해 주는 직선으로 갈아끼우는 일. 그 거짓말은 필러마다 다른 이름을 쓰고 등장하지만, 밑바탕의 수학은 똑같다.
물리 : sin θ ≈ θ — 0 근처 ML : 캘리브레이션 곡선 ≈ 한 구간에서의 접선 금융 : ΔPV ≈ -D · PV · Δr — 현재 금리 근처 (채권 듀레이션)
진자시계는 단 하나의 선형화에 기댄다 — 작은 각도에서 . 비선형 ODE 가 로 바뀌면서 닫힌 사인꼴 해와 일정 주기 진동이 따라 나온다. 17세기 시계 기술 전부가 그 거짓말이 통하는 작은 각 영역 안에서만 작동했고, 페이지의 위젯이 그 영역을 눈에 보이게 만든다.
감쇠 진동자는 그 거짓말을 한 걸음 더 밀어붙인다 — 는 마찰과 외부 구동이 있는 모든 진동계의 작은 진폭 선형화다. 자동차 서스펜션, 건물 흔들림, RLC 회로, 유리잔을 깨는 성대 — 선형화가 통하는 영역 안에서 같은 한 식이 그 모두를 돌린다.
모델 캘리브레이션은 모델이 만든 곡선에 같은 수를 쓴다. 신뢰도 다이어그램의 막대를 클릭하면 위젯이 그 구간 중심에서 캘리브레이션 곡선의 접선을 그린다 — 국소적으로 . 기울기와 절편, 이 두 수가 그 구간 근처에서 신뢰도와 빈도 사이의 격차를 설명한다. 기울기 ≈ 1이면 곡선이 그곳에서 대각선과 평행하다 (상수 이동), 기울기 ≠ 1이면 격차가 신뢰도에 따라 달라진다 — 전역 회전(온도 스케일링)으로 바로잡을 수 있다는 뜻이다. 같은 접선 도구로 전혀 다른 일을 하는 셈이다.
현재가치 — 채권 시장의 실무 근사. PV는 금리 의 비선형 함수이지만 (의 적분), 작은 금리 변동에 대해서는 로 선형화된다. 는 수정 듀레이션. 트레이더는 금리가 한 틱 움직일 때마다 적분을 다시 풀지 않고 듀레이션을 인용한다. 근사는 작은 Δr 이웃에서 정직하고, 그 바깥에서는 같은 페이지의 컨벡시티 보정 (2차 항) 이 듀레이션이 놓치는 부분을 잡는다. 선형화 먼저, 2차 보정 그 다음 — 표준 패턴.
같은 기계가 뉴턴 방법(선형화하고, 직선의 영점을 찾고, 반복)과 경사하강법도 굴린다. 1차 테일러 근사로 이고, 가 충분히 작아 선형화를 믿을 만하면 손실이 줄어든다. 천장을 넘는 순간 선형화는 거짓말이 되고, 그 페이지 위젯에서 일 때 보이는 폭발이 정확히 그 경계다. 뉴턴, 경사하강법, 진자, 캘리브레이션, 채권 듀레이션 — 모두 같은 한 스텝을 굴린다 — 접선이 정직한 동안 곡선을 그 접선으로 갈아끼우는 일.
# Newton's method: solve f(x) = 0 by repeatedly linearizing at the
# current guess, then finding where THAT line crosses zero.
def newton(f, fprime, x0, steps=5):
x = x0
for _ in range(steps):
x = x - f(x) / fprime(x) # the root of the tangent line
return x
# Fixed point of cos: solve cos(x) − x = 0 starting near 0.5.
newton(lambda x: math.cos(x) - x,
lambda x: -math.sin(x) - 1,
x0=0.5)
# → 0.7390851332151607 (the Dottie number)
#
# Each Newton step IS a linearization step. Gradient descent is the
# same recipe applied to ∇L instead of f, with a fixed-size step (η)
# instead of the exact root of the tangent.함정 — 어디까지나 '거의'
모든 선형화는 기준점 근방을 벗어나는 순간 틀린다. 이 도구를 제대로 쓴다는 건 곧 그 근방의 경계를 재고 지키는 규율이다.
- “선형화가 잘 된다”는 슬로건이 아니라, 선형 답이 충분히 좋게 통하는 편차의 한계를 명시할 것.
- 다음 차수 항을 계산하거나 어림해서 그 항이 충분히 작은지(또는 부호가 해를 끼치지 않는지) 확인할 것.
- 설계 단계에서 영역 안에 머물 것 — 시계 탈진기는 호를 작게 잡고, ML 훈련 스케줄은 학습률을 줄이며, 제어 시스템은 동작점 근처를 벗어나지 않고, 회로 설계자는 트랜지스터를 선형 영역에 바이어스한다. 머물 수 없을 땐 더 높은 차수의 방법이나 비선형 해법으로 넘어가고, 그 비용을 감수할 것.
“거짓말이 통하는 영역”이라는 표현은 진자시계 페이지가 끝맺는 바로 그 문장이다. 우연이 아니라, 이 모듈이 이름 붙인 패턴이다. 모든 응용 수학 분야에는 그런 영역의 목록이 따로 있고, 어디까지 기댈 수 있는지 정확히 아는 사람들이 그 목록을 관리한다.
접선은 기울기까지는 정확히 맞춰 주는 가장 값싼 답이다. 선형화는 어려운 문제를 쉬운 문제로 바꾼다 — 어떤 영역 안에서는 맞고, 그 밖에서는 언제나 틀린다. 규율은 그 영역에 있다.
를 에서 선형화하라. 그것으로 을 어림하라. 실제값 (소수 3자리)은 . 오차는? 그것이 의 약 몇 분의 1인가?
를 에서 선형화하라. 그것으로 를 어림하라. 실제값은 약 다. (실제값 )와도 비교해 보자. 편차가 커질수록 상대 오차는 어떻게 변하는가?
어떤 비선형 에 대해 을 풀고 싶다고 하자. 현재 추측이 이다. 에서 를 선형화한 뒤 그 직선이 0과 만나는 점을 다음 추측으로 삼으면, 다음 추측이 이 됨을 보여라. 이 반복이 깨지는 경우는 언제인가?
손실의 1차 테일러 근사 는 가 작을 때만 정직하다. 경사하강법은 을 고른다. 2차 항을 활용해, /ml/gradient-descent의 토이 이차 손실에서 의 천장이 에 있는 이유를 논증하라.