Softmax 함수는 위와 같이 n개의 class의 output 값에 지수함수(exp)를 이용해 확률을 계산합니다. 이 함수에서 지수함수를 이용하는 이유는 음수값을 양수로 전환하기 용이하기 때문이다. 그러나 지수함수를 활용하다보니 생기는 문제점이 있다. 바로 오버플로우(overflow)문제이다. 오버플로우는 가 큰 수인 경우 지수함수에 올렸을 때 기하급수적으로 숫자가 커져 계산이 불가능한 inf 가 되는 경우에 발생합니다. 이런 문제점을 수치적 불안정성이라고 합니다. 그리고 이 문제를 해결하기 위해서 Softmax에 일종의 정규화를 수행해 줍니다.
여기서 활용하는 정규화는 모든 output 값에 최댓값 C를 빼주어 음수로 만들어 exp의 결과 값이 0~1 사이의 값이 될 수 있게 하는 방법입니다.
위의 식을 참고해 설명하면, 만일 a=[1000,200,500]이라면 a에 최댓값 1000을 빼주면 [0,-800,-500]이 되어 지수함수를 계산하더라도 0~1 사이의 값으로 규정되어 수치적 안정성을 높이고 오버플로우를 방지할 수 있습니다.