본문 바로가기
Data Science & AI/Algorithm

항등 함수와 소프트맥스 함수

by skwkiix 2024. 9. 23.
728x90

기계학습 문제는 크게 회귀와 분류로 나눈다.

회귀에서는 출력층의 활성화 함수로, 항등 함수

분류에서는 출력층의 활성화 함수로, 소프트맥스 함수를 이용한다.

1. 항등함수 identity function

항등함수는 입력을 그대로 출력하는 함수이다.

입력과 출력이 항상 같다는 뜻의 항등이다. 따라서 신경망에서 항등함수를 사용하게 되면, 입력 신호와 출력신호가 같다.

 

항등함수

 

2. 소프트맥스 함수 softmax function

$ y_{k} = exp(a_{k}) / \sum_{i = 1}^{n}exp(a_{i}) $

 

n : 출력층의 뉴런 수

k : k번째 출력

 

소프트맥스 함수의 분자는 입력신호의 지수함수, 분모는 모든 입력 신호의 지수함수의 합이다.

이를 그림으로 나타내면 다음과 같다.

 

 

즉, 츨력층의 각 뉴런이 모든 입력신호로부터 영향을 받는 형태이다.

# 기본 소프트맥스 함수 수식
def softmax(a):
    exp_a = np.exp(a)
    sum_exp_a = np.sum(exp_a)
    y = exp_a / sum_exp_a

    return y


# 오버플로 방지, 소프트맥스 함수 수식
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

 

간단하게 함수로 구현해 본다면, 이렇게 구현할 수 있지만, 오버플로 overflow 문제가 발생하게 된다.

왜냐하면 지수함수 이기 떄문에 값이 무한대로 가는 것이 아주 흔하게 벌어진다.

예를 들어 $ e^{10} $ 만 되어도, 20000이고 더 커지게 되면 함수는 inf를 뱉게 된다.

큰 값끼리 연산을 하게 되면, 결과 수치가 불안정해질 수 있다.

 

컴퓨터는 수를 4비트나 8비트와 같이 유한한 형태의 데이터로 다루기 때문에, 표현할 수 있는 수의 범위가 한정되어 있다.

따라서, 너무 큰 값은 표현할 수 없는 문제가 발생하고, 이런 문제를 overflow 라고 한다.

 

2.1 소프트맥스 함수의 출력

특징1. 소프트맥스 함수의 출력은 0과 1 사이의 실수이고, 출력의 총합은 1이다.

따라서, 함수의 출력을 '확률'로 해석할 수 있다.

 

다음과 같은 예시가 있다고 가정하자.

a = np.array([0.2, 0.4, 0.7])
y = softmax(a)
print(y)

출력값 : [0.25838965 0.31559783 0.42601251]

 

y[0]의 확률 : 0.258 , y[1]의 확률 : 0.315, y[2]의 확률 : 0.426으로

42.6퍼센트의 확률로 2번째 원소릐 확률이 높다. 따라서 답은 2번째 클래스라고 말할 수 있다.

 

특징2. 소프트맥스 함수를 적용해도 대소관계는 변하지 않는다.

 

y = exp(x)의 단조 증가 함수이므로, 대소관계가 그대로 이어지게 된다.

따라서 결과적으로 분류할 때는 출력층의 소프트맥스 함수를 생략해도 무방하다.(생략하는 것이 일반적)

 

*단조 증가 함수 : 정의역 원소 a,b가 $ a \leq  b $ 일떄, $ f(a) \leq  f(b) $ 가 성립하는 함수

728x90