다변수 미분 — 기울기에서 Jacobian, Hessian까지
Calculus 4/5. 입력이 벡터가 되는 순간 "기울기 하나"로는 부족해집니다. 미분을 "최적 선형 근사"로 정의해 두었기 때문에 확장은 자연스럽습니다: 선형 근사가 수에서 벡터(gradient)로, 벡터에서 행렬(Jacobian)로 승격될 뿐입니다. 딥러닝의 모든 미분이 이 페이지의 언어로 쓰입니다.
편미분 (Partial Derivative)
f : R n → R f: \mathbb{R}^n \to \mathbb{R} f : R n → R 에서, 다른 변수를 고정하고 x i x_i x i 방향으로만 미분한 것:
∂ f ∂ x i ( a ) = lim h → 0 f ( a + h e i ) − f ( a ) h \frac{\partial f}{\partial x_i}(\mathbf{a}) = \lim_{h \to 0} \frac{f(\mathbf{a} + h\,\mathbf{e}_i) - f(\mathbf{a})}{h} ∂ x i ∂ f ( a ) = h → 0 lim h f ( a + h e i ) − f ( a )
편미분은 좌표축 방향의 단면 기울기일 뿐입니다. 모든 편미분이 존재해도 함수가 "미분 가능"하지 않을 수 있다 는 점이 일변수와 다릅니다 — 축 방향만 착해 보이고 대각 방향으로 불연속인 함수가 존재합니다. 그래서 다변수의 진짜 정의는 선형 근사로 갑니다.
전미분 가능성 = 선형 근사의 존재
f : R n → R m f: \mathbb{R}^n \to \mathbb{R}^m f : R n → R m 이 a \mathbf{a} a 에서 미분 가능하다는 것은, 선형 사상(행렬) J J J 가 존재해서:
f ( a + h ) = f ( a ) + J h + o ( ∥ h ∥ ) f(\mathbf{a} + \mathbf{h}) = f(\mathbf{a}) + J\,\mathbf{h} + o(\|\mathbf{h}\|) f ( a + h ) = f ( a ) + J h + o ( ∥ h ∥ )
이 J ∈ R m × n J \in \mathbb{R}^{m \times n} J ∈ R m × n 이 Jacobian 행렬 이며, 성분은 편미분입니다:
J i j = ∂ f i ∂ x j J = ( ∂ f 1 ∂ x 1 ⋯ ∂ f 1 ∂ x n ⋮ ⋱ ⋮ ∂ f m ∂ x 1 ⋯ ∂ f m ∂ x n ) J_{ij} = \frac{\partial f_i}{\partial x_j}
\qquad
J = \begin{pmatrix}
\frac{\partial f_1}{\partial x_1} & \cdots & \frac{\partial f_1}{\partial x_n} \\
\vdots & \ddots & \vdots \\
\frac{\partial f_m}{\partial x_1} & \cdots & \frac{\partial f_m}{\partial x_n}
\end{pmatrix} J ij = ∂ x j ∂ f i J = ∂ x 1 ∂ f 1 ⋮ ∂ x 1 ∂ f m ⋯ ⋱ ⋯ ∂ x n ∂ f 1 ⋮ ∂ x n ∂ f m
충분조건: 편미분이 모두 존재하고 연속이면(C 1 C^1 C 1 ) 미분 가능합니다. 실무에서 다루는 함수 대부분이 여기 해당합니다.
Gradient — 출력이 스칼라인 경우
m = 1 m = 1 m = 1 이면 Jacobian은 행벡터가 되고, 그 전치를 gradient 라 부릅니다:
∇ f = ( ∂ f ∂ x 1 , … , ∂ f ∂ x n ) ⊤ f ( a + h ) ≈ f ( a ) + ∇ f ( a ) ⊤ h \nabla f = \left( \frac{\partial f}{\partial x_1}, \dots, \frac{\partial f}{\partial x_n} \right)^{\!\top}
\qquad
f(\mathbf{a} + \mathbf{h}) \approx f(\mathbf{a}) + \nabla f(\mathbf{a})^{\top} \mathbf{h} ∇ f = ( ∂ x 1 ∂ f , … , ∂ x n ∂ f ) ⊤ f ( a + h ) ≈ f ( a ) + ∇ f ( a ) ⊤ h
방향도함수와 최급상승
단위벡터 u \mathbf{u} u 방향의 변화율(방향도함수)은:
D u f = ∇ f ⊤ u = ∥ ∇ f ∥ cos θ D_{\mathbf{u}} f = \nabla f^{\top} \mathbf{u} = \|\nabla f\| \cos\theta D u f = ∇ f ⊤ u = ∥∇ f ∥ cos θ
Cauchy–Schwarz에 의해 이 값은 u \mathbf{u} u 가 ∇ f \nabla f ∇ f 방향일 때 최대입니다. 즉:
gradient는 함수가 가장 가파르게 증가하는 방향 이고, 크기는 그 방향의 기울기입니다.
등고선(level set)에 항상 수직입니다.
따라서 − ∇ f -\nabla f − ∇ f 방향으로 이동하는 것이 국소적으로 가장 빠른 감소 — 경사하강법 (x ← x − η ∇ f \mathbf{x} \leftarrow \mathbf{x} - \eta \nabla f x ← x − η ∇ f )의 존재 이유입니다.
다변수 연쇄법칙 = Jacobian의 곱
f : R n → R m f: \mathbb{R}^n \to \mathbb{R}^m f : R n → R m , g : R m → R k g: \mathbb{R}^m \to \mathbb{R}^k g : R m → R k 일 때:
J g ∘ f ( x ) = J g ( f ( x ) ) ⋅ J f ( x ) J_{g \circ f}(\mathbf{x}) = J_g\big(f(\mathbf{x})\big) \cdot J_f(\mathbf{x}) J g ∘ f ( x ) = J g ( f ( x ) ) ⋅ J f ( x )
일변수에서 "기울기의 곱"이던 것이 행렬 곱 으로 승격됐을 뿐, 내용은 동일합니다("선형 근사의 합성은 선형 사상의 곱"). 신경망 L = ℓ ( f L ( ⋯ f 2 ( f 1 ( x ) ) ) ) L = \ell(f_L(\cdots f_2(f_1(\mathbf{x})))) L = ℓ ( f L ( ⋯ f 2 ( f 1 ( x )))) 의 gradient가 층별 Jacobian의 곱이 되는 것이 정확히 이 공식이고, 곱하는 순서 (왼쪽부터 vs 오른쪽부터)가 forward/reverse 모드 자동미분 의 차이를 만듭니다.
스칼라 경로로 풀어 쓰면 익숙한 꼴이 됩니다. z = g ( y 1 , … , y m ) z = g(y_1, \dots, y_m) z = g ( y 1 , … , y m ) , y j = f j ( x ) y_j = f_j(x) y j = f j ( x ) 일 때:
d z d x = ∑ j = 1 m ∂ z ∂ y j d y j d x \frac{dz}{dx} = \sum_{j=1}^{m} \frac{\partial z}{\partial y_j} \frac{d y_j}{dx} d x d z = j = 1 ∑ m ∂ y j ∂ z d x d y j
"모든 경로의 기여를 더한다" — 계산 그래프에서 한 노드로 들어오는 gradient를 전부 합산하는 역전파 규칙이 이 식입니다.
Hessian — 2차 정보
f : R n → R f: \mathbb{R}^n \to \mathbb{R} f : R n → R 의 2계 편미분을 모은 행렬:
H i j = ∂ 2 f ∂ x i ∂ x j H_{ij} = \frac{\partial^2 f}{\partial x_i\, \partial x_j} H ij = ∂ x i ∂ x j ∂ 2 f
Schwarz 정리 : 2계 편미분이 연속이면 H i j = H j i H_{ij} = H_{ji} H ij = H j i — Hessian은 대칭 행렬입니다.
2차 테일러 전개:
f ( x + h ) ≈ f ( x ) + ∇ f ⊤ h + 1 2 h ⊤ H h f(\mathbf{x} + \mathbf{h}) \approx f(\mathbf{x}) + \nabla f^{\top} \mathbf{h} + \frac{1}{2} \mathbf{h}^{\top} H\, \mathbf{h} f ( x + h ) ≈ f ( x ) + ∇ f ⊤ h + 2 1 h ⊤ H h
임계점(∇ f = 0 \nabla f = 0 ∇ f = 0 )에서의 판정: H ≻ 0 H \succ 0 H ≻ 0 (양의 정부호)이면 극소, H ≺ 0 H \prec 0 H ≺ 0 이면 극대, 고윳값 부호가 섞이면 안장점(saddle point) . 고차원 손실 지형에서는 극대·극소보다 안장점이 압도적으로 많다는 것이 알려져 있습니다.
Hessian의 고윳값 비율(조건수)이 크면 손실 지형이 좁은 골짜기가 되어 경사하강이 지그재그로 느려집니다 — 전처리(preconditioning)·모멘텀·Adam이 완화하려는 문제입니다.
통계 연결: 로그 가능도의 Hessian 기댓값에 음부호를 붙인 것이 Fisher 정보 행렬 이고, Laplace 근사 에서 사후분포의 공분산 역행렬 역할을 합니다.
행렬 미분 치트시트
ML 논문에서 반복 등장하는 항등식입니다. (a \mathbf{a} a , b \mathbf{b} b 는 상수 벡터, A A A 는 상수 행렬, 분모 레이아웃)
f ( x ) f(\mathbf{x}) f ( x ) ∇ f \nabla f ∇ f 비고 a ⊤ x \mathbf{a}^{\top}\mathbf{x} a ⊤ x a \mathbf{a} a 선형항 x ⊤ A x \mathbf{x}^{\top} A \mathbf{x} x ⊤ A x ( A + A ⊤ ) x (A + A^{\top})\,\mathbf{x} ( A + A ⊤ ) x A A A 대칭이면 2 A x 2A\mathbf{x} 2 A x ∥ x ∥ 2 = x ⊤ x \|\mathbf{x}\|^2 = \mathbf{x}^{\top}\mathbf{x} ∥ x ∥ 2 = x ⊤ x 2 x 2\mathbf{x} 2 x 위의 특수형 (A = I A = I A = I ) ∥ A x − b ∥ 2 \|A\mathbf{x} - \mathbf{b}\|^2 ∥ A x − b ∥ 2 2 A ⊤ ( A x − b ) 2A^{\top}(A\mathbf{x} - \mathbf{b}) 2 A ⊤ ( A x − b ) 최소제곱 ln det A \ln \det A ln det A ∂ / ∂ A = ( A − 1 ) ⊤ \partial/\partial A = (A^{-1})^{\top} ∂ / ∂ A = ( A − 1 ) ⊤ 가우시안 로그가능도
예제 — 최소제곱의 정규방정식 : ∇ ∥ A x − b ∥ 2 = 0 \nabla \|A\mathbf{x} - \mathbf{b}\|^2 = 0 ∇∥ A x − b ∥ 2 = 0 을 풀면
A ⊤ A x = A ⊤ b A^{\top} A\, \mathbf{x} = A^{\top} \mathbf{b} A ⊤ A x = A ⊤ b
선형 회귀의 닫힌형 해가 gradient 계산 한 번에서 나옵니다. 다변량 가우시안 의 MLE(평균·공분산 추정)도 같은 방식 — ln det \ln\det ln det 항등식 포함 — 으로 유도됩니다.
다변수 미분의 정의는 일변수와 동일하게 "최적 선형 근사": 스칼라 출력이면 gradient, 벡터 출력이면 Jacobian.
편미분 존재 ≠ 미분 가능. C 1 C^1 C 1 이면 안전합니다.
gradient는 최급상승 방향(등고선에 수직) — 경사하강법의 근거.
연쇄법칙은 Jacobian 행렬의 곱이고, 곱 순서 선택이 자동미분의 forward/reverse 모드가 됩니다.
Hessian은 볼록성·안장점·조건수·Fisher 정보를 판정하는 2차 정보입니다.
다음: 미분과 최적화, 자동미분