softmax로 확률을 출력하고 싶은데

최종 출력값이 너무 커서

낮은 차수의 테일러 근사는 exp와 오차도 크고


overflow가 생길 수 있다는 단점도 존재


이를 해결하기 위해 입력 값들에

정상화 빔을 쏴서 해결할 수 있음


우선 softmax의 형태를 보면



요딴 모양이다




여기서 x값이 경우에 따라 500 1000 2000 이런식으로 커져버리면


overflow가 일어나고 테일러 근사 시 오차가 매우 크게 발생한다.


따라서 x값들 중 최댓값이 0되도록 정상화 빔을 쏴주자


x_list = [13, 2.257, 1.69, 169.9] 라면

실제 exp 값은 약

[442413.392009, ~~, ~~, 6.1183241e+73]


정도로 매우 커지며 overflow가 발생한다.


이 때, 정상화 빔을 쏘면


x_list_정상화 = [-156.9, -167.643, -168.21, 0]

이 된다.


이러면 값이 달라진다고 생각할 수 있는데


위에 softmax의 모양을 보면

분자 분모에 사이좋게 exp가 달려있어서

정상화 해준 만큼 소거되며 softmax 값에 영향을 끼치지 않는다는 것을 확인할 수 있다.


그러면 정상화된 리스트에서

매우 작은 애들은 0으로 근사하고 테일러 근사로 일정 범위 내의 아이들만 추출해 계산하면


overflow와 오차 걱정 없이 평화로운 stable softmax가 가능하다