Chap.04 ์ ๊ฒฝ๋ง ํ์ต
4-0. Intro
๐ก ํ์ต์ด๋?
ํ๋ จ ๋ฐ์ดํฐ๋ก๋ถํฐ ๊ฐ์ค์น ๋งค๊ฐ๋ณ์์ ์ต์ ๊ฐ์ ์๋์ผ๋ก ํ๋ํ๋ ๊ฒ
์ด๋ฒ ์ฅ์์๋ ์ ๊ฒฝ๋ง์ด ํ์ตํ ์ ์๋๋ก ํด์ฃผ๋ ์งํ์ธ ์์ค ํจ์๋ฅผ ์๊ฐํ๋ค.
4-1. ๋ฐ์ดํฐ ํ์ต
๊ธฐ๊ณํ์ต์ ์ค์ฌ์๋ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋ค. ๊ธฐ๊ณํ์ต์์๋ ์ด๋ฌํ ๋ฐ์ดํฐ๋ค์ ๋ถ์ํ๊ณ ํน์ง๋ค์ ์ถ์ถํ์ฌ ์์ธก์ ํ๋ค.
์ ๊ฒฝ๋ง์์๋ ์ด๋ฐํ ํน์ง์ ์ ์ ํ๋ ๊ฒ์ ์๋์ ์ผ๋ก ํด์ค๋ค.

์์ ๊ทธ๋ฆผ์ ์ฌ๋, ๊ธฐ๊ณํ์ต, ์ ๊ฒฝ๋ง์ ์ฐจ์ด๋ฅผ ์ง๊ด์ ์ผ๋ก ๋ณด์ฌ์ค๋ค.
์ฌ๋์ ์ง์ ๋์ผ๋ก ๋ณด๋ฉฐ ํน์ง์ ์ฐพ์๋ด๊ณ ๊ฒ์ถํ์ง๋ง ๊ธฐ๊ณ๋ฝ์ต์ ์ฌ๋์ด ์๊ฐํ ํน์ง์ ํ ๋๋ก ๊ธฐ๊ณํ์ต์ ํ๋ค. ๋ฐ๋ฉด์ ์ ๊ฒฝ๋ง์์๋ ๋ฐ์ดํฐ์ ํน์ง์ ์๋์ผ๋ก ์ ์ ํ๋ฉฐ ๊ฒฐ๊ณผ๋ฅผ ์ถ์ถํ๋ค. ์ด๋ฌํ ๊ณผ์ ์ ๋ฅ๋ฌ๋์ ์ข ๋จ๊ฐ ๊ธฐ๊ณํ์ต์ด๋ผ๊ณ ํ๋ค.
ํ๋ จ ๋ฐ์ดํฐ์ ์ํ ๋ฐ์ดํฐ
๋ณดํต ๊ธฐ๊ณํ์ต์์๋ ๋ฒ์ฉ๋ฅ๋ ฅ์ ์ ๋๋ก ํ๊ฐํ๊ธฐ ์ํด ํ๋ จ ๋ฐ์ดํฐ์ ์ํ ๋ฐ์ดํฐ๋ก ๋ถ๋ฆฌํ๋ค.
๐ก ํ๋ จ ๋ฐ์ดํฐ์ ์ํ ๋ฐ์ดํฐ
ํ๋ จ ๋ฐ์ดํฐ๋ ๋ชจ๋ธ์ ํ์ต์ํฌ ๋ ์ฌ์ฉ๋๋ฉฐ ์ํ๋ฐ์ดํฐ๋ ํ์ต๋ ๋ชจ๋ธ์ ํ๊ฐํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
ํ์ง๋ง ํ๋ จ ๋ฐ์ดํฐ๋ก ๋ชจ๋ธ์ ํ์ต์ํฌ ๋ ์ค๋ฒํผํ ์ด ์ ๋๋๋ก ์ฃผ์ํด์ผํ๋ค.
๐ก ์ค๋ฒํผํ ์ด๋?
ํ ๋ฐ์ดํฐ์ ์๋ง ์ง๋์น๊ฒ ์ต์ ํ๋ ์ํ
4-2. ์์ค ํจ์
์ ๊ฒฝ๋ง ํ์ต์์๋ ํ์ฌ์ ์ํ๋ฅผ ์์คํจ์๋ก ํํํ๋ ๋ฐ ์ด ์์คํจ์์ ๊ฐ์ ์ด์ฉํด ์๋ง์ ๊ฐ์ค์น ๋งค๊ฐ๋ณ์์ ๊ฐ์ ์ฐพ์๊ฐ๋ค.
๐ก ์์คํจ์๋?
์ ๊ฒฝ๋ง์ ์ฑ๋ฅ์ '๋์จ'์ ๋ํ๋ด๋ ์งํ์ด๋ค. ๋ํ์ ์ผ๋ก๋ ์ค์ฐจ์ ๊ณฑํฉ, ๊ต์ฐจ ์ํธ๋กํผ ์ค์ฐจ๋ฅผ ์ฌ์ฉํ๋ค.
์ค์ฐจ์ ๊ณฑํฉ
์ ๊ทธ๋ผ ๋ง์ด ์ฌ์ฉํ๋ ์์คํจ์์ธ ์ค์ฐจ์ ๊ณฑํฉ์ ์์๋ณด์.

์์ ์์์ ์ค์ฐจ์ ๊ณฑํฉ์ ์์์ผ๋ก ๋ํ๋ธ ๊ฒ์ด๋ค.
๋จ์ํ ์ ๊ฒฝ๋ง ๊ฒฐ๊ณผ(y)์์ ์ ๋ต ๋ ์ด๋ธ(t)๋ฅผ ๋นผ๊ณ ์ ๊ณฑ ํ ํฉ์ ๊ตฌํด 2๋ก ๋๋ ๊ฒ์ด๋ค.
๊ทธ๋ผ ์ฝ๋๋ก ๊ตฌํํด๋ณด์.
def sum_squares_error(y, t):
return 0.5 * np.sum((y-t)**2)
์ด๋ ๊ฒ ๊ตฌํ ์ค์ฐจ์ ๊ณฑํฉ์ ์ด๋ป๊ฒ ์ฌ์ฉํ ๊น?
t =[0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
y = [0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0]
sum_squares_error(np.array(y), np.array(t))
# >>> 0.097500000000031
y = [0.1, 0.05, 0.1, 0.0, 0.05, 0.1, 0.0, 0.6, 0.0, 0.0]
sum_squares_error(np.array(y), np.array(t))
# >>> 0.5975000000003
์์ ์ฝ๋์ฒ๋ผ ์ค์ฐจ์ ๊ณฑํฉ์ด ๋ฎ์์ง์๋ก ์ ๋ต์ผ ํ๋ฅ ์ด ์ฌ๋ผ๊ฐ๊ณ ๋ฐ๋๋ก ๋์์ง์๋ก ์ ๋ต์ผ ํ๋ฅ ์ ๋ด๋ ค๊ฐ๋ค.
๊ต์ฐจ ์ํธ๋กํผ ์ค์ฐจ
๊ทธ๋ผ ๋ค๋ฅธ ์์คํจ์์ธ ๊ต์ฐจ ์ํธ๋กํผ ์ค์ฐจ๋ฅผ ์ดํด๋ณด์.

์ค์ฐจ์ ๊ณฑํฉ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก y๋ ์ถ๋ ฅ์ t๋ ์ ๋ต ๋ ์ด๋ธ์ ๊ฐ๋ฆฌํจ๋ค.
def cross_entropy_error(y, t):
delta = 1e-7
return -np.sum(t * np.log(y + delta))
๊ต์ฐจ ์ํธ๋กํผ ์ค์ฐจ๋ ๋ก๊ทธ ๊ฐ์ด ๋ฌดํ๋ฐ๋ก ๊ฐ๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด delta๊ฐ์ ์ฌ์ฉํ์๋ค.
์ค์ฐจ์ ๊ณฑํฉ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ต์ฐจ ์ํธ๋กํผ ์ค์ฐจ๊ฐ์ด ์ปค์ง๋ฉด ์ ๋ต์ผ ํ๋ฅ ์ ๋ฎ์์ง๊ณ ์์์ง๋ฉด ์ ๋ต์ผ ํ๋ฅ ์ ๋์์ง๋ค.
์์คํจ์๋ฅผ ์ฌ์ฉํ๋ ์ด์
์ ํ๋๋ฅผ ์งํ๋ก ํ๋ฉด ๋งค๊ฐ๋ณ์์ ๋ฏธ๋ถ์ด ๋๋ถ๋ถ์ ์ฅ์์์ 0์ด ๋๊ธฐ ๋๋ฌธ์ ์ ๊ฒฝ๋ง์ ํ์ต์ํฌ ๋ ์ ํ๋๋ฅผ ์งํ๋ก ์ผ์์๋ ์ ๋๋ค.
์ ํ๋๋ฅผ ์งํ๋ก ์ผ์ผ๋ฉด ์ ํ๋๊ฐ ๊ฐ์ ๋๋ค๊ณ ํ๋๋ผ๋ ๋ถ์ฐ์์ ์ธ ๊ฐ์ ๊ฐ๊ฒ ๋๋ค. ํ์ง๋ง ์์คํจ์๋ฅผ ์งํ๋ก ์ผ์ผ๋ฉด ์ฐ์์ ์ธ ๊ฐ์ ๊ฐ๊ฒ ๋๋ค.
4-3. ์์น ๋ฏธ๋ถ

์์น ๋ฏธ๋ถ์ ์์์ ๋ค์๊ณผ ๊ฐ๋ค. ๊ทธ๋ผ ์ด ์์์ ์ฝ๋๋ก ๊ตฌํํด๋ณด์.
def numerical_diff(f, x):
h = 10e-50
return (f(x+h) - f(h)) / (h)
์์น๋ฏธ๋ถ์ ์ฝ๋๋ก ๊ตฌํํด ๋ณด์์ง๋ง ์ ์ฝ๋๋ ๋ ๊ฐ์ง์ ๋ฌธ์ ์ ์ด ์๋ค.
- h๋ฅผ ๋๋ฌด ์์ ๊ฐ์ ์ฃผ๋ฉด ๋ฐ์ฌ๋ฆผ ์ค์ฐจ๊ฐ ๋ฐ์ํด 0์ผ๋ก ๋ณํ๋จ
- f(x+h) - f(h)๋ ๊ทผ์ฌ ๋ฏธ๋ถ์ด์ง ์ ํํ ๋ฏธ๋ถ๊ฐ์ด ์๋๋ค.
์ด ๋ฌธ์ ์ ๋ค์ ํด๊ฒฐํ๊ธฐ ์ํด ๋ค์ 2๊ฐ๋ก ์์ ํด๋ณด์.
- h๊ฐ์ ๋๋ฌด ์์ง์๊ฒ ๋ณ๊ฒฝ
- ์ค์ฌ์ฐจ๋ถ ์ฌ์ฉ
def numerical_diff(f, x):
h = 1e-4 # 0.0001
return (f(x+h) - f(x-h)) / (2*h)
ํธ๋ฏธ๋ถ
๋ณ์๊ฐ ๋ ๊ฐ์ด์์ ์์ ๋ฏธ๋ถํ๊ธฐ ์ํด์๋ ํธ๋ฏธ๋ถ์ ์ฌ์ฉํ๋ค.
ํธ๋ฏธ๋ถ์ ์ฌ๋ฌ ๋ณ์ ์ค ๋ชฉํ ๋ณ์ ํ๋์ ์ด์ ์ ๋ง์ถ๊ณ ๋ค๋ฅธ ๋ณ์ ๊ฐ์ ๊ณ ์ ํ์ฌ ๊ตฌํ๋ค.
def numerical_gradient(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
ํธ๋ฏธ๋ถ์ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌํํ ์ ์๋ค.
4-4. ๊ธฐ์ธ๊ธฐ
๊ฒฝ์ฌํ๊ฐ๋ฒ
๋ค์ ์ด์ ์ ๊ฒฝ๋ง์ผ๋ก ๋์๊ฐ ๋ณด๋ฉด ์ฐ๋ฆฌ๋ ์ง๊ธ ์์ค ํจ์๊น์ง ๋ฐฐ์ ๋ค. ๊ทธ๋ผ ์์คํจ์๊ฐ ์ต์ ์ ํด๋ฅผ ๊ฐฑ์ ํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด์.
๊ฒฝ์ฌํ๊ฐ๋ฒ์ ๊ธฐ์ธ๊ธฐ๋ฅผ ์ด์ฉํด ์์คํจ์๊ฐ ์ต์๊ฐ์ ๊ฐ๋ ๊ณณ์ ์ฐพ์์ค๋ค.
๊ฒฝ์ฌํ๊ฐ๋ฒ์ ์์คํจ์ ๊ทธ๋ํ์์ ํ ์ ์ ๊ธฐ์ธ๊ธฐ๋ฅผ ๊ตฌํ ํ ๊ธฐ์ธ๊ธฐ๊ฐ ์ต์๊ฐ ๋๋ ๊ณณ์ผ๋ก ์ด๋ํ๋ ๊ฒ์ ๋ฐ๋ณตํ๋ค.
๊ฒฝ์ฌํ๊ฐ๋ฒ์ ์์์ ์๋์ ๊ฐ๋ค.

์ด์๊ฐ์ ๊ฒฝ์ฌํ๊ฐ๋ฒ์ ์ฝ๋๋ก ๊ตฌํํด๋ณด์.
def gradient_descent(f, init_x, lr=0.01, step_num=100):
x = init_x
for i in range(step_num):
grad = numerical_gradient(f, x)
x -= lr * grad
return x
๊ฒฝ์ฌํ๊ฐ๋ฒ์์ ๊ฐ์ ๊ฐฑ์ ํ ๋ ํ์ต๋ฅ ์ด๋ผ๋ ๊ฒ์ด ์กด์ฌํ๋๋ฐ ์ด๋ ํ ๋ฒ์ ํ์ต์ผ๋ก ์ผ๋ง๋งํผ ํ์ตํด์ผํ๋์ง ์ฆ ๋งค๊ฐ๋ณ์ ๊ฐ์ ์ผ๋ง๋ ๊ฐฑ์ ํ๋๋๋ฅผ ์ ํ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ฉด ์ด ๊ฒฝ์ฌํ๊ฐ๋ฒ์ ์ด์ฉํด f(x0, x1) = x0^2 + x1^2์ ์ต์๊ฐ์ ๊ตฌํด๋ณด์.
def function_2(x):
return x[0]**2 + x[1]**2
init_x = np.array([-3.0, 4.0])
lr = 0.1
step_num = 20
x, x_history = gradient_descent(function_2, init_x, lr=lr, step_num=step_num)
๋ค์๊ณผ ๊ฐ์ด ์ด๊ธฐ ์ขํ, ํ์ต๋ฅ , ๋ฐ๋ณตํ์๋ง ์ ํด์ฃผ๋ฉด ์ฝ๊ฒ ๊ตฌํ ์ ์๋ค.

ํ์ต๋ฅ ๊ณผ ๊ฐ์ด ์ฌ๋์ด ์ง์ ์ ํด์ฃผ๋ ๋งค๊ฐ๋ณ์๋ฅผ ํ์ดํผํ๋ผ๋ฏธํฐ๋ผ๊ณ ํ๋ค.
4-5. ํ์ต ์๊ณ ๋ฆฌ์ฆ ๊ตฌํํ๊ธฐ
์ ์
- ์ ๊ฒฝ๋ง์๋ ์ ์ ๊ฐ๋ฅํ ๊ฐ์ค์น์ ํธํฅ์ด ์๊ณ , ์ด ๊ฐ์คํผ๋กธ ํธํฅ์ ํ๋ จ ๋ฐ์ดํฐ์ ์ ์ํ๋๋ก ์กฐ์ ํ๋ ๊ณผ์ ์ ํ์ต์ด๋ผ๊ณ ํ๋ค. ์ ๊ฒฝ๋ง ํ์ต์ ๋ค์๊ณผ ๊ฐ์ด 4๋จ๊ณ๋ก ์ํํ๋ค.
1๋จ๊ณ - ๋ฏธ๋๋ฐฐ์น
- ํ๋ จ ๋ฐ์ดํฐ ์ค ์ผ๋ถ๋ฅผ ๋ฌด์์๋ก ๊ฐ์ ธ์จ๋ค. ์ด๋ ๊ฒ ์ ๋ณํ ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ ๋ฐฐ์น๋ผ ํ๋ฉฐ, ๊ทธ ๋ฏธ๋๋ฐฐ์น์ ์์คํจ์ ๊ฐ์ ์ค์ด๋ ๊ฒ์ด ๋ชฉํ์ด๋ค.
2๋จ๊ณ - ๊ธฐ์ธ๊ธฐ ์ฐ์ถ
- ๋ฏธ๋๋ฐฐ์น์ ์์คํจ์ ๊ฐ์ ์ค์ด๊ธฐ ์ํด ๊ฐ ๊ฐ์ค์น ๋งค๊ฐ๋ณ์์ ๊ธฐ์ธ๊ธฐ๋ฅผ ๊ตฌํ๋ค. ๊ธฐ์ธ๊ธฐ๋ ์์คํจ์์ ๊ฐ์ ๊ฐ์ฅ ์๊ฒ ํ๋ ๋ฐฉํฅ์ ์ ์ํ๋ค.
3๋จ๊ณ - ๋งค๊ฐ๋ณ์ ๊ฐฑ์
- ๊ฐ์ค์น ๋งค๊ฐ๋ณ์๋ฅผ ๊ธฐ์ธ๊ธฐ ๋ฐฉํฅ์ผ๋ก ์์ฃผ ์กฐ๊ธ ๊ฐฑ์ ํ๋ค.
4๋จ๊ณ - ๋ฐ๋ณต
- 1~3๋จ๊ณ๋ฅผ ๋ฐ๋ณต
2์ธต ์ ๊ฒฝ๋ง ํด๋์ค ๊ตฌํ
class TwoLayerNet:
def __init__(self, input_size, hidden_size, output_size, weight_init_std=0.01):
# ๊ฐ์ค์น ์ด๊ธฐํ
self.params = {}
self.params['W1'] = weight_init_std * np.random.randn(input_size, hidden_size)
self.params['b1'] = np.zeros(hidden_size)
self.params['W2'] = weight_init_std * np.random.randn(hidden_size, output_size)
self.params['b2'] = np.zeros(output_size)
def predict(self, x):
W1, W2 = self.params['W1'], self.params['W2']
b1, b2 = self.params['b1'], self.params['b2']
a1 = np.dot(x, W1) + b1
z1 = sigmoid(a1)
a2 = np.dot(z1, W2) + b2
y = softmax(a2)
return y
# x : ์
๋ ฅ ๋ฐ์ดํฐ, t : ์ ๋ต ๋ ์ด๋ธ
def loss(self, x, t):
y = self.predict(x)
return cross_entropy_error(y, t)
def accuracy(self, x, t):
y = self.predict(x)
y = np.argmax(y, axis=1)
t = np.argmax(t, axis=1)
accuracy = np.sum(y == t) / float(x.shape[0])
return accuracy
# x : ์
๋ ฅ ๋ฐ์ดํฐ, t : ์ ๋ต ๋ ์ด๋ธ
def numerical_gradient(self, x, t):
loss_W = lambda W: self.loss(x, t)
grads = {}
grads['W1'] = numerical_gradient(loss_W, self.params['W1'])
grads['b1'] = numerical_gradient(loss_W, self.params['b1'])
grads['W2'] = numerical_gradient(loss_W, self.params['W2'])
grads['b2'] = numerical_gradient(loss_W, self.params['b2'])
return grads
๋ฏธ๋ ๋ฐฐ์น ํ์ต
# ๋ฐ์ดํฐ ์ฝ๊ธฐ
(x_train, t_train), (x_test, t_test) = load_mnist(normalize=True, one_hot_label=True)
network = TwoLayerNet(input_size=784, hidden_size=50, output_size=10)
# ํ์ดํผํ๋ผ๋ฏธํฐ
iters_num = 10000 # ๋ฐ๋ณต ํ์๋ฅผ ์ ์ ํ ์ค์ ํ๋ค.
train_size = x_train.shape[0]
batch_size = 100 # ๋ฏธ๋๋ฐฐ์น ํฌ๊ธฐ
learning_rate = 0.1
train_loss_list = []
train_acc_list = []
test_acc_list = []
# 1์ํญ๋น ๋ฐ๋ณต ์
iter_per_epoch = max(train_size / batch_size, 1)
for i in range(iters_num):
# ๋ฏธ๋๋ฐฐ์น ํ๋
batch_mask = np.random.choice(train_size, batch_size)
x_batch = x_train[batch_mask]
t_batch = t_train[batch_mask]
# ๊ธฐ์ธ๊ธฐ ๊ณ์ฐ
#grad = network.numerical_gradient(x_batch, t_batch)
grad = network.gradient(x_batch, t_batch)
# ๋งค๊ฐ๋ณ์ ๊ฐฑ์
for key in ('W1', 'b1', 'W2', 'b2'):
network.params[key] -= learning_rate * grad[key]
# ํ์ต ๊ฒฝ๊ณผ ๊ธฐ๋ก
loss = network.loss(x_batch, t_batch)
train_loss_list.append(loss)
# 1์ํญ๋น ์ ํ๋ ๊ณ์ฐ
if i % iter_per_epoch == 0:
train_acc = network.accuracy(x_train, t_train)
test_acc = network.accuracy(x_test, t_test)
train_acc_list.append(train_acc)
test_acc_list.append(test_acc)
print("train acc, test acc | " + str(train_acc) + ", " + str(test_acc))
Chapter. 4 ์ ๋ฆฌ
๊ธฐ๊ณํ์ต์์ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ์ ์ ํ๋ จ ๋ฐ์ดํฐ์ ์ํ ๋ฐ์ดํฐ๋ก ๋๋ ์ฌ์ฉํ๋ค.
ํ๋ จ ๋ฐ์ดํฐ๋ก ํ์ตํ ๋ชจ๋ธ์ ๋ฒ์ฉ ๋ฅ๋ ฅ์ ์ํ ๋ฐ์ดํฐ๋ก ํ๊ฐํ๋ค.
์ ๊ฒฝ๋ง ํ์ต์ ์์คํจ์๋ฅผ ์งํ๋ก, ์์คํจ์์ ๊ฐ์ด ์์์ง๋ ๋ฐฉํฅ์ผ๋ก ๊ฐ์ค์น ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐฑ์ ํ๋ค.
๊ฐ์ค์น ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐฑ์ ํ ๋๋ ๊ฐ์ค์น ๋งค๊ฐ๋ณ์์ ๊ธฐ์ธ๊ธฐ๋ฅผ ์ด์ฉํ๊ณ , ๊ธฐ์ธ์ด์ง ๋ฐฉํฅ์ผ๋ก ๊ฐ์ค์น์ ๊ฐ์ ๊ฐฑ์ ํ๋ ์์ ์ ๋ฐ๋ณตํ๋ค.
์์ฃผ ์์ ๊ฐ์ ์ฃผ์์ ๋์ ์ฐจ๋ถ์ผ๋ก ๋ฏธ๋ถํ๋ ๊ฒ์ ์์น ๋ฏธ๋ถ์ด๋ผ๊ณ ํ๋ค.
์์น ๋ฏธ๋ถ์ ์ด์ฉํด ๊ฐ์ค์น ๋งค๊ฐ ๋ณ์์ ๊ธฐ์ธ๊ธฐ๋ฅผ ๊ตฌํ ์ ์๋ค.
์์น ๋ฏธ๋ถ์ ์ด์ฉํ ๊ณ์ฐ์๋ ์๊ฐ์ด ๊ฑธ๋ฆฌ์ง๋ง, ๊ทธ ๊ตฌํ์ ๊ฐ๋จํ๋ค.
์ถ์ฒ: ์ฌ์ดํ ๊ณ ํค, ใ๋ฐ๋ฐ๋ฅ๋ถํฐ ์์ํ๋ ๋ฅ๋ฌ๋ใ, ํ๋น๋ฏธ๋์ด(2017)
'Deep Learning > deep learning from scratch' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Chap.06 ํ์ต ๊ด๋ จ ๊ธฐ์ ๋ค (0) | 2022.01.09 |
|---|---|
| Chap.05 ์ค์ฐจ์ญ์ ํ๋ฒ (0) | 2022.01.07 |
| Chap.03 ์ ๊ฒฝ๋ง (0) | 2022.01.05 |
| Chap.02 ํผ์ ํธ๋ก (0) | 2022.01.05 |
| Intro. Deep learning for scratch (0) | 2022.01.05 |



