소프트맥스(Softmax) 함수?
: 주로 분류(Classification)문제에서 사용되는 함수
Softmax함수
# example a = np.array([0.3, 2.9, 4.0]) exp_a = np.exp(a) sum_exp_a = np.sum(exp_a) y = exp_a / sum_exp_a print(y) # 출력 : [0.01821127 0.24519181 0.73659691]
# softmax 구현 def softmax(a): exp_a = np.exp(a) sum_exp_a = np.sum(exp_a) y = exp_a / sum_exp_a return y
Problem : Overflow
: 값이 너무 커져서, 표현할 수 있는 범위를 초과해버려 nan값이 출력될 위험 존재
# example : overflow a = np.array([1010, 1000, 990]) print(np.exp(a) / np.sum(np.exp(a))) # 출력 : [nan nan nan]
Solution : 입력신호의 최대값을 활용
: 입력신호(input)의 최대값을 빼준다.
# example : solution c = np.max(a) # 최대값 추출 print(np.exp(a-c) / np.sum(np.exp(a-c))) # 출력 : [9.99954600e-01 4.53978686e-05 2.06106005e-09]
# overflow 반영 softmax def softmax(a): c = np.max(a) exp_a = np.exp(a-c) sum_exp_a = np.sum(exp_a) return exp_a / sum_exp_a
특징
- Softmax 출력값을 확률로 해석할 수 있다.
- 그래서 문제를 확률적/통계적으로 대응할 수 있다.
- 그러나 exp(x)가 단조증가함수이기 때문에 입력값의 대소관계는 변하지 않는다
- 단조증가함수 : 이면,
'딥러닝 > 신경망 기초' 카테고리의 다른 글
Recurrent Neural Network (RNN) (0) | 2018.11.04 |
---|---|
Convolutional Neural Network(CNN) (0) | 2018.11.01 |
이미지 데이터 다루기 (0) | 2018.10.31 |
활성화 함수(Activation Function) (0) | 2018.10.24 |
퍼셉트론(Perceptron)과 다층 퍼셉트론(MLP) (0) | 2018.10.24 |