신경망은 그림과 같이 입력층(Input layer), 은닉층(Hidden Layer), 출력층(Output Layer)로 구성됩니다.
은닉층의 뉴런은 입력층과 출력층과는 달리 보이지 않습니다.
$y= \begin{cases} 0, & (w_{1}x_{1}+w_{2}x_{2}+b \le 0) \\ 1, & (w_{1}x_{1}+w_{2}x_{2} +b> 0)\end{cases}$
위 식을 다음과 같이 표현할 수 있습니다.
$y=h(w_{1}x_{1}+w_{2}x_{2}+b)$
$h(x) = \begin{cases} 0 & (x \le 0) \\1 & (x > 0)\end{cases}$
여기서 이 $h(x)$를 활성화 함수(activation function)라고 합니다. (위의 경우 계단 함수 Step function)
이 활성화 함수가 퍼셉트론과 신경망의 차이를 만들어줍니다.
활성화 함수의 소개
시그모이드 함수
계단 함수
ReLU 함수
- 시그모이드 함수
$h(x) = \frac{1}{1+e^{-x}}$
구현
import numpy as np
import matplotlib.pyplot as plt
def sigmoid(x):
return 1/(1 + np.exp(-x))
x = np.arange(-5.0, 5.0, 0.1)
y = sigmoid(x)
plt.plot(x, y)
plt.ylim(-0.1, 1.1)
plt.show()
- 계단 함수
계단함수는 특정 값(임계값)을 넘으면 1을 출력하는 함수입니다.
구현
import numpy as np
import matplotlib.pyplot as plt
def step_function(x):
return np.array(x > 0, dtype=np.int)
x = np.arange(-5.0, 5.0, 0.1)
y = step_function(x)
plt.plot(x, y)
plt.ylim(-0.1, 1.1)
plt.show()
- ReLU 함수
ReLU는 입력이 0을 넘으면 그대로 출력하고, 0 이하면 0을 출력하는 함수입니다.
$h(x) = \begin{cases} 0 & (x \le 0) \\x & (x > 0)\end{cases}$
구현
import numpy as np
import matplotlib.pyplot as plt
def ReLU(x):
return np.maximum(0, x)
x = np.arange(-5.0, 5.0, 0.1)
y = ReLU(x)
plt.plot(x, y)
plt.ylim(-1, 5)
plt.show()
출력층 활성화 함수
일반적으로 회귀에는 항등 함수를, 분류에는 소프트맥스 함수를 사용합니다.
- 항등 함수
항등함수는 입력을 그대로 출력합니다.
위에서 살펴봤던 활성화 함수들은 일반적으로 $h()$라고 하지만 출력층의 활성화 함수는 $\sigma()$로 나타냅니다.
- 소프트맥스 함수
$y_k = \frac{e^{a_k}}{\Sigma_{i=1}^n{e^{a_i}}}$
여기서 $n$은 출력층의 뉴런의 수, $y_k$는 그 중 $k$번째 출력층임을 뜻합니다.
위의 소프트맥스 함수는 값이 조금만 커져도 오버플로우가 발생하기 때문에 다음과 같이 수정합니다.
$y_k = \frac{e^{a_k - C}}{\Sigma_{i=1}^n{e^{a_i - C}}}$
여기서 $C$는 입력 신호 중 최댓값으로 설정합니다.
'[딥러닝] > [밑바닥부터 시작하는 딥러닝]' 카테고리의 다른 글
밑바닥부터 시작하는 딥러닝 1 - 4 경사 하강법 (0) | 2021.06.27 |
---|---|
밑바닥부터 시작하는 딥러닝 1 - 4 신경망 학습 (0) | 2021.06.26 |
밑바닥부터 시작하는 딥러닝 1 - 3 손글씨 숫자 인식 예제 (0) | 2021.06.26 |
밑바닥부터 시작하는 딥러닝 1 - 2 퍼셉트론 (0) | 2021.06.24 |
[밑바닥부터 시작하는 딥러닝] 교재 소개 (0) | 2021.05.28 |