Hello Computer Vision

Softmax 활성화함수 알아보기 본문

딥러닝/손실함수

Softmax 활성화함수 알아보기

지웅쓰 2023. 1. 3. 15:38

우리가 분류할 때 레이어 최상단에 많이 쓰는 함수로는 softmax 함수가 있다.

이전에 다른 entropy 함수랑 mse함수를 다루었는데 softmax도 한번 체크해보고자 한다.

참고 문서: 블로그 파이토치문서

수식

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

분모에서는 함수 값들에 자연상수를 씌워준 값의 합이고 분자는 해당 함수 값의 자연상수를 취한 것을 확인할 수 있습니다.

 

특징

각 함수 값에 softmax를 씌운 모든 값들의 범위는 [0,1]이며 합은 1이다.

-->예를 들어 함수 값(1, 1, 2)가 각각 나왔다고 했을 때 각각의 softmax값은 (0.21, 0.21, 0.58)이다.

softmax를 취한다고 함수 값의 대소변화에 변화를 일으키지 않는다.

--> 지수함수는 단조증가 함수이기 때문에 변하지 않는다.

모든 값의 합이 1이므로 확률로 생각하고 계산할 수 있다.

--> softmax값이 (0.21, 0.21, 0.58)이라면 input에 대해 3번째 클라스가 정답일 확률이 58퍼센트라고 해석할 수 있다.

 

주의점

softmax는 지수함수므로 높은 함수값을 가질 경우 오버플로(아주 높은 값) 문제가 발생할 수 있다.

파이토치를 사용해 Conv2d 를 사용할 경우 내장된 초기화 함수가 있어서 아직 한번도 발생한 적은 없다.

그러나 발생할 수도 있는데 이러한 경우 

def softmax(x):
	c = np.max(x)
    exp_x = np.exp(x-c) # x값에 최대값 c를 빼준다
    sum_exp_x = np.sum(exp_x)
    y = exp_x / sum_exp_x
    
    return y

이렇게 설정해 오버플로를 방지할 수는 있다.

파이토치 문서에는 그냥 inf로 표시된다고 언급만 하고 해결책을 말해주지는 않는다.