티스토리 뷰
1. 출력층 설계하기
신경망은 분류와 회귀 모두에 이용할 수 있다. 다만 둘 중 어떤 문제냐에 따라 출력층에서 사용하는 활성화 함수가 달라집니다. 일반적으로 회귀에는 항등 함수를, 분류에는 소프트맥스 함수를 사용합니다.
p.s 기계학습 문제는 분류(classification)와 회귀(regression)로 나뉩니다. 분류는 데이터가 어느 클래스에 속하느냐 문제입니다.
사진 속 인물의 성별을 분류하는 문제가 여기에 속합니다.
회귀는 입력 데이터에서 수치를 예측하는 문제입니다.
사진 속 인물의 몸무게를 예측하는 문제가 회귀입니다.
2. 항등 함수와 소프트맥스 함수 구현하기
항등 함수(identity function)는 입력을 그대로 출력합니다. 입력과 출력이 항상 같다는 뜻의 항등!
항등 함수에 의한 변환은 은닉층에서의 활성화 함수와 마찬가지로 화살표로 그립니다.
한편, 분류에 사용하는 소프트맥스 함수의 식은 다음과 같습니다.
exp(x)는 e^x을 뜻하는 지수함수입니다. n은 출력층의 뉴런 수, y(k)는 그중 k번째 출력임을 뜻합니다.
소프트맥스 함수의 분자는 입력 신호 a(k)의 지수함수, 분모는 모든 입력 신호의 지수 함수의 합으로 구성됩니다.
즉, 출력은 모든 입력 신호로부터 화살표를 받습니다.
아래 [그림 1]처럼 출력이 모든 입력 신호로부터 화살표를 받게 되지요.
[그림 1]
파이썬으로 구현한 소프트맥스 함수
def softmax(a):
exp_a = np.exp(a)
sum_exp_a = np.sum(exp_a)
y = exp_a / sum_exp_a
return y
2. 소프트맥스 함수의 특징
아래의 코드를 보면 소프트맥스 함수의 출력은 0에서 1.0 사이의 실수입니다. 또, 소프트맥스 함수 출력의 총합은 1입니다.
출력 총합이 1이 된다는 점은 소프트맥스 함수의 중요한 성질입니다.
이 성질 덕분에 소프트맥스 함수의 출력은 '확률'로 해석할 수 있습니다.
결과값을 보면 y[0]의 확률은 0.018(1.8%), y[1]의 확률은 0.245(24.5%), y[2]의 확률은 0.737(73.7%) 해석 할 수 있고
2번째 원소의 확률이 제일 높으니 답은 2번째 클래스라고 할 수 있겠네요.
주의점은 소프트맥스 함수를 적용해도 각 원소의 대소 관계는 변하지 않습니다.
이는 지수 함수가 단조 증가 함수이기 때문이죠
신경망을 이용한 분류에서는 일반적으로 가장 큰 출력을 내는 뉴런에 해당하는 클래스로만 인식합니다.
결과적으로 신경망으로 분류할 때는 소프트맥스 함수를 생략해도 됩니다......?(자원 낭비를 줄이고자 출력층에서 소프트맥스 함수를 생략...한다고 하네요..)
def softmax(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
a = np.array([0.3, 2.9, 4.0])
y = softmax(a)
print(y)
print(np.sum(y))
결과값
[0.01821127 0.24519181 0.73659691]
1.0
'딥러닝' 카테고리의 다른 글
딥러닝 - 06. 손실함수 (0) | 2019.03.14 |
---|---|
딥러닝 - 05. MNIST 데이터 셋 / 추론 배치 처리 (0) | 2019.03.07 |
딥러닝 - 04. 신경망 (2) 3층 신경망 구현 (0) | 2019.02.19 |
딥러닝 - 04. 신경망 (1) 활성화, 계단, 시그모이드 함수 (0) | 2019.02.19 |
딥러닝 - 03. 퍼셉트론 (0) | 2019.02.12 |