[TIL]4.Basic Derivative
๋ชฉํ
- ์ต์ ์์ ๋ฏธ๋ถ์ ๊ด๊ณ
- ๋ฏธ๋ถ, ํธ๋ฏธ๋ถ, 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/]