Softmax를 계산할 때 max 값을 빼는 이유.
참고 : 원문 : https://jamesmccaffrey.wordpress.com/2016/03/04/the-max-trick-when-computing-softmax/
softmax 식은 아래와 같은데,
실제 구현을 보면, 아래와 같이 max값을 빼서 처리하는 것을 볼 수 있다.
이유는 e 가 1보다 크기 때문에 지수승을 계속하면 매우 큰 수가 되어 계산에 문제가 되기 때문이라고 한다.
결과.
-max를 하지 않으면 값이 2000만 되어도 nan 처리된다.
x : [1. 1. 2.] softmax with -max : [0.21194156 0.21194156 0.57611688] 1.0 softmax without -max : [0.21194156 0.21194156 0.57611688] 1.0 x : [ 1. 1. 20.] softmax with -max : [5.60279637e-09 5.60279637e-09 9.99999989e-01] 1.0 softmax without -max : [5.60279637e-09 5.60279637e-09 9.99999989e-01] 1.0 x : [ 1. 1. 200.] softmax with -max : [3.76182078e-87 3.76182078e-87 1.00000000e+00] 1.0 softmax without -max : [3.76182078e-87 3.76182078e-87 1.00000000e+00] 1.0 x : [1.e+00 1.e+00 2.e+03] softmax with -max : [0. 0. 1.] 1.0 softmax without -max : [ 0. 0. nan] nan x : [1.e+00 1.e+00 2.e+04] softmax with -max : [0. 0. 1.] 1.0 softmax without -max : [ 0. 0. nan] nan