출력층 설계
신경망의 출력층(Output Layer)에서 사용하는 활성화 함수는 현재 해결해야하는 문제가 무엇인지에 따라 달라집니다.
문제는 크게 분류(classification)와 회귀(regression)으로 나뉩니다. 분류는 데이터가 어느 범주, 클래스에 속하는지를 맞춰야하는 문제(ex : 10대 or 20대 or 30대 이상)고, 회귀는 수치를 예측해야하는 문제(ex : 182.1cm)입니다.
항등 함수
항등 함수(identity function)은 입력 신호를 그대로 출력합니다.
소프트맥스 함수
분류에서 사용하는 소프트맥스 함수(softmax function)의 식을 한번 보겠습니다.
$y_k = \frac{e^{a_k}}{\sum_{i=1}^{n}e^{a_i}}$
$e^{x}$ 는 지수 함수, $n$은 출력층의 노드 수, $y_k$는 그 중 $k$번째 출력입니다.
소프트맥스 함수의 출력은 0~1 사이의 실수이고, 소프트맥스 함수 출력의 총합은 1입니다.
이런 소프트맥스 함수의 출력은 '확률'로 해석할 수 있습니다.
예를 들어, 숫자를 적은 이미지를 보고, 0~9까지 숫자를 분류하는 문제가 있다고 합시다.
그렇다면 $n$ = 10이고, $y_1$ 부터 $y_{10}$이 있습니다.
$y_1$의 값은 숫자가 0일 거라고 예측하는 확률로 생각할 수 있고, 값이 0.18 이라면
입력을 통해 신경망은 이 이미지에 쓰인 숫자가 1일 확률이 18%라고 예측하고 있는 것입니다.
만약 $y_10$이 0.7로 가장 큰 값을 출력한다면, 10번째 클래스 즉 9가 정답일 것이라고 예측하고 있다는 뜻입니다.
소프트맥스 함수 구현 시 주의점
소프트맥스 함수는 지수 함수를 사용하기 때문에, 오버플로 문제에 주의해야합니다.
예를 들어, $e^1000$의 값은 파이썬에서 inf가 됩니다.
따라서 아래와 같이 수식을 개선할 수 있습니다.
수식을 보면 소프트맥스의 지수 함수를 계산할 때 어떤 정수를 더하거나 빼도 결과는 같음을 알 수 있습니다.
오버플로를 막을 목적으로, 최댓값을 빼주는 게 일반적인 구현입니다.
구현 예시입니다.
# 개선한 softmax 함수를 구현
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
그리고 소프트맥스 함수를 적용해도 각 원소의 대소 관계는 변하지 않습니다.
$y=e^x$가 단조 증가 함수(monotonically increasing function)이기 때문입니다.
수학적인 부분이 이해가 안된다면 아래 예시를 보시기 바랍니다.
입력 신호 $a_1, a_2, a_3$ 중 $a_3$의 값이 가장 크다면 $y_3$가 가장 큰 것을 쉽게 확인할 수 있습니다.
결과적으로 신경망으로 단순히 분류할 때는 즉, 결과만 낼 때는 굳이 출력층의 소프트맥스 함수를 사용하지 않아도 됩니다. 지수 함수 계산에 드는 자원 낭비를 줄이기 위해 출력층의 소프트맥스 함수를 생략할 수 있습니다.
하지만, 신경망을 학습시킬 때는 출력층에서 소프트맥스 함수를 사용합니다.
출력층의 노드 수
출력층의 노드 수는 적절하게 정해야 합니다.
값을 하나만 내는 회귀 문제라면 노드 수를 하나만 내도 상관이 없습니다.
분류에서는 일반적으로 분류하고 싶은 클래스 수로 설정합니다.
위 예시는 차례대로 apple, bear, candy, dog, egg 5개의 클래스를 분류하고 있습니다.
만약 $y_2$의 출력 값이 가장 크다면 신경망은 bear라고 판단함을 의미합니다.
하지만 클래스 수가 두 개뿐이라면 즉, 이진 분류(Binary Classification) 문제의 경우 노드 수는 1로 설정합니다.
예측한 확률 값에 따라 일정 임곗값(ex : 0.5)을 넘으면 O 아니면 X 처럼 분류하면 되기 떄문입니다.
출력층을 간단하게 알아봤습니다.
감사합니다^^
[참고자료]
[1] 밑바닥부터 시작하는 딥러닝1 (사이토 고키)
'머신러닝, 딥러닝 ML, DL > 이론' 카테고리의 다른 글
[Deep Learning] 6. 경사 하강법, 기울기 (2) | 2021.08.04 |
---|---|
[Deep Learning] 5. 배치, 미니배치, 수치 미분, 기울기 (0) | 2021.08.04 |
[Deep Learning] 4.신경망 학습, 손실 함수(오차제곱합, 교차 엔트로피 오차) (2) | 2021.07.28 |
[Deep Learning] 2. 신경망, 활성화 함수(시그모이드 Sigmoid, 렐루 Relu) (2) | 2021.07.24 |
[Deep Learning] 1. 퍼셉트론, Perceptron (0) | 2021.07.18 |