backPropagation

back propagation

์˜ค์ฐจ ์—ญ์ „ํŒŒ(back propagation)

: ๊ฐ€์ค‘์น˜ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ธฐ์šธ๊ธฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ณ„์‚ฐ ๊ฐ€์ค‘์น˜์—์„œ ๊ธฐ์šธ๊ธฐ๋ฅผ ๋นผ๋„ ๊ฐ’์˜ ๋ณ€ํ™”๊ฐ€ ์—†์„ ๋•Œ๊นŒ์ง€ ๊ณ„์†ํ•ด์„œ ๊ฐ€์ค‘์น˜ ์ˆ˜์ • ์ž‘์—…์„ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ

์˜ค์ฐจ ์—ญ์ „ํŒŒ ๊ตฌ๋™ ๋ฐฉ์‹ 1. ์ž„์˜์˜ ์ดˆ๊ธฐ ๊ฐ€์ค‘์น˜(W)๋ฅผ ์ค€ ๋’ค ๊ฒฐ๊ณผ(Y)๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค 2. ๊ณ„์‚ฐ ๊ฒฐ๊ณผ์™€ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๊ฐ’ ์‚ฌ์ด์˜ ์˜ค์ฐจ๋ฅผ ๊ตฌํ•œ๋‹ค 3. ๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ•์„ ์ด์šฉํ•ด ๋ฐ”๋กœ ์•ž ๊ฐ€์ค‘์น˜๋ฅผ ์˜ค์ฐจ๊ฐ€ ์ž‘์•„์ง€๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์—…๋ฐ์ดํŠธ 4. ์œ„ ๊ณผ์ •์„ ๋”์ด์ƒ ์˜ค์ฐจ๊ฐ€ ์ค„์–ด๋“ค์ง€ ์•Š์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต

  • ์˜ค์ฐจ๊ฐ€ ์ž‘์•„์ง€๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•œ๋‹ค๋Š” ์˜๋ฏธ๋Š” ๋ฏธ๋ถ„ ๊ฐ’์ด 0์— ๊ฐ€๊นŒ์›Œ์ง€๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๋‚˜์•„๊ฐ„๋‹ค๋Š” ์˜๋ฏธ

  • ๊ทธ๋ž˜์„œ ์˜ค์ฐจ์—ญ์ „ํŒŒ๋ฅผ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ๊ฐ€์ค‘์น˜์—์„œ ๊ธฐ์šธ๊ธฐ๋ฅผ ๋นผ๋„ ๊ฐ’์ด ๋ณ€ํ™”๊ฐ€ ์—†์„ ๋–„๊นŒ์ง€ ๊ณ„์†ํ•ด์„œ ๊ฐ€์ค‘์น˜ ์ˆ˜์ • ์ž‘์—…์„ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ

backPropagation

์‹ ๊ฒฝ๋ง์˜ ๊ตฌํ˜„ ๊ณผ์ • backPropagationProcess

๋‹ค์ธต ํผ์…‰ํŠธ๋ก ์ด ์˜ค์ฐจ ์—ญ์ „ํŒŒ๋ฅผ ๋งŒ๋‚˜ ์‹ ๊ฒฝ๋ง์ด ๋˜๊ณ , ์‹ ๊ฒฝ๋ง์€ xor ๋ฌธ์ œ๋ฅผ ๊ฐ€๋ณ๊ฒŒ ํ•ด๊ฒฐํ•˜์ง€๋งŒ, ๋ฌธ์ œ์ ์ด ์ƒ๊ธด๋‹ค ๊ธฐ์šธ๊ธฐ ์†Œ์‹ค (vanishing gradient) : ์ธต์ด ๋Š˜์–ด๋‚˜๋ฉด์„œ ์—ญ์ „ํŒŒ๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ๋˜๋Š” ์ด ๊ธฐ์šธ๊ธฐ์˜ ๊ฐ’์ด ์ ์  ์ž‘์•„์ ธ ๋งจ ์ฒ˜์Œ์ธต๊นŒ์ง€ ์ „๋‹ฌ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ ์ด๋Š” ํ™œ์„ฑํ™” ํ•จ์ˆ˜๋กœ ์‚ฌ์šฉ๋œ ์‹œ๊ทธ๋ชจ์ด๋“œ ํ•จ์ˆ˜์˜ ํŠน์„ฑ ๋•Œ๋ฌธ์ด๋‹ค

๊ณ„์‚ฐ ๊ทธ๋ž˜ํ”„ (computational graph)

: ๊ณ„์‚ฐ๊ณผ์ •์„ ๊ทธ๋ž˜ํ”„๋กœ ํ‘œํ˜„ํ•˜๋ฉฐ, ์šฐ๋ฆฌ๊ฐ€ ์ž˜์•„๋Š” ๊ทธ๋ž˜ํ”„ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๋ณต์ˆ˜์˜ ๋…ธ๋“œ(node)์™€ ์—์ง€(edge)๋กœ ํ‘œํ˜„

ex) ์Šˆํผ์—์„œ ์‚ฌ๊ณผ๋ฅผ 2๊ฐœ ๊ทค์„ 3๊ฐœ ์ƒ€์Šต๋‹ˆ๋‹ค. ์‚ฌ๊ณผ 1๊ฐœ์— 100์› ๊ทค์„ 150์› ์ด๊ณ , ์†Œ๋น„์„ธ๊ฐ€ 10% ์ผ๋•Œ ์ง€๋ถˆ ๊ธˆ์•ก์„ ๊ตฌํ•˜์‹œ์˜ค computationalGraph

Tip) ๊ณ„์‚ฐ์„ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์กฑ์œผ๋กœ ์ง„ํ–‰ํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ์ˆœ์ „ํŒŒ (forward propagation)๋ผ๊ณ  ๋งˆํ˜€, ์ˆœ์ „ํŒŒ๋Š” ๊ณ„์‚ฐ ๊ทธ๋ž˜ํ”„์˜ ์ถœ๋ฐœ์ ๋ถ€ํ„ฐ ์ข…์ฐฉ์ ์œผ๋กœ์˜ ์ „ํŒŒ์ด๋‹ค ๊ทธ๊ฒƒ์˜ ๋ฐ˜๋Œ€๋กœ ๋ฐ˜ํ–ฅ์œผ๋กœ ์ง„ํ–‰ํ•˜๋Š” ์ „ํŒŒ๋ฅผ ์—ญ์ „ํŒŒ(backward propagation)๋ผ๊ณ  ํ•˜๋ฉฐ, ๋ฏธ๋ถ„์„ ๊ณ„์‚ฐํ•  ๋•Œ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•œ๋‹ค

  • ๊ตญ์†Œ์  ๊ณ„์‚ฐ

    ๊ณ„์‚ฐ ๊ทธ๋ž˜ํ”„์˜ ํŠน์ง•์€ ๊ตญ์†Œ์  ๊ณ„์‚ฐ์„ ์ „ํŒŒํ•จ์œผ๋กœ์จ ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ์–ป๋Š”๋‹ค๋Š” ์ ์— ์žˆ๋‹ค. ๊ตญ์†Œ์ ์ด๋ž€ ์ž์‹ ๊ณผ ์ง์ ‘ ๊ด€๊ณ„๋œ ์ž‘์€ ๋ฒ”์œ„๋ผ๋Š” ๋œป์ด๊ณ , ๊ตญ์†Œ์  ๊ณ„์‚ฐ์€ ๊ฒฐ๊ตญ ์ „์ฒด์—์„œ ์–ด๋–ค ์ผ์ด ๋ฒŒ์–ด์ง€๋Š” ์ƒ๊ด€์—†์ด ์ž์‹ ๊ณผ ๊ด€๊ณ„๋œ ์ •๋ณด๋งŒ์œผ๋กœ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค. ์ฆ‰, ๋ณต์žกํ•œ ๊ณ„์‚ฐ๋„ ๋ถ„ํ•ดํ•˜๋ฉด ๋‹จ์ˆœํ•œ ๊ณ„์‚ฐ์œผ๋กœ ๊ตฌ์„ฑํ•œ๋‹ค๋Š” ์ ์ด๋‹ค.

์™œ? ๊ณ„์‚ฐ ๊ทธ๋ž˜ํ”„์ธ๊ฐ€? : ๊ณ„์‚ฐ ๊ทธ๋ž˜ํ”„๋ฅผ ํ†ตํ•ด์„œ ์ˆœ์ „ํŒŒ์™€ ์—ญ์ „ํŒŒ๋ฅผ ํ™œ์šฉํ•ด์„œ ๊ฐ ๋ณ€์ˆ˜์˜ ๋ฏธ๋ถ„์„ ํšจ์œจ์ ์œผ๋กœ ๊ตฌํ• ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค

์—ฐ์‡„๋ฒ•์น™

: ์—ฐ์ „ํŒŒ๋Š” ๊ตญ์†Œ์ ์ธ ๋ฏธ๋ถ„์„ ์ˆœ๋ฐฉํ–ฅ๊ณผ๋Š” ๋ฐ˜๋Œ€์ธ ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ์œผ๋กœ ์ „๋‹ฌํ•œ๋‹ค. ์ด ๊ตญ์†Œ์  ๋ฏธ๋ถ„์„ ์ „๋‹ฌํ•˜๋Š” ์›๋ฆฌ๋ฅผ ์—ฐ์‡„๋ฒ•์น™(chain rule)์— ๋”ฐ๋ฅธ ๊ฒƒ์ด๋‹ค

computationalGraphBP
  • ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์—ญ์ „ํŒŒ์˜ ๊ณ„์‚ฐ ์ ˆํŒŒ๋Š” ์‹ ํ˜ธ E์— ๋…ธ๋“œ์˜ ๊ตญ์†Œ์  ๋ฏธ๋ถ„์„ ๊ณฑํ•œํ›„ ๋‹ค์Œ๋…ธ๋“œ๋กœ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” ๊ตญ์†Œ์  ๋ฏธ๋ถ„์€ ์ˆœ์ „ํŒŒ ๋•Œ์˜ y=f(x) ๊ณ„์‚ฐ์˜ ๋ฏธ๋ถ„์„ ๊ตฌํ•˜๋Š”๊ฒƒ์ด๋ฉฐ, ์ด๋Š” x์— ๋Œ€ํ•œ y์˜ ๋ฏธ๋ถ„์„ ๊ตฌํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค. ์ด๊ฒƒ์ด ์—ญ์ „ํŒŒ์˜ ๊ณ„์‚ฐ ์ˆœ์„œ์ธ๋ฐ, ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์„ ๋”ฐ๋ฅด๋ฉด ๋ชฉํ‘œ๋กœ ํ•˜๋Š” ๋ฏธ๋ถ„ ๊ฐ’์„ ํšจ์œจ์ ์œผ๋กœ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ์ด ์ „ํŒŒ์˜ ํ•ต์‹ฌ์ด๋‹ค.

  • ์—ฐ์‡„๋ฒ•์น™์€ ํ•ฉ์„ฑํ•จ์ˆ˜์˜ ๋ฏธ๋ถ„์— ๋Œ€ํ•œ ์„ฑ์งˆ์ด๋ฉฐ, ํ•ฉ์„ฑํ•จ์ˆ˜์˜ ๋ฏธ๋ถ„์€ ํ•จ์„ฑํ•จ์ˆ˜๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ ํ•จ์ˆ˜์˜ ๋ฏธ๋ถ„์˜ ๊ณฑ์œผ๋กœ ๋‚˜ํƒ€๋‚ผ์ˆ˜ ์žˆ๋‹ค.

chainRule
  • ๋‹ค์Œ๊ณผ ๊ฐ™์ด z์™€ t์— ๋Œ€ํ•ด์„œ, x์— ๋Œ€ํ•œ ํŽธ๋ฏธ๋ถ„์„ ํ†ตํ•œ ๊ฐ’์„ ํ•ฉ์„ฑํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ๋‹ค.

์—ฐ์‡„๋ฒ•์น™์„ ๊ณ„์‚ฐ ๊ทธ๋ž˜ํ”„๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด chainRuleGraph : ์ˆœ์ „ํŒŒ์™€๋Š” ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์œผ๋กœ ๊ตญ์†Œ์  ๋ฏธ๋ถ„์„ ๊ณฑํ•˜์—ฌ ์ „๋‹ฌํ•œ๋‹ค

chainRuleGraph1 : ๊ณ„์‚ฐ ๊ทธ๋ž˜ํ”„์˜ ์—ฐ์ „ํŒŒ ๊ฒฐ๊ณผ์— ๋”ฐ๋ฅด๋ฉด z๋ฅผ x์— ๋Œ€ํ•œ ํŽธ๋ฏธ๋ถ„ ๊ฐ’์€ 2(x+y)๊ฐ€ ๋œ๋‹ค

๋ง์…ˆ ๋…ธ๋“œ์˜ ์—ญ์ „ํŒŒ

  • z = x + y๋ผ๋Š” ์‹์„ ๋Œ€์ƒ์œผ๋กœ ์—ญ์ „ํŒŒ๋ฅผ ์‚ดํŽด๋ณด๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฏธ๋ถ„์„ ํ•ด์„์ ์œผ๋กœ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค

plusBPEQ
  • ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ชจ๋‘ 1์ด ๋˜๋ฉฐ ๊ทธ๋ž˜ํ”„๋กœ ๊ทธ๋ฆฌ๋ฉด

plusBP
  • ์ƒ๋ฅ˜์—์„œ ์ „ํ•ด์ง„ ๋ฏธ๋ถ„์— 1์„ ๊ณฑํ•˜์—ฌ ํ•˜๋ฅ˜๋กœ ํ˜๋ ค๋ณด๋‚ด๋ฉฐ, ๋ง์…ˆ ๋…ธ๋“œ์˜ ์—ญ์ „ํŒŒ๋Š” 1์„ ๊ณฑํ•˜๊ธฐ๋งŒ ํ•  ๋ฟ์ด๋ฏ€๋กœ ์ž…๋ ฅ๋œ ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ๋‹ค์Œ ๋…ธ๋“œ๋กœ ๋ณด๋‚ด๊ฒŒ ๋œ๋‹ค

  • ๊ตฌ์ฒด์ ์ธ ์˜ˆ๋ฅผ ํ•˜๋‚˜ ์‚ดํŽด๋ณด๋ฉด, ๊ฐ€๋ น 10 + 5 = 15 ๋ผ๋Š” ๊ณ„์‚ฐ์ด ์žˆ๊ณ , ์ƒ๋ฅ˜์—์„œ 1.3์ด๋ผ๋Š” ๊ฐ’์ด ํ˜๋Ÿฌ๋“ค์˜ค๋Š” ๊ฒƒ์„ ๊ณ„์‚ฐ ๊ทธ๋ž˜ํ”„๋กœ ํ‘œํ˜„ํ•˜๋ฉด plusBPEX

  • ์ฆ‰ ๋ง์…ˆ ๋…ธ๋“œ ์—ญ์ „ํŒŒ๋Š” ์ž…๋ ฅ ์‹ ํ˜ธ๋ฅผ ๋‹ค์Œ ๋…ธ๋“œ๋กœ ์ถœ๋ ฅ ๋ฟ์ด๋ฏ€๋กœ 1.3์„ ๊ทธ๋ž˜๋„ ๋‹ค์Œ ๋…ธ๋“œ๋กœ ์ „๋‹ฌํ•œ๋‹ค

๊ณฑ์…ˆ ๋…ธ๋“œ์˜ ์—ญ์ „ํŒŒ

  • z = xy๋ผ๋Š” ์‹์„ ๋Œ€์ƒ์œผ๋กœ ์—ญ์ „ํŒŒ๋ฅผ ์‚ดํŽด๋ณด๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฏธ๋ถ„์„ ํ•ด์„์ ์œผ๋กœ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค

multiBPEQ
  • ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํŽธ๋ฏธ๋ถ„์„ ํ•˜๋ฉด ๊ฐ๊ฐ์˜ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜จ๋‹ค

multiBP
  • ๊ณฑ์…ˆ ๋…ธ๋“œ ์—ญ์ „ํŒŒ๋Š” ์ƒ๋ฅ˜์ด ๊ฐ’์— ์ˆœ์ „ํŒŒ ๋•Œ์˜ ์ž…๋ ฅ ์‹ ํ˜ธ๋“ค์„ ์„œ๋กœ ๋ฐ”๊พผ ๊ฐ’์„ ๊ณฑํ•ด์„œ ํ•˜๋ฅ˜๋กœ ๋ณด๋‚ธ๋‹ค.

  • ์„œ๋กœ ๋ฐ”๊พผ ๊ฐ’์ด๋ž€ ์ˆœ์ „ํŒŒ ๋•Œ x์˜€๋‹ค๋ฉด ์—ญ์ „ํŒŒ์—์„œ๋Š” y, ์ˆœ์ „ํŒŒ ๋•Œ y์˜€๋‹ค๋ฉด ์—ญ์ „ํŒŒ์—์„œ๋Š” x๋กœ ๋ฐ”๊พผ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค

  • ๊ตฌ์ฒด์ ์ธ ์˜ˆ๋ฅผ ๋ณด๋ฉด, 10 x 5 = 50์ด๋ผ๋Š” ๊ณ„์‚ฐ์ด ์žˆ๊ณ , ์—ญ์ „ํŒŒ ๋•Œ ์ƒ๋ฅ˜์—์„œ 1.3๊ฐ’์ด ํ˜๋Ÿฌ์˜จ๋‹ค๋ฉด ๊ณ„์‚ฐ๊ทธํŒจํ”„๋กœ ํ‘œํ˜„ํ•˜๋ฉด multiBPEX

  • ์ž…๋ ฅ ์‹ ํ˜ธ๋ฅผ ๋ฐ”๊พผ ๊ฐ’์„ ๊ณฑํ•˜์—ฌ ํ•˜๋‚˜๋Š” 1.3 x 5 = 6.5, ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” 1.3 x 10 = 13 ์ด ๋œ๋‹ค.

  • ๊ณฑ์…ˆ์˜ ์—ญ์ „ํŒŒ๋Š” ์ˆœ๋ฐฉํ–ฅ ์ž…๋ ฅ ์‹ ํ˜ธ์˜ ๊ฐ’์ด ํ•„์š”ํ•˜๋ฉฐ, ๊ณฑ์…ˆ ๋…ธ๋“œ๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ๋Š” ์ˆœ์ „ํŒŒ์˜ ์ž…๋ ฅ ์‹ ํ˜ธ๋ฅผ ๋ณ€์ˆ˜์— ์ €์žฅํ•ด ๋‘”๋‹ค

๋‹จ์ˆœํ•œ ๊ณ„์ธต ๊ตฌํ˜„ํ•˜๊ธฐ : ๊ณฑ์…ˆ ๊ณ„์ธต

  • init()๋Š” ์ธ์Šคํ„ด์Šค x์™€ y๋ฅผ ์ดˆ๊ธฐํ™” ํ•˜๋ฉฐ, ์ด ๋‘๋ณ€์ˆ˜๋Š” ์ˆœ์ „ํŒŒ ์‹œ์˜ ์ž…๋ ฅ๊ฐ’์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ

  • forward()์—์„œ๋Š” x์™€ y๋ฅผ ์ธ์ˆ˜๋กœ ๋ฐ›๊ณ  ๋‘ ๊ฐ’์„ ๊ณฑํ•ด์„œ ๋ฐ˜ํ™˜

  • backward()์—์„œ๋Š” ์ƒ๋ฅ˜์—์„œ ๋„˜์–ด์˜จ ๋ฏธ๋ถ„(dout)์— ์ˆœ์ „ํŒŒ ๋•Œ์˜ ๊ฐ’์„ ์„œ๋กœ ๋ฐ”๊ฟ” ๊ณฑํ•œ ํ›„ ํ•˜๋ฅ˜๋กœ ํ˜๋ฆฐ๋‹ค

  • backward()๊ฐ€ ๋ฐ›๋Š” ์ธ์ˆ˜๋Š” ์ˆœ์ „ํŒŒ์˜ ์ถœ๋ ฅ์— ๋Œ€ํ•œ ๋ฏธ๋ถ„์ž„์— ์ฃผ์˜

๋‹จ์ˆœํ•œ ๊ณ„์ธต ๊ตฌํ˜„ํ•˜๊ธฐ : ๋ง์…ˆ ๊ณ„์ธต

  • addLayer์˜ ๋ง์…ˆ๊ณ„์ธต์—์„œ๋Š” ์ดˆ๊ธฐํ™”๊ฐ€ ํ•„์š”์—†์œผ๋‹ˆ init์—์„œ๋Š” ์•„๋ฌด ์ผ๋„ ์ผ์–ด ๋‚˜์ง€ ์•Š๋Š”๋‹ค

  • ํ•„์š”ํ•œ ๊ณ„์ธต์„ ๋งŒ๋“ค์–ด ์ˆœ์ „ํŒŒ ๋ฉ”์„œ๋“œ์ธ forward()๋ฅผ ์ ์ ˆํ•œ ์ˆœ์„œ๋กœ ํ˜ธ์ถœํ•œ๋‹ค

  • ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ˆœ์ „ํŒŒ์™€ ๋ฐ˜๋Œ€ ์ˆœ์„œ๋กœ ์—ญ์ „ํŒŒ ๋ฉ”์„œ๋“œ์ธ backward()๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์›ํ•˜๋Š” ๋ฏธ๋ถ„์ด ๋‚˜์˜จ๋‹ค

ํ™œ์„ฑํ™” ํ•จ์ˆ˜ ๊ฒŒ์ธต ๊ตฌํ˜„ํ•˜๊ธฐ : ReLU๊ณ„์ธต

ReLUcom
  • ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆœ์ „ํŒŒ์ผ ๋•Œ์˜ ์ž…๋ ฅ x๊ฐ€ 0๋ณด๋‹ค ํฌ๋ฉด ์—ญ์ „ํŒŒ๋Š” ์ƒ๋ฅ˜์˜ ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ํ•˜๋ฅ˜๋กœ ํ˜๋ฆฐ๋‹ค.

  • ๋ฐ˜๋ฉด, ์ˆœ์ „ํŒŒ ๋•Œ x๊ฐ€ 0์ดํ•˜๋ฉด ์—ญ์ „ํŒŒ ๋•Œ๋Š” ํ•˜๋ฅ˜๋กœ ์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ด์ง€ ์•Š๋Š”๋‹ค(0์„ ๋ณด๋‚ธ๋‹ค)

  • ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆœ์ „ํŒŒ ๋•Œ์˜ ์ž…๋ ฅ๊ฐ’์ด 0์ดํ•˜๋ฉด ์—ญ์ „ํŒŒ ๋•Œ์˜ ๊ฐ’์€ 0์ด ๋ผ์•ผ ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์—ญ์ „ํŒŒ ๋•Œ๋Š” ์ˆœ์ „ํŒŒ ๋•Œ ๋งŒ๋“ค์–ด๋‘” mask๋ฅผ ์จ์„œ mask์˜ ์›์†Œ๊ฐ€ True์ธ ๊ณณ์—๋Š” ์ƒ๋ฅ˜์—์„œ ์ „ํŒŒ๋œ dout์„ 0์œผ๋กœ ์„ค์ •ํ•œ๋‹ค

ํ™œ์„ฑํ™” ํ•จ์ˆ˜ ๊ฒŒ์ธต ๊ตฌํ˜„ํ•˜๊ธฐ : Sigmoid ๊ณ„์ธต

Sigmoid
  • sigmoid ๊ณ„์ธต์˜ ๊ณ„์‚ฐ ๊ทธ๋ž˜ํ”„ (์ˆœ์ „ํŒŒ)

    SigmoidStep0

  • ์œ„์—์„œ๋Š” x์™€ + ๋…ธ๋“œ ๋ง๊ณ ๋„ exp ์™€ / ๋…ธ๋“œ๊ฐ€ ์ƒˆ๋กญ๊ฒŒ ๋“ฑ์žฅํ–ˆ์œผ๋ฉฐ, exp๋…ธ๋“œ๋Š” y = exp(x)๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  / ๋…ธ๋“œ๋Š” y = 1/x ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰

1๋‹จ๊ณ„ SigmoidStep1_0

  • '/' ๋…ธ๋“œ, ์ฆ‰ y = 1/x๋ฅผ ๋ฏธ๋ถ„ํ•˜๋ฉด ๋‹ค์Œ์˜ ์‹์ด ๋œ๋‹ค

  • ์—ญ์ „ํŒŒ ๋•Œ๋Š” ์ƒ๋ฅ˜์—์„œ ํ˜๋Ÿฌ์šด ๊ฐ’์— -y**2(์ˆœ์ „ํŒŒ์˜ ์ถœ๋ ฅ์„ ์ œ๊ณฑํ•œ ํ›„ ๋งˆ์ด๋„ˆ์Šค๋ฅผ ๋ถ™์ธ ๊ฐ’)์„ ๊ณฑํ•ด์„œ ํ•˜๋ฅ˜๋กœ ์ „๋‹ฌ

    SigmoidStep1_1

2๋‹จ๊ณ„

  • '+' ๋…ธ๋“œ๋Š” ์ƒ๋ฅ˜์˜ ๊ฐ’์„ ์—ฌ๊ณผ์—†์ด ํ•˜๋ฅ˜๋กœ ๋‚ด๋ณด๋‚ด๋Š” ์—ญํ• 

    SigmoidStep2

3๋‹จ๊ณ„

  • exp ๋…ธ๋“œ๋Š” y = exp(x) ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ์ƒ๋ฅ˜์˜ ๊ฐ’์— ์ˆœ์ „ํŒŒ ๋•Œ์˜ ์ถœ๋ ฅ์„ ๊ณฑํ•ด ํ•˜๋ฅ˜๋กœ ์ „ํŒŒ

    SigmoidStep3

4๋‹จ๊ณ„

  • 'x'๋…ธ๋“œ๋Š” ์ˆœ์ „ํŒŒ ๋•Œ์˜ ๊ฐ’์„ ์„œ๋กœ ๋ฐ”๊ฟ” ๊ณฑํ•œ๋‹ค.

    SigmoidStep4

๊ฐ„์†Œํ™” ๋ฒˆ์ „ simpleSigmoid

  • ๊ฐ„์†Œํ™” ๋ฒ„์ „์€ ์—ญ์ „ํŒŒ ๊ณผ์ •์˜ ์ค‘๊ฐ„ ๊ณ„์‚ฐ๋“ค์„ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์–ด ํšจ์œจ์ ์ธ ๊ณ„์‚ฐ์ด๋ผ ๋งํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ,

  • ๋…ธ๋“œ๋ฅผ ๊ทธ๋ฃนํ™”ํ•˜์—ฌ sigmoid ๊ณ„์ธต์˜ ์„ธ์„ธํ•œ ๋‚ด์šฉ์„ ๋…ธ์ถœํ•˜์ง€ ์•Š๊ณ  ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์—๋งŒ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋‹ค

์œ„์˜ ๊ฒฐ๊ณผ๊ฐ’์„ ์ •๋ฆฌํ•˜๋ฉด sigmoidArr

  • ์ด์ฒ˜๋Ÿผ sigmoid ๊ณ„์ธต์˜ ์—ญ์ „ํŒŒ๋Š” ์ˆœ์ „ํŒŒ์˜ ์ถœ๋ ฅ(y)๋งŒ์œผ๋กœ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค

    simpleSigmoidArr

  • ์ด ๊ตฌํ˜„์—์„œ๋Š” ์ˆœ์ „ํŒŒ์˜ ์ถœ๋ ฅ์„ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ out์— ๋ณด๊ด€ํ–ˆ๋‹ค๊ฐ€, ์—ญ์ „ํŒŒ ๊ณ„์‚ฐ ๋•Œ ๊ทธ ๊ฐ’์„ ์‚ฌ์šฉํ•œ๋‹ค

Affine/Softmax ๊ณ„์ธต ๊ตฌํ˜„ํ•˜๊ธฐ : Affine ๊ณ„์ธต

: ์‹ ๊ฒฝ๋ง์˜ ์ˆœ์ „ํŒŒ ๋•Œ ์ˆ˜ํ–‰ํ•˜๋Š” ํ–‰๋ ฌ์˜ ๊ณฑ์€ ๊ธฐํ•˜ํ•™์—์„œ๋Š” ์–ดํŒŒ์ธ ๋ณ€ํ™˜(Affine transformation)์ด๋ผ๊ณ  ํ•˜๋ฉฐ, ์–ดํŒŒ์ธ ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฒ˜๋ฆฌ๋ฅผ Affine ๊ณ„์ธต์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๊ตฌํ˜„ํ•œ๋‹ค

affineForward
  • X, W, B ๊ฐ€ ํ–‰๋ ฌ(๋‹ค์ฐจ์› ๋ฐฐ์—ด)๋กœ ์ˆœ์ „ํŒŒ์˜ ๊ณ„์‚ฐ ๊ทธ๋ž˜ํ”„

affineBackward
  • ์—ฌ๊ธฐ์„œ Wt์™€ Xt๋Š” ์ „์น˜ ํ–‰๋ ฌ๋กœ (i, j) ์œ„์น˜์ธ ์›์†Œ๋ฅผ (j, i)์œ„์น˜๋กœ ๋ฐ”๊พผ ๊ฒƒ์„ ๋งํ•œ๋‹ค

  • (i, j)์—์„œ i๋Š” ์„ธ๋กœ์˜ ํฌ๊ธฐ, j๋Š” ๊ฐ€๋กœ์˜ ํฌ๊ธฐ๋กœ ์ƒ๊ฐํ•œ๋‹ค

  • ํ–‰๋ ฌ ๊ณฑ(dot ๋…ธ๋“œ)์˜ ์—ญ์ „ํŒŒ๋Š” ํ–‰๋ ฌ์˜ ๋Œ€์‘ํ•˜๋Š” ์ฐจ์›Œ๋А์ด ์›์†Œ ์ˆ˜๊ฐ€ ์ผ์น˜ํ•˜๋„๋ก ๊ณฑ์„ ์กฐ๋ฆฝํ•˜์—ฌ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค affineDot

๋ฐฐ์น˜์šฉ Affine ๊ณ„์ธต : ๋ฐ์ดํ„ฐ N๊ฐœ๋ฅผ ๋ฌถ์–ด ์ˆœ์ „ํŒŒํ•˜๋Š” ๊ฒฝ์šฐ, ์ฆ‰ ๋ฐฐ์น˜์šฉ affine ๊ณ„์ธต์„ ๊ตฌํ˜„ (๋ฌถ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐฐ์น˜๋ผ๊ณ  ํ•œ๋‹ค)

affineBatch
  • ๊ธฐ์กด๊ณผ ๋‹ค๋ฅธ ๋ถ€๋ถ„์€ ์ž…๋ ฅ x์˜ ํ˜•์ƒ์ด (N, 2)๊ฐ€ ๋œ๊ฒƒ์ด๋‹ค

  • ํŽธํ–ฅ์„ ๋”ํ•  ๋•Œ๋„ ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค. ์ˆœ์ „ํŒŒ ๋•Œ์˜ ํŽธํ–ฅ ๋ง์…ˆ์€ X, W์— ๋Œ€ํ•œ ํŽธํ–ฅ์ด ๊ฐ ๋ฐ์ดํ„ฐ์— ๋”ํ•ด์ง„๋‹ค

ex) N = 2(๋ฐ์ดํ„ฐ๊ฐ€ 2๊ฐœ)๋กœ ํ•œ๊ฒฝ์šฐ, ํŽธํ–ฅ์€ ๋‘ ๋ฐ์ดํ„ฐ ๊ฐ๊ฐ์— (๊ฐ๊ฐ์˜ ๊ณ„์‚ฐ ๊ฒฐ๊ณผ์—) ๋”ํ•ด์ง„๋‹ค

  • ์—ญ์ „ํŒŒ ๋•Œ๋Š” ๊ฐ ๋ฐ์ดํ„ฐ์˜ ์—ญ์ „ํŒŒ ๊ฐ’์ด ํŽธํ–ฅ์˜ ์›์†Œ์— ๋ชจ์—ฌ์•ผ ํ•œ๋‹ค

  • ํŽธํ–ฅ์˜ ์—ญ์ „ํŒŒ๋Š” ๊ทธ ๋‘๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๋ฏธ๋ถ„์„ ๋ฐ์ดํ„ฐ๋งˆ๋‹ค ๋”ํ•ด์„œ ๊ตฌํ•˜๋ฉฐ, np.sum()์—์„œ 0๋ฒˆ์งธ ์ถ•(๋ฐ์ดํ„ฐ๋ฅผ ๋‹จ์œ„๋กœ ํ•œ์ถ•)์— ๋Œ€ํ•ด์„œ (axis=0)์˜ ์ดํ•ฉ์„ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค

Last updated

Was this helpful?