티스토리 뷰

본 내용은 deeplearning from scratch 를 공부하는 차원에서 정리한 것입니다! (다들 꼭 읽어보세요 입문자에게도, 정리하는 차워에서 읽는 분에게도 좋습니다.)


Softmax 함수는 주로 출력층 activation function으로 사용됩니다.

주의할 점이 있는데, 기본 softmax 함수는 모든 값들을 지수함수를 사용하여 받고 계산하기 때문에 쉽게 값이 커지게 됩니다.

컴퓨터가 다루는 데이터 크기가 있는데, 너무 큰 값을 큰 값으로 나누는 형태는 불안정한 결과를 낳습니다. 

(계산을 하지 못하는 경우가 발생합니다. 이런 문제를 overflow라고 하죠. 컴퓨터가 다룰 수 있는 범위를 넘은 것입니다!)


때문에 사용하는 트릭! 바로 입력값 중 가장 큰 값을 입력값 전체에 빼준 후, 해당 값을 softmax 인풋으로 넘기는 것 입니다.




  

기본 softmax function// 

k 번째 아웃풋 노드 y_k 하나를 계산하는데, 모든 인풋 a 가 사용된다는 점! 지수를 사용해서 계산한 평균식으로 보입니다.




트릭 적용 softmax function//

입력 a에 분자 분모가 모두 같은 값을 뺀 후 softmax function이 적용되는 것! 





-python code 비교


기존 softmax function 


def basic_softmax(x):

    exp_x = numpy.exp(x)

    sum_exp_x = numpy.sum(exp_x)

    

    return exp_x/sum_exp_x



e.g x = numpy.array([1000, 100, 10, 1]) //1 x 4 array


def sol_softmax(x):

    max_x = numpy.max(x) // max_x = 1000

    exp_x = numpy.exp(x-max_x) // exp_x = [exp(0), exp(-900), exp(-990), exp(-999)]

    sum_exp_x = numpy.exp(exp_x)

    

    return exp_x/sum_exp_x



'Basic section > Python' 카테고리의 다른 글

PYTHON 워킹디렉토리 확인  (1) 2018.02.28
부모 디렉토리 참조  (0) 2018.02.26
numpy array 차원의 인덱스  (0) 2018.02.22
numpy 배열 부등호 연산  (0) 2018.02.21
numpy newaxis  (0) 2018.02.21
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함