
▲자료사진 ⓒ boliviainteligente on Unsplash
그렇다면 우리는 왜 일반 도구와 컴퓨터나 스마트폰에 들어 있는 앱들을 인공지능이라 부르지 않는가? 그것은 크게 두 가지 이유가 있다고 필자는 생각한다.
첫째, 현대 인공지능, 특히 대규모 언어 모형에 그 기반을 둔 생성형 인공지능이 가지고 있는 기능이 너무도 인간의 행동을 기막히게 시늉내기 때문이다. 유튜브에서 BTS의 영상을 시청하면, 화면은 BTS의 행동을 기막히게 시늉내고, 스피커는 그들의 목소리를 기막히게 시늉낸다. 그러나 우리는 이내 이것이 실제 인간의 행동이 아니라 기계가 한다고 알아챈다. 컴퓨터나 스마트폰 등 기계 자체를 바로 보거나 만져볼 수 있기 때문이다. 그러나 생성형 인공지능이 내놓는 답은 아무리 보아도 내 질문을 '이해'해서 '논리적'으로 매우 그럴듯한 답변을 쏟아내는 것 같다.
인공지능이 작동할 때는 컴퓨터가 우리 감각 범위 안에 직접 들어오지 않기 때문이다. 그래서 이러한 결과를 보고는 '이 정도라면 인간처럼 이해하는 것 아니야?'라고 생각한다. 사실 이런 심리의 기저에는 다음과 같은 것이 깔려있다. 처음에는 그저 이렇게 생각한다.
"앱에 불과한 인공지능이니 사람처럼 생각하고, 이해하고, 논리적으로 타당한 답을 내지는 않을 거야. 그것은 인간만이 할 수 있는 거잖아. 아무리 내뱉는 답이 '놀랍도록' 정교해도 인간이 내는 것은 아니지."
하지만 이런 '놀라움 가득한' 경험이 몇 차례 반복되면 이제 인공지능이 기계라는 사실이 불편해진다. "이쯤 되면 인간처럼 지능을 가졌다고 봐줘도 괜찮은 것 아니야?"라고 생각하기 시작하면 이미 루비콘 강을 건넌 것이나 다름없다. 이내 '이건 지능이라고 봐야 돼.' 이 단계가 되면 인공지능을 단순한 지능이 아니라, '생각'하고, '이해'하고, '판단'하는 인간과 동등한 존재로 인식하게 된다. 이 지점이 컴퓨터나 스마트폰에 들어 있는 앱들과 생성형 인공지능이 전혀 다른 것이라는 착각을 자아내는 지점이다.
착각, 그리고 알고리즘
둘째, 인공지능을 얘기할 때 자주 같이 등장하는 '알고리즘'이라는 낱말 때문이다. 일반인 중에는 심지어 알고리즘이라는 말이 현대의 생성형 인공지능에만 적용되는 말이라고 생각하는 사람들도 있다.
필자가 알고리즘이라는 낱말을 처음 들은 게 대학원 시절 컴퓨터 프로그래밍 수업이었으니, 1978년경이다. 그때 필자가 배운 알고리즘이란 주어진 문제를 풀어 답을 얻어내기 위한 절차를 구성하는 논리 체계였다. 따라서 아직 실제로 구현되지 않은, 인간의 머릿속에만 있는 매우 추상적인 것이다. 이것이 현실에서 구체적으로 작동하여 답을 찾아내려면 도구에 그 논리 체계가 구현되어야 한다.
도끼에게는 '나무를 벤다'는 목적을 이루기 위해 힘을 모으는 방향과 세기 등을 도끼에게 새겨 넣어야 한다. 정확히 말하면 그러하도록 도끼의 모양이나 크기를 '설계'해야 한다. 따라서 도끼 역시 특정 목적을 이루려는 알고리즘이 구현된 인공지능이다.
컴퓨터로 오면 이 과정이 조금 복잡해진다. 우선 알고리즘을 실제에 구현하려면 반드시 코딩이라는 과정을 거쳐 사람이 알아들을 수 있는 말로 표현해야 한다. 이 과정을 이 업계에서는 '프로그램을 짠다'고 했는데 요즈음은 '코딩한다'고 말한다. 필자도 인공지능을 알기 전까지, 곧 반 년 전까지는 프로그램을 많이 짜봤다. 그런데 인공지능을 알고 나서는 코딩을 잘 안 한다. 인공지능이 다 해주던데? 그래서 필자는 해보질 않아서 코딩이 무엇인지 모른다(?).
프로그램은 사람이 이해할 수 있는 프로그래밍 언어로 작성되지만, 컴퓨터는 이를 알아보지 못해서, 기계(컴퓨터)가 알아듣는 기계어로 번역해 주어야 실행할 수 있다. 그래서 소스코드는 먼저 컴파일되어 목적파일(object file)로 변환된다. 이후 여러 목적파일과 라이브러리를 결합하여 실행파일을 만드는 과정이 필요하며, 이를 일반적으로 링킹(linking)이라 한다. 마지막으로 이렇게 만들어진 실행파일이 메모리에 적재되어 실제 실행하도록 하는 과정이 로딩(loading)이다. 곧 '컴파일'과 '링크' 과정을 거쳐야 비로소 무른모가 된다. 현재 많이 쓰이는 python은 이 컴파일과 링크 과정이 눈에 띄지 않기 때문에 마치 '컴퓨터가 내말을 알아듣는다'고 착각하기 쉽다.
알고리즘의 본질과 컴퓨터의 한계
흔히 '유튜브 알고리즘이 내가 좋아하는 영상을 추천해준다'고 말한다. 엄밀하게는 틀린 말이다. 알고리즘은 영상을 추천할 수 없다. 알고리즘이란 정답을 찾아가는 논리 체계이므로 이것이 구현된 무른모는 그 규칙을 철저히 따른다. 따라서 정답이 무엇인지 미리 알고 있거나 그 무른모가 내는 답이 정답인지 아닌지 사용자가 판단할 수 있는 근거나 방법이 있어야 한다. 곧 알고리즘이 갖고 있는 규칙과 절차를 따라 사람이 직접 계산해 보면 답이 맞았는지 틀렸는지 확인할 수 있다.
그런데 현대 인공지능에 쓰인 알고리즘은 이런 소위 '구식' 알고리즘과는 다르게 그 규칙과 절차가 미리 주어지지 않고 '학습'을 통해 '스스로' 규칙을 찾아내고 절차를 찾아낸다고 한다. 그러나 알고리즘의 본질과 컴퓨터가 가진 성능의 한계를 알면, 이 말이 거짓이라는 것을 금방 알아챌 수 있다.
인공지능은 본질적으로 컴퓨터 무른모이다. 그런데 그 컴퓨터가 주인이 시키지도 않은 일을 '스스로' '학습'하여 해낼 수는 없다. 무른모의 능력은 컴퓨터 본체의 능력을 벗어날 수 없다. 그럼 컴퓨터는 어떤 기계 또는 도구인가? 모든 도구가 그러하듯 제 '스스로' 무엇인가를 할 수 없다. 헛간에 놓인 도끼가 '저절로' 장작더미 위에 놓일 수 없다. 누군가가 갖다 놓았다. 다만 누가 그런지 모를 뿐이다. 전원이 꺼져있는 컴퓨터가 '스스로' 전원선을 전원에 꽂고 부팅을 시작할 수는 없는 노릇이다.
더욱이 컴퓨터는 매우 똑똑해서 쓸모는 있지만 주어진 명령 이외에는 하지 못하는 바보이다. 코딩을 직접 해본 사람들은 잘 안다. 코딩 중 문장 하나에 점 하나만 잘못 찍어도 에러가 난다는 것을. 심지어 인공지능에 가장 많이 쓰이는 Python은 들여쓰기만 잘못 되어도 에러가 난다. FORTRAN 이라는 프로그래밍 언어를 주로 쓰는 필자는 이것이 옛날에는 문제였지만 FORTRAN90에서는 크게 문제되지 않는다는 것을 안다. 그리고 인간은 서로 잘 안다. "여기에 점 하나 안 찍었군. 하지만 상관없어. 뜻을 알아내는 데 문제없어." 그래서 지금 쓰는 이 기사에 오자나 탈자가 있어도 독자들은 잘 알아듣는다. 곧, 개떡같이 말해도 찰떡같이 알아듣는다. 그러나 어떤 알고리즘도, 심지어 인공지능에 쓰이는 알고리즘도 개떡같이 말하면 컴퓨터는 절대로 찰떡같이 알아듣지 못한다.
주어진 명령을 충실히 수행해야 하는 숙명

▲자료사진 ⓒ emilianovittoriosi on Unsplash
여기서 구체적인 알고리즘의 작동 원리를 설명하는 것은 너무 기술적인 문제를 다루는 것이기 때문에 생략하고 알기 쉽게 설명하면 이렇다. 어떤 무른모도 단 하나의 알고리즘으로 만들어지지 않는다. 필요하면 알고리즘 안에 다른 알고리즘이 내포되어야 비로소 제 기능을 내기도 한다. 예를 들면, 방정식의 풀이를 구하는 알고리즘에 뉴턴-랩슨 알고리즘이라는 것이 있다. 이 알고리즘을 구현하려면 미분이라는 수치적 계산을 해야 하는데 이 미분을 구현하는 알고리즘이 뉴턴-랩슨 알고리즘의 한 부분으로 들어가야 온전한 뉴턴-랩슨 알고리즘이 된다.
이같이 하나의 무른모가 만들어지려면 여러 알고리즘이 한꺼번에 사용돼야 하고 심지어는 한 알고리즘 안에 다른 알고리즘을 품고 있어야 한다. 이렇게 보면 알고리즘이라고만 하면 불완전하고 알고리즘 구조체라고 봐야 한다. 마치 낱말 하나를 하나의 알고리즘이라고 본다면, 낱말들이 모여 문장을 이루어 한 뜻을 내고, 그런 문장들이 여럿 모여 문단을 이루며 더 큰 뜻을 내고, 문단들이 모여 절, 장, 그리고 이내 책 한 권이 되는 것과 비슷하다.
개개의 알고리즘은 철저히 설계자가 만들어 둔 규칙과 정해진 절차가 있는데 이 여러 알고리즘을 적절히 잘 배치하면 마치 전체로는 규칙과 절차를 한 알고리즘 구조가 찾아내어 적용시키는 것으로 보인다. 이것은 마치 붉은 악마가 '파도타기 응원'을 하는 것과 같다. 응원단원 개개인은 그저 한번 일어났다 앉았지만, 멀리서 보는 사람에게는 거대한 파도처럼 보인다. 개인은 "옆 사람이나 앞 사람을 곁눈질하여 때가 되면 일어났다 앉으라"는 정해진 규칙을 철저히 따르니까 전체로는 '파도처럼' 보이는 것이다. 같은 줄에 앉아 있던 사람들은 반드시 같은 시각에 일어났다 앉아야 한다는 규칙이 전체 응원단에 하달되어서 지켜져도, 개개인에게 주어진 앞의 규칙이 지켜지지 않는다면, 그 자체가 거대한 파도 모양을 일으키지는 못한다.
어떤 알고리즘도, 아니 알고리즘 구조 전체로도 시키지 않을 일을 할 수 없다. 마치 현대 인공지능이 규칙을 '학습'을 통해 스스로 찾아내는 것처럼 보이지만, 사실은 그 '규칙을 찾는 규칙'이 이미 주어져 있다. 인공지능의 알고리즘 구조체도 알고리즘이므로 알고리즘이 본래 가지고 있는 한계, 곧 주어진 명령을 충실히 수행해야 하는 숙명을 벗어날 수는 없다.
그저 '문장 제조기'일 뿐이다
컴퓨터도 그러하듯이 인공지능 역시 수량화할 수 있는 것만 다룰 수 있다. 따라서 현대의 대규모 언어 모형에 기반을 둔 생성형 인공지능에게는, 언어가 수량화되지 않으면 다룰 수 없다. 인공지능 연구자들이 초기의 굳은모(hardware)로서의 인공지능을 포기하고, 무른모로 관심을 돌렸을 때만 해도 문법을 이용하여 규칙을 미리 주면 된다고 생각했다. 곧 언어의 의미는 수량화가 불가능하지만 컴퓨터가 언어를 낱말 단위 또는 음소 단위로 비교할 수는 있으니 문법을 완벽하게 입력하면 가능하리라 생각했다. 하지만 규칙은 너무 많았고, 특히 규칙이 있으면 그 규칙의 예외가 더 많아지기도 하고, 예외의 예외가 생겼다. 이 시기를 인공지능의 겨울이라 부른다.
그러다 규칙을 '문법'에서 '낱말 사이의 관계'로 바꿔 보는 순간 환한 등불이 켜졌다. 구조주의 언어학에서 낱말의 뜻을 그 자체에서 찾는 것이 아니라 문장이나 문맥 속에서 찾아야 한다는 주장과 맥을 같이 한다. 따라서 문법으로 규칙을 주지 않고 관계에서 그 규칙을 찾을 수 있다면 그 규칙은 수량화가 가능해진다. 어떤 낱말이 다른 낱말과 한 문장에서, 한 문단에서, 한 절에서, 얼마나 자주 같이 쓰이고 어떻게 어울리는지는 수량화가 가능하다.
다만 제대로 하려면 엄청난 언어 데이터가 필요하다. 다행히 인터넷에는 이런 언어데이터가 충분히 쌓여 있다. 이제 이 데이터를 읽어 들여 어떻게 수량화할 것인지만 규칙을 정해주고 그 규칙에 따라 계산시키면 '문법을 닮은' 규칙이 만들어진다. 이 '문법을 닮은' 규칙은 실제로는 거대한 확률 행렬일 뿐인데 우리는 이것을 문법이라 오해한다.
이 과정을 사람이 '문법을 닮은' 규칙을 정해준 것이 아니라 마치 인공지능이 '스스로 학습'하여 얻어냈다고 말하는 것이다. 이 '문법을 닮은' 규칙을 찾아냈다면 이제는 이 규칙을 역이용하여 사용자가 묻는 말에 그럴듯하게 대답을 만드는 것은 그리 어려운 일이 아니다.
이 모든 과정에서 낱말 또는 문장이 갖는 의미는 관심이 아니다. 왜냐하면 '의미'는 수량화되지 않기 때문이다. 그저 출력된 문장을 읽는 사람이 '어, 그럴 듯하네' 하고 고개만 끄덕이면 충분하다. 그래서 인공지능, 특히 대규모 언어모형에 기반한 현대 생성형 인공지능은 그저 '문장 제조기'일 뿐이다.
-
'인공지능이 도대체 뭐야?③'으로 이어집니다.