한양과학기술고등학교

에듀테크 프로젝트 대시보드

역전파 (Backpropagation)

역전파 (Backpropagation)

순전파 · 손실 · 연쇄 법칙으로 기울기 계산 · 경사 하강 반복  |  작은 신경망이 XOR을 배우는 과정

퍼셉트론 한 개는 직선 하나로 나눌 수 있는 문제만 풀 수 있었습니다. 뉴런을 여러 층으로 쌓으면 훨씬 복잡한 경계도 만들 수 있지만, 문제는 "수많은 가중치를 각각 얼마나 고쳐야 손실이 줄어드는가?" 입니다. 역전파는 미적분의 연쇄 법칙(chain rule)을 이용해, 출력에서 생긴 오차를 뒤쪽 층부터 앞쪽 층으로 되돌려 보내며 모든 가중치의 기울기(gradient)를 한 번에 계산하는 알고리즘입니다. 1986년 러멜하트·힌튼·윌리엄스의 논문으로 널리 알려졌고, 오늘날 모든 딥러닝 학습의 심장입니다.

1. 한 번의 학습 = 순전파 → 손실 → 역전파 → 갱신

입력 x─▶ 은닉층 h = σ(W₁x + b₁)─▶ 출력 ŷ = σ(W₂h + b₂)─▶ 손실 L = ½(ŷ − y)²
∂L/∂ŷ = ŷ − y◀─ 출력층 기울기 δₒ◀─ 은닉층으로 오차 전파 δₕ = (W₂ᵀδₒ)·σ′(z)◀─ ∂L/∂W₁, ∂L/∂W₂

순전파(forward)는 입력을 층층이 통과시켜 예측 ŷ 를 만들고, 역전파(backward)는 그 반대 방향으로 오차의 책임을 나눠 각 가중치의 ∂L/∂w 를 구합니다. 마지막으로 경사 하강으로 w ← w − η·∂L/∂w 만큼 이동하면 손실이 조금 줄어듭니다. 이걸 수천 번 반복합니다.

2. 연쇄 법칙 — 오차의 책임을 거꾸로 나눈다

가중치 w 하나가 손실 L 에 주는 영향은, 그 사이에 낀 함수들의 국소 미분을 곱해서 구합니다. 예를 들어 출력층 가중치 w₂ 는:

# 연쇄 법칙: 각 단계의 기울기를 곱한다
∂L/∂w₂ = (∂L/∂ŷ) · (∂ŷ/∂zₒ) · (∂zₒ/∂w₂)
       = (ŷ − y)   ·  ŷ(1 − ŷ)  ·   h        # σ′(z) = σ(z)(1−σ(z))

# 은닉층 가중치 w₁ 은 한 단계 더 거슬러 올라간다
∂L/∂w₁ = δₒ · w₂ · h(1 − h) · x
핵심 트릭: 앞 계산에서 나온 δ(델타) 를 저장해 두고 재사용하면, 가중치가 수백만 개여도 순전파 1회 + 역전파 1회 만에 모든 기울기가 나옵니다. 이것이 역전파가 "빠른" 이유입니다 (동적 계획법처럼 중복 계산을 없앰).

3. 직접 학습시켜 보기 — 2-2-1 신경망으로 XOR 풀기

입력 2개 → 은닉 뉴런 2개 → 출력 1개짜리 작은 신경망입니다. 선은 가중치로, 파랑은 양수·빨강은 음수, 굵을수록 절댓값이 큽니다. 학습 시작을 누르면 손실 곡선이 내려가며 아래 XOR 예측표의 값이 정답(0/1)에 가까워집니다.

양의 가중치 음의 가중치 원 안 숫자 = 활성값 σ(z)
1.00
40
epoch 0
손실 L –
대기 중
x₁x₂정답예측 ŷ
000–
011–
101–
110–

학습률이 너무 크면 손실이 튀고, 너무 작으면 느립니다. 운이 나쁘면 지역 최솟값(plateau)에 갇혀 손실이 0.25 근처에서 멈추기도 합니다 — 그때는 가중치 새로 뽑기를 눌러 다시 시작하세요.

4. 왜 은닉층이 있어야 XOR이 풀릴까

x₁x₂XOR 정답은닉 h₁ ≈ OR은닉 h₂ ≈ NAND출력 ≈ h₁ AND h₂
000010
011111
101111
110100

은닉 뉴런들이 중간 특징(여기서는 OR과 NAND)을 만들어내고, 출력 뉴런은 그 특징들을 다시 직선으로 결합합니다. 사람이 "OR을 계산해라, NAND를 계산해라" 라고 알려주지 않아도, 역전파가 손실을 줄이는 방향으로 가중치를 밀다 보면 이런 역할 분담이 저절로 생깁니다. 학습이 끝난 뒤 위 데모의 은닉 뉴런 활성값을 4가지 입력마다 확인해 보세요.

5. 파이썬 의사코드 (전체 루프)

for epoch in range(5000):
    gW1, gb1, gW2, gb2 = zeros_like(...)          # 기울기 누적기
    for (x, y) in dataset:
        # ── 순전파 ──
        z1 = W1 @ x + b1;   h = sigmoid(z1)
        z2 = W2 @ h + b2;   yhat = sigmoid(z2)

        # ── 역전파 (연쇄 법칙) ──
        d2 = (yhat - y) * yhat * (1 - yhat)   # 출력층 델타
        d1 = (W2.T @ d2) * h * (1 - h)         # 은닉층으로 전파된 델타

        gW2 += outer(d2, h);  gb2 += d2
        gW1 += outer(d1, x);  gb1 += d1

    # ── 경사 하강 갱신 ──
    W1 -= η * gW1 / N;   b1 -= η * gb1 / N
    W2 -= η * gW2 / N;   b2 -= η * gb2 / N
기울기 소실(vanishing gradient): 시그모이드의 미분은 최대 0.25라, 층을 깊게 쌓으면 0.25 × 0.25 × … 로 기울기가 급격히 작아져 앞쪽 층이 거의 학습되지 않습니다. 현대 신경망이 ReLU 활성화 함수와 잔차 연결(residual)을 쓰는 큰 이유입니다.

핵심 정리

  • 학습 1스텝 = 순전파(예측) → 손실 → 역전파(기울기) → 경사 하강(갱신)
  • 역전파 = 연쇄 법칙으로 출력의 오차를 뒤에서 앞으로 되돌려 모든 ∂L/∂w 계산
  • δ(델타) 를 저장·재사용하므로 가중치가 많아도 순전파·역전파 각 1회면 충분
  • 은닉층이 중간 특징을 스스로 학습 → 선형 분리 불가능한 XOR도 해결
  • 깊은 망에서는 기울기 소실/폭주 주의 → ReLU, 정규화, 잔차 연결로 완화