2์ฃผ์ฐจ ํ์์ผ
- ๊ฒฝ์ฌ ํ๊ฐ๋ฒ (์ํ๋ง)
- ๊ฒฝ์ฌ ํ๊ฐ๋ฒ (๋งค์ด๋ง)
sympy
๋ชจ๋์ diff()
ํจ์๋ฅผ ์ฌ์ฉํด์ ๋ฏธ๋ถํ ์ ์๋ค.ํน์ ์ง์ ์์ ์ ์ ์ ๊ธฐ์ธ๊ธฐ๋ฅผ ์๋ฉด ํจ์๊ฐ f(x)
๋ฅผ ์ฆ๊ฐ/๊ฐ์์ํค๊ธฐ ์ํด x๊ฐ์ ์ด๋ ์ชฝ์ผ๋ก ์ฎ๊ฒจ์ผ ํ๋์ง ์ ์ ์๊ฒ ๋๋ค.
ํด๋น ์ง์ ์์์ ๋ฏธ๋ถ๊ฐ์ด ์์๋ ์์๋ ์๊ด์์ด ๋ฏธ๋ถ๊ฐ์ ๋นผ ์ฃผ๋ฉด (f(x-f'(x))
) ํจ์๊ฐ์ด ๊ฐ์ํ๊ณ , ๋ฏธ๋ถ๊ฐ์ ๋ํด ์ฃผ๋ฉด (f(x+f'(x))
) ํจ์๊ฐ์ด ์ฆ๊ฐํ๋ค.
(ํจ์์ ์ค๋ชฉ/๋ณผ๋กํ ๋ชจ์ ๋๋ฌธ์ ๊ทธ๋ ๋ค)
๋ฏธ๋ถ๊ฐ์ ์กฐ๊ธ์ฉ ๋ํ๊ฑฐ๋ ๋นผ์ ํจ์์ ๊ทน๊ฐ์ ์ฐพ๋ ๋ฐฉ๋ฒ์ ๊ฒฝ์ฌ ์์น๋ฒ / ๊ฒฝ์ฌ ํ๊ฐ๋ฒ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๋จธ์ ๋ฌ๋์์๋ ์์ค ํจ์(=์ค์ฐจ ํจ์, ๋น์ฉ ํจ์)์ ์ต์๊ฐ์ ์ฐพ๊ธฐ ์ํด ๊ฒฝ์ฌ ํ๊ฐ๋ฒ์ ์ ์ฉํ๋ค. ๊ทธ๋ฐ๋ฐ ๊ฒฝ์ฌ ํ๊ฐ๋ฒ๋ง ์ ์ฉํ ๊ฒฝ์ฐ ์ต์๊ฐ์ด ์๋ ๊ทน์(local minima)์ ๋น ์ง ์ ์๊ธฐ ๋๋ฌธ์ ์ค์ ๋ก๋ ์ข๋ ๋ณด์๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค.
์ผ๋ณ์ํจ์ y = ax์ ์ ํ ํ๊ท์ ๊ฒฝ์ฌ ํ๊ฐ๋ฒ์ ์ ์ฉํ ๋๋ ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
beta = init # ์ด๊ธฐ๊ฐ์ ์ง์
grad = gradient(beta) # ๋ฏธ๋ถ๊ฐ ๊ณ์ฐํ๋ ํจ์
while abs(grad) > eps: # eps : ์
์ค๋ก (๊ธฐ์ธ๊ธฐ๊ฐ ์ด ๊ฐ ์ดํ๋ก ๋ด๋ ค๊ฐ๋ฉด ๋ฐ๋ณต ์ค๋จ)
beta = beta - lr * grad # lr : learning rate, beta๋ฅผ ์
๋ฐ์ดํธํ๊ธฐ ์ํ '๋ณดํญ' ์ ๊ฒฐ์
grad = gradient(beta)
๋ค๋ณ์ํจ์์ ์ ํ ํ๊ท์ ๊ฒฝ์ฌ ํ๊ฐ๋ฒ์ ์ ์ฉํด ๋ณด์.
y = Xฮฒ (y, ฮฒ๋ ๋ฒกํฐ, X๋ ํ๋ ฌ)
์์ค ํจ์๋ ์
๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ ๋ชจ๋ x๋ค๊ณผ y ์ฌ์ด์ ๊ฑฐ๋ฆฌ ||y - Xฮฒ||2 (Root Mean Square)์ด๋ค.
X์ y๋ ๊ณ ์ ์
๋ ฅ/์ถ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๊ธฐ ๋๋ฌธ์, ์์ค ํจ์๊ฐ์ด ์ค์ด๋ค๋๋ก ์๋ ์ ์๋ ๋ณ์๋ ฮฒ๋ค.
๋ฐ๋ผ์, ์์ค ํจ์๊ฐ ์ต์๊ฐ ๋๋๋ก ํ๋ ฮฒ๋ฅผ ๊ตฌํ๊ธฐ ์ํด์ ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
(์
๋ฐ์ดํธํด์ผ ํ ๋ณ์๊ฐ ฮฒ๋ค)
beta = [init] # ๋ค๋ณ์ํจ์๋ผ ํ๋์ ์
๋ ฅ x๊ฐ ๋ฒกํฐ, beta๋ ๋ฒกํฐ
for i in range(T): # T:๋ฐ๋ณตํ์ (์ข
๋ฃ์กฐ๊ฑด์ ์ด๋ ๊ฒ ํ ์๋ ์๋ค)
error = y - X @ beta # X๋ ํ๋ ฌ, beta๋ ๋ฒกํฐ๋ผ ํ๋ ฌ๊ณฑ ๊ณ์ฐ
grad = -transpose(X) @ error # X^T์ error๋ฅผ ๊ณฑํด์ฃผ๋ฉด gradient
beta = beta - lr * grad # grad๋ฅผ ๋นผ๋ ์ด์ ๋?
# ์์ ๊ทธ๋ํ์ฒ๋ผ ฮฒ๊ฐ์ ์ฎ๊ฒจ ํจ์๊ฐ์ ๊ฐ์์ํค๊ธฐ ์ํด์.
์ฒ์์๋ ๊ธฐ์ธ๊ธฐ ฮฒ๋ฅผ ์์์ ๋ฒกํฐ๋ก ์ ํด ๋๊ณ ์์ค ํจ์(์ค์ฐจ)๋ฅผ ๊ณ์ฐํ๋ค. ์์ค ํจ์๊ฐ ์์์ง๋ ๋ฐฉํฅ์ผ๋ก ฮฒ๋ฅผ ์
๋ฐ์ดํธํ๊ธฐ ์ํด ฮฒ์์ gradient * lr๋ฅผ ๋นผ ์ค๋ค. lr
๋ ํ์ต์จ(learning rate)๋ก, ฮฒ ์
๋ฐ์ดํธ์ '๋ณดํญ'์ ๊ฒฐ์ ํ๋ค. ๋ณดํญ์ด ๋๋ฌด ํฌ๋ฉด ๊ทน์๋ก ์๋ ดํ์ง ์๊ณ , ๋ณดํญ์ด ๋๋ฌด ์์ผ๋ฉด ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฐ๋ค.
ํ๋ฅ ์ ๊ฒฝ์ฌ ํ๊ฐ๋ฒ์ ์ฌ์ฉํ๋ฉด ์ผ๋ถ ๋ฐ์ดํฐ๋ง ์ฌ์ฉํด์ gradient๋ฅผ ๊ตฌํ๊ณ , ๊ทธ๊ฑธ ์ด์ฉํด์ ฮฒ๋ฅผ ์ ๋ฐ์ดํธํ๋ค. ์ผ๋ถ ๋ฐ์ดํฐ๋ง ์ฌ์ฉํ๊ณ ํ๊ท ์ ๋๊ธฐ ๋๋ฌธ์ ์์คํจ์ ๊ทธ๋ํ๊ฐ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ ๋์ ์ฝ๊ฐ ๋ฌ๋ผ์ง๋ค๊ณ ํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๊ฒฝ์ฌ ํ๊ฐ๋ฒ์์ ๊ตฌํ gradient 0์ธ ์ง์ ์ด ํ๋ฅ ์ ๊ฒฝ์ฌ ํ๊ฐ๋ฒ์์๋ gradient 0์ด ์๋ ์ ์๊ฒ ๋๋ค. ์ด๋ฅผ ์ด์ฉํ๋ฉด ๊ทน์์์ ํ์ถํ ์๊ฐ ์๋ค.
๊ทธ ๋ฐ์๋ adagrad, momentum, adam ๋ฑ ๊ฒฝ์ฌ ํ๊ฐ๋ฒ์ ๋จ์ ์ ๋ณด์ํ๊ธฐ ์ํ ๋ฐฉ๋ฒ๋ค์ด ๋ง์ด ์๋ค.
๊ฐ์์์ ์ดํด๊ฐ ์ ๋์ง ์๋ ๋ถ๋ถ์ ์๋ก ์ด์ผ๊ธฐํ๋ฉฐ ๋ค์ ์๊ฐํด ๋ณด๋ ์๊ฐ์ ๊ฐ์ก๋ค. ๋ค๋ณ์ํจ์์ ๊ฒฝ์ฌ ํ๊ฐ๋ฒ์ ์ ์ฉํ ๋ y, ฮฒ๊ฐ ๋ฒกํฐ๊ณ X๊ฐ ํ๋ ฌ์ด๋ผ๋ ๊ฒ์ ๋ฏธ์ฒ ์๊ฐํ์ง ๋ชปํด์ ๋งค์ฐ ํท๊ฐ๋ ธ๋๋ฐ, ํ์๋ค์ ์ค๋ช
์ ๋ฃ๊ธฐ๋ ํ๊ณ ๋ด๊ฐ ์ค๋ช
ํ ์ ์๋ ๋ถ๋ถ์ ์ค๋ช
ํ๊ธฐ๋ ํ๋ฉด์ ์ข ๋ ์ ๋๋ก ์ดํดํ๊ฒ ๋์๋ค.
๊ทธ๋ฆฌ๊ณ ํฅํ ๊ณผ์ ๋ฑ์ด ๋์ค๋ฉด ํ ๋ด์์ ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ํ๊ธฐ ์ํด์ ์ฐ๋ฆฌ ํ์ Github ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ๋ฐ๋ก ๋ง๋ค์๋ค.