다변수 분류(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)만 가지고도 다변수 데이터를 분류할 수 있다.

    1. \(A\)이거나 \(A\)가 아니거나

    2. \(B\)이거나 \(B\)가 아니거나
    3. \(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개의 조건을 만족하는 값을 만들어줘 확률로 볼 수 있게 해준다.
    1. 각각의 값 \(y_i\)는 \(0\leqslant y_i \leqslant 1\)을 만족한다.

    2. \(\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}

+ Recent posts