[기본기 0-3] 딥러닝을 위한 미분과 연쇄법칙
딥러닝 학습의 목표는 loss를 최소화하는 파라미터를 찾는 것입니다. 이를 위해 가중치를 조금 바꿨을 때 loss가 얼마나 변하는지 계산해야 합니다.
신경망은 여러 층이 연속으로 이어진 구조라서, 앞쪽 파라미터 하나가 최종 loss에 어떤 영향을 주는지 직접 계산하면 매우 비효율적이다. 역전파는 이 영향을 출력층에서 입력층 방향으로 차례대로 풀어가며, 모든 파라미터의 gradient를 한 번에 계산한다.
그래서 역전파를 이해할 때는 "미분"과 "연쇄법칙"을 따로 배우는 것이 아니라, 여러 함수가 이어진 계산 그래프에서 미분이 어떻게 전달되는지 보는 것이 중요하다. 이 감각이 잡히면 autodiff도 훨씬 자연스럽게 이해된다.
이 값은 "가중치 w를 바꾸면 loss L이 얼마나 변하는가"를 의미합니다.
업데이트는 보통 아래처럼 진행됩니다.
w: 모델 파라미터\eta: learning rateL: loss
시각 자료로 먼저 보기
직관 비유
- loss: 산의 높이
- gradient: 가장 가파른 방향
- 학습: 산을 내려가는 과정
이 비유를 실제 모델에 연결하면, forward pass는 현재 위치의 높이를 재는 과정이고, backward pass는 어느 방향으로 얼마나 움직여야 더 낮은 지점으로 갈 수 있는지 계산하는 과정이다. learning rate는 그 방향으로 한 번에 얼마나 이동할지 정하는 보폭이다.
1) 편미분 (Partial Derivative)
딥러닝 함수는 여러 변수에 의존합니다.
따라서 각 변수에 대한 변화율을 따로 계산합니다.
\partial L/\partial w, \partial L/\partial b
L: lossw: weightb: bias
편미분은 복잡한 문제를 "한 변수씩 잘라서 보는 법"이다. 역전파는 이런 편미분들을 각 레이어마다 계산한 뒤 연쇄법칙으로 연결해 전체 gradient를 만든다. 즉 편미분은 재료이고, 역전파는 그 재료를 효율적으로 조립하는 방법이라고 볼 수 있다.
주의: 편미분에서는 다른 변수들을 고정하고 미분합니다.
2) 기울기 (Gradient)
gradient는 편미분을 모은 벡터입니다.
gradient는 loss가 가장 빨리 증가하는 방향이며, 학습에서는 반대 방향으로 이동합니다.
3) 연쇄법칙 (Chain Rule)
신경망은 함수가 연쇄된 구조입니다.
전체 변화율은 다음과 같습니다.
중간 함수를 지날 때마다 미분이 곱으로 누적됩니다.
4) 연쇄법칙 계산 예시
g(x)=3x+1, f(g)=g^2
dy/dg = 2g, dg/dx = 3
따라서 dy/dx = 2(3x+1)\cdot3
5) 역전파 (Backpropagation)
역전파는 연쇄법칙을 효율적으로 계산하는 알고리즘입니다.
x -> layer1 -> layer2 -> layer3 -> loss
gradient는 뒤에서 앞으로 전달됩니다.
loss -> layer3 -> layer2 -> layer1
예를 들어 L=f(h(g(x)))이면
마지막 레이어 미분값이 먼저 있어야 앞 레이어 미분을 계산할 수 있으므로 backward 순서가 필수입니다.
코드-수식 연결
| 수식 | PyTorch 코드 | 설명 |
|---|---|---|
\partial L/\partial w | w.grad | 파라미터 gradient |
d/dx f(g(x)) | autograd | 연쇄법칙 자동 계산 |
\nabla L | loss.backward() | 역전파 실행 |
w = w - \eta\nabla L | optimizer.step() | 파라미터 업데이트 |
자주 하는 오해 5개
- 역전파가 연쇄법칙과 다른 별도 마법 알고리즘이라고 생각한다
- chain rule 없이 깊은 신경망 gradient 계산이 가능하다고 생각한다
- gradient는 항상 안정적이라고 생각한다
- forward와 backward 계산 흐름이 같다고 생각한다
- 자동미분이 gradient를 근사한다고 생각한다 (대부분 정확 계산)
체크리스트
- 편미분이 왜 필요한지 설명할 수 있는가?
- gradient 벡터가 담는 정보를 설명할 수 있는가?
- 연쇄법칙이 왜 신경망에서 필수인지 설명할 수 있는가?
- 왜 역전파가 뒤에서 앞으로 계산되는가?
- autograd가 연쇄법칙을 어떻게 자동화하는지 설명할 수 있는가?