ecsimsw
다중 분류 / Softmax / 소프트맥스 본문
다중 분류 / Multinomial classification
- 이전에 Logistic Regression으로 이진 분류를 처리하는 것을 공부하였다. 두 집합으로 나누는 것은 할 수 있는데, 여러 집합으로 분류해야하는 경우는 어떻게 처리해야할까.
- 집합이 두개인 것과 똑같이, A와 A가 아닌 것, B와 B가 아닌 것, C와 C가 아닌 것으로 구분하여 이진 회귀로 처리하면 3개의 집합을 분류할 수 있다.
- 이렇게 3개의 가설을 세울 수 있고, 그것을 학습하는 것으로 x가 각 집합에 속할 확률을 예측할 수 있다. 따라서 입력에 대한 3개의 함수 값을 비교하여, 가장 큰 값을 갖는 집합에 속하는 것으로 분류한다.
Softmax
- 위의 예제에서 가설 함수는 시그모이드 함수를 사용했으므로 0~1 사이의 값을 갖지만, 각각 분류에 대한 점수의 분포는 제각각이다. 가령 A,B,C 집합에 대한 점수가 0.9/0.8/0.7 처럼 값이 비교적 유사할 수도, 0.9/0.1/0.2 처럼 값들이 멀리 떨어져 있을 수도 있다.
- 이런 다중 분류의 시그모이드 결과 값인 '점수'들을 총 합이 1인 '확률'로 수치화하기 위해 사용하는 함수가 소프트맥스 함수이다.
질문
- 공부한 강의 김성훈 교수님의 모두의 딥러닝에서 확실하게 이해하지 못한 부분 정리.
1. 가중치 벡터와 X 벡터를 고민해보기
2. Score 점수를 확률로 수치화 하기 위해서 Softmax를 사용하고, 이를 One-hot Encoding해서 가장 큰 확률의 집합을 1로, 나머지를 0으로 처리했는데, 그럼 Softmax를 사용한 이유를 모르겠다. 어차피 Softmax도 결국 점수와 순위는 동등한데, 그럼 가장 큰 점수를 선택하는 것과 다를게 뭔지 모르겠다.
3. 0.1 0.1 0.3 이라면 0.2 / 0.2 / 0.6으로 비율을 맞춘 확율 분포가 아닌, 지수를 이용해서 점수가 더 커질 수 록 더 큰 확률 폭을 갖는다는 Softmax 함수의 특성이 왜 유리한지 모르겠다.
#Code
import numpy as np
#오버플로우는 무시하였다.
def softmax(a):
exp_a = np.exp(a)
sum_exp_a = np.sum(exp_a)
y = exp_a / sum_exp_a
return y
a = np.array([0.9,0.7,0.2])
b = np.array([9,7,2])
r1 = softmax(a)
r2 = softmax(b)
r1 = np.round(r1,3)
r2 = np.round(r2,3)
print(r1)
print(r2)
#Result
[0.432 0.354 0.214]
[0.88 0.119 0.001]
'Machine Learning' 카테고리의 다른 글
DTM / TF-IDF / 문서 유사도 (0) | 2020.03.07 |
---|---|
벡터와 텐서 / Batch size / Epoch (0) | 2020.02.28 |
이진 분류 / Logistic regression / Sigmoid / Cross Entropy (0) | 2020.02.28 |
경사 하강법 / Gradient descent / Optimizer (2) | 2020.02.28 |
선형 회귀 / Linear Regression / MSE / cost function (0) | 2020.02.28 |