Softmax fuction 소프트맥스 함수.

  • 함수의 출력을 '확률'로 해석할 수 있는 함수.
  • 출력 범위 = 0 ~ 1.0
  • 출력 총 합 = 1


import numpy as np

#softmax
a = np.array([0.5,1.6,5.3])
print(a)

exp_a = np.exp(a)
print(exp_a)

sum_a = np.sum(exp_a)
print(sum_a)

y = exp_a / sum_a
print(y)

[0.5 1.6 5.3]

[  1.64872127   4.95303242 200.33680997]

206.93856366988692

[0.0079672 0.0239348 0.968098 ]


def softmax(input):
exp_input = np.exp(input)
sum_input = np.exp(input)
y = exp_input / sum_input
return y


Softmax의 오버플로우 방지

-지수함수의 경우 같이 커질수록 높은 값을 갖게된다. 가령 e^1000을 하게 되면 무한대를 뜻하는 값을 리턴하게 된다. 이를 방지하기위해 지수함수의 특성을 이용해 오버플로우를 방지한다.


-> 지수 함수의 경우 어떤수를 더하거나 빼도 결과는 바뀌지 않는다. 이를 이용해 input 값에 어떠한 값을 더하거나 빼주어 정규화를 한다고 생각하면 이해하기 쉽다.


코드에선 input 값들중 최대값을 빼주는 식으로 연산을 한다.

def softmax(input):
rl = np.max(input)
exp_input = np.exp(input - rl)
sum_input = np.exp(input)
y = exp_input / sum_input
return y

[0.5 1.6 5.3]

[0.00822975 0.02472353 1.        ]

1.0329532735193594

[0.0079672 0.0239348 0.968098 ]

+ Recent posts