딥러닝 교재나 활성화함수를 parameter로 지정할 때, 항상 softmax, sigmoid는 봐왔을 것이다.
단순하게 지수함수를 전체 지수함수의 합으로 나눈 값이 아닌 어떤 동작을 하는지, 왜 이름은 softmax인지 알고싶었다.
Softmax.. 왜 이름이 Softmax일까..???
Softmax 함수는 아래와 같다.
엥? Softmax = Softmax 활성화함수 아니었었나...?
네.. 아니었습니다 ㅎㅎ (이래서 항상 이름의 유래를 알아야...!!)
그럼 Softmax는 무엇을 할까?
Softmax함수는 최대값 함수에 근사하도록 동작한다.
가장 큰 x값을 라고 했을 때, 는 어떤 보다도 크다고 가정할 수 있다.
위 방식으로 아래 첫번째 식이 두번째의 식처럼 바뀌게 된다!
Softmax의 목적은 최대값을 미분가능한 근사치를 제공하는 것이다. 미분이 불가능한 함수를 가능하도록 바꿈으로 인해 Max 함수를 사용하는 모델을 최적화 할 수 있다.
왜 Softmax함수라고 불릴까?
- 최대값의 근사치이다.
- 최대값의 soft/smooth한 근사치이다.
우리가 아는 아래의 함수는 Softmax 활성화 함수다.
(Softmax Activation Function)
왜 우리는 Softmax 활성화 함수를 Softmax라고 부를까?
- Softmax 활성화 함수는 Softmax 함수랑 매우 유사하게 생겼다. (분모를 보면 알 수 있다)
- Softmax 활성화 함수는 특정 조건에서, 큰 input은 강조하고, 작은 input은 억제한다. 이는 Softmax 함수와 유사한 방식으로 작동한다.
Softmax 활성화 함수는 지수 함수를 사용하기 때문에, 컴퓨터로 계산을 할 때 오버플로 문제가 생길 수 있다. 즉, 아주 큰 값을 내뱉을 수 있다는 것이다. 예를 들어 은 무한대를 뜻하는 inf가 된다.
오버플로(overflow): 컴퓨터가 표현할 수 있는 수의 범위가 한정되어 너무 큰 값은 표현할 수 없는 문제
보통 오버플로를 막을 목적으로 입력 신호 중 최댓값을 이용한다.
def softmax(x):
c = np.max(x)
exp_x = np.exp(x-c) # 오버플로 방지
sum_exp_x = np.sum(exp_x)
y = exp_x / sum_exp_x
return y
따라서 최댓값을 뺀 것으로 소프트맥스 활성화 함수를 구현하면 오버플로를 방지할 수 있다.