활성화 함수(Activation Function)

활성화함수는 입력값이 특정 뉴런에서 처리되어 결과값을 생성할때 적용되는 함수입니다. 활성화 함수로 이 글에서는 3가지를 언급하는데 첫째는 계단함수, 둘째는 시그모이드 함수, 셋째는 ReLU 함수입니다. 각 활성화 함수의 수식과 그래프를 살펴보면 다음과 같습니다.

시그모이드 함수(Sigmoid Function)

    $$h(x)=\frac{1}{1+e^{-x}}$$

위의 식을 그래프로 시각화하기 위한 코드는 아래와 같습니다.

import numpy as np
import matplotlib.pylab as plt

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

x = np.arange(-10.0, 10, 0.1)
y = sigmoid(x)

plt.plot(x, y)
plt.show()

결과 그래프는 아래와 같습니다.

계단함수(Step Function)

    $$h(x)=\begin{cases}     0  & \quad (x \leq 0)\\     1  & \quad (x > 0)   \end{cases}$$

위의 식을 그래프로 시각화하기 위한 코드는 아래와 같습니다.

import numpy as np
import matplotlib.pylab as plt

def step(x):
    return np.array(x > 0, dtype=np.int)

x = np.arange(-10.0, 10, 0.1)
y = step(x)

plt.plot(x, y)
plt.show()

결과 그래프는 아래와 같습니다.

ReLU

    $$h(x)=\begin{cases}     0  & \quad (x \leq 0)\\     x  & \quad (x > 0)   \end{cases}$$

위의 식을 그래프로 시각화하기 위한 코드는 아래와 같습니다.

import numpy as np
import matplotlib.pylab as plt

def ReLU(x):
    return np.maximum(0, x)

x = np.arange(-10.0, 10, 0.1)
y = ReLU(x)

plt.plot(x, y)
plt.show()

결과 그래프는 아래와 같습니다.

Softmax

모델의 마지막 구성인 출력층에서 입력 데이터가 어떤 클래스로 분류되는지에 대한 확률값으로써 사용되는 활성화 함수로 식은 다음과 같습니다.

    $$y_{k}=\frac{\exp(a_{k})}{\displaystyle\sum_{i=1}^{n} {\exp(a_{i})}}$$

결과적으로 각 출력값들의 합은 1로써 각 출력값을 확률로 해석할 수 있습니다.

쌍곡탄젠트(Hyperbolic Tangent)

활성화 함수로 사용되는 신경망은 대표적으로 RNN입니다. RNN은 순환신경망(Recurrent Network Network)입니다. 수식은 아래와 같습니다.

    $$tanh(x)=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}$$

그래프로 그려보면 다음과 같습니다.

신경망에서의 활성화함수는 각 뉴런계층의 값을 그 다음 뉴런계층으로 전달할때 비선형성을 부여해주게 됩니다. 즉, 활성화함수는 반드시 비선형홤수여야 하며 손실값의 최소화를 위한 경사하강법을 위해 반드시 미분 가능한 함수여야 합니다.

아나콘다(Anaconda) 설치

만약 기존에 Python이 설치되어 있다면 Uninstall(설치 디렉토리 안의 추가로 설치한 패키지는 남아 있으므로 직접 삭제 해야함)하고 관련된 시스템 속성에서 Path를 제거한다. 그리고 Anaconda 사이트에서 설치본을 다운로드 받아 설치한다. 별도의 사용자 설정없이 모두 Next로 설치를 진행하고 Path를 아래처럼 추가한다. (4개 추가했음)

폴더를 하나 만들고, 명령창에서 해당 폴더로 이동한 후 다음처럼 입력한다.

jupyter notebook

해당 폴더에서 웹으로 다양한 파이선 코드를 테스트해볼 수 있게 된다.