노는게 제일 좋습니다.

tensorflow 8 : Multinomial Logistic Regression 본문

Python/통계 및 데이터관련

tensorflow 8 : Multinomial Logistic Regression

노는게 제일 좋습니다. 2017. 1. 23. 05:16

https://youtu.be/MFAnsx1y9ZI

이 강의를 보고 공부한 후 정리한 내용임.


tensorflow 7 글에서는 데이터를 두 개로 나누는 방법을 공부했다.

Multinomial Logistic Regression 은.. 번역하면 뭐라하는지 모르겠지만, 여러개로 딱딱 나누는 방법이다.

( 예 : 학점을 A, B, C, F로 나누기 )


데이터의 종류가 동그라미,세모,네모 세 가지가 있다고 하자.

그렇다면 세 개의 선으로 구간을 나누어줄수 있다. (동그라미인가 아닌가, 세모인가 아닌가, 네모인가 아닌가.)

이 각각의 선을 구해서 같이 잘 쓰면 데이터를 세 가지로 분류할 수 있다.

아, 그 각각의 선이라 함은, 이미 알고있는 바이너리 클래시피케이션(Binary classification)이다.




그럼 이제 이 각각의 선을 따로따로 관리하기 귀찮으니까 행렬로 넣어버리도록 하자. ( 오른쪽 항의 각 한줄이 가설함수이다. )

지난번 바이너리 클래시피케이션에서는 어떻게 했던가. 가설함수의 값을 어떤 함수 g(z)에 넣어 0~1사이의 값으로 압축했었다.

(그 함수의 이름이 sigmoid 함수 였다.)


이번에 쓸 압축함수는 좀더 괴상하게 생겼다. 이름은 softmax function 이라고 한다. 게임회사 이름인줄..

바이너리 클래시피케이션의 시그모이드 함수의 역할을 한다.

시그모이드가 1개의 값을 뱉는다면, 소프트맥스는 여러개의 값을 뱉어낼 수 있다.

그러니까, 윗단락 행렬처럼 세 개의 H(x1,x2,x3)=y 값을 집어넣는다면, 세 개의 압축된 결과가 나온다.



이떄, 압축된 값들을 모두 더하면 1이 나온다. 즉, 압축된 값들은 확률을 나타내기도 한다.

여기서, 소프트맥스 함수를 돌려 나온 값들을 다시 One-hot encoding이라는 과정을 거치게 하면 비로소 0과 1로 압축된다.

(https://en.wikipedia.org/wiki/One-hot)

우리는 이렇게 0과 1로 압축된 값을 가지고 손실함수(cost function)과 함께 컴퓨터를 학습시키게 된다.



지금까지 알아본 것은 가설함수였다. 이제 손실함수를 알아보도록 하자.

손실함수로는 교차 엔트로피 함수(Cross-entropy function)를 사용한다. 그래서인지 강의에 손실함수의 이름이 Cross-entropy cost function이라고 소개되어 있다.

식에서 S는 우리가 예측한 값들()을, L은 학습에 쓰는 실제 데이터()를 의미한다.



예를들어 하나 계산해보도록 하자. 우선 위와 같이 실제 데이터(학습데이터),  우리가 소프트맥스 펑션에 넣어 만든 예측값을 두자.

예측값중 Y1은 맞는 예측, Y2는 틀린 예측이다.



손실함수 D에 L과 을 넣어 계산해보면 위와 같다. 맞는 예측값이니 당연히 손실함수의 값이 0이다.

중간에 행렬 사이의 동그라미는 element wise multiply 라는 연산자이다. (한국어로 뭔지 모르겠다)

element wise 방법은 이 비디오를 1분 15초 쯤부터 참고 ( https://www.youtube.com/watch?v=2GPZlRVhQWY )



이번엔 D(Y2,L)을 해보았다. 값이 무지막지하게 커진다. 즉, 틀린 예측값이라는걸 알 수 있다.



만약 트레이닝 셋이 많으면 손실함수는 이렇게 작성하면 된다.


Comments