본문으로 건너뛰기

미분과 최적화, 자동미분 — 기울기로 배우는 기계

Calculus 5/5. 앞 4편의 도구를 조립합니다. "미분계수 = 0"이라는 조건이 왜 최적화의 출발점인지, 경사하강법이 왜 작동하는지(테일러 전개), 그리고 딥러닝 프레임워크가 gradient를 어떻게 오차 없이 계산하는지(자동미분 = 연쇄법칙의 체계적 적용)까지.

1차 조건 — 페르마의 정리

ff 가 내부점 xx^\ast 에서 극값을 가지고 미분 가능하면:

f(x)=0(다변수: f(x)=0)f'(x^\ast) = 0 \qquad \text{(다변수: } \nabla f(\mathbf{x}^\ast) = \mathbf{0}\text{)}

증명 직관: f(x)>0f'(x^\ast) > 0 이면 오른쪽으로 조금 가면 더 커지고 왼쪽으로 가면 더 작아지므로 극값일 수 없습니다. 기울기가 남아 있는 한 개선 여지가 있다 — 최적화 알고리즘 전체를 관통하는 원리입니다.

주의: 이 조건은 필요조건일 뿐입니다. f(x)=x3f(x) = x^3x=0x = 0 처럼 극값이 아닌 임계점(변곡·안장)이 있고, x|x| 처럼 미분 불가능한 점의 극값은 잡아내지 못하며, 구간 끝점도 별도 확인해야 합니다.

2차 조건

임계점에서 2차 테일러 전개의 1차항이 사라지므로 2차항이 운명을 결정합니다:

f(x+h)f(x)+12hHhf(\mathbf{x}^\ast + \mathbf{h}) \approx f(\mathbf{x}^\ast) + \frac{1}{2}\, \mathbf{h}^{\top} H\, \mathbf{h}
Hessian HH판정
H0H \succ 0 (모든 고윳값 양수)극소
H0H \prec 0 (모든 고윳값 음수)극대
고윳값 부호 혼재안장점
반정부호(0 고윳값 포함)판정 불가 — 고차항 확인 필요

볼록성 — "국소 = 전역"이 성립하는 세계

ff볼록(convex) 이라는 것은 임의의 두 점을 잇는 선분이 그래프 위에 있다는 것:

f(λx+(1λ)y)λf(x)+(1λ)f(y)(0λ1)f\big(\lambda x + (1-\lambda) y\big) \le \lambda f(x) + (1-\lambda) f(y) \qquad (0 \le \lambda \le 1)

미분 가능하면 동치 조건들이 있습니다:

  • 1차: f(y)f(x)+f(x)(yx)f(y) \ge f(x) + \nabla f(x)^{\top}(y - x)접선(접평면)이 항상 그래프 아래.
  • 2차: f0f'' \ge 0 (다변수: H0H \succeq 0 어디서나).

볼록 함수에서는 모든 임계점이 전역 최솟값입니다. 1차 조건에 f(x)=0\nabla f(x^\ast) = 0 을 넣으면 f(y)f(x)f(y) \ge f(x^\ast) 가 모든 yy 에 대해 즉시 나옵니다. 최소제곱, 로지스틱 회귀(크로스 엔트로피), SVM이 볼록이라 "학습이 잘 된다는 보장"이 있고, 심층 신경망은 비볼록이라 보장 대신 실험적 성질(안장점 탈출, 과매개변수화)에 기댑니다.

경사하강법 (Gradient Descent)

xt+1=xtηf(xt)\mathbf{x}_{t+1} = \mathbf{x}_t - \eta\, \nabla f(\mathbf{x}_t)

왜 작동하는가 — 테일러로 한 줄 증명: ffLL-smooth(f(x)f(y)Lxy\|\nabla f(x) - \nabla f(y)\| \le L\|x-y\|, MVT의 Lipschitz 통제)이면

f(xt+1)f(xt)η(1Lη2)f(xt)2f(\mathbf{x}_{t+1}) \le f(\mathbf{x}_t) - \eta \Big(1 - \frac{L\eta}{2}\Big) \|\nabla f(\mathbf{x}_t)\|^2

η<2/L\eta < 2/L 이면 괄호가 양수가 되어 gradient가 0이 아닌 한 매 스텝 손실이 감소합니다. 학습률을 너무 키우면 발산하는 이유(2차항이 1차항을 이김)와, η=1/L\eta = 1/L 근처가 안전한 이유가 이 부등식 하나에 다 들어 있습니다.

변형들은 전부 "gradient를 어떻게 가공하느냐"의 차이입니다:

  • SGD: 전체 데이터 대신 미니배치로 f\nabla f 를 불편추정 — LLN이 평균의 수렴을 보장.
  • 모멘텀: gradient의 지수이동평균으로 좁은 골짜기의 지그재그 상쇄.
  • Adam: 좌표별로 gradient 2차 모멘트로 스케일 조정 — Hessian 조건수 문제의 값싼 대증요법.

Newton법 — 2차 정보 사용

2차 전개를 최소화하는 스텝을 그대로 쓰면:

xt+1=xtH1f(xt)\mathbf{x}_{t+1} = \mathbf{x}_t - H^{-1} \nabla f(\mathbf{x}_t)
  • 최적점 근처에서 2차 수렴(자릿수가 스텝마다 배로 늘어남) — 경사하강의 선형 수렴보다 압도적으로 빠릅니다.
  • 대가: HH 계산·저장 O(n2)O(n^2), 역행렬 O(n3)O(n^3). 파라미터가 수백만이면 불가능하므로, 근사하는 quasi-Newton(L-BFGS)이나 대각 근사(Adam 계열)를 씁니다.
  • 통계에서는 로그 가능도에 Newton법을 쓰는 것이 Fisher scoring — MLE 수치 계산의 고전입니다.

자동미분 (Automatic Differentiation)

gradient를 얻는 세 가지 방법의 비교:

방법원리문제점
수치 미분f(x+h)f(xh)2h\frac{f(x+h)-f(x-h)}{2h}절단·반올림 오차 트레이드오프, nn 개 편미분에 2n2n 회 평가
기호 미분수식을 수식으로 변환식 팽창(expression swell), 제어 흐름 처리 곤란
자동미분연쇄법칙을 값에 적용기계 정밀도로 정확, 프로그램 그대로 미분

자동미분의 핵심: 모든 프로그램은 기본 연산(+,×,exp,+, \times, \exp, \dots)의 합성이므로, 각 연산의 도함수를 알면 연쇄법칙으로 전체의 도함수를 정확하게 조립할 수 있습니다. 근사가 아닙니다.

Forward 모드 vs Reverse 모드

f:RnRmf: \mathbb{R}^n \to \mathbb{R}^m 의 Jacobian 곱 JLJ2J1J_L \cdots J_2 J_1어느 쪽부터 곱느냐의 선택입니다:

  • Forward 모드: 입력에서 출력으로, JvJ \cdot \mathbf{v} (Jacobian-vector product)를 전파. 한 번의 통과로 입력 1개 방향의 미분을 얻음 → 비용 n\propto n. nn 이 작을 때 유리.
  • Reverse 모드: 출력에서 입력으로, vJ\mathbf{v}^{\top} J (vector-Jacobian product)를 역전파. 한 번의 통과로 출력 1개에 대한 모든 입력의 gradient를 얻음 → 비용 m\propto m.

딥러닝은 n=n = 파라미터 수백만수십억, m=1m = 1 (스칼라 손실)이므로 reverse 모드가 유일한 선택이고, 그것이 역전파(backpropagation) 입니다. 손실 하나의 full gradient를 forward 계산의 상수배(약 23배) 비용으로 얻습니다. 대가는 중간 활성값을 역방향 통과까지 저장해야 하는 메모리 — gradient checkpointing이 이 트레이드오프를 다시 계산 쪽으로 되돌리는 기법입니다.

역전파를 손으로 한 번

f(x,y)=(x+y)x2f(x, y) = (x + y) \cdot x^2, 점 (x,y)=(2,3)(x, y) = (2, 3):

전방 통과: a=x+y=5a = x + y = 5, b=x2=4b = x^2 = 4, f=ab=20f = ab = 20.

역방향 통과(vˉ=f/v\bar{v} = \partial f / \partial v):

fˉ=1,aˉ=fˉb=4,bˉ=fˉa=5\bar{f} = 1, \quad \bar{a} = \bar{f} \cdot b = 4, \quad \bar{b} = \bar{f} \cdot a = 5 xˉ=aˉax+bˉbx=41+52x=24,yˉ=aˉ1=4\bar{x} = \bar{a} \cdot \frac{\partial a}{\partial x} + \bar{b} \cdot \frac{\partial b}{\partial x} = 4 \cdot 1 + 5 \cdot 2x = 24, \qquad \bar{y} = \bar{a} \cdot 1 = 4

xx 로 들어오는 두 경로(합 노드, 제곱 노드)의 기여가 합산되는 것이 다변수 연쇄법칙의 "모든 경로의 합" 규칙입니다. 검산: f=x3+x2yf = x^3 + x^2 y, f/x=3x2+2xy=12+12=24\partial f/\partial x = 3x^2 + 2xy = 12 + 12 = 24. ✓ (문서상 검산이며 실제 프레임워크에서는 이 역할을 gradient checking — 수치 미분과의 대조 — 이 수행합니다.)

미분 불가능 지점의 실무 처리

ReLU(x=0x=0), x|x|, max-pooling 경계처럼 딥러닝 함수는 미분 불가능 점 투성이입니다. 실무가 굴러가는 이유:

  • 볼록 함수에는 열미분(subgradient) — 접선 대신 "그래프 아래를 지나는 직선들의 기울기 집합" — 이 항상 존재하고, 아무 원소나 써도 수렴 이론이 성립합니다.
  • 미분 불가능 점은 측도 0 집합이라 연속 분포의 입력이 정확히 그 점에 떨어질 확률이 0입니다.
  • 프레임워크는 관례적으로 한 값을 고정합니다(예: ReLU'(0) = 0).

요약

  • 1차 조건 f=0\nabla f = 0 은 필요조건, 2차 조건(Hessian 정부호성)이 극소/극대/안장을 판별합니다.
  • 볼록성은 "국소 최솟값 = 전역 최솟값"을 보장하는 구조이며, 1차·2차 동치 조건으로 판정합니다.
  • 경사하강법의 수렴은 테일러 부등식 한 줄에서 나오고, 학습률 상한 2/L2/L 도 거기서 읽힙니다.
  • 자동미분은 근사가 아니라 연쇄법칙의 정확한 조립이며, 손실이 스칼라인 딥러닝에서는 reverse 모드(역전파)가 비용상 유일한 선택입니다.

시리즈 전체 목차: Math:: 인덱스