본문 바로가기
C.W.K.
Stream
Lesson 03 of 05 · published

역전파: 연쇄법칙의 장부 정리

~12 min · backprop, chain-rule, gradients

Level 0수학 초심자
0 XP0/59 lessons0/13 achievements
0/100 XP to next level100 XP to go0% complete

역전파가 답하는 질문

순전파를 돌려 손실값을 얻었어. 이제 이런 질문에 답해야 해. "이 망의 가중치 하나를 아주 조금 움직이면 손실은 얼마나 달라질까?" 가중치는 수십억 개일 수도 있지. 각 가중치에 대한 그 변화율이 기울기야. 기울기만 알면 경사하강법으로 모든 가중치를 손실이 줄어드는 쪽으로 고칠 수 있어.

가장 단순한 방법은 가중치를 하나씩 건드려 보며 기울기를 따로 계산하는 거야. 하지만 가중치가 개면 순전파를 번 더 해야 해. 수십억 개짜리 망에서는 사실상 끝나지 않는 계산이지.

역전파의 묘수

역전파는 망을 한 번 더 거꾸로 훑으며 모든 기울기를 계산해. 수학적 근거는 Calculus 트랙에서 본 연쇄법칙이야. 구현의 핵심은 순전파에서 중간값을 저장해 두고, 뒤에서부터 국소 야코비안을 차례로 곱하는 거고.

번째 층의 가중치 를 보면:

도함수가 사슬처럼 이어지지. 역전파는 중간 도함수를 각각 한 번 계산한 뒤 여러 가중치 계산에 재사용해.

책임을 거꾸로 나누기

역전파를 책임 분배라고 생각해 봐. 손실값이 "과녁에서 이만큼 빗나갔어"라고 알려 주면, 역전파는 망을 거꾸로 걸으며 각 층에 "이 빗나감에 얼마나 기여했어?"라고 물어. 각 층은 자기 가중치와 위에서 흘러온 기울기를 바탕으로 답하고, 연쇄법칙으로 계산한 책임을 앞선 층에 넘겨.

끝까지 거슬러 가면 모든 가중치가 자기 몫의 오차를 알게 돼. 그 몫과 반대 방향으로 가중치를 조정하면 다음 순전파는 과녁에 더 가까워지는 거야.

역전파는 연쇄법칙과 동적 프로그래밍의 결합이야. 중간 도함수를 재사용해서 한 번의 역방향 순회로 모든 파라미터의 기울기를 계산해.

Code

한 번의 역전파, 모든 기울기·python
import torch

# 역전파를 확인할 수동 2층 망
x = torch.randn(1, 4)
W1 = torch.randn(4, 8, requires_grad=True)
W2 = torch.randn(8, 1, requires_grad=True)

# 순전파
h = torch.relu(x @ W1)
y_hat = h @ W2
loss = (y_hat ** 2).sum()        # 시연용 임의 손실

# 역전파 — 연쇄법칙을 자동으로 적용
loss.backward()
print(W1.grad.shape)             # torch.Size([4, 8])
print(W2.grad.shape)             # torch.Size([8, 1])
# 한 번의 backward 호출로 두 기울기를 모두 계산해.

External links

Exercise

단순한 식 y = (x*w1 + b1)**2에서 x=2, w1=3, b1=1로 놓아 봐. 연쇄법칙으로 dy/dw1을 손으로 계산한 뒤 PyTorch autograd로 검증해.
Hint
연쇄법칙을 쓰면 dy/dw1 = 2(x*w1 + b1) * x = 2*7*2 = 28이야. Autograd도 같은 값을 내놓아야 해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.