선형 함수는 입력값과 가중치를 곱한 결과를 그대로 출력하기 때문에 신경망에서 여러 개의 활성화 함수를 사용한다면 최종 출력값은 입력값과 가중치의 선형 조합으로 표현되므로 입력 데이터의 비선형 관계를 표현할 수 없음
신경망이 입력 데이터의 비선형 관계를 잘 학습할 수 있도록 하기 위해 비선형 활성화 함수가 필요
1-1. 시그모이드
import numpy as np
import matplotlib.pyplot 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.plot([0,0],[1.0,0.0],':') # x,y (0,0) 위치에 y 선으로 0 ~ 1 까지 점선을 그리라는 의미
plt.title('Sigmoid Function')
plt.show()
시그모이드 구조를 확인하기 위해 임의의 값을 만들어서 그래프를 확인해줍니다
보이는 그래프와 같이 시그모이드는 0과 1 사이의 결과를 이지선다로 반환하는 함수라는걸 알수 있습니다
1-2. 하이퍼볼릭탄젠트
x = np.arange(-5.0,5.0,0.1)
y = np.tanh(x)
plt.plot(x,y)
plt.plot([0,0],[1.0,-1.0],':')
plt.axhline(y=0,color='orange',linestyle='--')
plt.title('Tanh Function')
plt.show()
하이퍼볼릭 탄젠트 함수는 시그모이드와 같은 1과 0 사이의 결과를 이지선다로 반환하는 함수라는걸 알수 있습니다
또한 시그모이드 함수 대비해서 기울기가 작아지지 않는 구간이 넓어서 학습 효율성이 뛰어나다는걸 알수 있습니다
따라서 시그모이드 대안으로 사용할 수 있는 함수입니다
1-3. 렐루
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.plot([0,0],[5.0,0.0],':') # x,y (0,0) 위치에 y 선으로 0 ~ 1 까지 점선을 그리라는 의미
plt.title('Relu Function')
plt.show()
렐루 함수는 입력이 양수인 경우에는 정비례로 출력하고 음수인 경우에는 0으로 출력하는걸 볼수 있습니다
이는 다중선택지 중에서 결과를 내야할 경우에 사용한다는걸 알수 있습니다
다만 입력이 음수인 경우에는 그래디언트가 0이 되기 때문에 해당 부분에서는 가중치 업데이트가 이뤄지지 않습니다
따라서 모델을 구성하는 경우에서 단일 레이어들의 결과를 증폭시키는데 사용되고 학습과정에서는 softmax를 주로 사용합니다
1-4. 소프트맥스
x = np.arange(-5.0,5.0,0.1)
y = np.exp(x) / np.sum(np.exp(x))
plt.plot(x,y)
plt.title('Softmax Function')
plt.show()
2. 역전파(Backpropagation)
1969년 XOR는 '지금의 기술로 풀 수 없다' 라는 것을 민스키 교수님이 수학적으로 증명함
1974년 Paul Werbos에 의해 박사 논문에서 해결됨
W,b를 이용해 주어진 입력을 가지고 출력을 만들어 낼 수 있음. 출력이 우리가 가지고 있는 값과 다른 출력일 경우 W,b를 조절함