본문 바로가기
머신러닝

머신러닝 실습 with Tensorflow 4장 - Softmax classification -

by ChocoPeanut 2017. 6. 7.

머신러닝 실습 with Tensorflow 4

- Softmax classification -

 

Softmax는 여러 개의 class를 예측할 때 사용되는 activation function이다. 앞선 장들에서는 sigmoid 함수만을 사용하여 예측을 하였는데 실제로 Output에 해당하는 layer에서는 Softmax를 이용하여 예측하는 경우가 많다. Softmax의 경우 실수로 나타나는 Output의 값들을 확률적으로 나오게 하여 모든 class의 합이 1이 된다. 그렇기 때문에 하나의 output에 대한 확률이 높아질 경우 다른 output에 대한 확률이 낮아지는 현상이 발생하게 된다.



이를 tensorflow로 구현하는 것은 매우 간단하다. 왜냐하면 tensorflow는 머신러닝을 위한 내장 함수를 많이 가지고 있는 툴이기 때문에 softmax에 대한 계산을 해주는 함수인 softmax라는 함수가 존재하기 때문이다. softmax 함수 안에 matmul로 계산한 실수 결과 값을 넣게 되면 자동으로 확률적인 데이터로 hypothesis의 값을 넣어준다.



cost function에 대한 결과 값으로는 cross entropy를 사용하였다. 이는 이론 부분에서 다룬 내용이니 간단하게 설명하게 되면 logistic regression의 결과로 다양한 class가 나오게 되면 이를 보편화한 식이 바로 다음의 cost function이라고 할 수 있다. 이에 대한 tensorflow의 식과 이를 Gradient descent algorithm을 사용하는 것을 보도록 하자.




전체의 하나의 data를 사용한 tensorflow 코드를 살펴보도록 하자. 다음의 예시는 임의의 x data를 입력하고 그에 대한 y data에 형태가 class3개 가지도록 하는 data set이다. 여기서 y data를 표시하는 방법을 one-hot이라고 한다. 하나의 값만 1setting하고 나머지 값은 0으로 만든다. 따라서 output의 결과로는 3개의 class 중 하나의 class에 맞는 결과를 내보낼 것이다. 이에 대해 softmax 함수를 사용하여 확률적 결론을 도출하는 것이다.



앞선 장에서도 설명하였듯이 shape에 대한 정의가 매우 중요하다. 몇 개의 data가 들어오는지는 잘 알지 못하는 경우가 많으므로 None으로 setting하고 features의 수로 4개가 들어가게 된다. Y의 경우에는 3개의 class로 표시하게 된다. W는 들어오는 값과 나가는 값에 의해 shape을 결정하고 b는 나가는 값만 알면 되기 때문에 그에 해당하는 shape을 설정하게 된다.


hypothesissess.run을 한 후 feed_dict로 새로운 값을 넣어주어 예측을 할 수 있다. 이것이 학습된 머신 러닝 모델을 통해 실생활에 적용하는 것이라고 할 수 있다. 이에 대한 결과 값을 확인하면서 예측을 할 수 있게 된다. 여기서 확률이 아니라 예측의 결론으로 하나의 값을 표시해주게 할 수도 있다. 이 때 사용하는 함수가 arg_max로 가장 높은 확률의 값을 가지는 위치를 반환시켜준다.