PyTorch의 loss.backward()는 단 한 줄이다. 그 한 줄이 수십 개의 레이어를 타고 올라가며 수백만 개의 편미분을 계산한다. 그런데 “편미분의 모음”인 gradient만으로는 충분하지 않다. 편미분이 모두 존재해도 전미분이 존재하지 않는 함수가 있다. 역전파가 올바르게 작동하려면 왜 전미분이 필요한가?
편미분과 전미분의 간극
편미분 ∂f/∂xi는 하나의 축 방향으로만 본 단면 경사다. gradient ∇f=(∂f/∂x1,…,∂f/∂xn)는 그 편미분들의 나열이다. 문제는 여기서 시작된다.
f(x,y)=⎩⎨⎧x2+y2x2y0(x,y)=(0,0)(x,y)=(0,0)
이 함수는 (0,0)에서 두 편미분이 모두 0으로 존재한다. ∇f(0,0)=(0,0)이다. 그러나 방향 v=(cosθ,sinθ)로 방향도함수를 계산하면:
Dvf(0,0)=cos2θsinθ
이것은 ∇f⋅v=0과 다르다. 편미분이 모두 존재해도 Dvf=∇f⋅v는 성립하지 않는다. 전미분이 존재할 때만 이 등식이 보장된다.
정리 1
· 전미분과 방향도함수의 관계
f:Rn→R이 점 a에서 전미분가능이면, 모든 단위벡터 v에 대해:
Dvf(a)=∇f(a)⋅v
▷ 증명
전미분가능이란 선형사상 L이 존재하여 f(a+h)=f(a)+L(h)+o(∥h∥)가 성립함을 의미한다. h=tv로 놓으면 Dvf(a)=limt→0(f(a+tv)−f(a))/t=L(v). v=ei로 놓으면 L(ei)=∂f/∂xi(a)이고 선형사상의 표현에 의해 L(v)=∇f(a)⋅v. □
∎
역으로, C1 조건(편미분이 연속)이면 전미분이 보장된다. 대부분의 딥러닝 연산이 C1인 이유가 바로 여기에 있다.
야코비안 — 선형근사의 행렬 표현
단변수에서 f(a+h)≈f(a)+f′(a)h라면, 다변수 f:Rn→Rm에서는:
f(a+h)=f(a)+Jf(a)h+o(∥h∥),Jf(a)∈Rm×n
야코비안 Jf는 전미분의 행렬 표현이다. 원소는 [Jf]ij=∂fi/∂xj. 특수 경우로 m=1이면 Jf=(∇f)⊤, n=m이면 정방 행렬이 되어 detJf가 국소 부피 변환율을 의미한다.
역전파에서 핵심 연산은 야코비안 전체가 아니라 **VJP(Vector-Jacobian Product)**다. 상위 gradient δ=∂L/∂f(x)가 주어질 때:
∂x∂L=Jf(x)⊤δ
m×n 행렬을 명시적으로 만들지 않고 n-차원 벡터 하나만 계산한다. 스칼라 손실의 역전파 비용이 O(n)에 머무는 이유다.
gradient는 왜 최대 증가 방향인가
Dvf=∇f⋅v 위에서, 코시-슈바르츠를 적용하면:
Dvf(a)=∇f(a)⋅v≤∥∇f(a)∥⋅∥v∥=∥∇f(a)∥
등호는 v=∇f(a)/∥∇f(a)∥일 때 성립한다. 반대 방향 v=−∇f/∥∇f∥에서는 방향도함수가 −∥∇f∥로 최솟값이다. 이것이 경사하강법의 수학적 정당성이다.
xk+1=xk−η∇f(xk)
이 업데이트는 무한소 스텝에서 가장 빠르게 감소하는 방향을 따른다. 유한한 η에서는 L-smooth 조건이 추가로 필요하다.
헤시안과 2차 곡률
테일러 전개를 2차항까지 쓰면:
f(a+h)=f(a)+∇f(a)⊤h+21h⊤Hf(a)h+o(∥h∥2)
헤시안 Hf∈Rn×n은 [Hf]ij=∂2f/∂xi∂xj. f∈C2이면 슈바르츠 정리에 의해 대칭행렬이므로 스펙트럼 분해가 가능하다. 고유벡터 방향 qi의 곡률은 대응 고유값 λi다.
헤시안 부호
의미
최적화
모든 λi>0 (PD)
국소 최솟값
볼록, 안정 수렴
혼합 부호 (Indefinite)
안장점
GD 탈출 필요
모든 λi<0 (ND)
국소 최댓값
GD 접근 불가
딥러닝에서 헤시안의 최대 고유값 λmax가 작은 “flat minimum”이 일반화 성능이 좋다는 주장(Hochreiter & Schmidhuber 1997)은 이 곡률 해석에서 나온다. 뉴턴 방법 x←x−H−1∇f는 헤시안으로 곡률을 보정하여 2차 수렴을 달성하지만, O(n3) 역행렬 비용 때문에 대규모 모델에는 L-BFGS 같은 근사가 필요하다.
연쇄법칙 — 역전파의 수학적 실체
g:Rn→Rk와 f:Rk→Rm이 전미분가능이면:
Jf∘g(a)=Jf(g(a))⋅Jg(a)∈Rm×n
왜 행렬 곱인가? 선형근사의 합성이기 때문이다. g(a+h)≈g(a)+Jgh이고 f(g(a+h))≈f(g(a))+Jf⋅(Jgh)=f(g(a))+(Jf⋅Jg)h. 합성의 선형근사 = 선형근사의 합성 = 행렬 곱.
N층 네트워크 L=fN∘⋯∘f1(x)에서 역전파는 이 곱을 오른쪽부터 누적한다:
δ(n)=Jfn(x(n−1))⊤⋅δ(n+1)
각 단계에서 야코비안 전체를 만들지 않고 VJP만 계산한다. 전체 역전파 비용이 O(N⋅mn)에 머무는 이유다.
✎ 트레이드오프: 순전파 저장 vs 재계산
역전파는 순전파 시 모든 중간 활성화값을 저장해야 VJP를 계산할 수 있다. 레이어가 깊을수록 메모리 비용이 선형으로 증가한다. Gradient Checkpointing은 일부 중간값만 저장하고 필요 시 재계산하여 메모리를 줄이는 대신 연산을 추가한다. 전형적인 메모리-연산 트레이드오프다.
음함수 정리는 이 연쇄법칙의 자연스러운 확장이다. Deep Equilibrium Model에서 고정점 방정식 z∗=fθ(z∗)을 F(z,θ)=z−fθ(z)=0으로 쓰면, 음함수 정리에 의해:
∂θ∂z∗=−[∂z∂F]−1∂θ∂F=(I−Jf)−1∂θ∂f
무한 깊이 네트워크를 실제로 펼치지 않고도 gradient를 얻는다.
정리
편미분 존재 ⇒ 전미분 존재 ⇒ 연속. 역전파가 올바르게 동작하려면 각 층의 연산이 전미분가능해야 한다.
야코비안은 전미분의 행렬 표현이다. 역전파의 핵심 연산은 야코비안 전체가 아니라 VJP다.
gradient가 최대 감소 방향인 이유는 코시-슈바르츠에서 나온다. 이것은 무한소 스텝에 대한 주장이며, 유한 학습률에서는 L-smooth 조건이 필요하다.
헤시안의 고유값은 방향별 곡률이다. Flat minima, 뉴턴 방법, Adam의 적응적 스케일링 — 모두 헤시안 정보를 다른 방식으로 활용한다.
역전파는 다변수 연쇄법칙의 VJP 누적이다. 음함수 정리로 미분가능성을 끝까지 확장하면 DEQ처럼 암묵적으로 정의된 함수도 gradient를 가진다.
다음 글에서는 이 미분가능성 위에 볼록성과 L-smooth 조건을 얹어, 경사하강법의 수렴 속도 O(1/k)가 어디서 나오는지 추적한다.