ecsimsw

다중 분류 / Softmax / 소프트맥스 본문

다중 분류 / Softmax / 소프트맥스

JinHwan Kim 2020. 3. 25. 16:36

다중 분류 / Multinomial classification 

 

   - 이전에 Logistic Regression으로 이진 분류를 처리하는 것을 공부하였다. 두 집합으로 나누는 것은 할 수 있는데, 여러 집합으로 분류해야하는 경우는 어떻게 처리해야할까.

 

다중 분류

   - 집합이 두개인 것과 똑같이, A와 A가 아닌 것, B와 B가 아닌 것, C와 C가 아닌 것으로 구분하여 이진 회귀로 처리하면 3개의 집합을 분류할 수 있다.

 

A와 A가 아닌, B와 B가 아닌, C와 C가 아닌.

   - 이렇게 3개의 가설을 세울 수 있고, 그것을 학습하는 것으로 x가 각 집합에 속할 확률을 예측할 수 있다. 따라서 입력에 대한 3개의 함수 값을 비교하여, 가장 큰 값을 갖는 집합에 속하는 것으로 분류한다.

 

3개의 집합별 가설 함수

Softmax

 

   - 위의 예제에서 가설 함수는 시그모이드 함수를 사용했으므로 0~1 사이의 값을 갖지만, 각각 분류에 대한 점수의 분포는 제각각이다. 가령 A,B,C 집합에 대한 점수가 0.9/0.8/0.7 처럼 값이 비교적 유사할 수도, 0.9/0.1/0.2 처럼 값들이 멀리 떨어져 있을 수도 있다. 

 

   - 이런 다중 분류의 시그모이드 결과 값인 '점수'들을 총 합이 1인 '확률'로 수치화하기 위해 사용하는 함수가 소프트맥스 함수이다. 

 

Softmax 함수

 

질문

 

   - 공부한 강의 김성훈 교수님의 모두의 딥러닝에서 확실하게 이해하지 못한 부분 정리.

 

   1. 가중치 벡터와 X 벡터를 고민해보기

 

   2. Score 점수를 확률로 수치화 하기 위해서 Softmax를 사용하고, 이를 One-hot Encoding해서 가장 큰 확률의 집합을 1로, 나머지를 0으로 처리했는데, 그럼 Softmax를 사용한 이유를 모르겠다. 어차피 Softmax도 결국 점수와 순위는 동등한데, 그럼 가장 큰 점수를 선택하는 것과 다를게 뭔지 모르겠다.

 

softmax 이후에 one-hot encoding으로 a 결정

   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]
Comments