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을 쉽게 구하기 위함이다
'모두를 위한 머신러닝' 카테고리의 다른 글
Lesson 8 연습 1 : XOR 게이트에 대한 신경망(Neural Nets) (0) | 2018.05.16 |
---|---|
Lesson 7 : Tensor Manipulation (0) | 2018.05.16 |
Lesson 6 연습 : Application & Tips (0) | 2018.04.04 |
Lesson 6 : Application & Tips (0) | 2018.04.04 |
Lesson 5 연습 : Multinomial Classification: Softmax classification (0) | 2017.05.22 |