앞선 글에서 퍼셉트론, 가중치, 편향, 비선형, 다중퍼셉트론을 살펴보았다. 퍼셉트론 식을 구현하는 데 있어 가중치와 편향을 적절한 값으로 직접 설정했다. 그러나 층이 많아질수록 직접 설정할 수 없을 것이다. 신경망은 학습을 통해 가중치, 편향에 대한 적절한 값을 찾아준다.
신경망
신경망 네트워크는 입력층 - 은닉층 - 출력층으로 구성되는데, 은닉층의 경우 처리 과정을 확인할 수 없다.
신경망의 구조는 다층 퍼셉트론과 유사하다. 퍼셉트론에서 신경망으로 나아가 보자.
앞서 정의한 퍼셉트론 식을 다시 보자.
x1,x2는 입력신호, w1,w2는 가중치, b는 편향이다. 이 3가지를 네트워크로 나타내보자.
익숙한 그림이지만 편향이 추가됐다. 이 그림은 위 퍼셉트론 식을 1*b + w1*x1 + w2*x2라고 풀어서 나타낸 것이다.
우리는 이 식을 새로 정의하여 아래처럼 간략화할 수 있다.
이 식을 설명하면 기존의 계산식(b+w1x1+w2x2)이 h(x) 함수를 거쳐 출력신호 y를 반환한다. 이 때, h(x)함수는 입력이 0을 넘으면 1을 반환하고 있다. h(x)함수는 활성화 함수라 부르며, 입력 신호의 총합을 처리하여 출력 값을 정하는 역할을 한다.
다시 말해, 기존의 단층 퍼셉트론 식은 입력신호의 총합을 갖고 출력신호를 반환했지만, 이제는 입력신호의 총합이 활성화 함수를 거쳐서 출력신호를 반환한다.
이렇게 활성화 함수를 추가하는 이유는 비선형성을 추가하기 위함이다. 바로 살펴보겠지만 활성화 함수들은 모두 비선형성 함수이다. 활성화 함수가 선형 함수라면 층을 깊게 하는 의미가 없어진다. 왜냐하면 복합함수로 설명될 수 있기 때문이다. f(x) * f(x) * f(x) 이런 식으로...
즉, 은닉층이 없는 네트워크가 된다. 그래서 다층 퍼셉트론에서는 활성화 함수가 필요하다.
활성화 함수를 네트워크 그림에 포함하면 아래와 같다.
활성화 함수
활성화 함수의 역할을 하는 함수가 여럿있는데 대표적으로는 계단함수, 시그모이드함수, ReLu함수가 있다. 이 함수가 어떻게 활성화시키는지 살펴보자.
계단 함수
계단 함수는 임계값 이전에는 출력값이 0이 었다가 임계값을 넘으면 1이 되는 함수이다. 계단 함수를 구현한 식은 아래와 같다. 여기서 임계값은 0이다.
import numpy as np
def step_function(x):
return np.array(x>0, dtype=np.int)
구현한 식을 가지고 그래프를 그려보자.
import matplotlib.pylab as plt
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()
그래프와 같이 x <= 0 이면, y값은 계속 0이다가, x > 0 이면 y값이 1이 된다. 앞서 언급한 단층 퍼셉트론이 이 경우에 해당한다.
시그모이드 함수
시그모이드 함수는 신경망에서 자주 이용하는 활성화 함수로 수식은 다음과 같다. exp()는 지수함수를 의미한다.
시그모이드 함수는 아래와 같이 구현할 수 있다.
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()
계단함수처럼 이분적이지 않고 x값에 따라 y값이 계속 달라진다.
ReLu 함수
ReLu 함수도 신경망에서 주로 이용하는 함수중 하나로, 입력이 0을 넘으면 입력을 그대로 출력하고 0이하이면 0을 출력한다.
수식과 그래프는 다음과 같다.
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(-0.1, 1.1)
plt.show()
출력층 활성화 함수
앞서 신경망은 입력층 - 은닉층 - 출력층으로 구성되어 있다고 언급했는데, 출력층에서의 활성화 함수는 다른 함수를 사용한다. 일반적으로신경망이 어떤 문제를 해결하느냐에 따라 다른 함수를 사용하는데, 분류 문제를 해결하는 경우 softmax함수를 사용하고 회귀에서는 항등함수를 사용한다. 항등 함수부터 살펴보자.
항등 함수(identity function)
항등 함수는 간단하다. 입력 값을 그대로 출력한다. f(x) = x 이다. 그래서 출력층에서 항등 함수를 사용하면 입력 신호가 그대로 출력 신호가 된다.
소프트맥스 함수(softmax function)
소프트맥스 함수의 식은 다음과 같다.
소프트맥수 함수의 분자는 입력 신호 ak의 지수함수, 분모는 모든 입력 신호의 지수 함수의 합으로 구성된다. 소프트맥스 함수를 그림으로 나타내면 다음과 같은데, 소프트맥스의 출력은 모든 입력 신호로부터 화살표를 받는다. 식의 분모에서 보듯, 출력층은 모든 입력 신호에서 영향을 받기 때문이다.
'프로젝트 > 딥러닝' 카테고리의 다른 글
[CH.4]신경망 학습하기-2 (경사하강법) (0) | 2020.02.09 |
---|---|
[CH.4]신경망 학습하기-1 (손실함수, 교차엔트로피오차) (1) | 2020.02.02 |
[CH.2]딥러닝의 시작, 퍼셉트론 (0) | 2020.01.24 |