2.7 퍼셉트론
퍼셉트론은 다수의 입력을 받아 하나의 신호를 출력한다.
XOR 게이트는 단층 퍼셉트론으로는 표현할 수 없다.
2층 퍼셉트론으로 XOR 게이트를 표현할 수 있다.
다층 퍼셉트론만으로 모든 논리연산을 구현할 수 있다.
3. 신경망
퍼셉트론으로 모든 연산을 표현할 수 있다. 하지만 가중치를 설정하는 작업은 사람이 수동으로 설정해야 한다는 문제가 있다.
신경망이 이 문제를 해결해준다. 가중치 매개변수의 적절한 값을 데이터로부터 자동으로 학습하는 능력을 가지고 있다.
3.1 퍼셉트론에서 신경망으로
신경망은 편향을 의미하는 노드도 추가하고, 가중치가 곱해진 입력 신호의 총합을 활성화 함수 $h$에 넣어 나온 결과 값을 가지고 신호를 출력한다.
3.2 활성화 함수
퍼셉트론과 신경망의 주된 차이는 활성화 함수 뿐이다.
활성화 함수의 예로 시그모이드 함수와 계단 함수, ReLU 소개.
ReLU함수는 가중치가 곱해진 입력 신호의 총합과 0 중에 최대값을 반환한다.
신경망에선 활성화 함수로 선형 함수를 사용하면 안된다.(신경망의 층을 깊게 하는 의미가 없어지기 때문)
3.4 3층 신경망 구현하기
각 층마다 가중치와 편향, 활성화 함수를 직접 지정해서 신경망을 구현한 코드.
def init_network():
network = {}
network['W1'] = np.array([[0.1,0.3,0.5], [0.2,0.4,0.6]])
network['b1'] = np.array([0.1,0.2,0.3])
network['W2'] = np.array([[0.1,0.4],[0.2,0.5],[0.3,0.6]])
network['b2'] = np.array([0.1,0.2])
network['W3'] = np.array([[0.1,0.3], [0.2,0.4]])
network['b3'] = np.array([0.1,0.2])
return network
def forward(network, x):
W1, W2, W3 = network['W1'], network['W2'], network['W3']
b1, b2, b3 = network['b1'], network['b2'], network['b3']
a1 = np.dot(x,W1) +b1
z1 = sigmoid(a1)
a2 = np.dot(z1,W2) +b2
z2 = sigmoid(a2)
a3 = np.dot(z2, W3) +b3
y = identity_function(a3) #항등함수 구현해둔것. x받아서 x그대로 리턴해주는 함수
return y
network = init_network()
x = np.array([1.0, 0.5])
y = forward(network,x)
print(y)
#[0.31682708 0.69627909]
3.5 출력층 설계하기
출력층에서 사용하는 활성화 함수를 정하는 것이 중요하다. 회귀엔 항등함수, 이진분류엔 시그모이드, 멀티라벨분류엔 소프트맥스 함수를 주로 사용한다.
<항등함수>
생략
<시그모이드>
생략
<소프트맥스 함수>
softmax함수 식은 다음과 같다. exp의 오버플로우 문제 때문에 식을 변형한 아래 식을 보통 사용한다.
$$y_k = \frac{exp(a_k)}{\sum{}{}exp(a_i)}$$
$$y_k = \frac{exp(a_k+C)}{\sum{}{}exp(a_i+C)}$$
def sortmax(a):
c = np.max(a)
exp_a = np.exp(a-c)
sum_exp_a = np.sum(exp_a)
y = exp_a / sum_exp_a
return y
소프트맥스 함수의 출력 총합은 1이다. 이 성질 덕분에 소프트맥스 함수의 출력을 '확률'로 해석할 수 있다.
지수함수는 단조증가 함수이므로 a의 원소들 사이의 대소 관계와 y의 원소들 사이의 대소관계로 그대로 이어진다. 따라서 가장 큰 출력을 내는 뉴런에 해당하는 클래스로만 인식하므로 추론단계에선 굳이 소프트맥스 함수를 사용하지 않는 경우가 많다. (당연히 신경망을 학습시킬 땐 소프트맥스 함수를 사용한다.)
'ML&DATA > 밑바닥부터 시작하는 딥러닝' 카테고리의 다른 글
7 - CNN (0) | 2020.10.07 |
---|---|
5 - 오차역전파법 (0) | 2020.09.18 |
4 - 신경망 학습 (0) | 2020.09.10 |