본문 바로가기
인공지능/딥러닝

[밑바닥부터 시작하는 딥러닝] 신경망 출력층

by julysein 2021. 10. 21.
728x90

 

1. 항등 함수

y=x 로 입력이 그대로 출력되는 함수이다.

 

2. 소프트맥스 함수

소프트맥스 함수의 최종 수식이다.

소프트맥스 함수는 원래 아래 C'의 상수항이 없는 함수이지만 넣어도 값은 동일하다. 상수를 넣는 이유는 소프트맥스 함수를 그냥 계산할 시에 숫자가 너무 커는 오버플로 현상이 생기기 때문이다.

 

이를 이용해 다음과 같은 형식으로 소프트맥스 함수를 구현할 수 있다.

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([1010,1000,990])
y = softmax(a)
print(y)
[9.99954600e-01 4.53978686e-05 2.06106005e-09]

 

소프트맥스 함수의 특징은 배열에 적용시 각각의 값은 0 과 1 사이의 값이며 배열 전체의 합이 1 이 된다는 점이다.

sum = np.sum(y)
print(sum)
1.0

 

 

장점 :

여러가지 값들 중 가장 정답에 가까운 값을 선택하고 우선순위를 매길 수 있다.

배열들에 적용 시 모든 값의 합이 1이기 때문에 각 소프트맥스 함수의 출력을 '확률'이라고도 할 수 있다. 따라서 확률들 중 가장 높은 값을 가진 값에 대하여 확률이 가장 높다고도 말할 수 있다. 여러가지 클래스 중 고를 수 있는 함수가 생기는 것이다.

 

단점 :

소프트맥스 함수를 적용하더라도 대소관계가 변하지는 않는다.

이 성질 때문에 출력이 가장 큰 뉴런이 변하지 않아서 신경망 분류 시 생략해도 무방하다.

 

728x90