활성화 함수는 임계값을 경계로 출력이 바뀐다. 이러한 함수를 계단 함수(step function)이라고 한다. 계단 함수 이외의 다른 함수를 알아본다.
- 시그모이드 함수
$$h(x) = \frac{1}{1+exp(-x)}$$
여기서 exp는 우리가 흔히 알고 있는 자연상수 e이다.
- 계단 함수를 그려보자.
def step_function(x):
if x > 0:
return 1
else:
return 0
아주 간편하게 0 초과의 값이 나오면 1을 반환하고 0 이하의 값이 나오면 0을 주는 함수이다. 하지만 우리가 사용하는 numpy를 input으로 넣을 수 없으므로 조금 수정한다.
import numpy as np
def step_function(x):
y = x > 0
return y.astype(np.int)
x = np.array([-1.0, 1.0, 2.0])
print(x)
print(step_function(x))
y는 np의 원소값을 판단해 0과 1로 돌려주는 bool (True/False) 배열이다. 이제 이들을 이용해서 계단 함수를 직접 그려보자.
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)
plt.show()
0을 경계로 출력이 0에서 1로 바뀐다. 이렇게 값이 한번에 확 변하기 때문에 계단함수라고 칭한다. 같은 방법으로 시그모이드 함수도 만들어본다.
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()
보기 이쁜 그래프가 만들어진다. S자 모양 함수라고 생각하면된다. 시그모이드 함수와 계단 함수의 차이점을 알기 위해 동 캔버스에 같이 그려본다.
import numpy as np
import matplotlib.pylab as plt
def step_function(x):
return np.array(x>0, dtype=np.int)
def sigmoid(x):
return 1 / (1+np.exp(-x))
x = np.arange(-5.0,5.0,0.1)
y1 = sigmoid(x)
y2 = step_function(x)
plt.plot(x,y1)
plt.plot(x,y2)
plt.ylim(-0.1,1.1)
plt.show()
x값과 y값의 범위는 서로 같으나 매끄러움이 서로 다르다. 게다가 돌여주는 y값이 다르다. 계단함수는 0과 1밖에 존재하지 않지만 시그모이드는 나름 많은 값을 주고 있다. 보면 입력이 작을 때 0값에 가깝고 입력이 클수록 1값에 가깝다. 이 친구들은 비선형함수이다. 신경망에서는 은닉층을 위해 꼭 비선형함수를 사용해야한다.
알아야 할 함수가 하나 더 있다. 바로 ReLU(Rectified Linear Unit)이다. 입력이 0을 넘으면 입력을 그대로 출력하고 0 이하이면 0을 출력하는 함수이다.
$$h(x) = x(x>0), 0(x<=0)$$
구현해보자.
import numpy as np
import matplotlib.pylab as plt
def relu(x):
return np.maximum(0,x)
x = np.arange(-5.0,5.0,0.1)
y3 = relu(x)
plt.plot(x,y3)
plt.ylim(-0.1,5.1)
plt.show()
다같이 그려보자!
입력이 1이후의 값의 출력이 확 달라지는 것을 볼 수 있다.
'Python > DeepLearning' 카테고리의 다른 글
퍼셉트론에서 신경망으로(5) (0) | 2019.04.23 |
---|---|
퍼셉트론에서 신경망으로(4) (1) | 2019.04.22 |
퍼셉트론에서 신경망으로(3) (0) | 2019.04.22 |
퍼셉트론에서 신경망으로(1) (0) | 2019.04.22 |
퍼셉트론(Perceptron) 알고리즘 (0) | 2019.04.22 |