티스토리 뷰
딥러닝 기초학습 2: 역전파(Backpropagation) — 딥러닝이 스스로 학습하는 비밀 알고리즘
“딥러닝이 정말로 ‘학습’한다는 건 무슨 의미일까?”
사람은 실수하면 스스로 이유를 분석하고 다음엔 고쳐 나가죠.
딥러닝도 똑같습니다.
다만 딥러닝은 수학적 오차(손실) 를 기준으로
“어디서 얼마나 틀렸는지”를 계산해서 가중치를 수정합니다.이 수정 과정을 가능하게 하는 알고리즘이 바로
역전파(Backpropagation) 입니다.
이번 글은 딥러닝의 본질,
“딥러닝이 어떻게 스스로 가중치를 고치는가”를 완전히 이해하는 시간이 될 겁니다.
1. 역전파란 무엇인가?
정의:
역전파는 신경망이 예측을 한 뒤, 그 예측이 얼마나 틀렸는지 역방향으로 전파하여 가중치를 업데이트하는 알고리즘입니다.
말 그대로
Forward (입력 → 예측)
Backward (오차 → 가중치 업데이트)
두 과정이 합쳐져 학습(learning) 을 이룹니다.
2. 기본 개념 흐름
딥러닝 학습의 전체 과정은 4단계로 요약됩니다.
1) 순전파(Forward): y_pred 계산
2) 손실 계산(Loss)
3) 역전파(Backprop): 각 가중치가 손실에 얼마나 기여했는지 계산
4) 경사하강법(Gradient Descent): 가중치 업데이트
그 중에서 가장 중요한 것은 3번,
즉 “각 가중치가 얼마나 잘못했는지”입니다.
3. 왜 역전파가 필요한가?
신경망은 수천~수백만 개의 가중치를 가지고 있습니다.
모든 가중치를 무작위로 미세 조정해보는 것은 불가능합니다.
따라서 우리는 다음 질문에 답해야 합니다:
“손실을 줄이기 위해 어떤 가중치를 얼마나 조정해야 할까?”
이 기울기(gradient)를 계산해주는 것이 바로 역전파입니다.
4. 핵심 수학적 기반: 연쇄법칙 (Chain Rule)
딥러닝 모델은
입력 → 선형변환 → 비선형변환 → 선형변환 → …
이런 식의 함수들의 연속(합성함수)입니다.
합성함수의 미분은 연쇄법칙(chain rule) 로 계산합니다.
[
\frac{dL}{dW} = \frac{dL}{dY} \cdot \frac{dY}{dX} \cdot \frac{dX}{dW}
]
이 식을 층마다 반복 적용한 것이
곧 역전파의 본질입니다.
5. 단일 뉴런에서의 역전파 예시
단일 뉴런:
[
y = f(Wx + b)
]
손실 L에 대해 가중치 W의 gradient는:
[
\frac{dL}{dW} = \frac{dL}{dy} \cdot f'(Wx + b) \cdot x
]
이 한 줄이 사실 역전파 전체의 구조입니다.
6. 손실 함수와 역전파
손실 함수는 모델에게 “얼마나 틀렸는지”를 알려주는 기준입니다.
예:
- 회귀 → MSE
- 이진 분류 → Binary Cross Entropy
- 다중 클래스 → Categorical Cross Entropy
예를 들어 MSE:
[
L = \frac{1}{2}(y - \hat{y})^2
]
이걸 미분하면:
[
\frac{dL}{d\hat{y}} = \hat{y} - y
]
즉, 예측이 크면 +, 작으면 –,
가중치를 더하거나 빼면 되는 방향을 알려줍니다.
7. 경사하강법(Gradient Descent)
역전파가 gradient를 계산하면
경사하강법이 그 값을 이용해 가중치를 업데이트합니다.
[
W := W - \eta \frac{dL}{dW}
]
여기서
- (\eta): learning rate
- (dL/dW): gradient (가중치가 얼마나 틀렸는가)
8. 실제 역전파 알고리즘 예시 (2-layer Neural Net)
다음은 완전히 동작 확인된 미니 신경망 + 역전파 구현 코드입니다.
import numpy as np
class SimpleNN:
def __init__(self, lr=0.1):
self.lr = lr
self.W1 = np.random.randn(2, 3) * 0.1
self.b1 = np.zeros((1, 3))
self.W2 = np.random.randn(3, 1) * 0.1
self.b2 = np.zeros((1, 1))
def sigmoid(self, x):
return 1 / (1 + np.exp(-x))
def sigmoid_deriv(self, x):
return x * (1 - x)
def forward(self, X):
self.Z1 = X @ self.W1 + self.b1
self.A1 = self.sigmoid(self.Z1)
self.Z2 = self.A1 @ self.W2 + self.b2
self.A2 = self.sigmoid(self.Z2)
return self.A2
def backward(self, X, y):
m = X.shape[0]
dA2 = self.A2 - y
dZ2 = dA2 * self.sigmoid_deriv(self.A2)
dW2 = self.A1.T @ dZ2 / m
db2 = np.sum(dZ2, axis=0, keepdims=True) / m
dA1 = dZ2 @ self.W2.T
dZ1 = dA1 * self.sigmoid_deriv(self.A1)
dW1 = X.T @ dZ1 / m
db1 = np.sum(dZ1, axis=0, keepdims=True) / m
self.W2 -= self.lr * dW2
self.b2 -= self.lr * db2
self.W1 -= self.lr * dW1
self.b1 -= self.lr * db1
def train(self, X, y, epochs=10000):
for _ in range(epochs):
self.forward(X)
self.backward(X, y)
✔ 직접 실행해도 문제 없는 코드입니다.
✔ 역전파(gradient)가 정확히 구현되어 있습니다.
9. 왜 역전파를 이해해야 할까?
역전파를 이해하면 딥러닝이 더 이상 “감”으로 보이지 않습니다.
역전파를 알아야:
- CNN의 필터가 왜 그렇게 업데이트되는지
- RNN이 왜 gradient vanishing을 겪는지
- Transformer가 왜 더 안정적인지
- 학습률이 왜 중요하고 왜 터지는지
- BatchNorm이 gradient 흐름을 어떻게 안정시키는지
모두 이해할 수 있습니다.
딥러닝의 모든 최신 기술은
“gradient가 어떻게 흘러가고, 어떻게 더 잘 흐르게 만드는가” 를 개선하는 방향입니다.
10. 요약
개념 의미
| 역전파 | 오차를 뒤로 전달해 가중치 수정 |
| 연쇄법칙 | 미분 계산의 핵심 |
| 손실 함수 | 무엇이 틀렸는지 알려주는 기준 |
| 경사하강법 | gradient로 가중치를 실제로 업데이트 |
| 뉴런/퍼셉트론 | 모든 딥러닝의 기본 단위 |
📘 다음 글 예고
👉 딥러닝 기초학습 3: 최적화 알고리즘 — SGD, Momentum, Adam으로 모델 학습속도와 안정성을 바꾼 기술들
딥러닝은 역전파만 있다고 학습이 되는 게 아닙니다.
weight를 얼마나 “효율적으로” 업데이트하느냐가 성능의 80%입니다.
다음 글에서는 우리가 매일 쓰는 Adam, RMSProp 같은 최적화 알고리즘을
완전히 쉽게 설명합니다.
딥러닝,역전파,Backpropagation,경사하강법,ChainRule,손실함수,신경망,딥러닝학습,최적화,SGD
'study > ML' 카테고리의 다른 글
| 딥러닝 기초학습 4: 활성화 함수의 진짜 의미 — 왜 ReLU가 딥러닝을 지배하게 되었는가? (0) | 2025.11.27 |
|---|---|
| 딥러닝 기초학습 3: 최적화 알고리즘 — SGD, Momentum, Adam이 딥러닝을 바꾼 이유 (0) | 2025.11.25 |
| 딥러닝 기초학습 1: 뉴런과 퍼셉트론 — 딥러닝의 ‘뇌’를 만드는 첫걸음 (0) | 2025.11.19 |
| 머신러닝 기초학습 10 (완결): 머신러닝 프로젝트 A~Z — 기획부터 데이터, 모델링, 배포, 운영까지 ‘완전체 튜토리얼’ (0) | 2025.11.17 |
| 머신러닝 기초학습 9: AutoML과 파이프라인 자동화 — 데이터 → 학습 → 배포까지 ‘완전 자동화’하는 법 (0) | 2025.11.13 |
- Total
- Today
- Yesterday
- Redis
- REACT
- llm
- 압박면접
- rag
- Docker
- NestJS
- 웹개발
- JAX
- Python
- JWT
- Prisma
- 백엔드개발
- SEO최적화
- Express
- 쿠버네티스
- seo 최적화 10개
- node.js
- 개발블로그
- nextJS
- fastapi
- DevOps
- 딥러닝
- kotlin
- Next.js
- CI/CD
- PostgreSQL
- flax
- LangChain
- ai철학
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
