안녕하세요 :)
이번 게시물에서는 여태까지 배운 내용들을 총 정리해보겠습니다.
아직 이전 게시물을 다 읽어보지 못하신 분들을 한번 쭉~ 읽어보시는걸 추천드립니다!
이번 게시물에서는
- 신경망의 구조
- 경사하강법(gradient descent)
- 오차역전법(back propagation)
- 합성곱 신경망(convolution neural network)
에 대해서 다뤄보겠습니다.
1. 신경망(neural network)
뉴런 (neuron)
딥러닝 신경망은 우리 몸에 있는 뉴런을 기반으로 만들어졌습니다.
그렇기에 뉴런의 동작 방식을 먼저 알아보겠습니다.
뉴런의 가장 큰 특징은 입력값의 크기가 임계값보다 크거나 같아아지 반응을 한다는 것입니다.
- 입력값 ≥ 임계값 : 뉴런이 반응함
- 입력값 < 임계값 : 뉴런이 반응하지 않음
뉴런의 입력값은 서로 다른 여러개의 뉴런으로부터 입력 신호를 받는데,
각 뉴런에 따라 서로 다른 가중치를 부여해서 특정 뉴런의 신호에는 민감하게, 다른 뉴런의 신호에는 둔감하게 반응합니다.
서로 다른 뉴런으로부터 오는 신호를 $ x_{1}, x_{2}, ..., x_{n} $ 이라고 할 때,
해당 뉴런에 대한 가중치를 $ w_{1}, w_{2}, ..., w_{n} $ 라고 할 수 있습니다.
그러면, 뉴런이 받는 가중입력 z는 다음과 같이 정의할 수 있습니다.
$$ z = w_{1}x_{1} + w_{2}x_{2} + ... w_{n}x_{n} $$
뉴런은 가중입력의 값이 임계값보다 큰 경우에만 반응하기 때문에, 뉴런의 출력은 다음과 같이 정의할 수 있습니다.
$$ \begin{cases}w_{1}x_{1} + w_{2}x_{2} + ... w_{n}x_{n}\geqΘ & y = 1\\w_{1}x_{1} + w_{2}x_{2} + ... w_{n}x_{n}<Θ & y = 0\end{cases} $$
임계값(Θ)을 기준으로 계단이 형성되는데, 기준으로 0으로 수정해보겠습니다.
뉴런의 가중입력 z를 다음과 같이 재정의하겠습니다.
$$ z = w_{1}x_{1} + w_{2}x_{2} + ... w_{n}x_{n}- Θ $$
그러면, 뉴런의 출력은 다음과 같이 다시 정의할 수 있습니다.
$$\begin{cases}z\geq0 & y = 1\\z<0 & y = 0\end{cases}$$
신경망 유닛(unit)
신경망에서의 뉴런은 유닛(unit)이라는 명칭으로 부릅니다.
유닛과 뉴런의 차이점은, 유닛은 뉴런과 다른게 출력을 1로 제한하지 않는다는 것입니다.
유닛은 활성화 함수 $ a() $ 를 통해서 다양한 값을 출력으로 제공할 수 있습니다.
대표적인 활성화 함수로는 시그모이드(sigmoid) 함수가 있습니다.
시그모이드 (sigmoid) 함수
시그모이드 함수는 다음과 같이 정의합니다.
$$ σ(z) = \frac{1}{1 + e^{-z}} $$
시그모이드 함수는 2가지 중요한 특징이 있습니다.
- 출력이 0보다 크고, 1보다 작다
- 모든 구간에서 미분이 가능하다
시그모이드 함수를 미분하면 다음과 같습니다.
$$ σ'(z) = \frac{-e^{-z}}{(1 + e^{-z})^{2}} = \frac{1}{1 + e^{-z}}\times\frac{-e^{-z}}{1 + e^{-z}}= \frac{1}{1 + e^{-z}}\times(1-\frac{1}{1 + e^{-z}}) = σ(z)(1-σ(z)) $$
유닛의 가중입력
앞서 유닛의 가중입력을 정의했습니다.
$$ z = w_{1}x_{1} + w_{2}x_{2} + ... w_{n}x_{n}- Θ $$
여기서 -Θ를 b 로 치환해서 새로운 가중입력을 정의하겠습니다.
$$ z = w_{1}x_{1} + w_{2}x_{2} + ... w_{n}x_{n}+b $$
여기서 b는 편향(bias)를 의미합니다.
새롭게 정의한 가중입력은 벡터의 내적으로 표현할 수 있습니다.
벡터의 내적은 두 벡터가 얼마나 같은 방향을 향하고 있는지 확인할 수 있습니다.
두 벡터 a, b에 대한 내적은 다음과 같이 정의합니다.
$$ \overrightarrow{a}\cdot\overrightarrow{b}= \mid\overrightarrow{a}\mid\mid\overrightarrow{b}\mid\cos(Θ) $$
$ \overrightarrow{a}=(a_{1}, a_{2}, ...a_{n}) $ 이고, $\overrightarrow{b}=(b_{1}, b_{2}, ...b_{n}) $ 인 경우,
벡터의 내적은
$$ (a_{1}, a_{2}, ...a_{n}) (b_{1}, b_{2}, ...b_{n}) = a_{1}b_{1} + a_{2}b_{2} + ... + a_{n}b_{n} $$
로 정의할 수 있습니다.
위의 정의를 이용해서 유닛의 가중입력을 다시 한 번 보면,
유닛의 가중 입력은 다음과 같이 벡터의 내적으로 표현할 수 있습니다.
$$ z = w_{1}x_{1} + w_{2}x_{2} + ... + w_{n}x_{n}+ b= (w_{1}, w_{2}, ...w_{n}) (x_{1}, x_{2}, ...x_{n}) + b $$
이렇게 새로 정의한 가중입력을 활성화 함수 $a()$ 의 입력으로 사용하면 유닛의 출력을 구할 수 있습니다.
$$ y = a(w_{1}x_{1} + w_{2}x_{2} + ... w_{n}x_{n}+b) = a(z) $$
계층형 신경망의 구조
1. 입력층
입력층에서는 입력으로 제공되는 값을 그대로 전달합니다.
2. 은닉층
은닉층에서는 입력층에서 전달한 데이터를 기반으로 특징을 추출합니다.
입력받은 값을 종합해서 가중입력을 생성하고, 해당 가중입력에 따라서 반응하게 됩니다.
가중입력을 생성할 때, 가중치가 높은 유닛끼리는 서로의 값을 더 적극 반영하게 됩니다.
불필요한 값을 차단하고, 입력신호를 더 선명하게 하기 위해서 편향(bias)를 함께 사용합니다.
※ 은닉층의 연산
가중입력 $ z_{i}^l = w_{i1}^lx_{1}^{l-1} + w_{i2}^lx_{2}^{l-1} + ... + w_{ij}^lx_{j}^{l-1} $
출력 변수 $ a_{i}^l = a(z_{i}^l) $
3. 출력층
출력층에서는 은닉층을 통해서 나온 결과를 출력합니다.
학습
파라미터(parameter)는 신경망의 수학적 모델을 정하는데 필요한 상수를 의미랍니다.
대표적으로 신경망을 구성하는 가중치와 편향을 파라미터라고 합니다.
※ 파라미터와 변수의 명칭
1. $ x_{i} $ : 입력층의 i 번째 유닛 (입력층에서는 입력과 출력이 같습니다)
2. $ w_{ij}^l $ : (l-1)층 j 번째 유닛에서 l 층 i 번째 유닛으로의 가중치
3. $ z_{i}^l $ : l 층 i 번째 유닛의 가중 입력
4. $ b_{i}^l $ : l 층 i 번째 유닛의 편향
5. $ a_{i}^l $ : l 층 i 번째 유닛의 출력 변수
변수(variable)는 주어지는 입력값에 따라서 달라지는 변수를 의미합니다.
학습은 입력값에 대한 올바른 결과를 제공하기 위해 파라미터값을 조정하는 전체적인 과정을 의미합니다.
신경망을 통해 제공된 예측값과 실제 정답 사이의 오차를 구해서, 오차가 최소가 되도록 파라미터를 조정하게 됩니다.
비용함수
비용함수는 모든 입력값에 대한 오차의 총합을 의미합니다.
오차를 구하는 방식 중 가장 쉬운 방식은 제곱오차입니다.
예측값과 실제 정답의 차이의 제곱을 구해서 반으로 나눈 값이 제곱 오차를 의미합니다.
회귀분석에서 제곱오차를 이용한 경우 비용함수를 구하는 과정을 예시로 들어보겠습니다.
- 회귀방정식 : $ y = px + q $
- 예측값 : $ px_{k} + q $
- 실제값 : $ y_{k} $
- 오차 : $ (y_{k} - (px_{k} + q)) = e_{k} $
- 제곱오차 : $ \frac{1}{2}({e_{k}})^{2} = C_{k} $
- 비용함수 : $ C_{T} = C_{1} + C_{2} + ... + C_{k} $
위의 예시에서 파라미터는 p와 q 입니다.
학습 과정을 통해서 비용함수의 값이 최소가 되도록 파라미터값을 설정해야 합니다.
2. 경사하강법 (gradient descent)
학습은 전체 손실 함수를 최소로 만드는 파라미터(가중치, 편향)을 구하는 과정입니다.
경사하강볍은 손실함수의 한 점을 조금씩 이동시켜서 최소값을 찾아가는 방법입니다.
모든 파라미터의 값을 일정 수준 변경했을 때, 손실값이 최소한으로 줄어드는 방향으로 이동하고,
이동하고 나서의 손실함수의 값이 최소가 되는 경우 학습을 멈추는 방법입니다.
함수 $ y = f(x_{1}, x_{2}, ..., x_{n})$ 가 있다고 가정해 보겠습니다.
함수 위의 한 점 $ (x_{1}, x_{2}, ..., x_{n}) $ 에서 $ \triangle x_{1}, \triangle x_{2}, ..., \triangle x_{n} $ 만큼 값이 변화할 때,
y의 변화량이 최소가 되어야 합니다.
y의 변화량 $ \triangle y $ 는 다음과 같이 정의할 수 있습니다.
$$ \triangle y = f(x_{1} + \triangle x_{1}, x_{2} + \triangle x_{2}, ..., x_{n} + \triangle x_{n}) - f(x_{1}, x_{2}, ..., x_{n}) $$
$$ = \triangle x_{1} \frac{\text{d}y}{\text{d}x_{1}} + \triangle x_{2} \frac{\text{d}y}{\text{d}x_{2}} + ... + \triangle x_{n} \frac{\text{d}y}{\text{d}x_{n}} $$
$$ = (\triangle x_{1}, \triangle x_{2}, ..., \triangle x_{n}) (\frac{\text{d}y}{\text{d}x_{1}}, \frac{\text{d}y}{\text{d}x_{2}}, ..., \frac{\text{d}y}{\text{d}x_{n}}) $$
결국 y의 변화량은 두 벡터의 내적으로 표현할 수 있는데,
벡터의 내적이 최소가 되기 위해서는 두 벡터가 반대 방향을 향하고 있어야 합니다.
그러므로, y의 변화량이 최소가 되기 위해서는 다음과 같은 조건을 만족해야 합니다.
$$ (\triangle x_{1}, \triangle x_{2}, ..., \triangle x_{n}) = -η (\frac{\text{d}y}{\text{d}x_{1}}, \frac{\text{d}y}{\text{d}x_{2}}, ..., \frac{\text{d}y}{\text{d}x_{n}}) $$
위의 식에서 $ (\triangle x_{1}, \triangle x_{2}, ..., \triangle x_{n}) $ 는 변위 벡터라고 부르고, $ \triangle x $ 로 표현합니다.
$ (\frac{\text{d}y}{\text{d}x_{1}}, \frac{\text{d}y}{\text{d}x_{2}}, ..., \frac{\text{d}y}{\text{d}x_{n}}) $ 는 점 $ (x_{1}, x_{2}, ..., x_{n}) $ 에서의 기울기를 의미하고, $ \triangledown f $ 라고 표현합니다.
위의 식을 단순하게 표현하면 다음과 같습니다.
$$ \triangle x = -η\triangledown f $$
여기서 양의 정수 η는 학습률(learning rate)을 의미합니다.
- 학습률이 너무 큰 경우, 최소값을 뛰어넘을 수 있습니다.
- 학습률이 너무 작은 경우, 최소값을 찾는데 너무 오래 걸릴 수 있습니다.
이후에는, 위의 식에 알맞는 새로운 값 $ (x_{1} + \triangle x_{1}, x_{2} + \triangle x_{2}, ..., x_{n} + \triangle x_{n}) $ 을 사용하게 됩니다.
3. 오차역전법(back propagation)
경사하강법의 한계
경사하강법을 다시 다뤄보겠습니다.
먼저, 함수 $ y = f(x_{1}, x_{2}, ..., x_{n})$ 가 있다고 가정해 보겠습니다.
함수 위의 한 점 $ (x_{1}, x_{2}, ..., x_{n}) $ 에서 $ \triangle x_{1}, \triangle x_{2}, ..., \triangle x_{n} $ 만큼 값이 변화할 때,
y의 변화량이 최소가 되기 위해서는
$$ (\triangle x_{1}, \triangle x_{2}, ..., \triangle x_{n}) = -η (\frac{\text{d}y}{\text{d}x_{1}}, \frac{\text{d}y}{\text{d}x_{2}}, ..., \frac{\text{d}y}{\text{d}x_{n}}) $$
위의 식을 만족해야 합니다.
위의 식에서
- $ x_{1}, x_{2}, ..., x_{n} $ 을 파라미터인 $ w_{11}^1, w_{12}^1, ..., b_{1}^1, b_{2}^2, ... $ 에 대응합니다.
- 함수 f를 오차함수 $ C_{T} $에 대응합니다.
위와 같은 조건을 만족시키는 식으로 수정하면 다음과 같습니다.
|
<처음 배우는 딥러닝 수학>을 읽으면서 개인적으로 정리한 내용입니다.
제가 잘못 이해했거나, 수정이 필요한 부분에 대한 피드백은 언제든지 환영입니다.
감사합니다 :)
'필기 노트 > 처음 배우는 딥러닝 수학' 카테고리의 다른 글
[딥러닝 기초] 합성곱 신경망(CNN) - 2 (0) | 2020.07.13 |
---|---|
[딥러닝 기초] 합성곱 신경망(CNN) - 1 (0) | 2020.07.11 |
[딥러닝 기초] 오차역전법 (back-propagation) (0) | 2020.07.10 |
[딥러닝 기초] 신경망과 학습 (0) | 2020.07.09 |
[딥러닝 기초] 경사하강법과 회귀분석 (0) | 2020.07.09 |
댓글