티스토리 뷰

반응형

딥러닝 기초학습 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

※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/04   »
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
글 보관함
반응형