๊ธฐ๋ณธ์ ์ธ ๋ฅ๋ฌ๋์ ๋จ๊ณ๋ฅผ ํฌ๊ฒ 4๊ฐ์ง๋ก ๋๋์ด ์์๋ณด๊ณ
๋ฅ๋ฌ๋ ๋จ๊ณ
1. ๋ฐ์ดํฐ ๊ฐ๊ณต (ํต๊ณ)
2. ๋ชจ๋ธ ์ค๊ณ (์ ํ๋์)
3. ๋ชจ๋ธ ํธ๋ ์ด๋ (๋ฏธ๋ถ&์ ๋ถ)
4. ๋ชจ๋ธ ํ ์คํธ
๋ฅ๋ฌ๋์ ๊ธฐ์ด๋ฅผ ํ๊ธฐ ์ํด ์์์ผํ
์ ํ๋์
ํต๊ณ
๋ฏธ์ ๋ถ
์ค ๋ฏธ์ ๋ถ์ ์์๋ณด์
์ฒจ๋ถ๋ ํ์ผ์ ํ์ธํ๋ฉด ๋ ๊ฐ๋
๋ค์ ๋ณผ ์ ์๋ค.
๐ 1. ๋ฐ์ดํฐ ๊ฐ๊ณต
๋ฅ๋ฌ๋์์ ๋ชจ๋ธ์ ํ์ต์ํค๊ธฐ ์ํด์๋ ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ณ ๋ชจ๋ธ์ ์ ๋ ฅํ ์ ์๋๋ก ๊ฐ๊ณตํ๋ ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ํ๋ค.
์ด์ ์์ด์ ํ์ต์ ํ์ํ ๋ฐ์ดํฐ, ํ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ๋ณํด, ํธ๋ ์ด๋๊ณผ ํ ์คํธ์ ์ ๋ฆฌํ๋๋ก ๋ณํํด ์ฃผ์ด์ผ ํ๋ค
์ฌ๊ธฐ์ ํต๊ณ์ ์ ๊ทํ ์ง์์ด ํ์ํ๋ค.
์ ๊ทํ๋?
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ค๊ณ์์ ์ค๋ณต์ ์ต์ํํ๊ธฐ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์กฐํํ๋ ํ๋ก์ธ์ค๋ฅผ ์ ๊ทํ๋ผ๊ณ ํจ. ํจ์์ ์ข ์์ฑ์ ์ด์ฉํด ์ฐ๊ด์ฑ ์๋ ์์ฑ๋ค์ ๋ถ๋ฅํ๊ณ , ๊ฐ ๋ฆด๋ ์ด์ ๋ค์์ ์ด์ํ์์ด ์๊ธฐ์ง ์๋๋ก ํ๋ ๊ณผ์ ์ ๋งํจ.
๋ฅ๋ฌ๋์์ ๋ชจ๋ ๋ฐ์ดํฐ ํฌ์ธํธ๊ฐ ๋์ผํ ์ ๋์ ์ค์ผ์ผ(์ค์๋)๋ก ๋ฐ์๋๋๋ก ํด์ฃผ๋๊ฒ ์ ๊ทํ์ ๋ชฉํ์ด๋ค.
๊ฐ๋จํ ๋งํด์ ๋ฐ์ดํฐ ๋จ์์ ๋ถ์ผ์น๋ก ์ธํด ์ผ์ด๋ ์ ์๋ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ค ํ๋์ด๋ค. ํ์คํ์ ๋ฐฉ๋ฒ๋ ์๋ค.- ์ ๊ทํ
๋ฐ์ดํฐ๋ฅผ ํน์ ๊ตฌ๊ฐ์ผ๋ก ๋ฐ๊พธ๋ ์ฒ๋๋ฒ์
(์ธก์ ๊ฐ - ์ต์๊ฐ) / (์ต๋๊ฐ - ์ต์๊ฐ)
๋ฐ์ดํฐ ๊ตฐ ๋ด์์ ํน์ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ง๋ ์์น๋ฅผ ๋ณผ ๋ ์ฌ์ฉ๋จ
ํ์ฌ ๋ฐ์ดํฐ๊ฐ ์ด๋ ์์น์์๋์ง ํ์ ํ๊ธฐ ์ข๋ค- ํ์คํ
๋ฐ์ดํฐ๋ฅผ 0์ ์ค์ฌ์ผ๋ก ์์ชฝ์ผ๋ก ๋ถํฌ์ํค๋ ๋ฐฉ๋ฒ์.
ํ๊ท ์ ๊ธฐ์ค์ผ๋ก ์ผ๋ง๋ ๋จ์ด์ ธ ์๋์ง๋ฅผ ๋ํ๋ด๋ ๊ฐ์ผ๋ก ๋ณํ๋จ.
ํ๊ต <ํ๋ฅ ๊ณผ ํต๊ณ> ์๊ฐ์ ๋ฐฐ์ฐ๋ ํ์คํ( ์ธก์ ๊ฐ - ํ๊ท / ํ์คํธ์ฐจ )๋ ๋จ์์ฐจ์ด์ ๋ฌธ์ ์์ ๋ฒ์ด๋ ์์๊ฒ ํด์ฃผ๋ ์ข ๋ฅ์ค ํ๋์ด๋ค.
๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ ๊ทํ ๋ฐฉ์์ MIN-MAX
์ ๊ทํ์ด๋ค.
(๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก๋ Z-Score
์ ๊ทํ ๋ฐฉ๋ฒ๋ ์๋ค.)
๋ ์ ๊ทํ์ ๋ฐฉ์์ ๋ค์ ํฌ์คํ ์์ ์์๋ณด์ (?
๐ 2. ๋ชจ๋ธ ์ค๊ณ
๋ฐ์ดํฐ๋ฅผ ์๋ง๊ฒ ๋ชจ์๋ค๋ฉด ๋ฅ๋ฌ๋์ด ์ฝ์ ์ ์๋๋ก ๋ฐ์ดํฐ์ ํ์์ ๋ง์ถฐ์ค์ผ ํ๋ค.
์ฌ๊ธฐ์ ๋ฐ์ดํฐ ํ์๊ณผ ๋ฐ์ดํฐ ์ฐ์ฐ ๋ฐฉ์์ ์์ด์ ์ ํ๋์ ์ง์์ด ํ์ํ๋ค .
๐ ๋ฐ์ดํฐ ํ์
์ ํ๋์์์ ํฌ๊ฒ ์ค์นผ๋ผ(0์ฐจ), ๋ฒกํฐ(1์ฐจ), ํ๋ ฌ(2์ฐจ), ํ ์(N)์ 4๊ฐ์ง์ ํ์์ ๊ฐ์ง๋ค.
๋ฅ๋ฌ๋์์ ๋ค๋ฃจ๋ ๋ฐ์ดํฐ๋ ํ ์(N์ฐจ)์ธ๋ฐ
ํ ์๊ฐ 0์ฐจ์ : ์ค์นผ๋ผ
ํ ์๊ฐ 1์ฐจ์ : ๋ฒกํฐ
ํ ์๊ฐ 2์ฐจ์ : ํ๋ ฌ
์ด๋ผ๊ณ ๋ณผ ์ ์๋ค.
๋ฅ๋ฌ๋์์ ์ด๋ฌํ ํ ์๋ฅผ ์ด์ฉํ์ฌ ์ฐ์ฐ ์ํ์ ํตํด ๋ชจ๋ธ์ ํ์ต์ํค๊ฒ ๋๋ค.
๐๋ฐ์ดํฐ ์ฐ์ฐ
์์์ ์ธ๊ธํ๋๋ฐ์ ๊ฐ์ด ๋ฅ๋ฌ๋์์ ๋ค๋ฃจ๋ ๋ฐ์ดํฐ๋ **ํ
์**
์ด๋ค.
์ด๋ฅผ ์ฐ์ฐํ๊ธฐ ์ํด **ํ๋ ฌ์ ์ฐ์ฐ**
์ด ์ฐ์ธ๋ค
ํ๋ ฌ์ ์ฐ์ฐ๊ณผ์ ์ ๊ณ ๋ฑํ๊ต์์ ๋ฐฐ์ฐ๋ ๊ณผ์ ์ด์ง๋ง 2015๊ต์ก๊ณผ์ ์ ๊ธฐ์ ์ผ๋ก ์ฌ๋ผ์ก๋ค. ์ฌ์ค
๋๋ ๋ฐฐ์ด์ ์๋ค
ํ๋ ฌ์ ์ฐ์ฐ ์ค ๊ณฑ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
๊ทธ ์ธ์ ์ฐ์ฐ๋ฐฉ๋ฒ๋ค์ ์์ ์ฒจ๋ถ๋ pdf๋ฅผ ์ฐธ๊ณ ํ์
๐ 3. ๋ชจ๋ธ ํธ๋ ์ด๋
๋ฅ๋ฌ๋์์ ๋ชจ๋ธ ํธ๋ ์ด๋์ Trial-Error
๋ฐฉ์์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ฐ
๋ง ๊ทธ๋๋ก ์ผ๋จํด๋ด โ ์ค์ฐจ ๊ณ์ฐ โ ์ค์ฐจ๋งํผ ํ๋ผ๋ฏธํฐ ๊ฐ ๋ณด์ ํ๋ ๋ฐฉ์์ด๋ผ ๋ณผ ์ ์๋ค.
์ฌ๊ธฐ์ ํ๋ผ๋ฏธํฐ ๊ฐ์ ๋ณด์ ํ๋๋ฐ ๋ฏธ๋ถ&์ ๋ถ์ ๊ฐ๋ ์ด ์ด์ฉ๋๋ค.
๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋ณด์ ์ **Gradient Descent
๋ฐฉ๋ฒ**์ด๋ค.
์ค์ฐจ๊ฐ ์ต์๊ฐ ๋๋ W๊ฐ์ ์ฐพ๊ธฐ ์ํด ๋ฏธ๋ถ์ ํตํด ๊ตฌํํ Gradient๊ฐ์ ๋ฐ๋ผ W๊ฐ์ ๋ณํ์ํค๋ ๋ฐฉ๋ฒ์ด๋ค.
1์ฐจ ๊ทผ์ฟ๊ฐ ๋ฐ๊ฒฌ์ฉ ์ต์ ํ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
ํจ์์ ๊ธฐ์ธ๊ธฐ๋ฅผ ๊ตฌํ ํ ๊ธฐ์ธ๊ธฐ๊ฐ ๋ฎ์์ชฝ์ผ๋ก ๊ณ์ ์ด๋์์ผ ๊ทน๊ฐ์ ์ด๋ฅผ ๋๊น์ง ๋ฐ๋ณต์ํค๋ ๊ฒ์ด๋ค.
๐
๊ฒฝ์ฌ๋ฒ, ์์น ๋ฏธ๋ถ
ํ์ด์ฌ ๊ตฌํ
๊ฐ๋จํ ์์ฃผ ์์ ๊ฐ๊ฒฉ์ ๊ตฌ๊ฐ์ ๊ธฐ์ธ๊ธฐ๋ฅผ ๊ตฌํ๋๊ฒ์ด๋ค.
ํ๊ต์์ ๋ฐฐ์ฐ๋ ์ ์ ๋ถ๊ณผ ๋ถ์ ์ ๋ถ ๊ฐ๋ ์ด๋ค.
์ด๋ฌํ ๋ฏธ๋ถํ๋ ๊ณผ์ ์ ํ์ด์ฌ์ผ๋ก ๊ตฌํํด ๋ณด์ (ํ์ด์ defํจ์ ๋ง์ต๋๋ค. ํฐ์คํ ๋ฆฌ ์ฝ๋๋ธ๋ญ์ด ์ต์์น ์์์ ๋ค์ฌ์ฐ๊ธฐ๊ฐ ์๋ง์๋ฟ)
def numerical_diff(f,x):
h = 1e-4 #h๊ฐ์ ๊ฐ๊ธ์ ์์ ๊ฐ์ ๋์
ํ๊ณ ์ e๋ฅผ ์ด์ฉํ๋ค -> 0.0001
return (f(x+h)-f(x-h))/2*h
# ์ค์ฐจ๋ฅผ ์ค์ด๊ธฐ ์ํ ์ค์ฌ์ฐจ๋ถ์ ์ด์ฉํจ
# ๊ณ ๋ฑํ๊ต์์ x+h-(x-h) =2h๋ก ๊ณ์ฐํ๋ ๊ทธ ๊ณผ์ ๋ง๋ค
๊ฐ๋จํ 2์ฐจํจ์ (y = 0.01x^2 + 0.1x) ๋ฅผ ๊ทธ๋ฆฌ๊ณ ๋ฏธ๋ถํ ๊ฐ์ ํ์ธํด ๋ณด์
#coding:utf-8
import numpy as np
import matplotlib.pyplot as plt
def numerical_diff(f,x):
h = 1e-4
return(f(x+h)-f(x-h))/2*h
def function(x):
return 0.01*x**2 + 0.1 * x
#๊ทธ๋ํ๋ก
x = np.arange(0.0,20.0,0.1)
y = function(x)
plt.xlable("x")
plt.ylable("f(x)")
plt.plot(x,y)
plt.show()
print(numerical\_diff(function,5))
๋ฅผ ์ฐ์ด๋ณด๋ฉด x๊ฐ 5์ผ๋์ ๋ฏธ๋ถ๊ฐ์ ๊ตฌํ ์ ์๋ค.
1.9999999999908982e-09๋ก ๋์ค๋๋ฐ ๋ฏธ๋ถํ์ ๋ ๊ฐ์ด 0.2์ธ๊ฑธ ๋ณด๋ฉด ๊ฑฐ์ ์ค์ฐจ๊ฐ ์์ ์ ๋์ด๋ค
๋ฏธ๋ถ์ด ๋๋๊ฑธ ํ์ธ ํ์ผ๋ ์ค์ ๋ฅ๋ฌ๋์์ ์ฐ์ด๋ ํธ๋ฏธ๋ถ(๋ณ์๊ฐ ์ฌ๋ฟ)์ ํด๋ณด์
์ฌ๊ธฐ๋ถํฐ๋ https://m.blog.naver.com/ssdyka/221299637545์ ์ฐธ๊ณ ํ์ต๋๋ค
def function_2(x):
return x[0]**2 + x[1]**2
ํธ๋ฏธ๋ถ์ ๋์์ ๊ณ์ฐ (๊ฐ ๋ณ์๋ณ๋ก ๋ฐ๋ก ๊ณ์ฐํ๋๊ฒ ์๋๋ผ ๋์์)ํ๊ณ ์ ํ๋ฉด
๋ชจ๋ ๋ณ์์ ํธ๋ฏธ๋ถ์ ๋ฒกํฐ๋ก ์ ๋ฆฌํด ๊ณ์ฐํ๊ณ ์ด๊ฒ์ ๊ธฐ์ธ๊ธฐ(gradient)๋ผ ํ๋ค.
(x0,x1)์ ๊ฐ ์ ์์ ๊ธฐ์ธ๊ธฐ๋ฅผ ๋์์ ์ป์ ์ ์๋ค
# coding: utf-8
import numpy as np
def numerucal_gradient(f,x):
h = 1e-4 #0.0001
# x์ ํ์์ด ๊ฐ์ ๋ฐฐ์ด์ ๋ชจ๋0์ธ ๊ฐ
grad = np.zeros_like(x)
for idx in range(x.size):
tmp_val = x[idx]
# f(x+h) ๊ณ์ฐ
x[idx] = tmp_val+h
fxh1 = f(x)
# f(x-h) ๊ณ์ฐ
x[idx] = tmp_val-h
fxh2 = f(x)
grad[idx] = (fxh1-fxh2)/(2*h)
x[idx] = tmp_val
return grad
def function_2(x):
# return x[0]**2 + x[1]**2
return np.sum(x**2)
print(numerucal_gradient(function_2, np.array([3.0,4.0])))
print(numerucal_gradient(function_2, np.array([0.0,2.0])))
print(numerucal_gradient(function_2, np.array([3.0,0.0])))
# [6. 8.]
# [0. 4.]
# [6. 0.]
๊ธฐ์ธ๊ธฐ๋ฅผ ๊ทธ๋ฆผ์ผ๋ก ๊ทธ๋ ค ํ์ดํ๋ก ์์๋ณผ ์ ์๋ค (๋ฒกํฐ๊ฐ)
# coding: utf-8
# cf.http://d.hatena.ne.jp/white_wheels/20100327/p3
import numpy as np
import matplotlib.pylab as plt
from mpl_toolkits.mplot3d import Axes3D
def _numerical_gradient_no_batch(f, x):
h = 1e-4 # 0.0001
grad = np.zeros_like(x) # x์ ํ์์ด ๊ฐ์ ๋ฐฐ์ด์ ์์ฑ
for idx in range(x.size):
tmp_val = x[idx]
# f(x+h) ๊ณ์ฐ
x[idx] = float(tmp_val) + h
fxh1 = f(x)
# f(x-h) ๊ณ์ฐ
x[idx] = tmp_val - h
fxh2 = f(x)
grad[idx] = (fxh1 - fxh2) / (2*h)
x[idx] = tmp_val # ๊ฐ ๋ณต์
return grad
def numerical_gradient(f, X):
if X.ndim == 1:
return _numerical_gradient_no_batch(f, X)
else:
grad = np.zeros_like(X)
for idx, x in enumerate(X):
grad[idx] = _numerical_gradient_no_batch(f, x)
return grad
def function_2(x):
if x.ndim == 1:
return np.sum(x**2)
else:
return np.sum(x**2, axis=1)
def tangent_line(f, x):
d = numerical_gradient(f, x)
print(d)
y = f(x) - d*x
return lambda t: d*t + y
if __name__ == '__main__':
x0 = np.arange(-2, 2.5, 0.25)
x1 = np.arange(-2, 2.5, 0.25)
X, Y = np.meshgrid(x0, x1)
X = X.flatten()
Y = Y.flatten()
grad = numerical_gradient(function_2, np.array([X, Y]) )
plt.figure()
plt.quiver(X, Y, -grad[0], -grad[1], angles="xy",color="#666666")#,headwidth=10,scale=40,color="#444444")
plt.xlim([-2, 2])
plt.ylim([-2, 2])
plt.xlabel('x0')
plt.ylabel('x1')
plt.grid()
plt.legend()
plt.draw()
plt.show()
๊ฐ์ฅ ๋ฎ์ ์ฅ์๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋์ด์์ผ๋ฉฐ
๊ฐ์ฅ ๋ฎ์๊ณณ๊ณผ์ ๊ฑฐ๋ฆฌ๊ฐ ๋ฉ์ด์ง์ ๋ฐ๋ผ ํ์ดํ์ ํฌ๊ธฐ๋ ๋ฐ๋ผ ์ปค์ง๋ค.
๊ฐ์ฅ ๋ฎ์๊ณณ์ ๊ฐ๋ฆฌํค๊ณ ์๋ ํ์ดํ์ ๋ฐฉํฅ์ฒ๋ผ ๋ฅ๋ฌ๋์ ๋ชจ๋ธ ํธ๋ ์ด๋ ๊ณผ์ ์ j(w)์ ๊ฐ์ฅ ๋ฎ์ ๊ฐ์ ์ฐพ์๊ฐ๋ ๊ณผ์ ์ด๋ค.
'Develop Study ๐ป' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
MYM Edu illust (0) | 2021.01.16 |
---|---|
mongoDB ์ปฌ๋ ์ ์์ฑ (0) | 2021.01.15 |
python์ผ๋ก ๊ท ์ผ๋ถํฌ, ์ ๊ท๋ถํฌ, ๊ฐ๋ง๋ถํฌ, ์ดํญ๋ถํฌ ๊ตฌํํ๊ธฐ (0) | 2020.08.25 |
๋ฉ๋ก ์ฐจํธ ๊ฐ์ ธ์ค๊ธฐ ๋ฉ๋ก ์ฐจํธ ํฌ๋กค๋ง java (0) | 2020.08.06 |
github (0) | 2020.08.04 |