๐ก 'Deep Learning from Scratch'๋ฅผ ์ฐธ๊ณ ํ์ฌ ์์ฑํจ
์ ๊ฒฝ๋ง(neural network)์ ํ์ต์ ์ํด์๋ ๊ฐ์ค์น ๋งค๊ฐ๋ณ์(weight parameter)์ ๋ํ ์์ค ํจ์(loss function)์ ๊ธฐ์ธ๊ธฐ(gradient)๋ฅผ ๊ตฌํด์ผ ํฉ๋๋ค. ๊ธฐ์ธ๊ธฐ๋ฅผ ๊ตฌํ๋ ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ์์น ๋ฏธ๋ถ(numerical differentation)์ ์ด์ฉํ๋ ๊ฒ์ ๋๋ค. ์์น ๋ฏธ๋ถ์ '๊ทผ์ฌ์น(approximation)'๋ฅผ ์ด์ฉํ์ฌ ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋จ์ํ๊ณ ๊ตฌํํ๊ธฐ ์ฝ์ง๋ง, ๊ณ์ฐ ์๊ฐ์ด ์ค๋๊ฑธ๋ฆฐ๋ค๋ ๋จ์ ์ด ์์ต๋๋ค. ์ด๋ฒ ๊ฒ์๋ฌผ์ ๊ฐ์ค์น ๋งค๊ฐ๋ณ์์ ๊ธฐ์ธ๊ธฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ์ธ '์ค์ฐจ์ญ์ ๋ฒ'์ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
1. ์ญ์ ํ
์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ์งํ๋๋ ์ ๊ฒฝ๋ง์ด ์์ ๋, ์ ๊ฒฝ๋ง์ ๊ฒฐ๊ณผ๋ฅผ ๊ตฌํ๊ธฐ ์ํ ๊ณ์ฐ ์ญ์ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ์งํ๋์์ต๋๋ค. ์ด๋ฅผ ์์ ํ(foward-propagation)๋ผ๊ณ ํฉ๋๋ค. ์์ ํ๋ ์ ๊ฒฝ๋ง์ ์์๋ถํฐ ๋๊น์ง์ ์ ํ๋ฅผ ์๋ฏธํฉ๋๋ค. ํํธ, ์ญ์ ํ๋ '๊ตญ์์ ์ธ ๋ฏธ๋ถ'์ ์๋ฐฉํฅ๊ณผ ๋ฐ๋ ๋ฐฉํฅ์ธ ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ์ ๋ฌํฉ๋๋ค. ๋ํ, '๊ตญ์์ ๋ฏธ๋ถ'์ ์ ๋ฌํ๋ ์๋ฆฌ๋ ์ฐ์๋ฒ์น(Chain rule)์ ๋ฐ๋ฅด๊ณ ์์ต๋๋ค.
๊ตญ์์ ๊ณ์ฐ
์ ์ฒด์์ ์ด๋ค ์ผ์ด ๋ฒ์ด์ง๋ ๊ด๊ณ์์ด ์์ ๊ณผ ๊ด๋ จ๋ ์ ๋ณด๋ง์ ๊ฒฐ๊ณผ๋ก ์ถ๋ ฅํ๋ ๊ฒ์ ์๋ฏธ. ์ฌ๊ธฐ์ ๊ตญ์์ ์ด๋ '์์ ๊ณผ ์ง์ ๊ด๊ณ๋ ์์ ๋ฒ์'๋ฅผ ๋ปํจ.
1.1 ์ญ์ ํ์ ๊ณ์ฐ ๊ทธ๋ํ(Computational graph)
๊ณ์ฐ ๊ทธ๋ํ๋ ๊ณ์ฐ ๊ณผ์ ์ ๊ทธ๋ํ๋ก ๋ํ๋ธ ๊ฒ์ ๋๋ค. ๋ณต์์ ๋ ธ๋(node)์ ์์ง(edge)๋ก ํํ๋ฉ๋๋ค. ์ญ์ ํ๋ฅผ ๊ณ์ฐ ๊ทธ๋ํ๋ก ํํํ๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
์์ ๊ทธ๋ฆผ 1๊ณผ ๊ฐ์ด ์ญ์ ํ์ ๊ณ์ฐ ์ ์ฐจ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ ํธ $ E $์ ๋ ธ๋์ ๊ตญ์์ ๋ฏธ๋ถ($ \frac{\partial y}{\partial x} $)์ ๊ณฑํ ํ ๋ค์ ๋ ธ๋๋ก ์ ๋ฌํฉ๋๋ค.
- ์๋ฅ์์ ์ ๋ฌ๋ ๊ฐ์ ๊ตญ์์ ์ธ ๋ฏธ๋ถ์ ๊ณฑํ์ฌ ์์ชฝ ๋ ธ๋๋ก ์ ๋ฌํฉ๋๋ค.
๊ตญ์์ ๋ฏธ๋ถ
๊ตญ์์ ๋ฏธ๋ถ์ ์์ ํ์ $ y=f(x) $ ๊ณ์ฐ์ ๋ฏธ๋ถ์ ๊ตฌํ๋ค๋ ๊ฒ. ์ด๋ $ x $์ ๋ํ $ y $์ ๋ฏธ๋ถ($ \frac{\partial y}{\partial x} $)์ ๊ตฌํ๋ ๊ฒ์ ์๋ฏธ.
์์ ์ญ์ ํ ๊ณ์ฐ ์์๋ฅผ ๋ฐ๋ฅด๋ฉด ๋ชฉํ๋ก ํ๋ ๋ฏธ๋ถ ๊ฐ์ ํจ์จ์ ์ผ๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ์ด๋ ์ฐ์ ๋ฒ์น์ ์๋ฆฌ๋ก ์ธํ์ฌ ๊ฐ๋ฅํ์์ต๋๋ค.
1.2 ์ฐ์๋ฒ์น
์ฐ์๋ฒ์น์ ์ดํดํ๋ ค๋ฉด ํฉ์ฑ ํจ์์ ๋ํ ์ดํด๋ถํฐ ํ์ํฉ๋๋ค. ํฉ์ฑ ํจ์๋ ์ฌ๋ฌ ํจ์๋ก ๊ตฌ์ฑ๋ ํจ์๋ฅผ ๋งํฉ๋๋ค. ์๋ฅผ ๋ค์ด, $ z=(x+y)^2 $์ ์๋์ ์์ผ๋ก ํํํ ์ ์์ต๋๋ค.
$$ z = t^2 $$
$$ t = x+y $$
์ฐ์๋ฒ์น์ ํฉ์ฑ ํจ์์ ๋ฏธ๋ถ์ ๋ํ ์ฑ์ง์
๋๋ค. ํฉ์ฑ ํจ์์ ๋ฏธ๋ถ์ 'ํฉ์ฑ ํจ์๋ฅผ ๊ตฌ์ฑํ๋ ๊ฐ ํจ์์ ๋ฏธ๋ถ์ ๊ณฑ์ผ๋ก ๋ํ๋ผ ์ ์๋ค'๊ณ ์ ์ํ ์ ์์ต๋๋ค. ์ด ์ ์๋ฅผ ์ด์ฉํ๋ฉด, ์์ ์์์ ์๋์ ๊ฐ์ด ๋ฏธ๋ถํ ์ ์์ต๋๋ค.
$$ \frac{\partial z}{\partial t} = 2t $$
$$ \frac{\partial t}{\partial x} = 1 $$
์ต์ข
์ ์ผ๋ก ๊ตฌํ๊ณ ์ถ์ $ \frac{\partial z}{\partial x} $๋ ๋ ๋ฏธ๋ถ์ ๊ณฑํจ์ผ๋ก์จ ๊ณ์ฐํ ์ ์์ต๋๋ค.
$$ \frac{\partial z}{\partial x} = \frac{\partial z}{\partial t}\frac{\partial t}{\partial x} = 2t \cdot 1 = 2(x+y) $$
์ด๋ฅผ ๊ทธ๋ฆผ 1๊ณผ ๊ฐ์ด ๊ณ์ฐ ๊ทธ๋ํ๋ก ํํํ๋ฉด ์๋์ ๊ทธ๋ฆผ 2์ ๊ฐ์ต๋๋ค.
2. ํ์ฑํ ํจ์ ๊ณ์ธต ๊ตฌํ
2์ ์์๋ ๋ํ์ ์ธ ํ์ฑํ ํจ์์ธ Recitified Linear Unit (ReLU)์ ์๊ทธ๋ชจ์ด๋(Sigmoid)์ ๊ณ์ธต์ ์ญ์ ํ์ ๊ฐ๋ ์ ์ ์ฉํ์ฌ ๊ตฌํํ๊ฒ ์ต๋๋ค.
2.1 ReLU ๊ณ์ธต
ํ์ฑํ ํจ์๋ก ์ฌ์ฉํ๋ ReLU๋ฅผ $ x $์ ๋ํ $ y $์ ๋ฏธ๋ถ์ผ๋ก ๊ณ์ฐํ๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
$$ \frac{\partial y}{\partial x}=\begin{cases} 1 &(x>0)\\ 0 &(x\leq0) \end{cases} $$
์์ ํ์ ์
๋ ฅ์ธ $ x $๊ฐ 0๋ณด๋ค ํฌ๋ฉด ์ญ์ ํ๋ ์๋ฅ์ ๊ฐ์ ๊ทธ๋๋ก ํ๋ฅ๋ก ํ๋ ค๋ณด๋
๋๋ค. ๋ฐ๋ฉด, ์์ ํ์์ $ x $๊ฐ 0 ์ดํ๋ฉด ์ญ์ ํ ๋๋ ํ๋ฅ๋ก 0์ ํ๋ ค๋ณด๋
๋๋ค.
class Relu:
def __init__(self):
self.mask = None
def forward(self, x):
self.mask = (x <= 0)
out = x.copy()
out[self.mask] = 0
return out
def backward(self, dout):
dout[self.mask] = 0
dx = dout
return dx
2.2 ์๊ทธ๋ชจ์ด๋ ๊ณ์ธต
์๊ทธ๋ชจ์ด๋ ํจ์์ ์์ ์๋์ ๊ฐ์ต๋๋ค.
$$ y=\frac{1}{1+\exp{(-x)}} $$
์ด๋ฅผ ๊ณ์ฐ ๊ทธ๋ํ๋ฅผ ์ด์ฉํ์ฌ ์ญ์ ํ์ ๋จ๊ณ ๋ณ๋ก ๊ณ์ฐํ ๊ฒ์ด ์๋์ ๊ทธ๋ฆผ 3์
๋๋ค.
์์ ๊ทธ๋ฆผ์์ ๊ตฌํ ์ญ์ ํ์ ์ต์ข
์ถ๋ ฅ์ธ $ \frac{\partial L}{\partial y}{y^{2}\exp{(-x)}} $๋ ์๋์ ๊ฐ์ด ์ ๋ฆฌํ ์ ์์ต๋๋ค.
$$ \begin{matrix} \frac{\partial L}{\partial y}{y^2\exp{(-x)}} &=& \frac{\partial L}{\partial y}\frac{1}{(1+\exp{(-x)}^2}\exp{(-x)}\\ &=& \frac{\partial L}{\partial y}\frac{1}{1+\exp{(-x)}}\frac{\exp{(-x)}}{1+\exp{(-x)}}\\ &=& \frac{\partial L}{\partial y}y(1-y) \end{matrix} $$
์๊ทธ๋ชจ์ด๋ ๊ณ์ธต์ ์ญ์ ํ๋ ์์ ํ์ ์ถ๋ ฅ์ธ $ y $๋ง์ผ๋ก ๊ณ์ฐํ ์ ์๋ค๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. ์ด๋ฅผ ๊ตฌํํ ๋ด์ฉ์ ์๋์ ๊ฐ์ต๋๋ค.
class sigmoid:
def __init__(self):
self.out = None
def forward(self, x):
out = 1 / (1 + np.exp(-x))
self.out = out
return out
def backward(self, dout):
dx = dout * (1.0 - self.out) * self.out
return dx
'๊ธฐ์ด > ์ธ๊ณต์ง๋ฅ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ตํฐ๋ง์ด์ (Optimizer) (2/2) (0) | 2021.09.02 |
---|---|
์ตํฐ๋ง์ด์ (Optimizer) (1/2) (1) | 2021.08.31 |
์์ค ํจ์(Loss function) (0) | 2021.08.28 |
ํ์ฑํ ํจ์(Activation function) (0) | 2021.08.26 |
ํผ์ ํธ๋ก (Percetron) (0) | 2021.08.25 |