<논리적 글쓰기> 수업의 일환으로 작성한 글입니다.
컴퓨터 과학에는 여행하는 외판원 문제(Travelling Salesman Problem)라는 유명한 난제가 있다. 요즈음에는 외판원을 자주 보기 힘드니 택배 기사 분들에 대입해서 생각해보자. 택배 기사 A씨가 오늘 배달을 위해 들러야 할 곳은 총 열한 군데다. 어떤 집부터 찾아가는 것이 가장 효율적일까? 이렇게 모든 지점을 방문하고 돌아오면서 전체 거리가 가장 짧은 경로를 찾는 것이 이 문제에서 주어진 목표다. 겉으로 보기에는 굉장히 단순한 이 문제가 지금껏 수많은 연구자들의 도전에도 완벽히 풀리지 않았다는 것은 놀라운 일이다. 그 이유는 바로 우주에 존재하는 별보다 더 방대한 크기의 ‘가능성’ 때문이다. 열한 지점을 방문하는 순서를 결정하는 방법에는 11 팩토리얼로 (1부터 11까지의 자연수를 모두 곱한 것) 총 4000만 개 정도의 가능성이 존재하고, 방문 지점이 100개, 1000개로 늘어나면 경 단위를 한참 넘어가게 된다. 아무리 빠르고 좋은 기억력을 가진 컴퓨터라고 하더라도 이러한 가능성을 모두 확인해서 최적의 답을 찾는 것은 불가능하다.
컴퓨터에 대한 관심이 높아진 요즘, 많은 이들에게 알고리즘이라는 단어가 그리 낯설지는 않을 것이다. 하지만 여전히 알고리즘이라는 단어에서 사람들이 먼저 연상하는 것은, 항상 정확한 답을 도출하는 명확한 풀이다. ‘신호등이 빨간 불을 밝히고 있으면 멈추고, 초록 불을 밝히고 있으면 직진하라’ 와 같은 일련의 명령처럼 말이다. 하지만 앞서 소개한 외판원 문제와 같은 경우, 수많은 천재들의 노력에도 불구하고 우리가 살아있는 동안 풀 수 있는 알고리즘은 도저히 찾아낼 수 없었다. (심지어 이런 알고리즘이 존재하느냐, 존재하지 않느냐에 대한 증명에 성공하는 사람에게 700만 달러의 상금이 걸려 있다) 그럼에도 정확한 해를 찾기 힘든 이러한 종류의 문제가 점점 더 많이 발견되었고, 반도체 회로를 설계하거나 항공기의 스케줄을 계획하는 것과 같이 이 문제의 해답을 통해 당장 비용 절감이 필요한 분야가 생겨났다. 마침내 과학자들은 대안으로, 최대한 ‘정답에 가까운 값’을 탐색하는 휴리스틱 알고리즘을 고안해냈다.
인간의 불완전한 직관과 제한된 계산 속도를 보완하기 위해서 컴퓨터가 발명되었지만, 이제는 반대로 다시 인간의 직관을 모방해서 알고리즘이 만들어진다. 휴리스틱이라는 말은 본래 심리학자들이 사람들이 자신의 인지적 한계 내에서 사용하는 어림짐작을 일컫는 말이다. 불충분한 시간과 정보의 한계 속에서도 어림짐작을 통해 비교적 합리적인 답에 도달할 수 있는 것이 인간의 사고 방식이 가진 장점이고, 이를 컴퓨터의 연산 과정에 적용한 것이 휴리스틱 알고리즘이다. 예를 들어, 택배 기사가 현재 자신의 위치와 가장 가까운 곳을 다음 행선지로 선택하는 것과 같이 직관적이고 즉각적인 해결책을 도입하는 것이다. 물론 이렇게 움직인 결과가 가장 짧은 경로를 이룬다는 보장은 없다. 그러나 컴퓨터의 이점은 인간에 비해 훨씬 더 많은 시도를 할 수 있고, 이미 얻은 답을 빠르게 개선할 수 있다는 것이다. 수십, 수백 명의 ‘가상 택배 기사’들을 만든다면 그들이 처음의 경로를 조금씩 수정해나가면서 더 좋은 경로를 찾아나가는 것을 관찰할 수 있다. 복잡한 문제에서 직관에 의한 답은 필연적으로 오류를 내포하지만 오류가 있다는 것을 인식하고 시행착오를 반복한다면 오차는 무시할 수 있을 만큼 줄어들 것이다. 그 결과, 우리는 평생 동안 정확한 답을 얻지 못한다고 여겨지는 난제에 대해서도 충분히 가치있는 근사해를 구할 수 있다.
사실 휴리스틱 알고리즘의 핵심이 되는 시행착오의 과정은 생각보다 간단하다. 현재 경로에 포함된 방문 지점들 중 몇 개만 골라서 순서를 바꿔보거나, 지금까지 찾은 비교적 짧은 경로 두 개를 골라서 섞기도 한다. 현재까지 주어진 답을 ‘현명하게’ 변형하고 조합해서 점점 더 짧은 경로를 만들어나가는 것이다.
이렇게 인간의 장점을 십분 활용하려는 컴퓨터 과학의 발전 방향과는 반대로, 우리는 더 많은 것을 배울수록 직관에 대한 불신이 깊어진 채 융통성 없는 구식 컴퓨터가 되어 가는 것 같다. 틀릴 수 있다는 사실을 알기 때문에 지나치게 두려워하는 것이다. 논리적인 과정을 거쳐 나온 것이 아니라는 이유로 우리는 머릿속에 떠오르는 수많은 질문과 아이디어를 검열하고 억압한다. 충분히 괜찮은 답이 될 수 있었음에도 불구하고, 어떤 형태도 갖지 못한 채 허물어진 생각들이 의식의 소각장에 쌓이고 있었던 것이다. 그러나 휴리스틱 알고리즘의 동작 과정처럼 우리의 직관이 시행착오와 결합했을 때의 잠재력은 무궁무진하다. 한 번의 시도로는 결코 최선에 바로 도달하지 못할 문제들이 있고, 여기에 답하기 위해서는 휴리스틱 알고리즘을 다시 우리의 사고로 되돌려놓을 수 있어야 한다.
머릿속에 떠오른 날것의 생각을 먼저 꺼내보고, 서툴지만 형체가 있는 언어로 표현해보는 연습이 필요하다. 그 뒤에 따라오는 시행착오를 필연적인 것으로 받아들이고, 그런 시행착오 과정 자체를 발전시키는 것이 이제부터의 공부다. 나의 직관이 제시한 답에서 어떻게 조금씩 더 나은 답으로 옮겨갈 수 있을지, 그렇게 생각을 올바른 방향으로 수정할 수 있는 보편적인 도구를 갖기 위해 고민해야 한다는 것이다. 한 가지 도움이 될 만한 조언은 이런 시도가 개인이 아니라 팀의 단위에서 이루어진다면 더욱 이상적일 것이라는 사실이다. 팀의 단위에서 휴리스틱의 힘은 더 강해진다. 정확히는 새로운 것을 제안하고 시도하는 데에 열려 있고 실패에 관대한 분위기, 그리고 잠재적 문제를 지적하고 실수를 인정할 수 있는 구성원들이 모인 공간에서 말이다. 처음부터 성숙한 통찰을 내놓아야 한다는 강박으로 고통스러워할 필요는 없다. 불완전하지만 다양한 개인들이 가진 날것의 생각들을 조합하고 개선하면서, 우리는 마침내 더 의미있는 답을 발견하게 될 것이다.