에듀테크 프로젝트 대시보드
역전파 (Backpropagation)
퍼셉트론 한 개는 직선 하나로 나눌 수 있는 문제만 풀 수 있었습니다. 뉴런을 여러 층으로 쌓으면 훨씬 복잡한 경계도 만들 수 있지만, 문제는 "수많은 가중치를 각각 얼마나 고쳐야 손실이 줄어드는가?" 입니다. 역전파는 미적분의 연쇄 법칙(chain rule)을 이용해, 출력에서 생긴 오차를 뒤쪽 층부터 앞쪽 층으로 되돌려 보내며 모든 가중치의 기울기(gradient)를 한 번에 계산하는 알고리즘입니다. 1986년 러멜하트·힌튼·윌리엄스의 논문으로 널리 알려졌고, 오늘날 모든 딥러닝 학습의 심장입니다.
순전파(forward)는 입력을 층층이 통과시켜 예측 ŷ 를 만들고,
역전파(backward)는 그 반대 방향으로 오차의 책임을 나눠 각 가중치의 ∂L/∂w 를 구합니다.
마지막으로 경사 하강으로 w ← w − η·∂L/∂w 만큼 이동하면 손실이 조금 줄어듭니다.
이걸 수천 번 반복합니다.
가중치 w 하나가 손실 L 에 주는 영향은, 그 사이에 낀 함수들의
국소 미분을 곱해서 구합니다. 예를 들어 출력층 가중치 w₂ 는:
# 연쇄 법칙: 각 단계의 기울기를 곱한다 ∂L/∂w₂ = (∂L/∂ŷ) · (∂ŷ/∂zₒ) · (∂zₒ/∂w₂) = (ŷ − y) · ŷ(1 − ŷ) · h # σ′(z) = σ(z)(1−σ(z)) # 은닉층 가중치 w₁ 은 한 단계 더 거슬러 올라간다 ∂L/∂w₁ = δₒ · w₂ · h(1 − h) · x
입력 2개 → 은닉 뉴런 2개 → 출력 1개짜리 작은 신경망입니다. 선은 가중치로, 파랑은 양수·빨강은 음수, 굵을수록 절댓값이 큽니다. 학습 시작을 누르면 손실 곡선이 내려가며 아래 XOR 예측표의 값이 정답(0/1)에 가까워집니다.
| x₁ | x₂ | 정답 | 예측 ŷ |
|---|---|---|---|
| 0 | 0 | 0 | – |
| 0 | 1 | 1 | – |
| 1 | 0 | 1 | – |
| 1 | 1 | 0 | – |
학습률이 너무 크면 손실이 튀고, 너무 작으면 느립니다. 운이 나쁘면 지역 최솟값(plateau)에 갇혀 손실이 0.25 근처에서 멈추기도 합니다 — 그때는 가중치 새로 뽑기를 눌러 다시 시작하세요.
| x₁ | x₂ | XOR 정답 | 은닉 h₁ ≈ OR | 은닉 h₂ ≈ NAND | 출력 ≈ h₁ AND h₂ |
|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 1 | 0 |
| 0 | 1 | 1 | 1 | 1 | 1 |
| 1 | 0 | 1 | 1 | 1 | 1 |
| 1 | 1 | 0 | 1 | 0 | 0 |
은닉 뉴런들이 중간 특징(여기서는 OR과 NAND)을 만들어내고, 출력 뉴런은 그 특징들을 다시 직선으로 결합합니다. 사람이 "OR을 계산해라, NAND를 계산해라" 라고 알려주지 않아도, 역전파가 손실을 줄이는 방향으로 가중치를 밀다 보면 이런 역할 분담이 저절로 생깁니다. 학습이 끝난 뒤 위 데모의 은닉 뉴런 활성값을 4가지 입력마다 확인해 보세요.
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
0.25 × 0.25 × … 로 기울기가 급격히 작아져 앞쪽 층이 거의 학습되지 않습니다.
현대 신경망이 ReLU 활성화 함수와 잔차 연결(residual)을 쓰는 큰 이유입니다.
∂L/∂w 계산