and
조건과 or
조건으로 False = 0
과 True = 1
을 구분하며 최적의 변수를 찾아 학습하는 것이 머신러닝의 기본이다. 그런데 과거 머신러닝에 대한 연구가 시작되고 얼마 되지 않았던 1969년, 중대한 문제가 발생했다.
Marvin L. Minsky
교수가 위 기본 공식으로 해결할 수 없는 난제를 제시한 것이다. 먼저 다음의 표를 살펴보자.
<div class="table-responsive"><table>
<thead>
<tr><th>x1<th>x2<th>y
<tbody>
<tr><td>0<td>0<td>0
<tr><td>1<td>0<td>0
<tr><td>0<td>1<td>0
<tr><td>1<td>1<td>1
<p dir="auto">위 표는 <code>and 조건일 때 독립변수(<code>x1, x2)와 종속변수(<code>y)의 관계를 나타낸 표다.
<div class="table-responsive"><table>
<thead>
<tr><th>x1<th>x2<th>y
<tbody>
<tr><td>0<td>0<td>0
<tr><td>1<td>0<td>1
<tr><td>0<td>1<td>1
<tr><td>1<td>1<td>1
<p dir="auto">위 표는 <code>or 조건일 때 독립변수(<code>x1, x2)와 종속변수(<code>y)의 관계를 나타낸 표다. 그리고 두 표를 좌표평면으로 나타내면 아래 그림과 같다.<br />
<img src="https://images.hive.blog/768x0/https://cdn-images-1.medium.com/max/1600/1*CyGlr8VjwtQGeNsuTUq3HA.jpeg" srcset="https://images.hive.blog/768x0/https://cdn-images-1.medium.com/max/1600/1*CyGlr8VjwtQGeNsuTUq3HA.jpeg 1x, https://images.hive.blog/1536x0/https://cdn-images-1.medium.com/max/1600/1*CyGlr8VjwtQGeNsuTUq3HA.jpeg 2x" /><br />
두 경우 모두 하나의 선(<code>linear)를 그어 <code>True 영역과 <code>False 영역을 구분할 수 있다. 그럼 다음의 경우를 살펴보자.
<div class="table-responsive"><table>
<thead>
<tr><th>x1<th>x2<th>y
<tbody>
<tr><td>0<td>0<td>0
<tr><td>1<td>0<td>1
<tr><td>0<td>1<td>1
<tr><td>1<td>1<td>0
<p dir="auto">만약 <code>x1과 <code>x2가 같을 경우 무조건 <code>0 = False이고 다를 경우는 무조건 <code>1 = True인 <code>XOR 조건을 정리한 표다. 이경우 다시 위 그림으로 돌아가보면 단 하나의 선으로 <code>True와 <code>False 영역을 구분할 수 없다. 그동안 해왔던 방식으로 문제를 풀 수 없는 것이다. <code>Marvin L. Minsky 교수는 이 부분을 지적하면서, 변수와 관계가 더 복잡해질 경우 아무도 이 문제를 풀 수 없다고 주장했다.
<p dir="auto">정말 풀 수 없는 문제일까. 어느 시대나 덕후들은 세상을 바꿔왔다. 발상의 전환을 통해 해결할 수 있게 됐다.
<h2>Backpropagation
<p dir="auto"><img src="https://images.hive.blog/768x0/http://hmkcode.github.io/images/ai/backpropagation.png" srcset="https://images.hive.blog/768x0/http://hmkcode.github.io/images/ai/backpropagation.png 1x, https://images.hive.blog/1536x0/http://hmkcode.github.io/images/ai/backpropagation.png 2x" /><br />
진짜로 거꾸로 밟아 올라가보자는 아이디어다. 만약 우리가 학습을 하기 위한 테스트 데이터의 독립변수와 종속변수 모두 갖고 있다면 결과물을 도출해내기 위해 독립변수가 어떻게 영향을 미치는지 거꾸로 추론해볼 수 있다.
<p dir="auto">그리고 여기서 한 가지 방법이 더 추가된다. <code>chain-rule을 사용하는 것. 중간 중간 특정 변수들이 최종 결과물을 도출해 내는데 여러 영행을 줄텐데, 그 요소들을 잘게 쪼개서 서로 어떻게 연결되어 있는지 나눠보자는 아이디어다.<br />
<img src="https://images.hive.blog/768x0/https://cdn-images-1.medium.com/max/1600/1*q1M7LGiDTirwU-4LcFq7_Q.png" srcset="https://images.hive.blog/768x0/https://cdn-images-1.medium.com/max/1600/1*q1M7LGiDTirwU-4LcFq7_Q.png 1x, https://images.hive.blog/1536x0/https://cdn-images-1.medium.com/max/1600/1*q1M7LGiDTirwU-4LcFq7_Q.png 2x" /><br />
결과적으로 최종 결과값을 <code>미분(derivative)하면 요소를 쪼갤 수 있다. 특별히 하나의 변수만 알아내기 위해 <code>편미분(Partial derivative)을 한다.
<p dir="auto"><img src="https://images.hive.blog/768x0/https://i2.wp.com/python3.codes/wp-content/uploads/2017/01/XIHOY.jpg?fit=640%2C417" srcset="https://images.hive.blog/768x0/https://i2.wp.com/python3.codes/wp-content/uploads/2017/01/XIHOY.jpg?fit=640%2C417 1x, https://images.hive.blog/1536x0/https://i2.wp.com/python3.codes/wp-content/uploads/2017/01/XIHOY.jpg?fit=640%2C417 2x" /><br />
<code>backpropagation과 <code>chain-rule을 사용해 이제 우리는 <code>XOR 문제를 풀 수 있는 실마리를 발견했다. 그리고 당연하게도 <code>TensorFlow로 구현해 실제 <code>XOR 문제를 해결할 수도 있다.
<hr />
짱짱맨 호출에 출동했습니다!!