๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์ธ๊ณต์ง€๋Šฅ

5. ์˜ค์ฐจ์—ญ์ „ํŒŒ๋ฒ• (Backpropagation)

by sh119 2025. 7. 25.
๋”๋ณด๊ธฐ

 

[5์žฅ] ์˜ค์ฐจ์—ญ์ „ํŒŒ๋ฒ• – ์‹ ๊ฒฝ๋ง ํ•™์Šต์˜ ํ•ต์‹ฌ ๋ชฉ์ฐจ

    ์˜ค์ฐจ์—ญ์ „ํŒŒ๋Š” ์™œ ํ•„์š”ํ•œ๊ฐ€?

  • ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ•๊ณผ ๊ธฐ์šธ๊ธฐ ๊ณ„์‚ฐ์˜ ์–ด๋ ค์›€
  • ์—ญ์ „ํŒŒ๋กœ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•
  1. ๊ณ„์‚ฐ ๊ทธ๋ž˜ํ”„์™€ ์—ฐ์‡„๋ฒ•์น™
    • ๊ณ„์‚ฐ ๊ทธ๋ž˜ํ”„๋ž€? (๋ง์…ˆ/๊ณฑ์…ˆ ๋…ธ๋“œ๋กœ ์ชผ๊ฐœ๊ธฐ)
    • ์ˆœ์ „ํŒŒ vs ์—ญ์ „ํŒŒ
    • ์—ฐ์‡„๋ฒ•์น™์œผ๋กœ ๊ตญ์†Œ ๋ฏธ๋ถ„ ๊ณฑํ•˜๊ธฐ
  2. ์—ญ์ „ํŒŒ์˜ ์›๋ฆฌ
    • ์ถœ๋ ฅ์ธต์—์„œ ์‹œ์ž‘
    • ๊ฐ ๊ณ„์ธต์˜ ๊ตญ์†Œ ๋ฏธ๋ถ„ → ์ด์ „ ๊ณ„์ธต์œผ๋กœ ์ „๋‹ฌ
    • ๋ชจ๋“  ๊ฐ€์ค‘์น˜·ํŽธํ–ฅ์˜ ๊ธฐ์šธ๊ธฐ ๊ณ„์‚ฐ
  3. ์ฃผ์š” ๊ณ„์ธต๋ณ„ ์—ญ์ „ํŒŒ
    • ReLU / Sigmoid: ํ™œ์„ฑํ™” ๊ณ„์ธต
    • Affine: ์™„์ „์—ฐ๊ฒฐ์ธต (๊ฐ€์ค‘์น˜, ํŽธํ–ฅ, ์ž…๋ ฅ์˜ ๊ธฐ์šธ๊ธฐ)
    • SoftmaxWithLoss: ์ถœ๋ ฅ์ธต + ์†์‹ค (y - t / N๋กœ ๋‹จ์ˆœํ™”)
  4. ์—ญ์ „ํŒŒ ์ „์ฒด ํ๋ฆ„
    • SoftmaxWithLoss → Affine → ํ™œ์„ฑํ™” → ์ด์ „ ๊ณ„์ธต ์ „๋‹ฌ
    • ๊ธฐ์šธ๊ธฐ ์™„์„ฑ ํ›„ ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ•์œผ๋กœ ๊ฐ€์ค‘์น˜ ๊ฐฑ์‹ 
  5. ๊ตฌํ˜„ ๊ด€์ ์—์„œ ํ•ต์‹ฌ
    • ๊ณ„์ธต ๋‹จ์œ„ ๊ตฌํ˜„: forward/backward
    • TwoLayerNet ์กฐ๋ฆฝ: ๊ณ„์ธต ์—ฐ๊ฒฐ + ๊ธฐ์šธ๊ธฐ ๊ณ„์‚ฐ
    • ํ•™์Šต ๋ฃจํ”„: ๋ฏธ๋‹ˆ๋ฐฐ์น˜ → ์ˆœ์ „ํŒŒ → ์—ญ์ „ํŒŒ → ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐฑ์‹ 
  6. ์‹ ๊ฒฝ๋ง ํ•™์Šต ์ „์ฒด ๊ทธ๋ฆผ ์š”์•ฝ + ํ•ต์‹ฌ ์š”์•ฝ
    • ์—ฐ์‡„๋ฒ•์น™์œผ๋กœ ๊ตญ์†Œ ๋ฏธ๋ถ„ ๊ณฑํ•˜๊ธฐ
    • ๊ณ„์ธต๋ณ„ ์ฑ…์ž„ ๋ถ„๋ฆฌ
    • SoftmaxWithLoss์˜ ๋‹จ์ˆœํ™”๋œ ์—ญ์ „ํŒŒ
    • Affine, ReLU, Sigmoid์˜ ํ–‰๋ ฌ ์—ฐ์‚ฐ ๊ธฐ๋ฐ˜ ๊ธฐ์šธ๊ธฐ ๊ณ„์‚ฐ

์˜ค์ฐจ์—ญ์ „ํŒŒ์€ ์™œ ํ•„์š”ํ• ๊นŒ?

  • 4์žฅ์—์„œ ๋ณธ ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ•์€ ∂L/∂W (๊ฐ€์ค‘์น˜์— ๋Œ€ํ•œ ์†์‹ค์˜ ๋ฏธ๋ถ„)์ด ํ•„์š”ํ•˜๋‹ค.
  • ํ•˜์ง€๋งŒ ์‹ ๊ฒฝ๋ง์€ ๋‹ค์ธต ๊ตฌ์กฐ → ์ง์ ‘ ๋ฏธ๋ถ„ํ•˜๋ ค๋ฉด ๋„ˆ๋ฌด ๋ณต์žกํ•˜๋‹ค. (์ˆ˜์น˜ ๋ฏธ๋ถ„์€ ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆผ)
  • ์—ญ์ „ํŒŒ(Backpropagation):
    • ์—ฐ์‡„๋ฒ•์น™(Chain Rule)์„ ์ด์šฉํ•ด ์ถœ๋ ฅ์ธต์—์„œ ์ž…๋ ฅ์ธต์œผ๋กœ ๋ฏธ๋ถ„์„ ํšจ์œจ์ ์œผ๋กœ ์ „๋‹ฌ
    • ๊ฐ ๊ณ„์ธต๋ณ„ ๋ฏธ๋ถ„(๊ตญ์†Œ์  ๋ฏธ๋ถ„)์„ ๊ณฑํ•ด ์ „์ฒด ๋ฏธ๋ถ„์„ ๊ณ„์‚ฐ

 

1. ๊ณ„์‚ฐ ๊ทธ๋ž˜ํ”„์™€ ์—ฐ์‡„๋ฒ•์น™

๊ณ„์‚ฐ ๊ทธ๋ž˜ํ”„๋ž€?

  • ๋ณต์žกํ•œ ์—ฐ์‚ฐ์„ ๋ง์…ˆ/๊ณฑ์…ˆ ๋…ธ๋“œ๋กœ ์ชผ๊ฐœ ํ‘œํ˜„
  • ์ˆœ์ „ํŒŒ: ์ž…๋ ฅ → ์ถœ๋ ฅ (๊ณ„์‚ฐ ๊ฒฐ๊ณผ ๊ตฌํ•˜๊ธฐ)
  • ์—ญ์ „ํŒŒ: ์ถœ๋ ฅ → ์ž…๋ ฅ (๊ธฐ์šธ๊ธฐ ์ „ํŒŒ)

์—ฐ์‡„๋ฒ•์น™ (Chain Rule)

  • ์—ฌ๋Ÿฌ ํ•จ์ˆ˜๊ฐ€ ํ•ฉ์„ฑ๋œ ๊ฒฝ์šฐ ๋ฏธ๋ถ„์€ ๊ตญ์†Œ์  ๋ฏธ๋ถ„์„ ๊ณฑํ•ด์„œ ๊ณ„์‚ฐ:

  • ์ด ์›๋ฆฌ๋กœ ์ธต์ธต์ด ์—ญ์œผ๋กœ ๋ฏธ๋ถ„์„ ์ „๋‹ฌ

 

2. ์—ญ์ „ํŒŒ์˜ ์›๋ฆฌ

  1. ์ถœ๋ ฅ์ธต์—์„œ ์†์‹ค์˜ ๊ธฐ์šธ๊ธฐ ∂L/∂y ๋ฅผ ์‹œ์ž‘์ ์œผ๋กœ
  2. ๊ฐ ๊ณ„์ธต์€ ์ž์‹ ์˜ ์ž…๋ ฅ/์ถœ๋ ฅ ๊ด€๊ณ„๋ฅผ ๋ฏธ๋ถ„(๊ตญ์†Œ ๋ฏธ๋ถ„)
  3. ๊ธฐ์šธ๊ธฐ ์ „๋‹ฌ: ์ด์ „ ๊ณ„์ธต์œผ๋กœ ๊ณฑํ•ด ์ „ํŒŒ
  4. ์ตœ์ข…์ ์œผ๋กœ ๋ชจ๋“  ๊ฐ€์ค‘์น˜·ํŽธํ–ฅ์— ๋Œ€ํ•œ ๋ฏธ๋ถ„ ๊ณ„์‚ฐ

 

3. ์ฃผ์š” ๊ณ„์ธต๋ณ„ ์—ญ์ „ํŒŒ

(1) ํ™œ์„ฑํ™” ํ•จ์ˆ˜ ๊ณ„์ธต

ReLU

  • ์ˆœ์ „ํŒŒ: 0 ์ดํ•˜ → 0, ๊ทธ ์ด์ƒ → ๊ทธ๋Œ€๋กœ.
  • ์—ญ์ „ํŒŒ: ์ž…๋ ฅ์ด 0 ์ดํ•˜์ด๋ฉด ๊ธฐ์šธ๊ธฐ 0, ๊ทธ ์ด์ƒ์ด๋ฉด ๊ทธ๋Œ€๋กœ ํ†ต๊ณผ.

Sigmoid

  • ์—ญ์ „ํŒŒ:

 

(2) Affine ๊ณ„์ธต (์™„์ „์—ฐ๊ฒฐ์ธต)

  • ์ˆœ์ „ํŒŒ: ์„ ํ˜•๋ณ€ํ™˜.
  • ์—ญ์ „ํŒŒ:
    • ์ž…๋ ฅ ์— ๋Œ€ํ•œ ๊ธฐ์šธ๊ธฐ: ∂L / ∂x = ∂L / ∂y * W(T)
    • ๊ฐ€์ค‘์น˜ : ∂L / ∂W = x(T) * ∂L / ∂y
    • ํŽธํ–ฅ : ๊ธฐ์šธ๊ธฐ์˜ ํ•ฉ

๋ฐฐ์น˜ ์ฒ˜๋ฆฌ์šฉ Affine

  • ์ž…๋ ฅ X: (๋ฐฐ์น˜ × ์ž…๋ ฅ์ฐจ์›), ๊ฐ€์ค‘์น˜ W: (์ž…๋ ฅ์ฐจ์› × ์ถœ๋ ฅ์ฐจ์›)
  • ์—ญ์ „ํŒŒ ์‹œ ํ–‰๋ ฌ๊ณฑ์œผ๋กœ ํ•œ ๋ฒˆ์— ๊ณ„์‚ฐ

 

(3) Softmax + Loss ๊ณ„์ธต (์ถœ๋ ฅ ๊ณ„์ธต)

Softmax

  • ํ™•๋ฅ ๋กœ ํ•ด์„ ๊ฐ€๋Šฅ

Softmax + Cross-Entropy

  • ์—ญ์ „ํŒŒ: (์›-ํ•ซ ๋ ˆ์ด๋ธ”์ผ ๋•Œ) ๋ฐฐ์น˜์ฒ˜๋ฆฌ ๊ธฐ์ค€

์•„์ฃผ ๊ฐ„๋‹จํ•œ ๊ธฐ์šธ๊ธฐ ๊ฐ’์ด ๋‚˜์˜จ๋‹ค(Softmax + Loss๋ฅผ ํ•ฉ์น˜๋ฉด ๊ณ„์‚ฐ ๋‹จ์ˆœํ™”)

๋ฐฐ์น˜ ์‚ฌ์ด์ฆˆ N ์œผ๋กœ ๋‚˜๋ˆ  ์ฃผ์–ด์•ผ ๋ฐฐ์น˜ํฌ๊ธฐ๊ฐ€ ๋‹ฌ๋ผ๋„ gradient scale์ด ์ผ์ •ํ•˜๊ณ , ํ•™์Šต๋ฅ  ํŠœ๋‹์ด ์ผ๊ด€์ ์ผ ์ˆ˜ ์žˆ๋‹ค.

(๋‚˜๋ˆ„์ง€ ์•Š์œผ๋ฉด ๋ฐฐ์น˜ ํ•ฉ๊ณ„์— ๋Œ€ํ•œ ๊ธฐ์šธ๊ธฐ๊ฐ€ ๋˜์–ด๋ฒ„๋ฆฐ๋‹ค.)

 

 

4. ์—ญ์ „ํŒŒ์˜ ์ „์ฒด ํ๋ฆ„

  1. ์ถœ๋ ฅ์ธต: Softmax + Loss → ๊ธฐ์šธ๊ธฐ ๊ณ„์‚ฐ (y - t)
  2. Affine ๊ณ„์ธต: ๊ฐ€์ค‘์น˜, ์ž…๋ ฅ, ํŽธํ–ฅ์˜ ๊ธฐ์šธ๊ธฐ ๊ณ„์‚ฐ
  3. ํ™œ์„ฑํ™” ๊ณ„์ธต: ReLU/Sigmoid ๋ฏธ๋ถ„ ์ ์šฉ
  4. ์ด์ „ ๊ณ„์ธต์œผ๋กœ ์ „๋‹ฌ
  5. ๋ชจ๋“  ๊ฐ€์ค‘์น˜์— ๋Œ€ํ•œ ๊ธฐ์šธ๊ธฐ ์™„์„ฑ → ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ•์œผ๋กœ ๊ฐฑ์‹ 

 

5. ์ฝ”๋“œ ๊ตฌํ˜„ ์‹œ ํ•ต์‹ฌ ์‚ฌํ•ญ

(1๋‹จ๊ณ„) ๊ณ„์ธต ๋‹จ์œ„ ๊ตฌํ˜„ 

๋ชฉํ‘œ: ๊ฐ ์ธต์˜ forward() / backward() ์ดํ•ด & ๊ตฌํ˜„

  • Affine (์™„์ „์—ฐ๊ฒฐ์ธต)
  • ReLU / Sigmoid
  • SoftmaxWithLoss (Softmax + CrossEntropy)

์ œ์ผ ์ค‘์š”ํ•œ ๋‹จ๊ณ„๋กœ, ๊ณ„์ธต๋ณ„ ์ž…์ถœ๋ ฅ๊ณผ ๊ธฐ์šธ๊ธฐ ํ๋ฆ„์„ ๋จธ๋ฆฟ์†์— ๊ทธ๋ฆด ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ

(2๋‹จ๊ณ„) ์‹ ๊ฒฝ๋ง ์กฐ๋ฆฝ (TwoLayerNet)

๋ชฉํ‘œ: ์—ฌ๋Ÿฌ ๊ณ„์ธต์„ ๋ฆฌ์ŠคํŠธ๋กœ ๋ฌถ์–ด์„œ ํ•œ ๋„คํŠธ์›Œํฌ๋กœ ๋™์ž‘์‹œํ‚ค๊ธฐ

  • __init__()์—์„œ Affine, ReLU, Affine, SoftmaxWithLoss ๊ณ„์ธต ์ƒ์„ฑ
  • predict() = ์ˆœ์ „ํŒŒ (ํ•™์Šต X)
  • loss() = ์ˆœ์ „ํŒŒ + ์†์‹ค๊ฐ’
  • gradient() = ์—ญ์ „ํŒŒ๋กœ ๋ชจ๋“  ๊ฐ€์ค‘์น˜ ๊ธฐ์šธ๊ธฐ ๊ตฌํ•˜๊ธฐ

(3๋‹จ๊ณ„) ํ•™์Šต ๋ฃจํ”„ (Training Loop)

๋ชฉํ‘œ: ํ•™์Šต์ด ์‹ค์ œ๋กœ ๋Œ์•„๊ฐ€๋„๋ก ๊ตฌ์„ฑ.

  • ๋ฏธ๋‹ˆ๋ฐฐ์น˜ ๋ฝ‘๊ธฐ
  • ์ˆœ์ „ํŒŒ → ์†์‹ค ๊ณ„์‚ฐ → ์—ญ์ „ํŒŒ → ๊ธฐ์šธ๊ธฐ ๊ณ„์‚ฐ
  • ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ•(SGD)๋กœ ๊ฐ€์ค‘์น˜ ๊ฐฑ์‹ 
  • ๋ฐ˜๋ณต → ์†์‹ค ๊ฐ์†Œ & ์ •ํ™•๋„ ์ƒ์Šน ํ™•์ธ
# ์ˆœ์ „ํŒŒ
for layer in layers:
    x = layer.forward(x)

# ์—ญ์ „ํŒŒ
grad = loss_layer.backward()
for layer in reversed(layers):
    grad = layer.backward(grad)

# ๊ฐ€์ค‘์น˜ ๊ฐฑ์‹ 
for layer in layers:
    if layer.has_params:
        layer.W -= lr * layer.dW
        layer.b -= lr * layer.db

 

 

 

์‹ ๊ฒฝ๋ง ํ•™์Šต์˜ ์ „์ฒด ๊ทธ๋ฆผ

ํ•œ ๋ˆˆ์— ์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•ด ๊ฐ„๋žตํ•˜๊ฒŒ ๊ทธ๋ฆฐ ๊ทธ๋ž˜ํ”„์ž…๋‹ˆ๋‹ค * ํ‹€๋ฆฐ ๋ถ€๋ถ„์ด ์žˆ์„ ์ˆ˜ ์žˆ์–ด์š” *

 

ํ•ต์‹ฌ ์š”์•ฝ

  • ์—ฐ์‡„๋ฒ•์น™: ๊ตญ์†Œ ๋ฏธ๋ถ„์„ ๊ณฑํ•ด ์ „์ฒด ๋ฏธ๋ถ„ ๊ณ„์‚ฐ
  • ๊ณ„์ธต๋ณ„ ๋ถ„๋ฆฌ: ๊ฐ ๊ณ„์ธต์ด ์ž์‹ ์˜ ์ˆœ์ „ํŒŒ/์—ญ์ „ํŒŒ ์ฑ…์ž„
  • Softmax+CrossEntropy: ์—ญ์ „ํŒŒ๊ฐ€ ๊น”๋”ํ•˜๊ฒŒ(y-t)๋กœ ๋‹จ์ˆœํ™”๋จ
  • Affine ๊ณ„์ธต: ๊ฐ€์ค‘์น˜·์ž…๋ ฅ·ํŽธํ–ฅ์— ๋Œ€ํ•œ ๋ฏธ๋ถ„์„ ํ–‰๋ ฌ ์—ฐ์‚ฐ์œผ๋กœ ๊ณ„์‚ฐ
  • ReLU/Sigmoid: ํ™œ์„ฑํ™” ํ•จ์ˆ˜์— ๋”ฐ๋ฅธ ๊ตญ์†Œ ๋ฏธ๋ถ„ ์ ์šฉ

์ฆ‰, ์˜ค์ฐจ์—ญ์ „ํŒŒ๋Š” ์—ฐ์‡„๋ฒ•์น™์„ ์ด์šฉํ•ด ๊ณ„์ธต๋ณ„ ๊ตญ์†Œ ๋ฏธ๋ถ„์„ ๊ณฑํ•ด ๊ธฐ์šธ๊ธฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

 

๊ณ„์ธต๋ณ„ ์—ญ์ „ํŒŒ ๋ฐฉ๋ฒ• ๋ฐ ๊ฒฐ๊ณผ๋Š” ์•„๋ž˜ ๋ธ”๋กœ๊ทธ ์ฐธ๊ณ  

https://sohyun119.tistory.com/133