본문 바로가기
DL(Deep Learning)

Softmax Regression

by 솩코딩 2022. 1. 15.

안녕하세요. 솩코딩입니다.

이전에는 두 개의 클래스가 있을 때 즉, binary classification(0 or 1의 레이블)과 이에 따른 logistic function

이라는 cost function도 같이 공부해보았습니다.

 

그럼, 여러 개의 클래스가 있을 때는 어떻게 할까요?

여러 개의 클래스가 있을 때 이를 분류하는 방법을 multinomial classification 즉, 다항분류라고 합니다.

 

 

 

<multinomial classification>

multinomial classfication 중 softmax classification이 가장 많이 사용되므로 이에 대해 공부해봅시다.

먼저, multinomial classification은 어떤 식으로 진행이 될까요?

 

A, B, C 세 개의 클래스가 있을 때, 각각을 3개로 나누어 A인지 아닌지에 대한 선, B인지 아닌지에 대한 선,

그리고 C인지 아닌지에 대한 선이 각각 있다고 합시다.

이 세 개의 독립된 classification을 한 번에 구현을위해 matrix를 이용할 것입니다.

 

다음과 같이 matrix가 나오며, 결과 값은 vector값으로 나오게 됩니다.

우리는 역시 0~1 사이의 값이 나오기 바라며, 합이 1이 되도록 만드려고 합니다.

softmax는 그런 조건이 되도록 만들어주며, 마치 probability의 형태가 된다고 생각하면 됩니다.

이 중에서 가장 큰 값이 '1'이 되며 나머지는 '0'이 됩니다. (one-hot encoding)

고로, '1'인 부분이 선택되는 것입니다.

 

여기까지 hypothesis는 설계되었고, 이제 cost function만 설계하면 됩니다.

 

여기서 'cross entropy'가 나오게 되는데, 왜 이것이 다항 분류의 cost function으로써 적합할까요?

cost function은 예측값과 실제값이 동일하면 '0'이 나오고, 다르면 '벌'을 주게 되는 역할을 하는데

예를 들어, 실제 값이 [0 1]^T 이고, 예측 값이 [0 1]^T와 [1 0]^T가 있을 때,

전자는 맞는 예측, 후자는 틀린 예측입니다. 

cross entropy 식에 넣으면 각각 cost function값이 0, 무한대가 나옴을 확인할 수 있습니다.

 

 

다음으로는, 아래의 식에서 D는 앞에서 구한 값이고 이를 평균 낸 값이 우리가 실제로 사용할

loss function이 되겠습니다.

 

 

 

 

마지막으로, 영상에서 logistic cost function과 cross entropy는 같은 식이라고 언급을 하고 있습니다.

logistic cost function은 실제 값 y가 0 or 1에 따라 각각 두 번째 항, 첫 번째 항이 선택이 될 것이고,

예측 값 0 or 1이 실제 값과 동일하면 0이 나오게 되고, 틀리면 무한대가 나오게 되는 시스템입니다.

 

cross entropy도 마찬가지인데, 예측값이든 실제값이든 합은 1이므로 만약, 두 개의 값이 있다고 했을 때

즉, 실제 값 L1, L2 그리고 예측 값 S1, S2가 있다고 하였을 때 우리는 다음과 같이 쓸 수 있습니다.

L1*log(S1) + (1-L1)*log(1-S1)

 

이때, L1 = y , S1 = H(x) 로 바꾸어 쓰면 logistic cost function과 동일해 집니다.

 

--------------------------------------------------

<multinomial classification 예시>

이처럼 여러 개를 예측할 때 softmax function이 유용합니다. 특히, 실생활에서는 단 두개 중 하나로 예측하는 것보다

여러 개 중 하나를 예측하는 경우가 더 많으므로 softmax function이 중요한 함수가 되겠습니다.

 

예를 들어, 동물에 대한 정보가 주어져 있을 때 0~6에 해당하는 동물을 return시켜주는 프로그램을 만드려고 합니다.

[[0],[3]] 과 같이 해당하는 동물에 대한 숫자 즉, 1dim의 값이 output될 텐데, 우리는 이를 0~6이라는 7개의 숫자를

이용해서 원핫인코딩 해주려 합니다.

 

원핫인코딩을 하게 되면, input의 rank가 N인 것을 output의 rank가 N+1이 되도록 한 차원 높여서 return하게 됩니다.

예를 들어, [[0],[3]] (2dim)이 들어오면, [[[1000000]], [[0001000]]] (3dim)으로 retrun하게 됩니다.

(여기서는 데이터 수가 2개라고 가정하고 함. 본래는 데이터 수를 모르니까 '?'로 표시하겠음.)

즉, shape=(?,1)이 shape=(?,1,7)이 되는데, 우리는 더 간단하게 표기하기 위해 shape=(?,7)이 되도록 원합니다.

 

이때, 쓰이는 방법이 'reshape'입니다.

고로 1차원 output이었던 것이 one-hot encoding으로 인해 7차원으로 바뀌게 되며,

우리가 원하는 모양이 (?,7)이니까 이를 이용할 시에 (?,7)에 대한 말을 넣어주면 됩니다.

 

 

 

 

 

딥러닝 모델을 돌릴 때 가장 힘든 게 shape 맞추는 거라고 얼핏 주위 사람들에게 들은 바가 있다.

이번 강의를 들으니 그 말이 무엇인지 조금은 알 것 같다. 행렬 즉, 평소에 선형대수학에 흥미가 있는 편이라

앞으로 머신러닝/딥러닝 공부가 궁금해진다.^&^

다음시간에는 머신러닝 이용시에 쓰이게 될 팁을 배우고, 그 뒤에는 딥러닝에 대한 본격적인 내용이 나오게 된다!

오늘은 여기까지 입니다. 감사합니다. : >

 

 

모두를 위한 딥러닝 시즌1(김성훈 교수님)

https://www.youtube.com/watch?v=BS6O0zOGX4E&list=PLlMkM4tgfjnLSOjrEJN31gZATbcj_MpUm 

솩코딩 깃허브

https://github.com/lala991204/DL-self-study