3.1.1 신경망의 예

기본적인 신경망의 예시

위 예시는 2층 신경망이다. (가중치를 갖는 층이 2개)

 

3.1.3 활성화 함수의 등장

 

입력 신호의 총합을 출력 신호로 변환하는 함수를 일반적으로 활성화 함수 (activation function) 라고 한다.

이를 그림으로 나타내게 되면 다음과 같다.

가중치 신호를 조합한 결과가 a라는 노드가 되고, 활성화 함수 h( )를 통과하여 y라는 노드로 변환되는 과정을 의미한다. 

신경망의 동작을 더 명확히 드러내고자 할 때 명시한다.

 

3.2 활성화 함수

 

퍼셉트론을 설명하면서 y 값이 0이나 1이냐 결정짓는 함수를 계단 함수 (step function)이라고 한다. 활성화 함수에는 계단함수 외에도 많은 함수가 있다.

 

3.2.1 시그모이드 함수

 

위 함수 역시 단순한 함수일 뿐이다.

 

3.2.2 계단 함수의 구현

import numpy as np

def step_function(x):
    y = x > 0 
    return y.astype(np.int)

아주 간단한 함수이다. 여기서는 numpy의 astype에 대해 집중해보자.

astype() 메소드는 bool 배열인 y를 int형으로 바꿔준다.

y= x>0

y
Out[6]: array([False,  True,  True])

y.astype(np.int)
Out[7]: array([0, 1, 1])

 

3.2.3 계단 함수의 그래프

import numpy as np
import matplotlib.pylab 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) #y축 범위 조절
plt.show()

matplotlib 라이브러리를 통해서 다음과 같은 그래프를 그릴 수 있다.

파이썬으로 그래프는 처음 그려보는데, 그간 배워 온 C나 Java와 엄청나게 다르다는 느낌을 크게 받는다.

 

3.2.4 시그모이드 함수 구현

import numpy as np
import matplotlib.pylab 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()

 

3.2.6 비선형 함수

 

위 두 개의 함수들은 모두 비선형 함수라고 불리운다. 단순히 y=ax+b의 꼴이 아니라서 그런 것인데, 신경망에서는 활성화 함수로 비선형 함수를 사용해야 한다. 왜냐하면 선형 함수를 이용하면 신경망의 층을 깊게 하는 의미가 없어지기 때문이다. (선형함수라면 단순 비례)

 

3.2.7 ReLU 함수

 

ReLU (Rectified Linear Unit) 함수가 요새는 주로 이용되고 있다고 한다. 물론 책이 2017년에 나왔으니 지금은 사용할지 안할지는 의문이다.

ReLU function

 

+ Recent posts