1️⃣ 기본 개념
-
Loss (손실)
모델의 예측값과 실제값의 차이를 수치화한 값
예: 평균 제곱 오차 (MSE), 교차 엔트로피 (Cross-Entropy)
-
역전파 (Backpropagation)
손실 함수를 기준으로 각 파라미터(가중치 등)의 기울기(Gradient) 를 계산하는 과정
-
최적화 (Optimization)
계산된 기울기를 이용하여 파라미터를 업데이트하고, Loss를 줄여나가는 과정
예: SGD, Adam 등
2️⃣ 간단한 예제: ( y = 2x ) 모델 학습
import torch
x = torch.tensor([1.0, 2.0, 3.0, 4.0])
y_true = torch.tensor([2.0, 4.0, 6.0, 8.0])
w = torch.tensor([0.5], requires_grad=True)
lr = 0.1
y_pred = w * x
loss = ((y_pred - y_true) ** 2).mean()
loss.backward()
with torch.no_grad():
w -= lr * w.grad
w.grad.zero_()
print(f"Updated weight: {w.item()}")
3️⃣ 실행 과정 요약
-
순전파 (Forward Pass)
모델 예측: ypred=w⋅x
손실 계산: L=n1∑(ypred−ytrue)2
-
역전파 (Backward Pass)
loss.backward()
를 호출하면 PyTorch가 자동으로 ∂w∂L 계산
-
최적화
w=w−η⋅∂w∂L
이후 w.grad.zero_()
로 기울기 초기화
4️⃣ 기울기 계산의 원리: Chain Rule 적용
(1) 예측값의 Loss에 대한 미분
∂ypred∂L=n2(ypred−ytrue)
(2) 예측값의 가중치에 대한 미분
∂w∂ypred=x
(3) 연쇄 법칙 (Chain Rule) 적용
∂w∂L=n2(ypred−ytrue)⋅x
5️⃣ 왜 gradient가 -15인가?
주어진 값
- w=0.5
- x=[1,2,3,4]
- ytrue=[2,4,6,8]
예측값
ypred=w⋅x=0.5⋅[1,2,3,4]=[0.5,1.0,1.5,2.0]
오차
ypred−ytrue=[−1.5,−3.0,−4.5,−6.0]
기울기 계산
∂w∂L=42⋅((−1.5)⋅1+(−3.0)⋅2+(−4.5)⋅3+(−6.0)⋅4)=−15
6️⃣ 가중치 업데이트 예시
학습률 η=0.1일 때,
w=w−η⋅(−15)=0.5+1.5=2.0
ypred=w⋅x→ypred=2⋅x 가 되면서, x=[1,2,3,4]에 대해 ypred가 ytrue=[2,4,6,8]와 일치하게 됨.
7️⃣ 결론 요약
✅ 역전파는 연쇄 법칙 (Chain Rule) 을 이용해 기울기를 계산함
✅ PyTorch는 .backward()
로 자동 미분 수행
✅ 계산된 gradient로 파라미터 업데이트
✅ 이 과정을 반복하면 손실이 줄고, 가중치는 최적의 값으로 수렴함