Neural Nets for XOR

하나의 회귀분석 모델로는 XOR의 값을 구분할 수 없다

  • 1개의 신경망 모델로는 XOR의 값을 구분할 수 없다는 것이 수학적으로 증명됨
    • 많은 사람들이 신경망으로는 잘 안된다고 믿는 계기가 됨
  • 그러나 신경망 모델을 조합하면 XOR을 구분할 수 있다는 것이 발견됨


  • 초창기 Marvin Minsky 교수는 뉴런을 학습시킬 수 있는 방법이 없다고 하였음


신경망을 사용해 XOR 값 구분하기

  • XOR은 선형으로 구분하는 것이 불가능하다
  • 다음과 같은 방법으로 XOR 값 구분이 가능하다


  • 위의 그림에 나온 weight와 bias에 대하여 XOR 값을 계산해보자
    • \(x_1=0, x_2=0\)일 때
  • \(x_1=0, x_2=1\)일 때

  • \(x_1=1, x_2=0\)일 때

  • \(x_1=1, x_2=1\)일 때


Forward Propagation

  • 앞에서 여러 개로 구성한 신경망을 하나로 합쳐서 구성하면 다음과 같다
  • 이런 신경망 모델에서 XOR을 구분할 수 있는 다양한 weight와 bias 값이 존재하는 것을 알 수 있다
  • 입력값을 weight와 bias로 계산하여 출력값을 계산하는 방식이 forward propagation이다
  • 또한 위의 모델은 우리가 앞에서 봐왔던 multinomial classification 모델과 유사하여 같은 방법을 사용할 수 있다

  • 2개의 weight과 bias를 하나로 묶어 수식으로 표현하면 다음과 같다

\begin{eqnarray}K(\mathbb{x}) &=& \textrm{sigmoid}(\mathbb{x}\mathbb{w}_1+\mathbb{b}_1)\\\bar{Y} &=& H(\mathbb{x})\\ &=& \textrm{sigmoid}(K(\mathbb{x})\mathbb{w}_2+\mathbb{b}_2)\end{eqnarray}


  • 위의 수식을 tensorflow에서는 다음과 같이 구현할 수 있다
K = tf.sigmoid(tf.matmul(X, W1) + b1)
hypothesis = tf.sigmoid(tf.matmul(K, W2) + b2)

  • 남은 문제는 weight와 bias를 어떻게 update 시킬 것인가?


신경망 모델 학습시키기

  • 지금까지 해왔던 것처럼 Gradient Descent Algorithm을 사용하여 weight와 bias를 학습시킬 수 있다


  • cost를 최소화시키는 weight와 bias를 찾는다
  • cost를 최소화시키는 값을 찾기 위해서는 GDA 알고리즘의 미분값을 계산할 수 있어야 한다
  • 그러나 아래 그림에서 각각의 weight가 \(\bar{Y}\)에 영향을 미치는 값(미분값)을 알아야 각 weight를 조절할 수 있다
  • 각각의 미분값을 계산하기 위한 계산량이 너무나 많다!


Backpropagation

  • 계산량이 많아지는 것을 해결하기 위한 방법이 Paul Werbos와 Hinton에 의해 발견됨
    • forward propagation 방법으로 계산한 값과 실제의 값을 비교한 후 오차를 반영하여 weight와 bias를 조절하는 방법이 backpropagataion


  • 일반적인 신경망 모델을 \(f=wx + b\)라 할 때, \(g=wx\)라고 하면 \(f=g + b\)가 되는데, 이를 신경망 모델 그래프로 나타내면 다음과 같다


  • 위 그래프에서 우리가 하고 싶은 것은 \(w\)와 \(x\), \(b\) 각각이 \(f\)에 미치는 영향으로 이는 함수 \(f\)에 대한 각각의 편미분 값을 구하는 것과 같다


  • Forward Progration 계산
    •  입력값에 대하여 random하게 선택한 weight와 bias를 사용하여 \(f\)를 계산하는 것은 쉽다!

  • Back Propagation 계산
    • 신경망 모델식에서 간단한 미분값은 미리 계산해 놓을 수 있다
\begin{eqnarray}\frac{\partial g}{\partial w} &=& x \\\\ \frac{\partial g}{\partial x} &=& w \\\\ \frac{\partial f}{\partial g} &=& 1 \\\\ \frac{\partial f}{\partial b} &=& 1 \end{eqnarray}

    • \(x=5, w=-2, b=3\)일 때, 이제 우리가 원하는 \(\frac{\partial f}{\partial w}\)와 \(\frac{\partial f}{\partial x}\), \(\frac{\partial f}{\partial b}\)는 chain rule을 이용하여 다음과 같이 구할 수 있다
      • 이미 각각의 미분값이 계산되어 있어 쉽게 계산이 가능하다!
\begin{eqnarray}\frac{\partial f}{\partial w} &=& \frac{\partial f}{\partial g} \cdot \frac{\partial g}{\partial w} \\ &=&1 \times 5 \\ &=& 5 \\\\\frac{\partial f}{\partial x} &=& \frac{\partial f}{\partial g} \cdot \frac{\partial g}{\partial x} \\ &=& 1 \times x \\ &=&1 \times -2 \\ &=& -2 \\\\\frac{\partial f}{\partial b} &=& 1 \end{eqnarray}



    • 신경망을 확장한 경우에서 chain rule을 이용하면 \(\frac{\partial f}{\partial x}\)와 \(\frac{\partial f}{\partial y}\)를 쉽게 구할 수 있다


  • tensorflow에서 신경망 모델을 tensorboard에서 graph 형태로 만든 이유는 chain rule을 이용, back propagation을 쉽게 구하기 위함이다



+ Recent posts