본문 바로가기
python/deep learning

softmax 함수의 장점

by Falto 2021. 8. 10.

아래는 softmax 함수와 relative_frequency 함수를 비교하는 python 코드다. relative_frequency 함수는 전체에 대한 상대적인 크기를 반환한다. 즉 (각 값 / 전체 값의 합)이다. 두 함수는 모두 배열의 합이 1이 된다는 공통점이 있다(전체 값이 모두 양수라는 조건이 있어야 한다).

import math
import matplotlib.pyplot as plt

arrx = range(5)
array = [2, 3, 5, 7, 11]

def softmax(array):
    array = [x - max(array) for x in array]
    a0 = 0
    for x in array:
        a0 += math.exp(x)
    a1 = []
    for x in array:
        a1.append(math.exp(x)/a0)
    return a1

def relative_frequency(array):
    a0 = sum(array)
    a1 = []
    for x in array:
        a1.append(x / a0)
    return a1

a0 = softmax(array)
a1 = relative_frequency(array)

plt.bar(arrx, a1, color='b')
plt.bar(arrx, a0, color='g')

plt.show()

2, 3, 5, 7, 11에 대한 결과

결과는 위와 같이 나왔다. 파란색이 relative_frequency, 초록색이 softmax다. relative_frequency는 그저 원래 배열에서 해당 값이 차지하고 있던 비율을 그대로 드러내는 반면, softmax는 가장 큰 값이 압도적으로 크게 나왔다.

1000, 1001, 1002, 1003, 1004에 대한 결과

array를 1000, 1001, 1002, 1003, 1004로 바꿔서 실행해보았다. relative_frequency는 모두 균등하게 나오지만, softmax는 값이 커질수록 기하급수적으로 출력도 커진다.

그리고 softmax 함수는 0과 음수도 넣을 수 있다!

2, 0, -5, -7, -11에 대한 결과

relative_frequency 함수는 모든 값이 0이면 분모도 0이 되어버려서 못 쓰게 되어버린다. 그러나 softmax 함수는 모든 값이 0이어도 상관 없다. 왜냐하면 x가 지수에 있거든.

결론: softmax는 좋은 함수다.

'python > deep learning' 카테고리의 다른 글

NAND NOR  (0) 2021.08.09
python 경사 하강법  (0) 2021.08.06

댓글