예전에 학부생때 인공지능의 철학을 접한 적이 있다. 핵심은 과연 사람의 지능이란 정말로 인공으로 만들 수 있는 것이냐는 의문이다.
인류는 이미 단순한 자연의 여러 현상들을 충분한 정확도로 예측을 하고 있다. 다만, 그것들이 다양하게 상호 작용하여 누적되면 잘 예측하지 못하기도 한다. 이것은 삼체문제라고도 알려진 복잡계라는 문제가 대표적이다. 그러나 그럼에도 불구하고 현대 과학의 예측 정확도는 놀랍다. 이미 리처드 파인만 교수가 양자전기역학(근본 물질과 에너지를 다루는 이론인)의 실험과 이론사이의 오차가 뉴욕과 오스앤젤레스 사이 거리에서 머리카락 한올 정도의 차이라고 한 말이 유명하다.
개인적으로는 사람의 두뇌에서 벌어지는 일은, 양자역학 계산 정확도에 못미치는 정도의 원리 조합으로도 설명이 되지 않을까 생각한다. 대부분의 생명현상이 분자 수준이면 설명되지 않을까하는 기대다. 물론 이 부분은 아직 정확히 밝혀진 바는 없다. 실제로 인간이 아는 법칙만으로 충분히 인정받을 만한 지능을 구현해낸 적이 없기 때문이다. 의식에 양자역학이 관계된다는 주장도 종종있다. 아무도 제대로 증명하지 못했기 때문에 여러가지 설만 난무하는 것이다.
또 다른 관점에서는 인류는 이미 생명을 만들어내는 설계도인 유전체 정보를 모두 알아낸 상태다. 세포라는 플랫폼만 정확히 컴퓨터로 에뮬레이션 할 수 있다면, 밝혀진 DNA를 통해 과학자는 사람을 그대로 역시 에뮬레이션할 수 있으리라 기대한다. 그렇게 DNA를 통해 사실은 지능을 가진 사람을 에뮬레이션하여 탄생시킬 수 있다. 공각기동대나 여러가지 SF류 들은 이런 것들을 가정하고 있는 셈이다. 그러나 역시 세포를 정확히 컴퓨터로 에뮬레이션 할 수 있냐고 물으면 앞의 답변으로 되돌아간다. 아직 누구도 성공하지 못했기 때문에 역시 설만 난무하는 상태이다.
그러나 현대 과학의 깊이(?)를 믿는 이들은, 지능을 가진 생명체는 이미 현실에 존재하고 그것이 지능을 구현할 수 있다는 증거로 보게된다고 주장한다. 생명체의 지능에 들어가는 알고리즘 중에 현대 과학이 모르는 어떤 기본 메카니즘이 있다고 생각할 만한 것은 아직 없지 않는가라는 주장이다. 양자역학은 이미 충분히 정밀하고 그저 그 상위의 대규모 상호작용에 대한 알고리즘을 모를 뿐이다. 복잡해서 아무도 알아내지 못할 뿐인 상태이고, 사람의 지능을 꽤 잘 흉내내는 여러가지 기술들은 계속 쏟아져 나오고 있지 않는가 하는 것이다.
아직까지는 지능이란 여러가지 통계기술과 수학, 그리고 엔지니어링의 결합으로 구현되고 나타난다. 그리고 사람만큼 여러분야 정보처리에서 예외처리를 잘하는 AI는 아직 없다. 그래도 시간이 지나면 이 기술들은 방법을 찾아내지 않을까.
여기에 개인적으로는 이런 방식으로는 정말 어느 세월에 사람같은 AI가 나오냐 싶기 때문에, 대체로 자연과 유사한 시뮬레이션 프로그램에서 적절히 유전자알고리즘으로 만들어내는게 오히려 더 빠른 방법 아니겠느냐하는 예전 인공생명 류의 주장을 더 믿고있다. 수학적으로 적절히 보장되어 구현가능하면서도 자연을 모사할 수 있는, 정해진 시간안에 돌릴 수 있는 컴퓨팅으로 감당되는 시뮬레이션 체계와 복잡도를 가지고 교배(?)를 통해서 해야하지 않나 싶다.
벌써 십년은 넘게 주장하고 있은데, 진도는 안나가는 아마추어 과학자(?)의 AI 개발 방법론이겠다.
머신러닝에서 정확도, 재현율, 정밀도 이 3가지 값은 모델의 정확함을 설명하는 매우 중요한 지표이다. 그런데! 애석하게도, 상시로 이 지표를 접하지 않으면 그 뜻을 잊어버리기 쉽게 된다. 물론 자주 쓰면 안그러는데, 그렇지 않거나 특정 지표를 오랫동안 안사용하다보면 헷갈린다. 그래서 이 글을 시작해본다.
자 이제 사기꾼을 잡아보자. 어떤 행동을 보고 사기꾼을 잡는 방식이다. 이것을 위해 머신러닝 모델을 하나 만들었고, 1,000명을 검사해서 실제 잘 맞췄는지 아닌지 결과를 확보했다. 이 모델은 얼마나 정확할까?
아주 편안하고 쉽게 이 질문에 답해보면 단순하게 할 수 있다. 정확도(Accuracy)가 그 첫번째 지표이다.
1,000명을 검사했으니 그 중에 몇명을 정확히 맞췄는지 그 비율을 이야기하면 된다.
Accuracy = 정답수 / 전체 검사수
검사 대상 1,000명이 실제 일반인인지 사기꾼인지 알고 있다고 가정하고, 모델이 판정한 결과와 비교해보면 맞은 것과 틀린 것이 있을 것이고, 1,000명 중에 실제 몇 건이 맞았는지 비율을 보면 되지 않겠는가? 그렇게 간단히 끝날 수 있겠다.
그런데 이건, 사기꾼과 일반인이 같은 비율로 존재할 때의 이야기이다. 소위 이야기하는, 분류 문제에서 사전 확률(Prior Probability)이 같으면 문제가 쉽고 지표도 간단하다. 그런데 세상 대부분의 문제에서 이 사기꾼과 일반인의 비율이 많이 다르다.
1,000명 중에 실제 사기꾼이 3명이 존재하는 문제라고 치자. 그러면 이 정확도를 올리기 위해 좀 꼼수를 피워서, 모든 검사 대상을 일반인으로 강제로 판단하게 만들었다고 가정해보자. 이 엉터리 모델의 정확도는 얼마일까?
Accuracy = 정답수 / 전체 검사수 = 997 / 1,000 = 99.7 %
아니 이런! 모든 사람을 일반인으로 판단하는 엉터리를 만들었는데도 일반인이 997명이다 보니, 정확도가 99.7%이다. 무언가 단단히 잘못된 정확성 지표라고 볼 수 있다. 이 모델은 어떤 사기꾼도 잡아낼 수 없는데, 정확도가 99.7%라니! 무능한 모델에게 너무 높은 수치가 주어지는게 아닌가?
그래서 이렇게 소수의 사기꾼을 잡는 문제에 있어서 매우 유용한 지표가 필요하다. 바로 재현율(Recall)이다. 이 녀석은 전체 사기꾼 3명 중에 몇명을 실제로 사기꾼으로 판정하느냐를 나타낸다. 전체 검사수에서 사기꾼이 적다는 점을 이용해 엉터리로 모든 검사 결과를 일반인으로 판정해버리는 모델을 골라내는 지표이다. 이를 정의하는 것은, 앞서 전체 사기꾼 중 몇명을 실제로 잡느냐로 나타내면 된다. 전체 사기꾼 중에 아무도 못잡으면 바로 0%가 되는 지표이다.
Recall = 찾은 사기꾼 / 전체 사기꾼
이제 조금씩 어려워진다. 1,000명 중에 실제 사기꾼이 3명인데, 어떤 모델로 검사를 했더니 900명은 일반인으로 판정했으나, 그 중 1명은 사실은 사기꾼이었고, 100명은 사기꾼으로 판정했는데, 그중 98명은 일반인이었다고 치자. 그러면 이 헷갈리는 상황을 아래의 4종류의 수치로 간결하게 분할 할 수 있다.
여기 Recall을 구해보면
Recall = 사기꾼이라 판정 / 실제 전체 사기꾼 = 2 / (2+1) = 약 66%
이 된다. 이 모델은 Accuracy는 (2+899) / 1,000 = 90.1% 이면서 Recall은 66%인 모델이다.
그러면 이 모델의 판정기능을 좀 조율하면 어떤 일이 벌어질까? 예를 들면 사기꾼을 좀더 일반인으로 판정해버리는 것이다. 대충 사기꾼이어 보여도 무시하고 일반인으로 판정해주자. 그러면 Accuracy는 올라가고 Recall은 떨어질 것이다. 즉, 모델 튜닝에 의해 이 2가지 값은 서로 반대로 향하게 된다. 그래서 이 수치를 밸런싱하는 작업도 또한 모델 튜닝의 중요한 작업이다.
그런데 이 상황에서 우리가 이 모델을 가지고 실제 일을 할때 경험하는, 현실에 계속 마주하게 되는 또다른 수치가 하나 있다. 바로 사기꾼이라고 검출한 것 중에 과연 얼마나 실제 사기꾼일까 하는 비율이다. 왜냐하면, 일단 모델이 일반인으로 분류된 사람들은 집에 보낼테고, 사기꾼이라고 분류한 사람들 중에 세부 검사를 하게 될테니까 말이다. 실제 이 모델은 그렇게 쓰이는게 일반적이다. 그래서 이 수치가 매우 높으면 거의다 사기꾼이 맞기 때문에 골치아픈 일이 적다. 그런데 이 비율이 낮으면 대부분 잘못 판정한 것이기 때문에 고생을 하게 될 것이다. 바로 이 수치가 정밀도(Precision)이다.
Precision = 실제 사기꾼으로 잘 판정된 수 / 사기꾼이라 판정 = 2 / (2+98) = 2%
그렇다 위 모델은 정확도는 90.1%로 뭐 그럭저럭 나와보이고, Recall은 66%로 전체 사기꾼 중에서도 꽤 잡아내지만, 실제 우리가 일할때는 2%의 Precision을 가지는 형편없는 모델인 것이다. 막상 사기꾼이라고 100명이나 나왔는데, 그 중에서 2명만 실제 사기꾼인 그다지 쓸모가 없는 모델이다.
이 세가지 수치가 모델을 평가하고, 실제 일을 할때 중요하게 다뤄지는 정확도에 관한 수치이다. 그러면 이걸 통계학에서 들었던 것과 매핑해서 다시 정리해보면 어떨까? 위 1,000명의 전체 결과 지도를 그대로 매핑해서 나타내보자. 이것이 바로 우리가 통계학에서 배웠던 TP(True Positive), FP(False Positive, Type II Error), FN(False Negative, Type I Error), TN(True Negative) 이며 아래가 바로 그 값들이다. 그리고 그 정확성을 나타내는 지표를 각각 옆에 나타내었다.
이렇게 기억을 해보자. Accuracy+Recall과 그 다음 실제 일을 할때 마주하는 Precision말이다.
그리고 보너스가 있다. 바로 F1 score인데, 이 값은 Precision과 Recall의 조화평균이다. 그렇다. 일반인이 일반인으로 잘 판정되는건(True Negative) 관심도 없고, 다만 나머지들을 가지고 만든 지표 둘인 Precision과 Recall이 조화를 이룬 수치다. 지나고 나면 이 사기꾼 잡는 모델에 있어서 Accuracy는 제일 관심없는 정확성 지표일지도 모르겠다.
다음은 책 수학재즈(에드워드 B. 버거, 승산출판사)에 나오는 카오스 이론의 소개이다. 이 작가는 카오스 이론을 엑셀로 직접 보여주며 알려준다. 사실은 수학에서의 카오스 이론은 단순한 법칙이 지속 반복해서 적용되었을 때의 놀라운 복잡성에 대한 이야기인데, 여기서는 아래 계산을 반복한다는 점을 우선 이야기해보자.
다음값 = 직전값*직전값 -2
그리고 엑셀에 이 값을 넣어서 흔히 하듯이 표와 식을 만들어 계산해보면 아래와 같은 결과를 얻을 수 있다. 초기값을 0.5로 잡아보자. 첫번째 계산 탭에서는 단계가 커질 수록 그 반복 계산 값이 나오는데, 이때 특이한 것은 두번째 계산이다. 15단계에서 첫번째 계산의 결과값을 오른쪽 컬럼에 옮겨적고 동일한 계산을 이후로 같이 반복해보자.
그런데 놀라운 일이 벌어진다. 49단계 정도까지 가면, 이 최종 계산의 결과가 달라진다. 물론 앞에서도 조금씩 달라지긴 했는데, 마지막에는 전혀 다른 값으로 변한다. 대체 왜일까? 엑셀의 버그인가?
신기하게도 이 유사한 고민을 기상학자 로렌츠도 했었고, 그는 그 연구 결과를 가지고 카오스의 아버지로 불리게 되었다.
이렇게 값이 틀어지는 이유를 간단히 먼저 설명하면, 사실 저 15단계의 옮겨적은 값은 컴퓨터 메모리상에서는, 아주 작지만 서로 차이를 가진다. 엑셀은 소수점이하 값을 표기할때 특정 유효숫자 이하는 가리고 보여주는 정책을 가지고 있기 때문이다. 그래서 아마도 저 값은 1.52216347xxx.. 처럼 xxx에 숫자가 더 있을테다. 그런데 화면의 값을 보고 옮겨적인 수치는 정확히 1.52216347값이 들어가겠다. 그리고 이 작은 차이값은, 소위 되먹임 계산을 반복하면서 점점 큰 차이를 내며 49단계 정도에서는 아예 서로간 다른 계산 값을 보여주게 된다. 이것이 바로 날씨를 제대로 예측하기 어려운 현실에 대한 수학적 이해이다. 매우 작은 값의 차이고 얼마간 되먹임을 반복하면 전혀 다른 상황이 되는 것이다.
즉, 북경의 나비의 날개짓이 결국에는 뉴욕에 태풍을 불러 일으키게도 할 수 있다는 말의 실제 메카니즘이다. 되먹임 계산들은 흔히 저렇게 단순한 계산(이전 값을 두번 곱해서 2를 빼는 정도라도)임에도, 마치 불규칙해보이는 것처럼 작은 초기값 차이에도 결과값이 크게 바뀌게 되기 때문이다.
그리고 이 소개를 하는 이유는 이 근본에 숨어있는 결국은 무한에 대한 내용이다. 상기 되먹임 계산이 정확히 재현되기 위해서는 소수아래에 무한한 정확도를 지녀야만 함이 자명하다. 계산을 반복할 수록 소수점 아래의 정보들이 더 길게 커지기 때문이다. 위 계산에서도 0.5가 한 단계를 지나 -1.75가 되고, 그 다음은 1.0625가 된다. 몇 단계 가지않아 소수점 아래 자리수들은 엄청난 자리수로 늘어나게 된다. 그리고 이 엄청난 자리수는 역시 조금만 생략 되어도, 몇 단계 후의 결과를 완전히 뒤바꿔버린다. 자연이 계산을 할때 곤란한 경우가 되겠다. 왜냐하면 처리해야하는 계산이 지속 기하급수적으로 늘어나기 때문이다. 게다가 대충 생략해도 결과가 완전히 바뀐다.
양자역학에서는 이미 플랑크 상수라는 물리량의 최소 단위를 정의하는 값이 존재하기는 하지만, 이 현상들은 재미있는 실험의 가능성을 상징한다. 어떻게든 유효 자리수에 대한 내용을 이런 일정한 되먹임 계산을 통해서도 입증할 수 있지 않을까? 과연 자연은 이 과정을 어떻게 처리할까? 절대온도 0도에서 발생하는 다양한 현상들로 되먹임을 일으키는 현상을 만들고 한참동안 지켜보면 어떨까 하는 상상이다.
수학적인 계산에 의해 자연이 작동한다고 믿게 되면 이런 여러가지 재미있는 질문을 던질 수 있게 되는 것같다. 카오스에 대한 재미있는 설명(엑셀을 도입한!)이라 옮겨 실어본다.