지도 학습, 비지도 학습, 강화 학습을 하는 이유는 입력받은 데이터와 비슷한 결과를 만들어내기 위해서이다. 이처럼 데이터에 의한 머신러닝의 결과를 가리켜서 ‘모델’이라고 한다. 즉 모델은 머신 알고리즘에 의해 무엇이 학습이 되었는지를 나타내준다.
Kaggle에서 제공하는 타이타닉 생존자의 훈련 데이터
예를 들어서 앞에서 살펴봤던 캐글의 타이타닉 생존 여부를 판단하는 모델을 생성한다고 가정을 해보자. 데이터 전처리 과정과 Featuring Engineering 등을 통해 가장 특징적인 특성을 추출한다. 이를 기반으로 학습을 진행하여 꽤 정확도가 높은 조건식을 특성을 조합해서 만들었다면 머신 러닝의 결과로 생존을 판단하는 하나의 모델을 생성했다고 할 수 있다. 질문을 계속 던져서 Yes, No로 대답을 하여 어떤 질병에 대한 증상인지 판단하는 의사결정 나무를 만들었다면 이 또한 모델이 된다.
즉 머신러닝의 결과로 모델을 만들었다는 것은 데이터에 적용하기 위한 하나의 ‘프로그램’을 만들었다는 것과 같은 의미이다. 단, 예전에는 이런 프로그램을 사람이 논리적으로 하나하나 구현했었지만 이제는 머신 러닝이 데이터를 기반으로 최적화된 프로그램을 직접 만들어낸다고 할 수 있다.
딥러닝은 뭐지?
이 쯤에서 한 번 정리를 해보자. 인간의 지능을 보여줄 수 있는 모든 기술적인 학문을 통틀어 인공지능이라고 한다. 마치 생물학이나 수학처럼 인공지능은 커다란 학문의 분야를 의미한다. 그 중 인공 지능 중에서 주어진 데이터를 가지고 학습을 함으로써 만들어낸 결과물(모델)의 성능을 향상시키는 인공지능을 머신러닝이라고 한다. 더 많은 학습 데이터가 생겨날수록 이로 인해 알고리즘을 (스스로 하던, 인간이 하던) 개선을 함으로써 더 정확한 모델을 만들어가는 특징이 있으며, 이러한 학습에는 지도학습, 비지도학습, 강화학습 등이 있다.
마지막으로 딥러닝이라고 하는 기술에 대해서 살펴보자. 딥러닝은 알파고 때문에 2016년부터 많이 유명해졌지만 사실 꽤나 오래전부터 연구되어왔던 신경망(Neural Network) 이론을 바탕으로 구현한 인공지능 알고리즘이다. 신경망 이론은 입력값이 얼마(임계치) 이상이 되면 다음 뉴런으로 신호를 보내는 방식을 흉내낸 방법이었다. 이러한 방식을 신경망에서 1940년대에 처음으로 도입되었으니 인공지능 알고리즘 중에서는 거의 골동품과 같은 존재이라고도 할 수 있다.
사람의 뇌구조를 구현한 이론으로 알려지면서 ‘획기적인 아이디어’처럼 들리지만 사실은 단순한 원리를 활용한다. 다양한 입력 값들을 조합해서 특정한 값보다 크면 인정, 그렇지 않으면 인정하지 않는 전달 방식을 사용하는데, 이 아이디어를 뇌 세포의 신경에서 아이디어를 얻었기 때문에 신경망 이론이라고 부를 뿐 실제 생김새나 구조 자체는 신경의 모양과는 큰 상관이 없다.
최초의 신경망은 층이 딱 한 개였다. 그러다보니 AND나 OR와 같은 단순한 논리는 구현할 수 있었지만 조금만 복잡한 논리구조만 나타나도 구현을 하지 못하는 한계가 드러나기 시작했다. 그런데 오랜 연구 중 층을 하나 더 추가를 했더니 공간이 휘어지면서 그 전에 해결하지 못했던 XOR 문제를 깔끔하게 해결할 수 있게 되었다. 이 후 층을 더 늘리면 기존에 해결하지 못했던 다양한 문제를 해결할 수 있지 않을 것이라는 기대를 가지게 되었다. 실제로 이렇게 여러 층을 쌓아올린 후, 공간상에 펼쳐져있는 데이터를 통과시키면 데이터가 펼쳐져있던 평면이 희한하게 휘어지면서 변화하는 현상이 일어난다. 이러한 층이 많이 쌓아올려서 깊어졌기 때문에 딥러닝(Deep Learning, 심층학습)이라고 하는 이름을 붙이게 되었다.
딥러닝에서 데이터를 구분하는 원리는 시행착오를 수정하는 것과 같은 원리이다. 간단히 설명해서 데이터를 구분하는 선을 대충 그은 다음 그에 따라 데이터가 잘 구분되었는지 우선 살펴본다. 결과물이 살펴보니 ‘뭔가 이상한데?’ 라고 하면 경사하강법이라는 방법을 통해 어떻게 수정해야할지를 결정한 후 이 결정을 최종 결과층에서 다시 맨 처음까지 거꾸로 전달해준다. 그렇게 맨 앞 층까지 쫘악~ 역으로 차례차례 전달(역전파)해주고, 다시 처음으로 가서 가중치를 살살 바꾸어가며 새로 결과를 또 산출한다. 이러한 방법을 수천, 수 만번 반복하면서 더 이상 업데이트 안해도 될만큼 반복을 많이 해가며 처음으로 피드백 해주는 것이 바로 딥러닝의 기본 원리이다.
어렵게 보이지만 기본 아이디어는 눈감고 화살 한 번 쏜 다음 ‘조금만 더 왼쪽으로~ 조금만 더 위쪽으로~’ 라고 계속 피드백을 받는 거라고 할 수 있다. 그런데 확~ 옮겨버리면 많이 제대로 반영을 못하니까 찔끔찔끔 수정해가면서 점점 과녁 중심을 향해서 가도록 하는 것과 유사하다. 자동적으로 빨리 과녁 중심으로 방향을 잡아주는 것이 방법이 경사하강법이고, 어떻게 수정하라고 다시 처음 사람에게 전달해주는 과정이 역전파(. backpropagation) 이론이다.
딥러닝은 하드웨어의 제약과 그 구조의 복잡성, 과적합 문제, 데이터의 전처리 과정 등과 같은 여러 문제들로 인해서 계속해서 빛을 발하지 못하고 있었다. 1990년만 해도 10개의 숫자를 인식하기 위해 신경망 학습을 시키는데만 약 3일이나 걸렸다고 한다. 게다가 데이터 전처리 과정도 문제가 되었다. 예를 들어 눈을 가리고 피드백을 받아간다면서 산을 올라간다고 가정을 할 때 한 걸음씩 찔끔거리며 꼭대기에 다다랐는데 정상이 아닌 조그마한 언덕 중에 하나가 되는 이상한 처리 결과도 빈번하게 나타났다. 때로는 힘들게 모델링을 했는데 너무 훈련 데이터에만 최적화되었을 뿐 다른 곳에서는 엉터리 같은 결과를 거두는 과적합의 사례의 경우도 해결하지 못했다.
이와 같은 여러 문제를 제프리 힌튼 교수가 해결해내면서 다시 딥러닝은 한 걸음 더 도약하게 되었다. 비지도학습을 통해 데이터의 전처리 과정을 하면서 딥러닝을 이루고 있던 각 층들을 수정하는 방법을 고안해냈다. 게다가 딥러닝의 복잡한 벡터 연산을 수많은 GPU가 나누어서 계산을 하는 방법을 적용하면서 시간 또한 대폭 줄여냈다. 마지막으로 빅데이터가 본격화되면서 풍부하고 질이 좋은 데이터가 많이 생산되기 시작했다. 이 데이터 중 라벨링이 된 것은 지도학습에 쓰고, 라벨링이 안된 것은 비지도학습으로 처리하며 너무 이상한 것들은 제외하는 방법으로 딥러닝의 재료인 데이터의 질을 높이게 되었다. 이 외에도 사람이 주축이 되던 데이터 과학의 특징 추출(Featuring Engineering)을 자동화시킨 CNN, 시간에 따라 변하는 데이터를 다루는데 유용한 RNN 등이 발전하면서 딥러닝은 더욱 발전하게 되었다.