[딥러닝]/[밑바닥부터 시작하는 딥러닝]

밑바닥부터 시작하는 딥러닝 1 - 3 신경망

딥러닝 도전기 2021. 6. 25. 01:16
신경망은 그림과 같이 입력층(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.05.00.1)

y = sigmoid(x)

plt.plot(x, y)

plt.ylim(-0.11.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.05.00.1)

y = step_function(x)

plt.plot(x, y)

plt.ylim(-0.11.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.05.00.1)

y = ReLU(x)

plt.plot(x, y)

plt.ylim(-15)

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$는 입력 신호 중 최댓값으로 설정합니다.

반응형