밑바닥부터 시작하는 딥러닝 - 4

Apic·어제
0

출력층 설계하기

신경망은 분류와 회귀, 모두 이용할 수 있다.
이제 어떤 문제냐에 따라 사용하는 활성화 함수가 달라진다.

회귀: 항등 함수
분류: softmax

회귀: (연속적인) 수치를 예측
분류: 성별 분류, 개 고양이 분류

항등 함수와 softmax 함수 구현

항등 함수

입력을 그대로 출력한다.
입력과 출력이 항상 같다는 의미

그래서 출력층에서 항등 함수를 사용하면 입력 신호가 그대로 출력 신호가 된다.

softmax

소프트맥스는 다중 클래스 분류 모델에서 사용된다.
각 클래스일 확률이 몇 퍼센트인지 출력한다.

a = np.array([0.3, 2.9, 4.0])
exp_a = np.exp(a)
print(exp_a)    # [ 1.34985881 18.17414537 54.59815003]

sum_exp_a = np.sum(exp_a)
print(sum_exp_a)    # 74.1221542101633

y = exp_a / sum_exp_a
print(y)    # [0.01821127 0.24519181 0.73659691]

소프트맥스에는 오버플로우가 일어날 수 있다.
여기서 사용하는 지수 함수에서 큰 값을 출력하기 때문에 무한을 뜻하는 inf가 출력될 수 있다.

이 문제를 해결하기 위해 소프트맥스 함수를 개선했다.

입력이 2개인 퍼셉트론

개선된 소프트맥스 함수 수식

출처: https://github.com/youbeebee/deeplearning_from_scratch/tree/master

파이썬 코드로 만들면 아래와 같다

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)    # [0.01821127 0.24519181 0.73659691]
np.sum(y)   # np.float64(1.0)

이렇게 각 클래스에 대한 확률이 나오고 그 확률을 모두 더하면 1이 나오게 된다.
y[0]의 확률은 0.018(1.8%) y[1]의 확률은 0.245(24.5%) y[2]의 확률은 0.737(73.7%)로 해석할 수 있다.

그리고 y[2]의 확률이 가장 높기 때문에 답은 y[2]번으로 출력하는 것이다.

출력층 뉴련 개수

소프트맥스 함수는 각 클래스의 확률을 나타낸다고 했다.
그렇기 때문에 출력층의 뉴련 개수는 클래스 수와 같아야 한다.
만약 0~9 중 하나로 분류하는 문제라면 출력층의 뉴련 개수는 10개여야 한다.

profile
코딩 공부하는 사람

0개의 댓글