Chap 4. 미분의 쓸모 — 신경망의 역전파(Back Propagation)

다층 퍼셉트론(MLP) 구조에서 미분과 연쇄 법칙을 이용해 역전파를 종이에 직접 계산해 봅니다.


여는 물음: 무엇을 근거로 가중치를 고치는가

앞 장은 한 가지 결심으로 끝났다. 규칙을 사람이 하나하나 손으로 짤 수는 없으니, 데이터로부터 기계가 스스로 배우게 하자. 그런데 결심만으로는 한 발짝도 못 간다. “스스로 배운다”는 말은 멋지지만, 정작 기계는 무엇을 근거로 자기 안의 숫자(가중치)를 고쳐야 할지 모른다. 더 곤란한 사실도 있다. 가장 단순한 학습 기계인 단층 퍼셉트론은 AND·OR은 풀어도 XOR조차 풀지 못한다 — 이 한계가 1차 AI 겨울을 불렀다.

그래서 이 장의 문제는 두 겹이다. ① 단층의 한계를 어떻게 넘는가(→ 층을 쌓은 다층 퍼셉트론). ② 층을 쌓으면 안쪽 가중치는 무엇을 보고 고치는가(→ 미분과 연쇄 법칙으로 오차를 거꾸로 흘리는 역전파). 이 장의 한 줄 요약을 미리 말해 두면 이렇다 — “미분이 곧 학습이다.” 가중치를 아주 조금 흔들었을 때 오차가 어느 쪽으로 얼마나 변하는지(=미분), 그것이 곧 “어디로 고쳐야 하는가”의 답이다. 데이터로부터 규칙을 짜는 일이, 손으로 미분을 따라가는 산수로 바뀌는 순간을 이제 종이 위에서 확인한다.


가리비의 200개의 눈

가리비는 껍데기 가장자리에 약 200개의 눈을 가지고 있다. 각각의 눈은 형편없다 — 흐릿한 명암과 움직임 정도만 감지한다. 그러나 200개의 형편없는 센서가 모이면 포식자를 알아채는 시각 시스템이 된다. 개별 단위는 단순해도, 연결과 집계가 지능을 만든다. 이것이 신경망의 핵심 직관이다.

가리비 눈의 구조 자체도 신경망을 닮았다(Science, 2017). 우리 눈이 수정체로 빛을 모으는 카메라라면, 가리비의 눈은 구아닌 결정이 20–30층 쌓인 오목거울로 빛을 반사해 상을 맺는 반사망원경이다. 게다가 눈마다 이중 망막(피사체의 중앙과 테두리를 따로 감지)을 두고, 200개 눈에서 온 정보를 한 묶음의 뉴런으로 모아 전체 상을 만든다 — 다중 센서 → 집계 뉴런이라는 배선이 곧 신경망이다.

막간: 감각은 통합된다 — 맥거크 효과 같은 소리(“바바”)를 들으면서 입 모양이 “가가”인 영상을 보면, 사람은 “다다”로 듣는다(McGurk & MacDonald, Hearing Lips and Seeing Voices, 1976). 눈을 감으면 “바바”로 되돌아온다. 지각은 한 감각의 충실한 복사가 아니라, 여러 입력을 가중 합산해 가장 그럴듯한 답을 만드는 추론이다. 이것이 바로 가중치를 더해 출력을 정하는 퍼셉트론의 정신이자, 뒤에 나올 멀티모달 학습(5장)의 생물학적 예고편이다.

퍼셉트론은 이 구조의 수학 버전이다: 입력들에 가중치를 곱해 더하고, 임계값을 넘으면 1, 아니면 0. 학습이란 결국 입력(x)과 출력(y)이 주어졌을 때 가중치(Weight)를 정하는 것이다. 여기서 임계값(threshold, θ)과 편향(bias, b)은 같은 것의 두 얼굴이다 — θ = −b. 그래서 “w₁x₁ + w₂x₂ > θ”는 “w₁x₁ + w₂x₂ + b > 0”과 똑같다. 임계값을 넘었는지 0/1로 끊어 주는 함수가 계단 함수(Heaviside step function, H), 즉 가장 단순한 활성화 함수다.


연필로 풀기 ①: 퍼셉트론으로 논리 게이트 만들기

2장에서 AND, OR, NOT 게이트로 가산기를 만들었다. 이번엔 퍼셉트론으로 게이트를 만든다. 입력 x₁, x₂ ∈ {0,1}, 출력 = (w₁x₁ + w₂x₂ + b > 0 ? 1 : 0). 슬라이드의 표준 코드(『밑바닥부터 시작하는 딥러닝 1』)는 다음 값들을 쓴다:

게이트w₁w₂b판정식(tmp ≤ 0 → 0)
AND0.50.5−0.7둘 다 1일 때만 0.3 > 0
OR0.50.5−0.2하나라도 1이면 0.3 또는 0.8 > 0
NAND−0.5−0.50.7둘 다 1일 때만 −0.3 ≤ 0

AND와 OR은 가중치는 같고 편향만 −0.7 ↔ −0.2로 다르다. 편향은 “얼마나 까다롭게 굴 것인가”를 정하는 손잡이인 셈이다. NAND는 AND의 부호를 뒤집은 것이다. 직접 네 입력 (0,0),(0,1),(1,0),(1,1)을 표에 넣어 확인해 보라.

XOR은? 아무리 (w₁, w₂, b)를 골라도 안 된다. 좌표평면에 네 점을 찍어 보면 이유가 보인다 — (0,1)과 (1,0)은 1, (0,0)과 (1,1)은 0인데, 이 둘을 가르는 직선은 존재하지 않는다. 이것이 민스키·페퍼트가 1969년에 증명한 XOR 문제이고, 1차 AI 겨울의 방아쇠였다.

해법은 층을 쌓는 것이다. 슬라이드 코드는 XOR을 세 게이트의 조합으로 만든다:

def XOR(x1, x2):
    s1 = NAND(x1, x2)   # 은닉 뉴런 1
    s2 = OR(x1, x2)     # 은닉 뉴런 2
    y  = AND(s1, s2)    # 출력 뉴런
    return y
# (0,0)->0  (1,0)->1  (0,1)->1  (1,1)->0

즉 NAND와 OR(은닉층)의 출력을 다시 AND(출력층)로 조합하면 XOR이 된다 — **다층 퍼셉트론(MLP)**이다. 단층으로 못 긋던 경계를, 두 직선의 조합(NAND ∧ OR)으로 두 영역을 오려내 푼 것이다. 그런데 새 문제가 생긴다. 은닉층의 가중치는 어떻게 학습하는가? 오차는 출력에서만 보이는데, 그 책임이 앞쪽 가중치들에 얼마나 있는지 어떻게 아는가? (신용 할당 문제) — 역전파가 그 답이다.


미분 = 민감도, 연쇄 법칙 = 책임의 사슬

미분은 **“입력을 아주 조금 바꾸면 출력이 얼마나 변하는가”**다. 가중치를 0.001 올렸을 때 오차가 줄면 그쪽으로, 늘면 반대쪽으로 가면 된다. 미분값(기울기)은 조정의 방향과 크기를 동시에 알려준다.

**연쇄 법칙(chain rule)**은 “전체 변화율 = 중간 변화율들의 곱”이다. 오차가 가중치 w에 얼마나 민감한지는, 오차 ← 출력 ← 가중합 ← w 로 이어지는 사슬의 미분값들을 곱하면 된다.

계산 그래프로 보면 역전파는 두 가지 단순한 규칙의 반복이다(『밑바닥부터 시작하는 딥러닝 1』):

  • 곱셈 계층: 상류에서 넘어온 미분(dout)에 순전파 때의 입력을 서로 바꿔 곱해 하류로 흘린다. z = x·y면 dx = dout·y, dy = dout·x.
  • 덧셈 계층: 상류에서 넘어온 미분(dout)을 그대로 하류로 흘린다. dx = dout·1, dy = dout·1.

이 두 규칙만 알면 아무리 깊은 망이라도 손으로 거꾸로 따라갈 수 있다. 미분값(기울기)이란 결국 가중치가 변할 때 오차가 변하는 정도다.


연필로 풀기 ②: 역전파 직접 계산 (2-2-1 신경망)

가장 작은 MLP로 역전파 한 사이클을 손으로 돌려 보자. 입력 2개 → 은닉 뉴런 2개 → 출력 1개. 활성화 함수는 시그모이드 σ(z)=1/(1+e⁻ᶻ), 미분은 σ’=σ(1−σ).

설정: 입력 x₁=1, x₂=0. 목표 출력 t=1. 초기 가중치는 모두 0.5, 바이어스는 0.

① 순전파(forward)

은닉 h₁: z = 0.5(1) + 0.5(0) = 0.5  →  σ(0.5) ≈ 0.622
은닉 h₂: 동일 → 0.622
출력 o:  z = 0.5(0.622) + 0.5(0.622) = 0.622  →  σ(0.622) ≈ 0.651
손실 L = ½(t−o)² = ½(1−0.651)² ≈ 0.061

② 역전파(backward) — 출력층부터 거꾸로.

∂L/∂o = −(t−o) = −0.349
∂o/∂z = o(1−o) = 0.651 × 0.349 ≈ 0.227
δ_o = −0.349 × 0.227 ≈ −0.079          ← 출력 뉴런의 '오차 신호'

출력층 가중치의 기울기: ∂L/∂w = δ_o × h₁ = −0.079 × 0.622 ≈ −0.049
은닉층으로 전파: δ_h = δ_o × w × h(1−h) = −0.079 × 0.5 × 0.235 ≈ −0.0093
은닉층 가중치의 기울기: ∂L/∂w = δ_h × x₁ = −0.0093 × 1 = −0.0093

③ 가중치 갱신 — 학습률 η=0.5:

출력층: w ← 0.5 − 0.5×(−0.049) = 0.525
은닉층: w ← 0.5 − 0.5×(−0.0093) ≈ 0.505

갱신 후 같은 입력으로 순전파를 다시 해 보면 출력이 0.651 → 0.658로 목표(1)에 조금 가까워졌다. 이 사이클을 수천 번 반복하는 것이 ‘학습’의 전부다. 숫자가 사슬을 타고 거꾸로 흐르는 것을 한 번 손으로 확인하고 나면, 신경망의 신비는 산수가 된다.


연필로 풀기 ③: 시그모이드 vs ReLU — 같은 망, 다른 속도

활성화 함수를 무엇으로 고르느냐가 학습 속도를 얼마나 바꾸는지, 2-2-2 망에서 한 스텝을 끝까지 계산해 비교해 보자(슬라이드의 표준 예제). 입력 x=(0.1, 0.2), 목표 t=(0.4, 0.6), 1차 가중치 (w1..w4)=(0.3, 0.25, 0.4, 0.35), 2차 (w5..w8)=(0.45, 0.4, 0.7, 0.6).

순전파의 가중합은 둘 다 같다: z₁=0.08, z₂=0.11.

시그모이드에서는:

h1=σ(0.08)=0.51998934,  h2=σ(0.11)=0.52747230
o1=σ(z3)=0.60944600,    o2=σ(z4)=0.66384491
Etotal(t1) = ½(0.4−o1)² + ½(0.6−o2)² = 0.02397190
한 스텝 학습 후 → Etotal(t2) = 0.02323634   (Δ = −0.00073556)

ReLU에서는 (음수가 없으니 z를 그대로 통과):

h1=0.08, h2=0.11,  o1=0.08, o2=0.122
Etotal(t1) = 0.0512 + 0.114242 = 0.165442
한 스텝 학습 후 → Etotal(t2) = 0.06047941   (Δ = −0.10496259)

시작 오차는 ReLU가 더 크지만(출력이 0.08, 0.122로 목표에서 멀다), 한 스텝에서 줄어든 양은 ReLU가 0.105 vs 시그모이드 0.0007 — 100배가 넘는다. 이유는 미분에 있다. 시그모이드의 미분 σ’=σ(1−σ)는 최대 0.25라 신호를 매 층 ¼ 이하로 깎는 반면, ReLU의 양수 구간 미분은 1이라 기울기를 그대로 흘려보낸다. 슬라이드의 결론: “이 신경망의 경우, Sigmoid보다 ReLU를 사용했을 때 오차가 더 급격히 줄어듦.” 이것이 2012년 이후 ReLU가 표준이 된 실전적 이유다.


연필로 풀기 ④: MNIST를 푸는 2층 MLP

이제 장난감을 벗어나 실제 데이터로 가자. MNIST는 손글씨 숫자(0–9) 28×28 흑백 이미지 7만 장이다. 픽셀을 한 줄로 펴면 입력은 784개. 슬라이드의 TwoLayerNet은 784 → (은닉 50) → 10 구조다.

network = TwoLayerNet(input_size=784, hidden_size=50, output_size=10)
# 은닉층은 sigmoid, 출력층은 softmax + 교차 엔트로피
iters_num = 10000;  batch_size = 100;  learning_rate = 0.1

핵심은 역전파 한 줄 dy = (y - t) / batch_num — 소프트맥스+교차 엔트로피의 미분이 (예측 − 정답)이라는 놀랍도록 깔끔한 형태로 떨어진다는 것이다. 여기서 시작해 W2 → 은닉층 → W1 순으로 기울기를 거꾸로 채운다(grads['W2'] = h1.T·dy, dh1 = sigmoid_grad(z1)·(dy·W2.T), grads['W1'] = x.T·dh1).

매 반복마다 6만 장에서 100장씩 무작위로 뽑아(미니배치) 학습하면 정확도가 이렇게 오른다:

train acc, test acc | 0.104, 0.103   ← 학습 전: 10클래스 찍기 수준
                    | 0.783, 0.789
                    | 0.874, 0.879
                    …
                    | 0.947, 0.945   ← 약 95%

은닉 뉴런 단 50개짜리 2층 망이, 종이로 돌려 본 바로 그 역전파만으로 손글씨를 95% 맞힌다. 참고로 MNIST의 최고 성능은 2020년 기준 **99.79%**까지 올라가 있다(5장 CNN).


부품 상자: 활성화 함수, Softmax, 손실 함수

활성화 함수는 비선형성의 주입구다. 이것이 없으면 백 층을 쌓아도 수학적으로 한 층과 같다 — XOR로 되돌아간다. 시그모이드/tanh(부드러운 S자, 양 끝에서 기울기 소실)에서 ReLU(0 이하는 0, 양수는 그대로 — 단순하고 기울기가 안 죽음)로 표준이 이동했다.

Softmax는 출력 점수들을 확률로 바꾼다. 점수 (2, 1, 0)이라면:

e² : e¹ : e⁰ = 7.39 : 2.72 : 1.00  →  합 11.11로 나누면  (0.67, 0.24, 0.09)

실제 구현에서는 점수에서 최댓값 c를 먼저 빼고(exp의 오버플로 방지) 지수를 취한다. 점수 (0.3, 2.9, 4.0)을 넣으면 (0.018, 0.245, 0.737), 합은 정확히 1.0이다 — 점수 차이가 확률 차이로 부드럽게 증폭된다.

손실 함수는 ‘얼마나 틀렸나’의 정의다. 회귀엔 평균제곱오차(MSE, ½Σ(y−t)²), 분류엔 교차 엔트로피(CEE, −Σ t·log y) — 3장의 엔트로피가 여기서 또 쓰인다. 정답이 3번 클래스(t=[0,0,1,0,…])일 때 두 손실의 성격 차이를 슬라이드 숫자로 보자:

예측 분포정답 클래스 확률MSECEE
정답을 가장 높게(0.6)0.60.09750.5108
엉뚱한 곳에 0.60.10.59752.3026

정답 클래스에 모델이 부여한 확률이 p일 때 CEE는 −log p로 단순해진다: 0.9를 줬으면 0.105, 0.1을 줬으면 2.303. 자신 있게 틀리면 벌점이 폭증한다. MSE는 차이가 약 6배 벌어지는 데 비해 CEE는 4–5배 더 가파르게 벌점을 매겨, 분류 학습이 더 빨리 정답 쪽으로 끌려간다. 활성화 함수도 출력 형태에 맞춘다 — 회귀는 항등/시그모이드, 분류는 Softmax.


경사 하강법과 Local Minima

기울기를 구했으면 **경사 하강법(Gradient Descent)**으로 내려간다. 안개 낀 산에서 가장 가파른 내리막으로 한 걸음(학습률)씩. 걸음이 크면 골짜기를 건너뛰고(발산), 작으면 평생 하산한다.

문제: 가장 가까운 골짜기가 가장 깊다는 보장이 없다(local minima). 깊은 망에서는 연쇄 법칙의 곱이 누적되며 기울기가 사라지거나(vanishing gradient — 시그모이드 미분의 최대값이 0.25라서, 10층이면 0.25¹⁰ ≈ 백만분의 1) 폭발한다.

처방전:

  • Optimizer: Momentum(관성으로 얕은 골짜기 탈출), Adam(파라미터별 학습률 자동 조정 — 사실상 표준)
  • 가중치 초기화: Xavier/He 초기화 — 0.5 같은 동일값 대신, 신호가 층을 지나도 죽지 않는 분포로 출발
  • Dropout: 학습 중 뉴런을 무작위로 꺼서 특정 경로 과의존(과적합) 방지
  • Skip Connection: 층을 건너뛰는 지름길로 기울기의 고속도로 확보 — ResNet 이후 1,000층도 학습 가능, Transformer(7장)에도 내장

고차원 공간에서는 local minima보다 안장점이 더 흔하고, 큰 망일수록 골짜기들이 서로 연결되어 있다는 게 알려져 있다. “파라미터가 많을수록 오히려 최적화가 쉽다”는 역설은 스케일링 시대(7장)의 복선이다.

막간: 뇌도 드롭아웃을 한다? — 과적합된 뇌 가설 과적합을 막는 두 처방 “노이즈 주입(noise injection)“과 “드롭아웃”이 사실 우리 뇌의 밤일과 닮았다는 주장이 있다(The Overfitted Brain: Dreams evolved to assist generalization, Cell·Patterns, 2021). 가설(OBH)의 핵심: 뇌도 매일 같은 자극 분포에 너무 잘 적응한 나머지 과적합되고 일반화 능력이 떨어지는데, 밤마다 분포 밖(out-of-distribution)의 기이한 감각 자극을 환각으로 만들어 냄으로써 — 즉 꿈으로 — 일반화 능력을 되살린다는 것이다. 팬데믹 격리 기간에 꿈이 더 생생하고 잦아졌다는 보고가 방아쇠였다. 꿈은 “신경 계층 전반의 확률적 활동으로 손상된 감각 입력을 생성하는 생물학적 메커니즘”이며, 이는 드롭아웃이 일부 뉴런을 무작위로 꺼서 특정 경로 과의존을 막는 것과 정확히 같은 처방이다. 학습(낮)과 생성(밤)을 번갈아 한다는 발상은 Helmholtz Machine·VAE·Wake-Sleep 알고리즘(5장)으로 이어진다.


막간: 기억은 뇌만의 것이 아니다 — 세포 기억 최근 연구들은 학습·기억의 분자적 원리가 뇌에 국한되지 않음을 보였다(Nature, 2024). ① 비신경세포도 “분산 학습(spaced learning) 효과”를 보인다 — 간격을 두고 반복된 자극에 더 강하게 반응하는 ERK·CREB 신호 동역학으로, 벼락치기보다 반복 학습이 분자 수준에서도 유리하다. ② 지방세포는 체중을 줄여도 후성유전학적 “비만에 대한 기억(obesogenic memory)“을 유지해 요요 현상을 일으킨다 — 말 그대로 세포가 자신이 뚱뚱했음을 기억한다. ③ 운동 시 근육이 내는 생화학 신호(마이오카인)와 물리적 스트레칭이 각각 독립적으로 신경 성장을 촉진한다. 기억이 시냅스 가중치만의 일이 아니라 여러 시간 스케일의 분자 상태에 분산 저장된다는 그림은, 이 장 끝의 논쟁거리(기억 vs 일반화)와 Titans·Nested Learning의 다층 기억 발상으로 곧장 연결된다.


홉필드 — 에너지로 보는 신경망

1982년 홉필드는 신경망을 입력→출력 함수가 아니라 에너지 지형을 굴러 내려가는 동역학 시스템으로 봤다. 기억은 에너지의 골짜기로 저장되고, 잡음 낀 단서에서 출발한 상태는 가장 가까운 골짜기(완전한 기억)로 수렴한다 — 연상 기억(associative memory)이다. 경사 하강법이 ‘오차의 골짜기’를 찾는 것과 같은 수학이다. 물리학(스핀 유리)·신경과학·컴퓨터과학을 하나로 묶은 이 통찰로 홉필드는 2024년 힌튼과 함께 노벨 물리학상을 받았다.


참고 논문


논쟁거리

신경망의 파라미터가 증가할수록 기하급수적으로 늘어나는 연산 비용 문제. 신경망은 데이터를 ‘일반화’하는 걸까요? 아니면 그저 ‘단순 기억’하는 걸까요? 일반화와 기억력을 둘 다 향상시킬 수 있는 방법이 있을까요?

고전 통계학에 따르면 파라미터가 데이터보다 많은 모델은 훈련 데이터를 암기(과적합)하고 새 데이터에서 무너져야 한다. 그런데 현대의 거대 신경망은 훈련 데이터를 통째로 외울 만큼 크면서도 동시에 일반화한다(double descent 현상). 왜 그런지의 완전한 이론은 아직 없다.

LLM 연구는 둘 다 일어남을 보여준다 — 학습 데이터 일부를 그대로 토해내고(기억), 본 적 없는 조합도 푼다(일반화). 흥미로운 가설은 둘이 대립이 아니라는 것이다: 구구단 암기가 곱셈 일반화의 재료이듯, 풍부한 기억이 일반화의 토대일 수 있다.

최근 아키텍처들은 이 문제에 구조로 접근한다. behrouz-2024-titans-learning-to-memorize|Titans]는 어텐션(단기 기억)과 별도의 장기 기억 모듈을 두고, ‘놀라움(surprise)‘이 큰 정보만 선별 기억하게 한다 — 무엇을 기억하고 잊을지 자체를 학습한다. behrouz-2025-nested-learning-the-illusion|Nested Learning]은 신경망의 모든 구성 요소를 ‘업데이트 빈도가 다른 기억 시스템’으로 재해석한다 — 일반화 vs 기억의 이분법이 사실은 기억의 시간 스케일 스펙트럼이었다는 제안이다.


다음 장으로 가는 다리

이 장에서 우리는 학습 엔진을 손에 넣었다. 다층 퍼셉트론으로 단층의 한계(XOR)를 넘었고, 역전파로 “데이터를 보고 미분으로 규칙을 고친다”는 추상화를 세웠다. 이제 신경망은 정답을 알려 주기만 하면 스스로 가중치를 맞춰 간다 — 이 엔진은 다음 장들의 흔들리지 않는 전제가 된다.

그런데 엔진을 얻자마자 새 모순이 드러난다. 첫째, 깊게 쌓을수록 기울기가 소실·폭발하고 지역 최소값과 과적합이 학습을 가로막는다(이 장에서 처방전을 일부 봤지만, 근본 해법은 아니었다). 둘째, 더 깊은 문제 — 지금까지의 MLP는 입력을 한 줄로 펴서 받는 ‘평평한’ 망이다. 그래서 이미지의 공간 구조(옆 픽셀끼리 뭉쳐 모양을 이룬다는 사실)도, 문장의 순서 구조(앞 단어가 뒤 단어의 뜻을 정한다는 사실)도 살리지 못한다. MNIST를 펴서 95%는 맞혔지만, 그것은 구조를 버린 채 우격다짐으로 외운 95%였다.

그렇다면 길은 하나다. 이 범용 학습 엔진을 데이터의 구조에 맞게 특화하는 것 — 공간에는 합성곱(CNN), 순서에는 순환(RNN). 역전파는 그대로 두고, 망의 모양만 문제에 맞춰 바꾼다. 그 이야기가 다음 장이다.