Jayden1116 2021. 11. 27. 22:32

๋ชฉํ‘œ

  • ์ตœ์ ์™€์™€ ๋ฏธ๋ถ„์˜ ๊ด€๊ณ„
  • ๋ฏธ๋ถ„, ํŽธ๋ฏธ๋ถ„, Chain Rule์˜ ์ฐจ์ด๋ฅผ ์ดํ•ด
  • ๋„ํ•จ์ˆ˜(๋ฏธ๋ถ„)์„ ํŒŒ์ด์ฌ์œผ๋กœ ์ง์ ‘ ๊ตฌํ˜„ ๋ฐ scipy ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉ

๋ฏธ๋ถ„(Derivative)

 

๊ทธ๋ฆผ์„ ๋ณด๋ฉด ์šฐ๋ฆฌ๊ฐ€ ๊ณ„์‚ฐํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒƒ์€ Δx๊ฐ€ ํ•œ์—†์ด 0์— ๊ฐ€๊นŒ์›Œ์งˆ ๋•Œ์˜ ๊ธฐ์šธ๊ธฐ

ํŠน์ •ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’ (input, x)์— ๋Œ€ํ•ด์„œ ๋‚˜์˜ค๋Š” ๊ฒฐ๊ณผ๊ฐ’(output, y)์ด ๋ณ€ํ™”ํ•˜๋Š” ์ •๋„๋ฅผ (0์— ๊ฐ€๊นŒ์šด ๋ถ€๋ถ„์„ ์ฐพ๊ธฐ ์œ„ํ•ด) ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ.

๋ฏธ๋ถ„๊ณผ ๋ฐ์ดํ„ฐ ์‚ฌ์ด์–ธ์Šค๋Š” ๋ฌด์Šจ ์ƒ๊ด€์ด ์žˆ๋‚˜?

์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ๋ถ„ํฌ๊ฐ€ ์žˆ์„ ๋•Œ, ๊ทธ ๋ถ„ํฌ๋ฅผ ๊ฐ€์žฅ ์ž˜ ์„ค๋ช…ํ•ด์ฃผ๋Š” ํ•˜๋‚˜์˜ ์„ ์„ ๊ทธ๋ฆฐ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž.

y-hat=b+aX (a:๊ธฐ์šธ๊ธฐ, b:y์ ˆํŽธ, y-hat:์˜ˆ์ธก๊ฐ’, x:๋ฐ์ดํ„ฐ) cf) ๋ณดํ†ต ์‹ค์ œ๊ฐ’์€ ๊ทธ๋ƒฅ y๋กœ ํ‘œํ˜„ํ•œ๋‹ค.
์ฃผ์–ด์ง„ ๋ฐ์ดํ„ฐ X๋ฅผ ๋„ฃ์—ˆ์„ ๋•Œ, ๋ชจ๋ธ์ด ์˜ˆ์ธกํ•˜๋Š” ์˜ˆ์ธก๊ฐ’๊ณผ ์‹ค์ œ๊ฐ’ ๊ฐ„์˜ ์ฐจ์ด(Error, ε)๋ฅผ ๊ณ„์‚ฐ, ์—ฌ๋Ÿฌ ๋ชจ๋ธ ์ค‘ Error(๋ชจ๋ธ์—์„œ ์˜ˆ์ธกํ•˜๋Š” ์˜ˆ์ธก๊ฐ’๊ณผ ์‹ค์ œ๊ฐ’ (y)์˜ ์ฐจ์ด)๊ฐ€ ๊ฐ€์žฅ ์ž‘์€ ๋ชจ๋ธ์„ ์„ ํƒํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด ๊ฐ€์žฅ ์ข‹์€ ๋ชจ๋ธ์„ ์„ ํƒํ•œ๋‹ค๋ง.
์ด๋ฅผ, f(a,b)=ε ๋กœ ํ‘œํ˜„ ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์˜ค์ฐจ ํ•จ์ˆ˜์ธ ε์„ ์ตœ์†Œํ™” ํ•˜๋Š” a,b๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ด ๋จธ์‹ ๋Ÿฌ๋‹(Linear regression)์˜ ๋ชฉํ‘œ!!!
์ด๋•Œ, ์„ ํ˜•ํšŒ๊ท€๋ชจ๋ธ์˜ ๊ฒฝ์šฐ ์˜ค์ฐจ ํ•จ์ˆ˜๋Š” ๋ณดํ†ต 'Mean Squared Error'๋ฅผ ์‚ฌ์šฉ!!
์ฆ‰, ์šฐ๋ฆฌ๊ฐ€ 2์ฐจ ํ•จ์ˆ˜์˜ ๊ธฐ์šธ๊ธฐ๊ฐ€ 0์ผ ๋•Œ๋ฅผ ํฌ๋ฌผ์„ ์˜ ๋์ (y๊ฐ’์ด ์ตœ์†Œ๊ฐ€ ๋˜๋Š” ์ง€์ )์„ ์ฐพ๋“ฏ์ด f(a,b)๋ฅผ ๋ฏธ๋ถ„ํ•˜์—ฌ Error๊ฐ€ ์ตœ์†Œ๋˜๋Š” a,b๋ฅผ ์ฐพ๋Š” ๊ฒƒ => Mean Squared Error

Numerical method๋ฅผ ์ด์šฉํ•œ ๋ฏธ๋ถ„ ๊ณ„์‚ฐ(๋ณดํ†ต ๋ธํƒ€x๋ฅผ 1e-5(์•„์ฃผ ์ž‘์€ ๊ฐ’)์„ ๋„ฃ์–ด์„œ ์ˆ˜์‹์„ ํ†ตํ•œ ๊ณ„์‚ฐ)

def f(x):
    return 3*(x**4) + 10

def numerical_derivative(fx, x):
    delta_x = 1e-5

    return (fx(x + delta_x) - fx(x)) / delta_x

numerical_derivative(f, 2)

scipy๋ฅผ ์ด์šฉํ•œ ๋ฏธ๋ถ„ ๊ณ„์‚ฐ(์‚ฌ๊ธฐ์ž„)

from scipy.misc import derivative
drivative(f, 2, dx=1e-5)

cf) ํ—ˆ๋‚˜ ์‹ค์ œ๋กœ ์œ„ ๋‘ ๊ฐ’์„ ๋น„๊ตํ•ด๋ณด๋ฉด False๊ฐ€ ๋‚˜์˜จ๋‹ค. ์ด์œ  : delta x ๊ฐ’์ด ๊ฐ™์€๋ฐ, python์˜ rounding ์—๋Ÿฌ๋กœ ์ธํ•ด ๋‘ ๊ฒฐ๊ณผ๊ฐ€ ๋ฏธ๋ฌ˜ํ•˜๊ฒŒ ๋‹ค๋ฆ„(์ฐธ๊ณ ๋งŒ ํ•˜์ž)

ํŽธ๋ฏธ๋ถ„(Partial Derivative) ๋ผ์šด๋“œ๋กœ ํ‘œ๊ธฐ

๋งŽ์€ ๋จธ์‹ ๋Ÿฌ๋‹์˜ Error ํ•จ์ˆ˜๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ†ตํ•ด ๊ฒฐ์ •๋œ๋‹ค.
ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ 2๊ฐœ ์ด์ƒ์ธ Error ํ•จ์ˆ˜์—์„œ '์šฐ์„  1๊ฐœ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋Œ€ํ•ด์„œ๋งŒ ๋ฏธ๋ถ„์„ ํ•˜์ž'๋ผ๋Š” ๋ชฉ์ ์œผ๋กœ ํ•˜๋Š” ๋ฏธ๋ถ„
๊ฐ„๋‹จํžˆ, ๋‹ค๋ฅธ ๋…๋ฆฝ๋ณ€์ธ(ํŒŒ๋ผ๋ฏธํ„ฐ)๋ฅผ ์ƒ์ˆ˜์ทจ๊ธ‰ํ•ด์„œ ๋ฏธ๋ถ„ํ•˜๋Š” ๊ฒƒ. (์ฐจ์›์ด ์ปค์งˆ ๋• ๋ฐฉํ–ฅ์— ๋”ฐ๋ผ์„œ ๋ฏธ๋ถ„ ๊ธฐ์šธ๊ธฐ๊ฐ€ ๋‹ฌ๋ผ์ง€๋‹ˆ๊นŒ)

Chain Rule

F(x)=f(g(x))
F′(x) → f′((g(x))⋅g′(x)

Chain Rule์€ ๋”ฅ๋Ÿฌ๋‹์˜ ํ•ต์‹ฌ ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜์ธ Backward Propagation(์—ญ์ „ํŒŒ)์„ ์ดํ•ดํ•˜๋Š”๋ฐ ์ค‘์š”ํ•˜๋‹ˆ ๊ธฐ์–ตํ•ด๋‘์ž :)

๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ•(Gradient Descent; GD)

์œ„์—์„œ ๊ฑฐ๋ก ๋œ ์˜ค์ฐจ ํ•จ์ˆ˜(๐œ€)๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” a,b๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ์ตœ์ ํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘ ํ•˜๋‚˜!
์ตœ์ ์˜ a,b๋ฅผ ์ฐพ๊ธฐ์œ„ํ•ด์„  ๋ฏธ๋ถ„๊ณ„์ˆ˜๊ฐ€ 0์ธ ๊ฐ’์„ ์ฐพ์•„์•ผํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ˜„์‹ค์ ์œผ๋กœ ์šฐ๋ฆฌ๊ฐ€ ๋‹ค๋ฃฐ ๋ฌธ์ œ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ˆ˜์—†์ด ๋งŽ๊ณ 
๋˜ํ•œ ํ•˜๋‚˜์˜ minimum/maximum๋งŒ ์กด์žฌํ•˜๋Š” ๊ฒŒ ์•„๋‹ ๊ฒƒ์ด๋‹ค.(๋‹จ์ˆœ 2์ฐจํ•จ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋‹ˆ๊นŒ)

ํ•ด์„œ ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ•์€ ์ž„์˜์˜ a,b๋ฅผ ์„ ํƒํ•œ ํ›„(random initialization), ๊ธฐ์šธ๊ธฐ(gradient)๋ฅผ ๊ณ„์‚ฐํ•ด์„œ ๊ธฐ์šธ๊ธฐ ๊ฐ’์ด ๋‚ฎ์•„์ง€๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๊ณ„์† ์ง„ํ–‰
๊ธฐ์šธ๊ธฐ๋Š” ํ•ญ์ƒ ์†์‹ค ํ•จ์ˆ˜ ๊ฐ’์ด ๊ฐ€์žฅ ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ง„ํ–‰ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ• ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ธฐ์šธ๊ธฐ์˜ ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™
๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ•์—์„œ a,b๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ณ„์‚ฐ ๋ฉ๋‹ˆ๋‹ค :

a[n+1]=a[n] −η∇f(a[n])
b[n+1]=b[n] −η∇f(b[n]) => ๊ทธ๋ž˜๋””์–ธํŠธ์™€ ๋ฐ˜๋Œ€๋กœ ๊ฐ€๋‹ˆ๊นŒ ์•ž์— - ๋ถ€ํ˜ธ๊ฐ€ ๋ถ™๋Š”๋‹ค.

์ด๋ ‡๊ฒŒ ๋ฐ˜๋ณต์ ์œผ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ a,b๋ฅผ ์—…๋ฐ์ดํŠธํ•ด๊ฐ€๋ฉด์„œ ๊ทธ๋ž˜๋””์–ธํŠธ(∇f)๊ฐ€ 0์ด ๋  ๋•Œ๊นŒ์ง€ ์ด๋™!! (a[n]๊ณผ a[n+1]์ด ์ฐจ์ด๊ฐ€ ์—†์„ ๋•Œ๊นŒ์ง€)
์ด ๋•Œ, η(์—ํƒ€, ์—ฌ๊ธฐ์„  learning rate; ํ•™์Šต๋ฅ )๊ฐ€ ์ค‘์š”! ๋„ˆ๋ฌด ๋‚ฎ๊ฒŒ ๋˜๋ฉด ์ˆ˜๋ ดํ•˜๋Š”๋ฐ ๋„ˆ๋ฌด ๋งŽ์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๊ณ , ๋„ˆ๋ฌด ํฌ๋ฉด ์˜คํžˆ๋ ค ๊ทน์†Œ๊ฐ’์„ ์ง€๋‚˜์ณ ๋ฒ„๋ ค์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ˆ˜๋ ดํ•˜์ง€๋ชปํ•˜๊ณ  ๋ฐœ์‚ฐํ•ด๋ฒ„๋ฆผ

  • ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ•์€ ์ถ”ํ›„์— ๋” ์ž์„ธํžˆ ๋ฐฐ์šธํ…Œ๋‹ˆ ๊ฐœ๋… ์ •๋„๋ฅผ ์•Œ๊ณ  ์žˆ๋„๋ก!!!
    (์‚ฌ์ดํŠธ๊ฐ€ ๊ธฐ์–ต ์•ˆ๋‚˜๋Š”๋ฐ, ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ• ํŒŒ๋ผ๋ฏธํ„ฐ ์ •ํ•ด๋‘๊ณ  ์ง์ ‘ ์‹œ๊ฐ์ ์œผ๋กœ ๋ณด๊ฒŒ ํ•ด์ฃผ๋Š” ์‚ฌ์ดํŠธ ๊ธฐ์–ต!)
    ์—ฌ๊ธฐ๋ผ๋„ ์ฐธ๊ณ ํ•˜์ž [https://uclaacm.github.io/gradient-descent-visualiser/]