증거를 보고 범인을 추론할 수 있는가? 그러면 당신은 이미 적분을 알고 있는 것이다.
범인을 보고 증거를 추론할 수 있는가? 그러면 당신은 이미 미분을 알고 있는 것이다.
수학의 핵심은 미적분이라 할 수 있다. 수학 발명 이래 인류가 끊임없이 고민한 단 하나가 바로 미분이다. 시작은 제논 쯤이다. 아킬레스와 거북이의 경주를 보고 말장난을 시작하였다. 이때 제논이 한 말장난은 무엇인가? 바로 차원이다. 언어와 숫자에는 차원이 있는데, 무차원으로 접근하여 말장난을 시전한 게 제논이다. 듣고 있으면 나도 모르게 넘어간다.
구조론의 중핵은 워낙에 여러가지지만 내가 생각하는 중요한 것은 "언어에 차원이 있다"이다. 구조론의 창시자가 언어대마왕인데, 구조론을 제논의 역설에서 크게 착안했다고 하니 왠지 연결이 된다. 근데 "언어에는 차원이 있다"만으로는 이게 왜 중요한지 알기가 어려운게 사실이다. "언어에는 차원이 있지만 티가 나지 않는다."고 말하면 좀 더 그럴듯하겠다.
자주 드는 예시지만, 2m x 1m = 2m^2(제곱미터) 에서 앞의 2와 뒤의 2는 차원이 다르다고 했다. 내가 단위를 써두었으니 잘 보이지만 구구단에는 쓰질 않는다. 그래, 세상이 그렇게 만만한 게 아니다. 저 단순한 사실에서 깨달음을 얻지 못하고 삽질한 수학의 역사가 2,000년이다. 인간이 2,000년 간 삽질했다면 나름 이유가 있는 것이다.
"언어에 차원이 있다"는 것은 곧 "언어에 의미가 있다"로 연결된다. 근대에 러셀을 비롯한 비트겐슈타인 등이 집요하게 파고들었던 언어철학 분야다. 그러면 언어에 의미가 있다는 것은 무엇인가? 그것은 대상에는 쌍과 배경이 함께 있다는 것이다. 2m의 배경은 2m^2이고 쌍은 1m이다. 즉 2m^2 => 2m x 1m 이다. 순서만 바꿨을 뿐 같은 것이 아니냐고 반문하겠지만, 인간이 멍청해서 착각하는 거고, 이퀄은 방향성이 없는 것이 아니다. 연역과 귀납에 방향성이 있는 것과 정확히 같은 이유로 이퀄에도 방향성이 있다.
특히 적분을 해보면 앞뒤 순서가 왜 의미가 있는지 이해할 수 있다. 상수항을 어떻게 처리할 것이냐에 따라서 정적분과 부정적분으로 갈리는 것이다. 당연하다. 어떤 결과의 원인은 여럿일 수 있기 때문이다. 현장에 증거가 있다면 그 증거에 해당하는 용의자는 여럿일 수 있다. 증거를 모으면 모을 수록 용의자는 좁혀질 것이다. 여기까지가 현대의 수학이 접근한 경계선이다.
자 이제 머신러닝을 말해보자. 머신러닝을 이해함에 있어 미분을 꺼내든 이유는 그게 머신러닝의 핵심이기 때문이다. "어떤 결과가 있는데 그 결과의 원인이 뭐지?"를 미적분으로 정형화 한 것이 머신러닝이다. 물론 나는 이것만으로 머신러닝을 인공지능이라고 하기는 불가능하다는 것을 잘 알고 있다. 하지만 앞으로의 인공지능의 등장에 있어 핵심 중 하나를 규정했다는 것은 말할 수 있다.
6이라는 결과를 만들려면 1과 6으로도 2와 3으로도 만들 수 있다. "1과 6의 쌍이나 2와 3의 쌍이 보이면 6이라고 하자."라는게 머신러닝의 "분류"다. 물론 동시에 2와 4는 8을 만들고, 또한 그 이전에 우리는 "2지선다(6 아니면 8)를 풀고 있다"까지 말해야 한다. 객관식(닫힌계) 문제를 풀어보자는 게 머신러닝의 분류라는 말이다. 중간 정리하자. 차원이 있어야 분류를 할 수 있다. 분류가 곧 차원이다. "넌 어느 차원(6과 8 중에)에 속하니?"
머신러닝도 인간과 마찬가지로 증거를 최대한 모으려고 한다. 그게 뭔지를 추측해야 하니깐. 미적분의 연결 도구로 증거와 범인을 열심히 연결한다. 그리고 증거를 모으면 모을 수록 범인은 특정된다. 그런데 문제는 지금 반포한강공원에서 일어나고 있다. 아버지가 친구를 범인이라고 난리 치는 이유는 맥락을 보지 않고 사실만 보기 때문이다. 우리는 세상에 맥락 없는 사실이 어딨냐고 크게 반문해야 한다.
현대의 머신러닝이 딱 여기까지 왔다. 맥락을 해석하지 않고 "순수하게 객관적일 것 같은 맥락(그딴 건 없다만)"만을 다루는 것으로 합의해버렸다. 이른바 P문제에 대한 NP문제의 정의 문제다. P문제는 풀 수 있는 문제이고 NP문제는 풀 수 없는 문제다. 1~10까지의 숫자 중에 하나를 맞추면 열리는 자물쇠가 있을 때라는 문제를 푸는 것이 P문제이고, 1~100을 넣어야 하는지 아니면 알파벳을 넣어야 하는 지도 모르는 게 NP문제이다.
딱 봐도 NP문제가 어렵겠지? NP문제가 바로 맥락을 맞추는 문제다. 어떤 사실이 있다. 근데 그 사실은 관점 혹은 맥락에 따라 달리 해석될 수 있다. 뭐 이런 거. P문제가 맥락이 닫힌 것이라면 NP문제는 맥락이 열려서 뭔지도 모르는 것이다.
머신러닝이 개와 고양이를 구분할 수 있는 것은 그것이 개와 고양이의 증거를 엄청 많이 모으고 이후에 그것의 범인을 개와 고양이로 한정하기 때문이다. 즉 귀납추론을 한다. 중요한 것은 이때 개와 고양이를 용의선상에 두냐, 아니면 다람쥐나 생쥐까지도 용의선상에 두냐에 따라서 결과가 완전히 달라진다는 것이다. 지금까지의 머신러닝은 어떻게든 P문제만을 다루는 것으로 특화되어 왔다. NP문제라면 너무 어렵잖아. 즉 사람이 머신러닝에게 개와 고양이의 둘 중에 하나만 맞추라고 세팅해준다.
이때 용의자의 범위를 어디까지 두지?가 바로 구조론에서 말하는 닫힌계의 설정이다. 닫힌계를 어디까지 설정하느냐에 따라서 사실에 대한 해석이 달라진다. 우리는 문제를 풀기 전에 먼저 닫힌계를 설정한다. 가령 어떤 사람이 만원을 손에 쥐었다. 그 사람의 기분은 어떨까? 이때 "기분이 좋지~"라고 하는게 구조론에서 말하는 자기소개다.
좀 아는 사람이라면 누가 주웠느냐에 포인트를 두고 말할 것이다. 왜 니 기분을 말하냐고!라고 꾸짖는게 구조론이다. 암튼 관점을 제시하면 당신은 베이즈추론을 한 것이 된다. 어떤 수가 있다. 1과 1은 같다. 근데 1/2와 1/3의 의미는 다르다. 이것이 통계학적 사고다. 모집단(분모)의 크기가 다르므로 대상의 의미가 달라진다. 노숙자가 손에 든 만원과 이재용이 든 만원은 의미가 다르다는 것이다. 바로 몬티홀의 딜레마다.
루크스카이워커가 다스베이더의 "I am your father."라는 말을 듣고 멘붕한 이유다. 제국에 맞서온 자신의 삶이 통째로 부정되기 때문이다. 맥락이 바뀌어 버렸다. 이쯤 되면 언어에 맥락이 있다는 게 느낌이 좀 오는가? 이거 장난 아니다. 당신이 느낌이라고 했던 그 모든 사실이 사실은 맥락에 의한 것이다. 당신은 말하기 거시기 한 게 있는가? 보나마나 맥락 때문이다.
문제는 머신러닝이다. 현대의 머신러닝은 만원을 구분함에 있어 노숙자건 이재용이건 구분하지 않는다. 무맥락 같은 걸 하겠다고 설친다. 노엄 촘스키 같은 무맥락 주의자는 좀 닥쳤으면 좋겠다. 뭐, 챗봇 분야에서 맥락분석이라고 해서 살짝 접근은 하는데, 애들 장난도 아니고 너무 대충 건드리고 만다. 우리 좀 진지해지자. 이거 그렇게 간단한 문제가 아니라니깐. 2,000년 해묵은 어려운 문제라고. 쫌.
참고로 알파고
알파고는 바둑판에 놓인 바둑돌을 보고 그것이 어떤 의미를 가진 수인지(이길 확률이 얼마인지)를 과거 경험에 의해 분류하고, 그것의 다음 수를 시뮬레이션(CPU 노가다)한다. 알파고가 어려운 문제처럼 보이지만, 그래봤자 P문제를 푸는 것이므로 쉬운 문제가 된다.(어떤 측면에서는) 적어도 알파고는 지금 자신이 하는 것이 바둑인지 장기인지는 알고 있으니깐. 그걸 모르면 NP문제가 되는 거고.
참고로 기술적으로 자세히 들어가면 강화학습을 하는 알파고는 2단계의 문제를 풀고 있으므로 나름 NP문제를 푸는 것이라고 볼 수도 있다. 이때 말하는 NP문제는 문제 위의 문제를 푸는 것이다. 위에서 예시한 개와 고양이를 맞추는 문제는 지도학습 문제라 P문제이고.
그리고 당신이 지금 머리가 아픈 이유는 나의 글이 NP문제처럼 보여서 그런 것이다. 뭔 개소린가 싶지?