티스토리 뷰

Data Science/Machine Learning

Softmax Regression

Hula_Hula 2018. 11. 14. 20:02

[Softmax Regression]


Softmax Regression은 A,B,C..., 여러개의 결과값으로 분류되는 데이터를 학습하기 위한 방법론입니다.

Multi-Class Classification이죠.


[그림1] 세가지의 Class를 가진 데이터가 있다.


[그림1]과 같이 3가지의 Class로 나눌 수 있는 데이터가 있을 때, 우리는 세가지의 Linear한 선으로 분류할 수 있습니다.

[그림2] 세번 Linear한 직선으로 두가지로 분류하는 건 세번의 Binary Classification을 한다는 것과 같다.


직선은 다음으로 생각할 수 있습니다. 'A or Not A' 선일 때, A이면 1, Not A이면 0입니다. 'B or Not B' 선일 때, 'C or Not C'도 같은 개념으로 생각할 수 있습니다.


그렇다면 세번의 Binary Classification을 하면 세가지 분류를 할 수 있습니다.



[그림3] 학습된 세개의 Hypothesis에 따른 데이터들의 분류


[그림3]과 같이 세개의 Hypothesis를 통해서 Class를 3개로 나눌 수 있습니다. 그렇다면 Weight와 Bias도 3개씩 나오겠군요.


'A or Not A' Hypothesis에서 가장 높은 값이 나온다면 A,

'B or Not B' Hypothesis에서 가장 높은 값이 나온다면 B,

'C or Not C' Hypothesis에서 가장 높은 값이 나온다면 C,

라고 정리할 수 있겠군요.


예를 들어보겠습니다.

하나의 x_data가 있습니다.

'A or Not A' Hypothesis에서 5.0,

'B or Not B' Hypothesis에서 3.2,

'C or Not C' Hypothesis에서 1.8

이 나왔습니다. 그럼 우리는 x_data가 A Class라는 걸 알 수 있죠.


그리고 이걸 확률(p)로 표현할 수 있습니다.

(확률로 변환하는 과정은 해당값 / 전체값 의 과정을 거칩니다. 모든 확률의 합은 무조건 1.)


        


이렇게 확률로 구별하기 편하게 분리하는게 Softmax Regression입니다.


(참고) Softmax는 통계에서 어떤 값을 특별한 조건으로 바꾸어 가장 큰 값을 찾는걸 말합니다. 특별한 조건으로 바꾸는 것은 hypothesis의 값을 확률로 바꾸고, 가장 큰 확률을 찾는걸 말합니다.

 

[Hypothesis]

이 세가지의 Hypothesis를 위한 Weight와 Bias는 역시 Matrix를 사용하면 굉장히 편합니다.


세가지의 x_data에 대한 세가지의 Hypothesis가 나왔습니다.
그리고 softmax 함수에 넣으면 이 Hypothesis에 대한 확률값이 나오겠죠.


A, B, C 3개의 Class(분류)들을 갖고 있는 데이터들이기 때문에 3개의 Y-bar가 나왔습니다.
여기서, 가장 높은 Y-bar 확률값을 찾는 것이 우리의 목적입니다.



[Softmax Regression Cost Function]

가장 높은 확률 값과 나머지 값. A or Not A입니다. 1과 0으로만 표현하는 과정이 필요합니다.
가장 높은 값을 1로, 나머지를 0으로 바꿔주는 걸 'One-Hot Encoding'이라고 합니다.



(참고) One-Hot Encoding은 Cross Entropy에 앞서서 반드시 필요한 작업입니다. 우리는 Softmax Regression에서 
Cost Function = 확률*log(확률)의 개념을 사용합니다. 정답은 확률값이므로 1과 0의 조합으로 되어있고 예측값도 결국에는 1과 0으로 이루어져 있어야합니다. 물론 [0.49, 0.51]의 49%와 51%의 확률을 가지는 경우를 생각해볼 수 있겠지만 개사진을 보고 개일 확률이 51%라는 판단은 의미가 없으므로 Cost를 줄여나가는데에는 효율적이지 못합니다. 그 이유를 Cross Entropy 개념을 통해 조금더 자세히 알아보죠.



One-Hot Encoding을 통해서 예측값이 나왔으면 정답과 비교해봐야겠죠.
정답과 비교하기 위해서는 Cross Entropy 개념이 필요합니다. (결론부터 말씀드리자면 Cross Entropy가 Softmax Regression에서는 Cost Function이 됩니다.)
정답과 예측값과 비슷할수록 Cost값이 작아져야 합니다. 그리고 효율을 위해서는 평균제곱오차(MSE, 우리가 Linear Regression에서 사용하던 방법)은 사용하지 않도록 합니다. 예상이 되시나요?
곱으로 Cost Function을 표현하되 y=0을 지나가는 함수, -log 함수가 필요합니다.


[그림4] -log 함수. Cost Function으로 안성맞춤이다!


( i = Class 개수)


L은 지도학습을 위한 Label(정답)입니다. 1과 0의 조합으로 이루어져 있죠.
Y bar는 Hypothesis로 나온 값 + One-Hot encoding을 거친 데이터입니다.

위와 같이 Label이 주어져 있습니다.


다음과 같은 값은 안봐도 Cost 값이 0이 나오겠지만 Cost Function으로 계산해보죠.



이어서 틀린 값의 Cost를 구해보죠


데이터가 B라고 완전히 판단을 잘못한 경우입니다.



Cost값이 무한대로 가버리네요. 굉장히 효율이 좋아보입니다.


(참고) One-Hot Encoding을 거치지 않는다면?? 예를들어 One-Hot Encoding 없이,


과 같은 값이 나올 수 있습니다. 확률로 계산해본다면 B일 확률이 가장 높습니다. (굳이 따지자면)
그런데 Cost값을 구해보면 거~의 0이 나오는걸 알 수 있습니다. Cost값이 낮다는 건 그만큼 알맞게 분류를 할 수 있다는 것인데, 이 경우는 답이 틀렸는데도 불구하고 Cost값이 거의 0에 수렴합니다. 자칫하면 잘못된 Hypothesis로 학습될 수 있는거죠. 

(참고) Softmax Regression의 Cost Function과 Logistic Regression의 Cost Function은 일맥상통합니다. 단지 Logistic Regression은 Softmax의 행렬 요소(A, B, C)를 시그마하는 과정을 선형결합으로 전처리해서 표현했을 뿐입니다. 즉, 2가지의 Class를 가지는 Softmax Regression은 Logistic Softmax와 같습니다. (이진분류는 2가지로 다중분류하는 것과 같습니다. 응??)

이제 수많은 데이터에 대한 Cost Function이 필요하겠죠.


( N = 총 데이터 개수, S() = 예측값(y bar, Softmax와 One-Hot Encoding의 과정을 거친 값), D() = Cross Entropy, L = Label)


다른 Regression과 마찬가지로 전체 Cost값에 대한 평균을 구하면 됩니다.



'Data Science > Machine Learning' 카테고리의 다른 글

Learning Rate  (0) 2018.11.16
Softmax Regression을 이용해서 동물 맞추기  (0) 2018.11.15
Logistic Regression으로 당뇨병환자 예측  (0) 2018.11.14
Logistic Regression  (0) 2018.11.09
Multi-Variable Linear Regression  (0) 2018.11.07
댓글
최근에 올라온 글
«   2024/05   »
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 31
공지사항
최근에 달린 댓글