본문 바로가기

Data Science/Machine Learning

[ML] Softmax Regression(다중분류모델)

반응형

이번 포스팅에서는 회귀분석의 연장이라고 할 수 있는 다중분류 모델에 대해서 다룰 예정이다. 보통 Multinominal Logistic Regression이라고도 불린다. 

 

저번 시간에 다뤘던 로지스틱 리그레션은 합격/불합격, 스팸메일인가/아닌가, 사용자가 좋아하는 페이스북 피드인가/아닌가 같은 Binary(이진) 분류에 적합한 모델이였다.

 

이번에 소개할 모델은 2개 이상인 3개,4개,5개..의 Class들을 분류할 수 있는 모델이다. 하지만 이렇게 다중분류를 Binary를 이용해서 분류 할 수도 있다! 밑의 그림을 보자.

Binary로 다중 분류

그림 속에 3가지 선이 있다.

  • A인지 아닌지를 분류하는 Linear
  • B인지 아닌지를 분류하는 Linear
  • C인지 아닌지를 분류하는 Linear

이렇게 함으로써 밑의 수식을 만들어낼 수 있다. 

Binary로 다중분류 수식

즉 3개 분류를 하기 위해서 3개의 수식을 만들어 내는 것이다. 참고로 오른쪽 파란색 네모박스 안의 초록색 S문자는 Sigmoid함수를 뜻한다. 즉, X가 W라는 가설 박스에 들어가 Z값으로 나오고 이 Z값에 Sigmoid함수를 씌워 이상치의 영향을 방지하는 것이다. Y위의 선이 그려져있는 것은 헤드값으로 예측값이다.(실제값이 아.닙.니.다!)

 

하지만 이렇게 3개의 모델을 만들다 보면 비효율적이라는 것을 알게 된다. 그렇다면 하나로 합칠 순 없을까? 밑의 그림을 보자.

하나의 모델로 합치기

예전에 고등학교 수학시간에 배웠던 행렬 연산 방법을 이용해서 위와 같은 식을 만들어낸다. 하지만 위 그림 에서 Y헤더값들은 연속적인 숫자의 값이다.(100,200...처럼 큰 값) 우리는 이전까지 배웠던 도구를 가지고 예측값의 범위를 좁혀버린다. 그것은 바로 Sigmoid이다! 

Softmax 수식

위 처럼 Sigmoid를 씌워주어 오른쪽과 같은 0~1사이의 값을 만들어 낸다. 그림 밑의 글자를 보는 것처럼 Sigmoid를 씌우기 전은 Score값 씌운 후에는 확률값으로 나오게 된다. 하지만 분류를 하기 위해서는 어떤 값이 몇퍼센트의 확률로 나올거야 라는 것만 정의해주는 것이 아닌 사용자에게 하나의 Class(분류)를 딱! 짚어주어야 한다. 

 

그렇게 하기 위해서는 일종의 argument max라는 것을 이용한다. 즉 가장 max(최대값)의 인자를 사용자에게 '이거야!'라고 분류해주는 것이다. 

확률에서 분류로!

그리고 원-핫 인코딩을 이용해서 max 확률에는 1, 이라는 값을 나머지 값엔 0값을 줌으로써 1에 해당하는 값을 분류값으로 반환해 준다. 

 

Softmax도 마찬가지로 다음은 Cost function을 구해주게 된다.

Softmax Regression의 Cost Function

Softmax Regression은 Cost함수로 Cross-entropy를 이용하는데 위 예시와 그래프로 이해해보자. 

 

우선 그림 속 실제값에서 B라고 가정해보자. 예측의 경우의 수는 두가지로 A로 예측했을때, B로 예측했을 때를 살펴보자. 제대로 예측했을 때는 수식에 의해서 행렬 0,1과 -log(0,1)각각으 곱해준다. -log0은 음의 무한대로 발산하지만 0을 곱하게 되므로 0이 된다. -log1은 0이니까 0곱하기0은 0이다 그리고 이 둘을 시그마로 합해준다 그렇다면 0이 된다.

 

이런 식으로 잘못 예측했을 때를 비교해보면 0과 무한대값이 나오고 이를 더하면 무한대의 값이 나오게 된다.

 

Logistic Cost = Cross Entropy

위 두개의 수식은 같다. 왜냐하면 이중 분류인 로지스틱 리그레션의 Cost함수는 y=1, 0값에 따라 나누었지만 이를 행렬의 형태로 바꾸게 되면 Cross-Entropy와 동일한 형태임을 알 수가 있다.

 

그리고 마지막으로 늘~ 그랬듯이 Cross-entropy라는 Cost값을 최소화시키기 위해 Gradient Decent(기울기 하강)을 적용시켜주어 성능을 높여준다.

 

반응형