인공지능, 머신러닝, 딥러닝
이제는 인공지능, 머신러닝, 딥러닝이라는 표현을 일상 생활에서 듣는 것이 그렇게 어색한 일이 아닙니다. 인공지능이야 예전부터도 소설이나 영화에서도 곧 잘 듵을 수 있었지만, 머신러닝, 딥러닝 같은 용어는 전공 서적에서나 볼 수 있었는데 말이죠. 이 세가지는 비슷하게 들리고 실제로 많은 경우에 혼용해서 사용하기도 합니다. 오늘은 이 세가지가 어떻게 다른지 한번 이야기해보려고 합니다.
인공지능
인공지능은 말그대로 사람의 지능을 흉내내기 위해서 인공적으로 만들어낸 것들입니다. 실제 사람은 아닌데 사람이 할 수 있는 일을 비슷하게 한다면 넓은 범위로 인공지능이라고 할 수 있습니다. 음성인식(사람이 받아쓰기 하는 것을 흉내낸 인공지능), 얼굴인식(사람이 얼굴을 식별하는 것을 횽내낸 인공지능), 스포츠 기사 쓰기(스포츠 신문 기자가 하는 일을 횽내낸 인공지능) 모두 인공지능의 예입니다. 이미 우리 일상 생활 속에 깊숙히 들어와 있는 인공지능들이죠.
반면에 영화 속의 터미네이터와 같이 어쩌면 우리가 좀 더 오랜 시간동안 알아왔던 인공지능도 있습니다. 이런 인공지능은 아직은 영화나 소설 속에만 존재하고 있습니다.
이렇게 두 가지를 나눠서 말씀드린 이유는 인공지능 연구자 사이에서는 인공지능을 약인공지능과 강인공지능으로 구분하기 때문입니다. 학문적인 정의는 다소 철학적인데요. 좀 더 실용적으로 정의해보면 이렇습니다. 음성인식, 얼굴인식과 같이 좁은 범위의 일을 아주 잘 하도록 특화된 것이 약인공지능이고, 마치 사람처럼 복잡한 사고를 할 수 있는 것을 강인공지능이라고 볼 수 있습니다. 바둑을 기가 막히게 두는 알파고는 약인공지능, 터미네이터는 강인공지능인 셈입니다.
인공지능 기술이 엄청나게 발전하고 있기는 하지만 아직까지 기술 수준은 약인공지능들을 만드는데 그치고 있습니다. 하지만 이 조차도 사실은 엄청난 일입니다. 특히 최근 몇년간 인공지능 기술은 눈이 부시게 발전하고 있습니다. 실제로 인공지능 기술의 역사는 1940년부터 시작했으니 컴퓨터 과학 중에서도 가장 오래된 분야 중 하나인데요. 요즘처럼 실생활에서 사용할 수준으로 기술이 발전한 것은 그리 오래되지 않았습니다. 구글의 알파고와 이세돌 기사의 대국이 겨우 2016년에 일어난 일이니까요.
정말 강인공지능이라고 부를 수 있을만한 인공지능은 아직은 없다고 보입니다. 전세계의 수많은 연구자들이 불철주야 매달리고 있으니 불가능한 일만은 아닐지도 모릅니다.
머신러닝(기계학습) 그리고 규칙기반 인공지능
다시 보면 인공지능은 두가지 의미를 가지고 있습니다. 사람의 지능을 흉내낸 결과물을 의미하기도 하고, 그것을 만들기 위한 기술을 의미하기도 합니다. 엄밀하게 구분하려면 인공지능 제품, 인공지능 기술과 같이 구분하는 것이 좋겠지만 문맥에 따라 구분할 수 있으니 그냥 인공지능이라고 부르도록 하겠습니다.
그렇다면 인공지능은 어떻게 만들 수 있을까요? 예를 들어 자동차를 만든다고 가정해보겠습니다. 현대의 자동차는 대부분 공정이 자동화된 공장에서 만들어집니다. 하지만 일부 고급 자동차는 여전히 장인이 한땀한땀 만들어냅니다. 하지만 어떻게 만들었느냐에 관계없이 우리는 결과물을 모두 자동차라고 부릅니다.
인공지능도 마찬가지입니다. 어떤 사진을 주고 이 사진이 고양이인지 강아지인지를 구별하는 인공지능을 만든다고 생각해보겠습니다. 가장 직관적인 방법은 "귀가 좀 더 뾰족하게 서 있고 눈동자가 좀 더 또렷하면 고양이고, 귀가 좀 더 둥그스름하고 코가 더 크다면 강아지야"라는 식으로 고양이와 강아지를 구분하는 규칙을 만들고 이를 프로그래밍하는 것입니다. 이 경우에 사람이 판단을 위한 규칙을 만들어내고, 인공지능은 이 규칙에 따라서 실제 사진을 봤을 때 고양이인지 강아지인지 판단을 합니다.
또다른 방법도 있습니다 고양이 사진을 잔뜩 준비하고, 강아지 사진을 잔뜩 준비합니다. 인공지능에게 이건 고양이 사진이야, 이건 강아지 사진이야라고 하면서 사진을 반복적으로 보여줍니다. 한번만 보면 모를 수도 있으니 같은 사진을 여러번 보여주기도 합니다. 그리고 정말 인공지능이 제대로 공부를 했는지 알아보기 위해서 보여주지 않은 사진을 보여주면서 시험을 보기도 하고요. 이렇게 수많은 사진을 보여주다보면 인공지능이 고양이와 강아지의 차이를 학습
하게 되고, 결국에는 고양이와 강아지를 구분할 수 있게 됩니다.
인공지능을 만드는 첫번째 방법을 규칙기반 시스템(Rule-based System)이라고 합니다. 사람이 고양이와 강아지를 구분할 수 있는 규칙을 만들어주었기 때문에 이렇게 부릅니다. 두번째 방법은 머신러닝(Machine Learning, 기계학습)이라고 합니다. 고양이와 강아지 사진을 많이 보여주었을 뿐 둘 사이의 차이는 기계(머신)이 스스로 학습했기 때문입니다.
여기에서 알 수 있듯이 머신러닝은 인공지능을 만들기 위한 방법 중 하나입니다. 인공지능은 규칙 기반으로도 만들 수 있습니다. 즉 규칙기반 인공지능도 있는 셈이죠. 종종 머신러닝만이 인공지능이라고 주장하는 경우가 있는데 엄밀히는 틀린 표현입니다.
규칙기반 인공지능
하지만 현대의 인공지능은 대부분이 머신러닝 기반의 인공지능입니다. 왜일까요? 규칙기반으로 만드는 인공지능에는 많은 한계가 있기 때문입니다. 규칙기반은 사람이 규칙을 모두 생각하고 만들어야하는데 규칙을 만드는 것 자체가 쉽지 않습니다. 한번 차분히 앉아서 고양이와 강아지를 구분하는 규칙을 쏘보세요. 이것만 해도 쉽지 않은 일인데, 자율주행, 음성인식과 같은 복잡한 시스템을 위한 규칙을 사람이 다 만들기는 여간 어려운 일이 아닙니다.
두번째는 이렇게 어렵게 규칙을 만들었다고 하더라도 이 규칙이 충분하리라고 보장하기도 어렵습니다. 열심히 고양이과 강아지를 구분하는 규칙을 50개를 만들었다고 가정해보겠습니다(사실 저는 둘을 구분하는 규칙을 10개도 못 쓸 것 같습니다). 하지만 점점 강아지를 닮은 고양이, 고양이를 닮은 강아지 사진을 볼 때마다 규칙을 추가해야합니다. 특히나 이미 사람이 생각할 수 있는 대부분의 규칙을 쓴 상황이기 때문에 차별되는 규칙을 생각해내기가 점점 더 어려워집니다.
세번째는 규칙이 많아질 수록 규칙간에 충돌이 발생할 수 있다는 점입니다. 이것은 꼭 인공지능이 아니더라도 우리가 사는 생활 속의 규칙들에서도 일어납니다. 회칙, 법 등이 일종의 규칙기반 시스템이죠. 예를 들어 결혼을 하고나면 부부 간에 규칙들이 하나씩 생기기 시작합니다. 처음에는 크게 어려울 점이 없습니다. 집에 들어와서는 먼저 손발을 씻고 다른 일을 해라, 화요일은 분리수거하는 날이니 늦어도 저녁 8시까지는 들어와서 같이 분리수거를 해라와 같은 규칙들이 생기고 잘 지킵니다. 그런데 어느날 장을 보고 들어오면 냉동 식품들을 냉동실에 먼저 넣고 다른 일을 해라는 규칙이 생깁니다. 이 규칙만 보면 아무런 문제가 없고 좋은 규칙입니다. 하지만 분명히 집에 들어오면 다른 일 전에 손발을 먼저 씻으라는 규칙이 있습니다. 마트에 다녀오면 손발을 먼저 씻어야할까요, 아니면 냉동 식풍을 냉동실에 먼저 넣어야할까요?
똑같은 문제가 고양이와 강아지를 구분하는 규칙기반 인공지능에도 생길 수 있습니다. 고양이와 강아지를 구분하는 규칙을 추가하면 추가할 수록 새로운 규칙이 원래 규칙과 충돌나는 경우가 늘어납니다. 특히나 규칙이 복잡할 수록 가능성은 높이집니다.
현대의 인공지능이 규칙기반을 많이 쓰지 않는 이유는 이런 점들 때문입니다. 그렇다고 해서 규칙기반 인공지능이 무조건 나쁜 것만은 아닙니다. 뒤에 다루겠지만 머신러닝처럼 큰 데이터가 필요없고, 사람이 규칙을 만들어서 넣을 수 있기 때문에 상대적으로 빠르게 인공지능을 개발할 수 있습니다. 또 사람이 규칙을 만들기 때문에 문제가 생겼을 때 어디에 원인이 있는지 찾기도 직관적입니다. 이런 장점들 때문에 여전히 초기에 시스템을 빠르게 구축해야 한다거나 본격적으로 머신러닝을 활용해서 개발을 시작하기 전과 같은 경우에 규칙기반 시스템을 유용하게 사용하고 있습니다.
머신러닝
이제 머신러닝에 대해서 이야기해보겠습니다. 우리 말로는 기계학습이라고 번역합니다. 앞의 설명을 떠올려보면 고양이과 강아지를 구분하는 규칙을 하나하나 가르쳐줄 필요없이, 고양이과 강아지를 기계
(인공지능)에게 많이 보여주면, 알아서 학습
하기 때문에 기계학습이라고 부릅니다.
앞에서 규칙기반 시스템의 장단점에 대해서 이야기해보았는데요. 이번에는 머신러닝의 장단점에 대해서 이야기해보겠습니다.
단점
먼저 머신러닝의 단점은 데이터가 많이 필요하다는 점입니다. 고양이와 강아지의 사진을 잔뜩 준비해서 인공지능에게 (반복적으로) 보여주어야 그 차이를 학습할 수 있습니다. 이 많이라는 것이 어느 정도일까요? 통상적으로 이 문제는 적어도 수만장의 고양이와 강아지 사진이 필요합니다. 물론 데이터는 많을 수록 좋기 때문에 수십만장, 수백만장이 있다면 이 인공지능의 정확도는 더 높아집니다.
그렇지만 현실적으로 이렇게 많은 데이터를 모으는 것이 쉬운 일은 아닙니다. 이 문제를 이해하기 위해서는 두가지 점을 고려해야합니다. 다시 고양이와 강아지를 구분하는 문제를 생각해보죠. 먼저 고양이와 강아지 사진을 아주 많이 모아야합니다. 이 사진을 어떻게 모을까요? 직접 찍는 방식에는 한계가 있을 겁니다. 제가 작정하고 1년 동안 고양이와 강아지 사진을 찍는다고해도 몇장이나 찍을 수 있을지 모릅니다. 어쩔 수 없이 누군가를 시켜서 사진을 찍거나 이미 찍어둔 사진들을 돈을 주고 사야합니다. 결국 돈과 시간의 문제로 이어집니다.
여기에서 끝이 아닙니다. 앞에서 이야기해듯이 인공지능을 학습시키기 위해서는 이 사진이 고양이다 강아지다라는 것을 알려주어야합니다. 실제로는 이것외에도 고양이와 강아지를 구분하기 위해서는 규칙까지는 아니더라도, 귀모양, 입모양, 코모양 등을 고려하라는 것도 알려주어야 하지만 논의를 간단하게 하기 위해서 이것은 생략하겠습니다. 다행히 처음부터 고양이 사진과 강아지 사진을 잘 구분해서 모았다면 다행이겠지만, 일단 사진을 찍기에 급급했거나 인터넷에서 모은 사진, 무작위로 사들인 사진들은 고양이과 강아지 사진으로 분류 작업을 먼저 해야합니다. 이런 작업을 어노테이션(Annotation) 또는 태깅(Tagging)이라고 합니다. 각 데이터에 정답을 붙이는 작업입니다. 실제로 현실의 문제에서는 이 어노테이션 작업이 매우 어렵고 시간과 돈이 많이 들어갑니다. 예를 들어 음성인식이라면 누군가는 음성 파일을 일일이 들으면서 정답(받아쓰기)을 만들어주어야 합니다.
정답을 붙이는 어노테이션이 여간 어려운 일이 아니기 때문에 연구자들은 수많은 아이디어를 내고 있습니다. 이 중에 재미있는 것 중 하나가 Captcha입니다.
아마도 회원가입을 하거나 로그인을 할 때 이런 류의 글자 맞추기를 해보신 적이 있을겁니다. 재밌는 사실은 이 Captcha가 머신러닝 훈련 데이터를 모으기 위해서 시작되었다는 점입니다. 글자가 포함된 이미지를 보고 이 이미지를 실제 글자로 바꾸는 인공지능을 만든다고 해보죠 (실제로 OCR이라는 분야입니다). 머신러닝으로 인공지능을 훈련시키기 위해서는 이미지와 그 이미지의 정답이 필요합니다. 즉, 누군가는 수많은 이미지를 보면서 이 이미지 속의 글자가 무엇인지 적어야하는 것이죠. Captcha의 아이디어는 이렇습니다. 사용자에게 두가지 글자 이미지를 보여줍니다. 그렇지만 이 중 하나의 이미지만 Captcha는 정답을 알고 있고, 사용자가 이 정답을 맞추면 통과가 됩니다. 하지만 우리는 두 이미지 모두 정답을 입력합니다. 이 과정에서 Captcha는 답을 모르는 이미지의 정답을 공짜로 알게 된 것이죠. 이 과정을 반복하면 점점 더 많은 이미지의 정답이 쌓입니다. 아주 똑똑한 방법이죠?
어노테이션의 문제는 단순히 시간과 돈이 많이 든다는 것 뿐 만이 아닙니다. 결국 사람이 하는 일이기 때문에 오류가 있을 수 밖에 없고, 어노테이션이 100% 정답이라는 보장이 없습니다. 하지만 인공지능은 이 정답을 포함한 데이터를 보고 학습을 할 것이기 때문에 데이터의 정확도가 매우 중요합니다. 정확도를 높이기 위한 한가지 방법은 한 데이터에 대해서 여러명이 정답을 붙이도록 하는 것입니다. 아무래도 한명이 할 때보다는 두세명이 똑같은 답을 낼 때 정확도가 더 높겠죠. 한 데이터에 대해서 여러 사람이 같은 답을 매겼을 때 일치율(agreement rate)이 높다고 하고, 일치률이 어느 정도 이상인 데이터만 인공지능을 훈련시킬 때 사용하기도 합니다.
어렵게 데이터를 모았다고 해도 끝이 아닙니다. 데이터를 인공지능에게 반복적으로 보여준다고해서 인공지능이 공짜로 학습을 하지는 않습니다. 머신러닝은 내부적으로 아주 복잡한 수식과 방정식들을 가지고 있는데, 학습
이라는 것은 결국 데이터를 보면서 이 수학문제를 푸는 것입니다. 문제는 풀어야할 수학 문제가 아주 복잡하고 참고해야할 데이터가 아주 많기 때문에 필요한 컴퓨터도 아주 좋아야한다는 점입니다. 예전에도 동시대 기준으로 아주 강력한 컴퓨터가 필요했지만 기술이 발전하면서 데이터가 점점 더 많아지고 풀어야할 문제도 복잡해지면서 더 강력한 컴퓨터가 필요해지고 있습니다. 그리고 아무리 강력한 컴퓨터가 있다고 하더라도 인공지능이 충분히 학습하는데는 많은 시간이 필요합니다. 현실 세계에서 사용할 수준의 인공지능은 최소 몇시간에서 몇달까지 학습이 필요하기도 합니다. 이 문제 또한 결국에는 시간과 돈으로 이어집니다.
장점
이렇게 많은 어려움에도 불구하고 머신러닝 기반의 인공지능이 대세가 된 이유는 하나입니다. 바로 성능이 좋기 때문입니다. 충분히 많은 데이터와 충분히 좋은 컴퓨터가 있다고 가정하면 머신러닝 기반의 인공지능은 규칙기반 인공지능을 압도하는 성능을 보입니다. 어떻게 보면 이 성능이라는 하나의 장점을 위해서 수많은 단점을 극복하고 전세계의 많은 연구자, 개발자들이 머신러닝에 집중하고 있는 셈입니다.
그렇다면 인공지능의 성능이라는 것은 무엇을 의미할까요? 이제 일반화 능력(Generalization)이라는 아주 중요한 개념을 이야기해보겠습니다.
일반화 능력(Generalization)
중학생에게 아주 간단한 방정식 푸는 법을 가르친다고 생각해봅시다. 교과서에도 다양한 문제들이 나오고, 문제집에도 또 다른 문제들이 나옵니다. 아이가 점수를 잘 맞기를 기대하면서 학원도 보내고, 과외도 시키고, 학습지도 시킵니다. 이 학생은 배운 문제를 복습할 때마다 95점에서 100점을 맞는 기가막힌 능력을 보입니다. 부모님도 선생님도 아주 흡족한 상황입니다. 그리고 대망의 기말고사가 다가왔습니다. 하지만 부모님의 기대와 다르게 아이는 수학시험에서 80점을 맞습니다. 도대체 무슨 일이 일어난 것일까요?
맞습니다. 아이는 수업 중에 배운 문제는 거의 암기하다시피해서 완벽하게 정답을 맞출 수 있었지만, 기말고사 때는 본적이 없는 문제들이 있었기 때문에 연습할 때만큼 점수가 나오지 않았습니다. 아마도 이 학생이 문제를 암기하지 않고 문제의 원리를 이해했다면 100점은 아니더라도 100점에 가까운 점수를 맞았을지도 모릅니다.
머신러닝에도 동일한 현상이 있습니다. 인공지능에게 아주 많은 고양이 사진과 강아지 사진을 보여주었고, 인공지능이 수많은 노력 끝에 고양이와 강아지 사진을 구분할 수 있게 되었습니다. 거의 100% 가까운 성공률을 보였습니다. 이 인공지능을 만든 개발자는 자랑스럽게 이 기능을 출시했습니다. 하지만 사람들이 실제 자신이 찍은 사진들을 올리자 성능은 90%를 겨우 넘깁니다. 무엇이 문제였을까요? 바로 인공지능이 고양이와 강아지를 구분하는 원리를 배우지 못하고, 그동안 본 고양이 사진과 강아지 사진을 암기했기 때문입니다. 혹자는 그렇다면 전세계의 모든 고양이 종과 강아지 종의 사진을 인공지능에게 보여주고 다 암기하게 하면 되지 않게느냐고 반문합니다. 하지만 고양이를 찍은 각도, 사진 안의 고양이의 각도, 빛의 정도 등을 고려하면 모든 조합의 사진을 구한다는 것은 불가능합니다. 이렇게 인공지능을 가르치기 위해 사용한 데이터에만 너무 특화되는 현상을 오버피팅(Over-fitting)
문제라고 부릅니다. 오버피팅은 인공지능을 개발하는데 아주 골치 아픈 문제이고 이 문제를 해결하기 위해서 연구자들이 수많은 방법들을 고안하고 있습니다.
오버피팅의 함정에 빠지지 않고(암기하지 않고) 훈련 데이터에 숨어있는 원리를 잘 파악해서, 처음보는 문제도 잘 풀 수 있는 능력을 인공지능의 일반화 능력이라고 부릅니다.
인공지능이 성능이 좋다고 말하기 위해서는 당연히 정답을 많이 맞추어야합니다. 고앙이와 강아지 사진을 잘 구분해야하죠. 하지만 이것만으로는 부족합니다. 좀 더 정확히는 인공지능을 훈련시키는 과정에서 사용하지 않은 데이터에 대해서 정답을 잘 맞춰야합니다. 본적이 없는 고양이과 강아지 사진을 접하더라도 이것이 고양이인지 강아지인지 잘 구분을 해야하는 것이죠.
지도학습(Supervised Learning), 비지도학습(Unsupervised Learning)
앞에서 인공지능을 훈련시킬 때는 데이터와 정답을 같이 보여준다고 했습니다. 즉 사진을 보여주면서 이것은 고양이야, 다른 사진을 보여주면서 이것은 강아지야라고 하는 방식입니다. 이렇게 인공지능을 훈련시키는 방법을 지도학습(Supervised Learning)입니다. 선생님이 학생을 하나하나 지도하듯이 정답을 가르쳐 준다는 의미입니다.
하지만 정답을 가르쳐주지 않는 다른 방법도 있습니다. 고양이인지 강아지인지 가르쳐주지 않고 그냥 고양이와 강아지 사진이 마구 섞인 사진더미만 보여주면서 알아서 인공지능이 학습하도록 하는 방법입니다. 정답을 지도하지(가르쳐주지) 않기 때문에 이 방법은 비지도학습(Unsupervised Learning)이라고 합니다. 지도학습과 다르게 비지도학습은 정답을 가르쳐주지 않아도 되고, 따라서 데이터에 정답을 붙이는 작업을 하지 않아도 됩니다. 앞에서 이야기한 머신러닝의 커다란 단점을 해결할 수 있는 기가 막힌 방법입니다.
하지만 현재 우리가 일상 생활에서 쓸 수 있는 수준을 가진 인공지능은 대부분이 지도학습 방식의 머신러닝 기반입니다. 왜 일까요? 비지도학습은 성능이 상대적으로 낮기 때문입니다. 비지도학습의 성능이 낮다는 것은 다른 말로는 비지도학습이 풀려고하는 문제가 어렵다는 뜻이기도 합니다. 왜 비지도학습이 풀려는 문제가 더 어려운지는 수학적으로 복잡한 주제이지만 간단한 설명을 해보겠습니다.
고양이와 강아지를 구분하는 문제는 상대적으로 쉽습니다. 두가지 중 하나만 맞추면 되기 때문입니다. 맞추려는 사진에 고양이와 강아지 사진의 비율이 비슷하다고 치면 전부 고양이라고만 해도 50점은 됩니다. 이렇게 판단해야하는 종류가 두가지인 경우른 이진 분류 문제(Binary Classification)라고 합니다. 하지만 난이도를 더 올려서 사진을 보고 어떤 동물인지 맞출 수 있는 인공지능을 만들고 싶다고 해보겠습니다.
첫번째 문제는 동물의 종류가 몇가지인지 알 수가 없다는 점입니다. 지도학습의 경우는 정답을 알기 때문에 구분해야하는 동물의 종류가 몇가지인지도 쉽게 알 수 있습니다. 하지만 비지도학습은 정답이 없기 때문에 구분해야하는 동물의 종류가 몇가지인지부터 알 수가 없습니다.
문제를 조금 더 쉽게 하기 위해서 동물의 종류는 다섯가지(고양이, 강아지, 참새, 소, 메뚜기)라고 알려줬다고 해보겠습니다. 먼저 지도학습이라면 어떻게 인공지능이 학습을 하는지 살펴보겠습니다. 인공지능이 첫번째 사진을 봅니다. 정답은 고양이이고요. 음.. 고양이는 이런 특징들이 있군이라고 대략 배웁니다. 두번째 사진을 봅니다. 이번 정답은 참새입니다. 음.. 참새는 이런 특징들이 있군. 이런 과정을 거치면서 고양이들은 이러이러한 공통점이 있구나라는 것을 배웁니다. 또 고양이와 참새는 이런 차이점이 있구나라는 것도 배웁니다.
이번에는 똑같은 문제를 비지도학습이 어떻게 배우는지 보겠습니다. 인공지능이 첫번째 사진을 봅니다. 분명히 다섯가지 동물 중 하나이겠지만(심지어 이것도 누가 알려주어서 천만다행입니다) 고양이인지, 강아지인지, 소인지는 알 길이 없습니다. 일단 다음 사진을 봅니다. 역시 이게 고양이인지, 강아지인지, 소인지 알 수가 없습니다. 심지어는 앞에 봤던 사진과 같은 동믈인지 아닌지도 알 수가 없습니다. 이렇게 전체 동물 사진을 봤지만 어떤 사진들이 같은 동물이고 어떤 사진들이 다른 사진인지 알 수가 없습니다. 아주 아주 많은 사진을 보다보면 대략적으로 비슷한 느낌의 사진들끼리 묶을 수는 있습니다. 물론 정답을 정확히 모르기 때문에 정확도는 떨어지겠지만요. 이것이 또다른 비지도학습의 어려운 점입니다. 정답을 모르기 때문에 동물간의 유사성과 차이점을 구분할 수가 없습니다.
하지만 데이터의 정답을 만들지 않아도 되고 따라서 데이터를 구하기 쉽다는 매력 때문에 비지도학습은 연구자들에게 항상 관심사입니다. 기술이 발전함에 따라 비지도학습도 쓰임을 찾아가고 있습니다. 앞에서 사진을 많이 보다보면 비슷한 느낌의 사진들끼리 묶을 수 있다고 했는데 이런 기술을 클러스터링이라고 합니다. 클러스터링은 어디에 쓸 수 있을까요? 제가 쇼핑몰을 운영하고 있다고 해보겠습니다. 장사가 잘 되서 많은 고객이 생겼고 고객들의 데이터도 모을 수 있었습니다. 보다 나은 서비스를 제공하기 위해서 고객 집단별로 맞춤형 서비스를 제공하고 싶습니다. 이때 클러스터링 기법을 사용하면 고객들을 몇가지 군집(클러스터)으로 묶을 수가 있습니다.
비지도학습이 유용한 다른 경우도 있습니다. 지도학습은 성능이 좋지만 모든 데이터에 정답을 붙여야합니다. 그래서 양은 많지만 정답이 없는 데이터를 사용해서 비지도학습으로 성능이 낮은 인공지능을 먼저 만듭니다. 그리고 정답이 있는 데이터를 이용해서 이 인공지능을 개량하고 성능을 높입니다. 이렇게하면 상대적으로 적은 양의 정답 데이터를 가지고 좋은 성능을 가진 인공지능을 만들 수 있습니다.
인공지능, 머신러닝, 딥러닝의 관계
지금까지 설명에서 느끼셨겠지만 머신러닝은 한가지 특정 기술을 의미하는 것은 아닙니다. 앞에서 언급했던 특징들을 가진 여러 기술들을 묶어서 부르는 기술군의 이름입니다. 대표적인 머신러닝 기법(알고리즘)에는 Hidden Markov Model(HMM), Support Vector Machine(SVM), Conditional Random Field(CRF)와 같은 것들이 있습니다. 그리고 최근에 가장 핫한 머신러닝 기법 중에 하나가 바로 딥러닝입니다.
딥러닝
앞에서 말씀드린대로 딥러닝은 머신러닝 기법 중 하나입니다. 정확히는 HMM, SVM, CRF, 딥러닝 등을 묶어서 머신러닝이라고 부르는 것처럼, 딥러닝도 여러가지 기술들을 묶은 기술군입니다. 이번 글에서는 자세히 다루지는 않겠지만 딥러닝에 속하는 기술은 CNN, RNN, Transformer 같은 것들이 있습니다. 그렇다면 딥러닝 기술들은 무엇이 특별하길래 다른 머신러닝 기술들과 구분해서 딥러닝이라는 이름이 붙었을까요?
딥러닝 기술들이 기존의 머신러닝 기술들과 다른 점에 대해서 말해보자고 하면 매우 다양한 이야기들이 나올 겁니다. 데이터, 시스템을 훈련시키는 방법, 훈련에 필요한 하드웨어 등등 수많은 차이점이 있습니다. 하지만 저는 한가지를 꼽으라고 한다면 딥러닝이 기존 머신러닝 기술들보다 훨씬 깊은(Deep) 지식을 배울 수 있는 잠재력을 가졌다고 말하겠습니다.
깊은 지식
딥러닝(Deep Learning)의 Deep은 원래는 딥러닝이 기반을 둔 인공신경망의 레이어를 깊게 여러겹 사용하다는 의미였습니다. 이 글에서는 인공신경망과 같은 기술적인 자세한 내용은 다루지 않습니다. 나머지 글을 보시기 위해서도 필요한 내용은 아닙니다.
지식이 깊다는 것은 어떤 의미일까요? 주위에 깊은 지식을 가진 사람들을 한번 떠올려봅시다. 그 분들이 가진 지식의 특징은 어떠한가요? 어쩌면 아주 다양한 분야의 지식을 가지고 계실 수도 있습니다. 하지만 엄밀히는 이런 경우는 넓은 지식을 가지고 있다고 합니다. 박학다식하다고 표현할 수도 있을 것 같습니다. 반면에 깊은 지식을 가진 분들은 한 분야의 전문가인 경우가 많습니다. 예를 들어, 물리학을 수십년 연구한 학자라거나, 수십년간 호미만 만든 장인이라거나, 미술품 감정을 수십년 동안 한 감정사가 깊은 지식을 가지고 있다고 볼 수 있습니다. 미술품이 진품인지 위작인지 판단하는 감정사를 예로 들어보겠습니다. 아마도 갓 감정사라는 직업에 입문한 초보 감정사의 경우 진품과 위작을 판단하는 정확도가 상대적으로 낮을 겁니다. 눈에 띄는 위작은 판별할 수 있겠지만 교묘한 위작은 판단이 어려울지도 모릅니다. 아직은 이 분야의 지식이 깊다고 말하기는 어렵겠죠. 하지만 시간이 지나고 다양한 진품과 위작을 보면서 경험과 함께 지식도 깊어집니다. 그러면서 더 교묘한 위작을 찾아낼 수 있게 됩니다. 미묘한 차이도 발견할 수 있게 되고, 점점 더 많은 판단 기준들을 배워나갑니다. 여러가지 사실들을 조합해서 종합적인 판단을 내릴 수 있게 되고요. 어느 날에는 이 분야의 대가가 되있을 것입니다.
잠재력
그렇다고 모든 감정사에게 수많은 진품와 위작을 보여준다고 해서 모두 깊은 지식을 가지고 이 분야의 대가가 될 수 있을까요? 그렇지는 않습니다. 초반에 어느 정도까지는 비슷하게 실력이 성장하는 것처럼 보일 수 있지만, 아무리 더 많은 경험을 하더라도 몇몇 감정사는 더이상 실력이 늘지 않고 멈추게 됩니다. 하지만 다른 감정사는 여기에서 멈추지 않고 더 많은 경험을 스펀지처럼 흡수하면서 실력이 늘어갑니다. 더 많이 성장한 감정사가 더 많은 잠재력을 가지고 있었다고 말할 수도 있습니다. 잠재력이 더 많다는 것은 더 많은 경험(데이터)을 통해 더 많은 지식을 쌓을 수 있는 능력입니다. 한편으로는 같은 수준의 경험을 하더라도 더 종합적인 판단을 할 수 있고 결과적으로 더 정확하게 판단할 수 있는 감정사들도 있습니다. 얼마나 많은 경험을 소화할 수 있느냐와 이를 통해 얼마나 종합적인 판단을 할 수 있느냐 두 가지가 바로 머신러닝, 그리고 딥러닝에서 말하는 잠재력과 깊은 연관이 있습니다.
기존의 머신러닝과 딥러닝
머신러닝의 성능은 얼마나 많은 데이터를 제공할 수 있느냐와 얼마나 많은 데이터를 소화할 수 있느냐로 결정됩니다. 똑같은 머신러닝 기법이라면 많은 데이터를 보여줄 수록 일반적으로 성능이 좋습니다. 물론 머신러닝 기법이 다르다면 기법마다 소화할 수 있는 데이터의 양도 다릅니다. 앞의 감정사의 예와 마찬가지입니다. 또 같은 데이터를 제공해주더라도 어떤 머신러닝 기법은 다른 머신러닝 기법보다 좀 더 종합적인 판단을 할 수 있습니다.
기존 머신러닝과 딥러닝의 가장 큰 차이는 바로 얼마나 많은 데이터를 소화하고 이를 바탕으로 종합적인 판단을 할 수 있느냐입니다. 딥러닝 기술들은 기존의 머신러닝 기법보다 압도적으로 많은 데이터를 소화하고, 이것들을 깊이있는 지식으로 쌓아갈 수 있습니다.
그렇다면 어떤 요소들이 딥러닝을 가능하게 했고 기존 머신러닝과 차별되게 했을까요?
첫번째는 아주 큰 데이터들의 출현입니다. 인터넷이 발전하고 전 세계가 정보화되면서 기존에는 상상할 수 없던 양의 데이터가 쏟아지기 시작했습니다. 스마트폰이 보급되면서 전 세계의 사용자들이 엄청난 양의 사진을 매일 찍기 시작했습니다. SNS가 활성화되면서 매분 매초 대화 데이터들이 쏟아지고 있습니다. 위키피디아와 같은 서비스가 흥행하면서 고품질의 전문 지식 데이터들이 빠른 속도로 만들어지고 있습니다. 하지만 이렇게 데이터가 많고 풍부해진다고 해서 뛰어난 인공지능이 만들어지지는 않습니다.
대규모 데이터를 소화할 수 있는 딥러닝 기술들의 등장이 두번째 요소입니다. 안타깝게도 기존의 머신러닝 기술들에게는 이런 대규모 데이터들을 주어도 어느 정도 이상으로는 학습이 이루어지지 않습니다. 기술들의 잠재력이 상대적으로 적기 때문입니다. 하지만 새로 등장한 잠재력이 뛰어난 딥러닝 기술들에게 대규모 데이터를 주자 기존 머신러닝들이 성장을 멈추었던 지점을 넘어서서 더 높은 지점까지 성장을 하기 시작합니다. 하지만 다른 문제가 등장합니다. 감정사도 대가가 되려면 수십년의 세월이 필요하듯이 딥러닝도 잠재력이 뛰어난만큼 학습에 많은 시간이 들어갔습니다. 대기만성인 셈이죠.
이를 해결하기 위해 등장한 강력한 컴퓨터들이 바로 세번째 요소입니다. 기존 머신러닝 기술들은 일반적인 소프트웨어와 같은 방식으로 작동했습니다. 어떻게 보면 좀 더 메모리가 많이 필요하고 빠른 연산장치가 필요한 특별한 소프트웨어들 뿐이었습니다. 하지만 딥러닝 기술들은 적극적으로 다른 방법들을 찾고 사용하기 시작합니다. 통상적인 연산장치(CPU)대신 게임에 사용하던 특수 연산장치(GPU)를 사용하고, 이런 컴퓨터 여러 대를 묶습니다. 심지어는 딥러닝만을 위한 별도의 연산장치(TPU, NPU)등을 만들어 내기도 합니다.
이렇게 삼박자(대규모 데이터, 잠재력이 뛰어난 학습 기술, 강력한 하드웨어)가 맞아 떨어지자 딥러닝 기반의 인공지능은 기존 머신러닝 기술을 뛰어넘고 아주 강력한 성능의 인공지능들을 만들어내기 시작합니다.
그렇다면 어떻게 딥러닝은 기존 머신러닝 기술보다 뛰어난 잠재력을 가질까요? 간단히 생각하면 딥러닝이 기존 머신러닝 기술들보다 내부적으로 훨씬 많은 판단기준들을 가지기 때문입니다. 날씨를 예측하는 경우를 생각해보겠습니다. A 기상청은 어제가 맑았는지 흐렸는지, 오늘은 맑은지 흐린지를 보고 내일 날씨를 예측합니다. 반면 B 기상청은 지난 일주일간 날씨가 흐렸는지 맑았는지, 작년 이맘때 쯤의 날씨, 그리고 흐린지 맑은지 뿐 아니라 습도, 기온 등도 참고합니다. 그리고 각각의 요소들의 상관관계까지 고려해서 내일 날씨를 예측합니다. 어떤 기상청이 더 정확한 날씨를 예측할 수 있을까요? B 기상청의 예보가 더 맞을 가능성(잠재력)이 높습니다. 하지만 이것은 어디까지나 지난 일주일간 날씨(흐린지 맑은지, 기온, 습도 등), 작년 이맘때 날씨 데이터가 있어야만 가능합니다. 물론 기상청의 슈퍼컴퓨터도 좋아야 합니다. 이 데이터들을 가지고 내일 날씨를 예측하는데 이틀이 걸린다면 무슨 사용이 있을까요? 딥러닝도 마찬가지입니다. 딥러닝은 기존 머신러닝보다 훨씬 많은 판단기준을 가질 수 있고 이 판단기준 간의 상관계를 따질 수 있습니다. 하지만 이를 학습하기 위해서는 기존 머신러닝보다 훨씬 많은 데이터와 강력한 컴퓨터가 필요합니다.
딥러닝의 단점
앞에 말한대로 딥러닝의 장점은 정말 많습니다. 최근 인공지능의 대부분이 딥러닝 기술을 사용하는 이유이기도 합니다. 하지만 딥러닝 기술에도 단점들이 존재합니다.
첫번째는 제대로 된 성능을 내기 위해서는 매우 큰 데이터가 필요하다는 점입니다. 앞에서 머신러닝의 단점을 이야기할 때도 같은 이야기를 했지만, 딥러닝은 기존 머신러닝보다 훨씬 많은 데이터가 필요합니다. 예를 들어, 알파고 제로를 훈련시키기 위해서 약 490만 번의 대국 데이터를 사용했다고 합니다. 물론 데이터들에 정답을 붙여야한다는 것은 또다른 문제입니다. 비지도학습 방법도 있지만 앞에 말씀드린대로 아직 갈 길이 멉니다.
두번째는 아주 강력한 컴퓨터가 있어야한다는 점입니다. 컴퓨터가 강력할수록 여러번 반복적으로 인공지능을 가르칠 수 있습니다. 컴퓨터가 강력할 수록 더 빨리 훈련을 마칠 수 있고 잘못된 부분을 고쳐서 더 여러번 실험을 해볼 수 있습니다. 결국 더 강력한 컴퓨터가 있어야 더 좋은 성능의 인공지능을 만들 수 있습니다.
더 큰 데이터와 더 강력한 컴퓨터가 필요하다는 점은 개인 연구자나 학교에 있는 연구자들에게 커다란 어려움으로 다가오고 있습니다. 최신의 딥러닝 기술이 필요로하는 데이터와 컴퓨팅 파워는 이미 개인이나 소규모 집단이 감당할 수 있는 수준을 아득히 넘어서고 있습니다. 제대로 된 딥러닝 연구가 커다란 기업에서 이루어지고 있고, 내노라하는 연구자들이 학교를 떠나서 기업에 합류하고 있는 이유 중 하나입니다.
세번째 단점은 이 딥러닝이라는 녀석이 어떻게 작동하는지 알기가 어렵다는 점입니다. 기존 머신러닝에도 이런 문제가 있었지만, 딥러닝은 내부적인 판단기준이 너무 많고 기준들이 매우 복잡하게 엮여있기 때문에 내부 동작을 파악하고 이해하기가 어렵습니다. 그래서 "내가 만든 인공지능이 잘 작동은 하지만 왜 작동하는지는 몰라요"와 같은 상황들이 생깁니다. 성능 좋게 잘 작동하면되지 뭐가 문제냐고 생각할 수 있습니다. 하지만 인공지능의 성능이 100%는 아니기 때문에 잘못 작동하는 경우도 있습니다. 이 경우에도 왜 잘못 작동했는지 알 수 없기 때문에 문제를 고치기도 어렵습니다. 다른 문제는 인공지능이 어떻게 작동할지 예측하기 어렵다는 점입니다. 통계적으로 98%는 옳게 작동하겠지만 나머지 2%는 어떻게 될지 모르는 경우가 생깁니다. 최근에 화제가 되고 있는 인공지능 윤리도 같은 맥락입니다. 인공지능이 인종차별적인 판단이나 성차별적인 윤리에 어긋나는 행동을 하더라도 우리는 이것을 미리 예측하거나, 원인을 찾아서 고치기가 어렵습니다. 우리가 할 수 있는 것은 최대한 데이터가 편향되지 않도록 잘 만들고, 인공지능의 성능이 (데이터에 기반해서) 100%에 가까워지도록 다양한 기법을 적용하는 것 뿐입니다. 이런 문제를 해결하고자 최근에는 설명가능한 인공지능(Explainable AI)이라는 학문이 인기를 얻고 있습니다. 왜 인공지능이 특정 결과를 냈는지 인공지능의 내부를 이해하려는 학문입니다. 한쪽에서는 더 복잡하고 강력한 (그렇지만 설명과 해석은 어려운) 인공지능을 만들고, 한쪽에서는 이런 인공지능을 이해하고 설명하려는 노력이 이어지고 있는 셈입니다.
인공지능에 대한 오해
마지막으로 흔히 접하는 인공지능에 대한 오해를 몇가지 소개하고 글을 마치려고 합니다.
스스로 똑똑해지는 인공지능?
결론부터 말하면 아직은 스스로 똑똑해지는 인공지능은 없습니다. 누군가는 뒤에서 데이터를 준비하고 정답을 잘 붙이고, 이를 이용해서 다양한 기법으로 인공지능을 잘 훈련시켜야 합니다. 혹자는 음성인식 같은 경우는 쓸 수록 똑똑해진다고 들었다라고 하실 수도 있습니다. 사실입니다. 하지만 인공지능이 스스로 똑똑해져서가 아니라, 그 음성인식을 만드는 누군가가 뒤에서 계속해서 데이터를 보강하고 더 나은 인공지능 기법들을 적용하기 있기 때문에 똑똑해지고 있는 것입니다.
스스로 똑똑해지는 인공지능을 만들기 위해 연구도 있습니다. 다만 아직은 우리가 현실에 느낄 수 있을 정도의 완성도는 되지 않았습니다.
인공지능은 딥러닝이다?
딥러닝이 화제가 되면서 인공지능은 곧 딥러닝이다라는 인식이 퍼지기도 했습니다. 인공지능이 막 화제가 되기 시작할 즈음에 제가 아는 한 기업의 임원분이 인공지능 분야의 유명한 교수님께 어떤 연구를 하시냐고 물었습니다. 교수님은 머신러닝을 오랬동안 연구했다고 대답을 했습니다. 그 임원분은 "그럼 교수님은 인공지능을 하신 건 아니군요"라고 했습니다. 교수님은 답답하고 억울한 마음에 인공지능, 머신러닝, 딥러닝의 관계에 대해서 설명을 하려고 애쓰셨지만 결국은 포기하셨습니다.
앞에서 말씀드린대로 딥러닝은 머신러닝의 한 분야이고, 머신러닝은 다시 인공지능을 만들기 위한 방법들 중 하나입니다. 우리가 굳이 이런 엄밀한 구분을 알 필요는 없을 수 있지만, 딥러닝만이 인공지능이라는 편견은 가지지 않았으면 합니다.
딥러닝은 인간의 뇌를 흉내낸 기술이다?
결론부터 말하면 아니다입니다. 이 글에서는 일부러 기술적인 이야기를 최대한 피했습니다. 하지만 이 오해를 풀기 위해서는 아주 약간의 기술적인 이야기를 해야합니다. 딥러닝의 많은 기슬들의 인공신경망(Artificial Neural Netowrk)이라는 것을 기반으로 합니다. 인공신경망은 우리 뇌의 뉴론이라는 구조에서 영감을 받은 기술입니다. 여기에서 중요한 점은 영감을 받은 것이지 뇌를 흉내낸 것은 아닙니다. 애초에 아직 우리는 우리 뇌가 어떻게 작동하는지 정확히 모르기 때문에 이를 흉내낸 인공지능을 만든다는 것도 불가능합니다. 현재까지 밝혀진 뇌의 원리만을 따져보더라도 인공신경망의 작동 방식과는 아주 다릅니다. 그렇다면 왜 이런 오해가 퍼졌을까요? 저는 마케팅 효과라고 생각합니다. 제가 딥러닝을 활용한 기업을 운영한다고 가정해보겠습니다. 저희 회사 제품을 팔기 위한 가장 효과적인 마케팅은 무엇일까요? 우리 회사의 제품이 딥러닝을 사용하고, 이 딥러닝은 인간의 뇌가 작동하는 방식으로 만들어졌기 때문에 아주 성능이 좋다고 말하는 것이 한가지 방법일것입니다. 복잡한 기술을 설명하는 것보다 훨씬 명료하고 설득력이 있습니다. 문제는 사실이 아니라는 것입니다.
그렇다면 딥러닝이 인간의 뇌와 다르게 작동하기 때문에 좋지 않은 기술일까요? 그렇지 않습니다. 비행기의 예를 살펴보겠습니다. 처음에 인류가 비행기를 만들기 위해서 노력했을 때는 모두가 새가 나는 방법을 연구하고 그 방법을 흉내내려고 노력했습니다. 하지만 아무도 이 방법으로 하늘을 날지 못 했습니다. 하지만 라이트 형제가 새와는 다른 방법으로 하늘을 나는 기계를 만들었고 현대의 모든 비행기는 새와는 다른 방법으로 하늘을 날고 있습니다. 물론 우리는 새가 하늘을 나는 것에서 영감을 얻었지만요. 현재의 딥러닝 기술들은 뇌와 다르게 작동하지만 어쨌든 우리가 원하는 일들을 잘 해주고 있습니다. 내 말을 잘 받아써주고, 내 사진 더미에서 얼굴을 잘 찾아주고, 내가 보고 싶은 영화를 알아서 잘 추천해줍니다.
마치며
쓰다보니 꽤나 긴 글이 됐습니다. 수식을 완전히 배제하고 최대한 기술적인 표현을 줄이다보니 어쩌면 더 길어진 것일지도 모르겠습니다. 아니면 저의 설명하는 능력이 부족해서 글이 길고 복잡해진 것일 수도 있구요. 부족한 글이 조금이나마 도움이 됐으면 하는 마음입니다.
'Deep Learning' 카테고리의 다른 글
Logit, Sigmoid, Softmax (0) | 2021.05.30 |
---|---|
한국어 띄어쓰기: 실전 예제로 배워보는 딥러닝 자연어 처리 (0) | 2021.05.26 |
Tensorflow가 GPU를 지원하는지 알아보자 (0) | 2020.06.24 |
Tensorflow Custom Layer (0) | 2020.06.12 |
Tensorflow Callback 사용하기 (3) | 2020.06.04 |