다변수 분류(Multinomial classification)
로지스틱 회귀 복습
입력값 \(x\)에 대하여 계산하는 유닛 \(W\)가 weight를 가지고 계산해 \(z\)를 출력한다.
결과 \(z\)를 sigmoid 함수를 통과시켜 0과 1사이의 값 \(\bar{y}\)으로 변환한다.
\(y\) : 실제 데이터 값
- \(\bar{y}\) : 학습을 통한 예측 값
로지스틱 회귀 분류가 하는 역할
아래 그림과 같이 \(x_1\)과 \(x_2\)에 대하여 네모와 가위표를 분류한다는 것은 네모와 가위표를 분류하는 선을 찾아낸다는 것을 의미한다.
다변수 분류
- 다변수라는 것은 3개 이상으로 분류할 수 있는 데이터가 있다는 것이다.
예를 들어, 아래 그림과 같이 공부한 시간(\(x_1\))과 수업에 참석한 횟수(\(x_2\))에 따라 3종류의 학점(\(y\))를 준다고 가정하고 그래프로 표시하면 오른쪽 그림과 같이 될 것이다.
이진 분류(binary classification)만 가지고도 다변수 데이터를 분류할 수 있다.
\(A\)이거나 \(A\)가 아니거나
- \(B\)이거나 \(B\)가 아니거나
\(C\)이거나 \(C\)가 아니거나
- 이진 분류만 가지고도 다변수 데이터를 분류가 가능
각각의 분류기(classifier) \(A\)와 \(B\), \(C\)를 실제로 구현할 때에는 다음과 같이 행렬로 구현을 한다.
- 위의 3개의 분류기, 즉 3개의 독립된 벡터를 가지고 계산을 해야하는데, 이렇게 하면 계산과 구현이 복잡하다.
- 그래서 weight 벡터를 하나로 합쳐서 계산하는 방법을 생각해볼 수 있다.
다음과 같이 계산한 결과 \(\bar{y}_A=H_A(x)\)와 \(\bar{y}_B=H_B(x)\), \(\bar{y}_C=H_C(x)\)는 우리가 예측한 결과가 된다.
- 3개의 독립된 벡터를 한번의 계산으로 각각의 값을 구할 수 있다.
- 3개의 가설값 \(H_A(x)\)와 \(H_B(x)\), \(H_C(x)\)은 우리가 원하는 결과가 아니다.
우리는 예측값이 0과 1 사이의 값을 가지며 예측값이 합이 1이 되는 확률분포가 되기를 원한다. 이런 결과를 나오게 하는 함수가 softmax 함수이다.
SOFTMAX 함수
- \(n\)개의 값을 softmax 함수에 넣으면 우리가 원하는 2개의 조건을 만족하는 값을 만들어줘 확률로 볼 수 있게 해준다.
각각의 값 \(y_i\)는 \(0\leqslant y_i \leqslant 1\)을 만족한다.
- \(\sum_i y_i =1\)
- 다음과 같이 예측값이 나올 확률을 구할 수가 있다.
- \(Pr(A) = 0.7\)
- \(Pr(B) = 0.2\)
- \(Pr(C) = 0.1\)
- 그러나 실제로 우리는 위의 예처럼 3개의 값이 아니라 1개의 값을 예측하도록 해야 한다. 즉, 가장 높은 확률을 갖는 값 1개를 예측값으로 만들어야 하는데 이를 'ONE-HOT' 인코딩이라고 한다.
- TensorFlow에서는 one-hot 인코딩을 위해 argmax() 함수를 지원한다.
- 이제 예측하는 모델 Hypothesis는 완성이 되었다.
다변수 분류에서의 Cost 함수
- 예측한 값과 실제의 값이 얼마나 차이가 나는지를 알 수 있는 cost 함수를 설계해야 한다.
- cost 함수를 최소화하도록 해서 학습 알고리즘을 완성시킬 수 있다.
- 다변수 분류에서는 Cost 함수로 CROSS-ENTROPY를 사용한다.
- 아래 그림에서 \(L\)는 실제의 값인 \(y\)이고, \(S(y)\)는 우리가 예측한 값 \(\bar{y}\)이다.
- 이 때 \(y\)와 \(\bar{y}\)의 차이(거리)는 \(\mathcal{D}(\bar{y},y)\)는 다음 식(1)과 같은 CROSS-ENTROPY로 표현할 수 있다.
\begin{eqnarray} \mathcal{D}(\bar{y},y)=-\sum_i y_i \log \bar{y}_i \tag{1}\end{eqnarray}
- CROSS-ENTROPY를 풀어쓰면 식 (2)와 같이 된다. 여기서 \(\odot\)는 벡터 원소별 곱셈(element-wise product)을 의미한다.
\begin{eqnarray} \mathcal{D}(\bar{y},y) &=& -\sum_i y_i \log \bar{y}_i \\ &=& \sum_i y_i \odot -\log \bar{y}_i \tag{2}\end{eqnarray}
- 식 (2)에서 \(-\log \bar{y}_i\)는 아래 그림과 같이 \(0\leqslant \bar{y}_i \leqslant 1\)일 때, \(0\leqslant -\log \bar{y}_i < \infty\) 의 값을 가진다.
- 각각의 경우에 대하여 CROSS-ENTROPY를 계산해보자.
- 실제의 값이 \(y=A\)일 때
- \(\bar{y}=A\)인 경우에는 \(\mathcal{D}(\bar{y},y)\)이 작아져야 한다.
\begin{eqnarray} - \sum \left[ \begin{array}{c} 1 \\ 0 \end{array} \right] \odot \log \left[ \begin{array}{c} 1 \\ 0 \end{array} \right] &=& \sum \left[ \begin{array}{c} 1 \\ 0 \end{array} \right] \odot -\log \left[ \begin{array}{c} 1 \\ 0 \end{array} \right] \\ &=& \sum\left[ \begin{array}{c} 1 \\ 0 \end{array} \right] \odot \left[ \begin{array}{c} -\log 1 \\ -\log 0 \end{array} \right] \\ &=&\sum \left[ \begin{array}{c} 1 \\ 0 \end{array} \right] \odot \left[ \begin{array}{c} 0 \\ \infty \end{array} \right] \\ &=& \sum \left[ \begin{array}{c} 0 \\ 0 \end{array} \right] \\ &=& 0+ 0 \\ &=& 0 \end{eqnarray}
- \(\bar{y} = B \neq A\)인 경우에는 \(\mathcal{D}(\bar{y},y)\)이 커져야 한다.
\begin{eqnarray} - \sum \left[ \begin{array}{c} 1 \\ 0 \end{array} \right] \odot \log \left[ \begin{array}{c} 0 \\ 1 \end{array} \right] &=& \sum \left[ \begin{array}{c} 1 \\ 0 \end{array} \right] \odot -\log \left[ \begin{array}{c} 0 \\ 1 \end{array} \right] \\ &=& \sum\left[ \begin{array}{c} 1 \\ 0 \end{array} \right] \odot \left[ \begin{array}{c} -\log 0 \\ -\log 1 \end{array} \right] \\ &=&\sum \left[ \begin{array}{c} 1 \\ 0 \end{array} \right] \odot \left[ \begin{array}{c} \infty \\ 0 \end{array} \right] \\ &=& \sum \left[ \begin{array}{c} \infty \\ 0 \end{array} \right] \\ &=& \infty + 0 \\ &=& \infty \end{eqnarray}
- 실제의 값이 \(y=B\)일 때
- \(\bar{y}=B\)인 경우에는 \(\mathcal{D}(\bar{y},y)\)이 작아져야 한다.
\begin{eqnarray} - \sum \left[ \begin{array}{c} 0 \\ 1 \end{array} \right] \odot \log \left[ \begin{array}{c} 0 \\ 1 \end{array} \right] &=& \sum \left[ \begin{array}{c} 0 \\ 1 \end{array} \right] \odot -\log \left[ \begin{array}{c} 0 \\ 1 \end{array} \right] \\ &=& \sum\left[ \begin{array}{c} 0 \\ 1 \end{array} \right] \odot \left[ \begin{array}{c} -\log 0 \\ -\log 1 \end{array} \right] \\ &=&\sum \left[ \begin{array}{c} 0 \\ 1 \end{array} \right] \odot \left[ \begin{array}{c} \infty \\ 0 \end{array} \right] \\ &=& \sum \left[ \begin{array}{c} 0 \\ 0 \end{array} \right] \\ &=& 0+ 0 \\ &=& 0 \end{eqnarray}
- \(\bar{y} = A \neq B\)인 경우에는 \(\mathcal{D}(\bar{y},y)\)이 커져야 한다.
\begin{eqnarray} - \sum \left[ \begin{array}{c} 0 \\ 1 \end{array} \right] \odot \log \left[ \begin{array}{c} 1 \\ 0 \end{array} \right] &=& \sum \left[ \begin{array}{c} 0 \\ 1 \end{array} \right] \odot -\log \left[ \begin{array}{c} 1 \\ 0 \end{array} \right] \\ &=& \sum\left[ \begin{array}{c} 0 \\ 1 \end{array} \right] \odot \left[ \begin{array}{c} -\log 1 \\ -\log 0 \end{array} \right] \\ &=&\sum \left[ \begin{array}{c} 0 \\ 1 \end{array} \right] \odot \left[ \begin{array}{c} 0 \\ \infty \end{array} \right] \\ &=& \sum \left[ \begin{array}{c} 0 \\ \infty \end{array} \right] \\ &=& 0+ \infty \\ &=& \infty \end{eqnarray}
Logistic Cost 함수와 Cross-ENTROPY
- Logistic Cost 함수와 Cross-Entropy는 식 (3)과 같이 서로 같다.
\begin{eqnarray} C(H(x),y) &=& y\log H(x) - (1-y)\log(1-H(x)) \\ &=& -\sum_i L_i\log S_i \\ &=& \mathcal{D}(S,L) \tag{3}\end{eqnarray}
- 이유는 같은 값을 예측할 때에는 0이고, 다른 값을 예측할 때에는 \(\infty\)이기 때문이다.
- 학습 데이터가 여러 개인 경우의 Cost(Loss) 함수는 식 (4)와 같다.
\begin{array} \mahtcal{L} = \frac{1}{N} \sum_i \textrm{Cost(Loss)}(S(\mathbf{w}x_i+\mathbf{b}), L_i) \tag{4}\end{array}
Cost(Loss) 함수의 최소값을 찾는 방법
- 이전과 마찬가지로 경사하강법(Gradient Descent Algorithm)을 사용한다.
- 그림과 같이 곡선의 경사면을 따라 가면서 최소값을 찾을 수 있다.
- 어떤 점에서의 기울기는 미분계수를 구함으로써 계산할 수 있다.
- 경사면을 따라 내려가는 간격은 \(\alpha\)이며 미분계수는 식 (5)와 같다.
\begin{eqnarray} \textrm{STEP} = -\alpha \vartriangle \mathcal{L}(w_1, w_2) \tag{5} \end{eqnarray}
'모두를 위한 머신러닝' 카테고리의 다른 글
Lesson 6 : Application & Tips (0) | 2018.04.04 |
---|---|
Lesson 5 연습 : Multinomial Classification: Softmax classification (0) | 2017.05.22 |
Lesson 4 연습 : Logisitc Regression Classification (0) | 2017.04.19 |
Lesson 4 : Logistic (regression) classification (0) | 2017.04.19 |
Lesson 3 연습 : Multi-variable Linear Regression (1) | 2017.04.16 |