2015. 11. 17. 12:57

[기계학습, 머신러닝, 데이터마이닝] 인공지능, 그 허상을 깨자. (01)

앞선 글의 연속이다. 이제, 인공지능, 그 허상을 꺠보자.

<출처 : http://theanalyticsstore.ie/wp-content/uploads/2013/03/DeepNetwork.png>

일단 요즘 유행하는 딥러닝에서, 흔히 예로 자주 등장하는 고양이 분류에 관련된 그림이다. 기계가 어떻게 고양이 그림을 분류하는가?에 대한 인공 신경망(neural network)을 도식화한 것이다. 일단, 여기에서는 한계를 얘기하기로 했으므로,... 차근 차근 정리해보도록 하자.


우선, 기계(Mr.Machine)과 소년(Boy)가 있다고 하자.
수학의 "+"를 학습한다면, 어떻게 해야 할까?
결과만 정리하자면, 소년은 책을 통한 공부(study)를 해야 하고, 기계는 data를 통한 학습(learning)을 해야한다고 볼수 있다. (물론, 여기에서, 여러 이견이 나올 수 있는데, 일단, 넘어가자.)

즉, 소년은 위와 같이, 책을 통해 공부를 하게 된다. 선생님으로부터 지도를 받을 수 있으며, 책으로 다시 한번 공부할 수도 있는데, 위와 같이, 시험을 통해서 최종 +의 원리를 이해해 나간다. 그리고, 1+1에서부터 시작하여, 0.12+12.34과 같은 실수까지 응용해 나갈 것이다. 또한, 이제는, Na + Cl = NaCl과 같은, +의 동일 개념의 다른 용도까지 이해할 수 있을 것이다. 이렇듯 사람은 한가지의 현상/논리을 "책", "선생님"으로부터 습득한뒤, 그 개념을 스스로 확장해 나갈수 있다. (아직, 미취학 아동인 내 아들과, 몇달전 숫자 공부를 잠시 했는데, 0+0은 00이라고 하던데, 그건 틀렸다라고 얘기할 수 없었다. +의 개념을 다른 용도로 활용했기 떄문이었다)


이에 반해 기계는 다음과 같이 data를 기반으로 학습하게 된다.

 operand1

 operand2

 value

 1

 1

 2

 1

 2

 3

 1

 3

 4

즉, 사람과 다르게 새로운 현상이나 논리를 스스로 책을 통해서 학습할 수 없다(현재까지는). 그래서, 위와 같은 data 유형을 가지고 결국 학습해야 한다. 사람이라면, 앞선 그림과 같이, 20개정도의 문제만 풀면, 그 성적으로 점수를 매길수 있는데, 기계라고 한다면, 최소 2만개이상의 data(숫자는 중요하진 않지만, 크면 좋다)가 필요하다.


여기까지 읽어본다면, 큰 이견이 없을 수도 있겠는데, 문제는 여기에서 발생한다. 바로, 기계는 data를 가지고 학습한다는 점이다. 즉, data에 의존한다는 점이다. 소년에게는 +개념에 대해, 인도/미국/중국/... 여러나라의 다른 내용의 참고서가 있지만, 모두 동일한 개념으로 서로 학습된다는 점이다. 즉, 인도 소년과 중국 소년에게 +는 더하기이며(+의 기호가 중요한건 아니다), 숫자를 더하는 것으로도 활용된다는 점을 이해하고 있다.


그렇지만, 기계는 data 의존적이라, data의 정확도에 따라 학습의 내용과 질이 달라지게 된다는 점이다. 그래서, 머신 러닝에서는 예측 결과를 높이기 위해서 되도록 주어진 data에 너무 부합하지 말라는 overfit이라는 개념이 등장하기까지 한다. 예를 하나 들어보면, 초등학생이만든 data와 고등학생이 만든 data는 엄연히 다를 것이다(즉, 초등학생은 자연수, 고등학생은 실수/허수). 그렇기 때문에 각각의 data로 학습하게 되면, 초등학생이 만든 data를 가지고서는 학습한 기계는 절대로 실수의 덧셈을 적용할 수 없게 된다(물론, 허수도 포함되지만). 왜냐하면, 학습을 하지 않았기 때문이다.


즉, 위 문단에서 얘기하고 싶은것은, 기계 학습에서는 data가 중요하다는 점이다. 아무리, 머신 러닝 알고리즘이 뛰어나고, 대단하더라도 data의 수준이 낮게 된다면, 분명 그 한계가 발생한다는 점이다. 역설적으로, data의 수준이 높다면, 저 수준의 알고리즘으로도 높은 성능이 나올수도 있다는 것을 기대할 수 도 있겠다. 물론, 초등학생이 실수의 덧셈을 할 수 없는 것처럼, 사람도 선생이나 책에 따라서 학습의 수준이 달라질 수 있다. 그렇지만, 최소한 사람이라면, 지속적인 공부를 통해, 자연수 -> 실수를 자연스럽게 최소한의 분량으로 학습할 수 있지만, 기계는, 자연수 -> 실수로 넘어가기 위해서는 자연수때 학습했던 data 개수 만큼의 실수 data를 요구할 것이다(더군다나, 기존의 학습한 결과를 버리고, 자연수, 실수 전체 data에 대해 처음부터 다시 학숩해야 할지도 모른다). 이러한 주요 이유중 하나는, 기계는 +의 추상적 개념 자체를 이해할 수 없기 때문이다. 즉, 아무리 학습을 해도, Na+Cl=NaCl을 할 수 없다는 뜻이다.


물론, 구글과 같은, 전세계의 모든 정보가 저장되어 있는 db가 있고, +가 사용된 모든 text를 추출하여, 그 내용을 학습하게 되면, 분명 Na+Cl=NaCl을 이해할 수 있을지도 모른다. 그렇지만, 그 기계가 +의 추상적 개념까지 이해는 어려울 것이다. 왜냐하면, 기계는 data를 통해 학습을 했지, 개념을 통해서 학습하지 못하기 때문이다. 즉, 기계는 1+1=2라는 것을 개념적인 연산을 사용한 것이 아니라, 주어진 data를 기반으로 통계적/알고리즘적인 분석을 통해, 1+1=2이며, 정확도는 98.53%이다라고 뱉어낼 뿐이다(이는, 내일 날씨 예보와 비슷하다).


흔히 인공지능 로보트나 기타 고객 맞춤형 서비스를 받을때, 실제 기계가 사람같다는 착각을 할 수 있다. 역시, 그건 착각이다. 그건, 당신의 눈빛, 소득수준, 현재 의상, 목소리, ... 많은 부분의 data를 가지고 정확도 n%의 결과로 분석된 결과일 뿐이다. 절대로, 당신을 이해하거나 직관적인 육감이 동원된건 절대로 아닐 것이다.


이제까지, data의 수준으로 한계를 설명했는데, 다음엔, data의 attribute(즉, 위에서는 operand1, operand2, value)에 대해서 알아보도록 하자.