머신러닝AI2022. 8. 27. 01:23

 머신러닝에서 정확도, 재현율, 정밀도 이 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종류의 수치로 간결하게 분할 할 수 있다.

 

1,000명을 판정한 전체 결과 지도

여기 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) 이며 아래가 바로 그 값들이다. 그리고 그 정확성을 나타내는 지표를 각각 옆에 나타내었다.

 

1,000명을 판정한 전체 결과 지도에 대한 통계학의 수치?

 이렇게 기억을 해보자. Accuracy+Recall과 그 다음 실제 일을 할때 마주하는 Precision말이다.

 

 그리고 보너스가 있다. 바로 F1 score인데, 이 값은 Precision과 Recall의 조화평균이다. 그렇다. 일반인이 일반인으로 잘 판정되는건(True Negative) 관심도 없고, 다만 나머지들을 가지고 만든 지표 둘인 Precision과 Recall이 조화를 이룬 수치다. 지나고 나면 이 사기꾼 잡는 모델에 있어서 Accuracy는 제일 관심없는 정확성 지표일지도 모르겠다. 

반응형
Posted by 작동미학
머신러닝AI2022. 1. 9. 17:03

지능 문제의 대표적인 격인 예측 이야기를 해보자.

이 문제의 본질은 이렇다.

 

A. 무언가 정답을 내는 함수가 있다. 예를들면 자연이나, 주식시장의 실제 내일 가격치다. 여하튼 그 시점이 되거나 상황이 되면 진실의 값이 나온다. 통계에서는 이를 '모분포'라고 말한다. 우리가 알고 싶은 진리이며, 실제 세상이다.

 

B. 과거에 그 정답이라고 믿어지는 기록, 즉 과거의 데이터가 존재한다. 옛날에 이런 상황이었을때는 답이 이랬어 하는 기록이다. 미래의 값은 발생해야 알 수 있지만 과거에 적어놓은 값은 존재할 수 있다.

 

C. 예측의 본질은 어떤 장치를 만들어서 지금 예측해야할 조건 값들이 나온 경우에, 과거에 그러한 조건에서 어떤 정답이 나왔었는지 가장 가까운 것을 찾아 답을 내는 일이다.

 

이 A,B,C는 x라는 조건 혹은 입력값 이 있을때 y라는 예측 값을 구하는 문제에서 f(x) = y 라는 함수를 찾는 문제로 설명할 수 있다. 수학에서는 지극히 전통적이고 일반적인 설명 중의 하나이다.

 

A. F(x)라는 정해진 함수가 존재한다. 이것이 정답을 내는 함수이며 우리가 알아내야할 모분포이며 정답의 패턴이며 구하고자 하는 자연 혹은 주식시장의 값을 내는 패턴이다.

 

B. x' -> y' 라는 과거의 데이터가 존재한다. 물론 유한한 수 만큼만 존재한다.

 

C. 이제 x''라는 값이 나오면 F(x'')가 무엇이 될지 이 B의 데이터가 예상해주는 F(x)의 유사함수인 f(x)를 찾아서 그 값을 구하는 문제이다.

 

언급했듯이 이 틀은 아주 오래전에 모두 잘 정의되어 있고, 대부분의 예측의 문제는 이 틀을 유지한다. 그리고 통계학에서는 영민하게도 우리가 관측한 값의 오차까지 고려한다. B에서 기록할때 혹은 관측할때 오류가 발생하기 때문이다. 답을 거꾸로 적기도 하고 측정을 잘못 하기도 한다. 여하튼 이런 구조를 통해 인간의 지능 말고도, 온 우주의 외계인의 지능 모두를 근사해낼 수 있다. 물론 여기에 여러가지 다른 기술이 필요할 수도 있다. 지능이란 예측 말고도 무언가 다양한 추상화 과정을 담고 있긴 하다.

 

그러면 이 문제의 틀에서 인간의 지능이란 어떤 것일까?

 

무언가 관찰/학습하여 모분포를 예측하여 결론을 내리기는 하는데, 통계학에서 이야기하는 것 외에 무언가를 미리 가지고 있다.

 

통상의 문제에 통계적인/머신러닝 방법으로 예측기를 만들기 위해서는 엄청난 데이터가 필요하다. 왜냐하면 자연에서 인간이 예측해야하는 F(x)라는 녀석이 상당히 복잡하기 때문인 것도 있다. 오히려 어떤 상황을 관찰해야하는지도 정하기 어렵다. 그리고 이 F(x)라는 것은 시대에 따라 달라지거나 타이밍에 따라 달라질 수도 있고, 어떨때는 심지어 무작위(random)로 보일 때도 있다.

 

그런데 인간은 최소한의 관찰결과만을 가지고 어느 정도 효과적인 f(x)를 만들어내는 것처럼 보인다. 어찌보면 전이학습이라고 일컬어지는 것일 수 있겠다. 그것을 무엇이라 불러야 될지 모르지만, 예를들면 우리가 글자를 구별해 낼때 인간은 그 글자의 일부가 가려져도 예측해내거나 여러가지 추론을 통해서 알아내기도 한다. 그 문제와 당면한 다른 지식들도 사용한다. 그리고 이 모든 과정이 조화를 이루는 경우가 많다. 즉 통계에서 표현하는 하나의 예측기라기 보다는 무언가 근원적인 예측기가 존재하고 이 예측기가 다른 예측기를 보좌하고 그것들이 합산된 예측기가 작동하는 형태이다.

 

따라서 어찌보면 예측기의 효과적인 학습 방법에 대한 연구보다는(신경망의 효율적 학습방법은 아직도 수많은 논문의 해결 대상이다) 이러한 기저에 있는 예측기와 이것들이 어떻게 자유자재로 합치는 지에 대한 연구가 오히려 인간의 예측을 모방하는 전단계가 될 수 있다. 그러면 과연 무엇을 유전자에 각인시켜 학습시켜서 태어나는 것인가?

 

 자연이라는 수학기계 속에서 발생하는, 진화과정에서 오래 분명하게 된 것들을 학습하고 있을 것이다. 중력이나 포물선 운동, edge에 대한 처리나 여러가지가 아닐까? 그리고 개체관의 관계에서 얻어진 여러가지 게임이론이 아닐까?

 

 따라서 인간의 지능 문제를 풀기 위해서는 이러한 진화론적 시뮬레이션이 필수라고 생각한다. 그것은 자연을 닮아야 한다. 왜냐하면 우리네가 필요한 대부분의 예측도, 그것이 카오스/복잡계가 낳는 임의적인 것처럼 보인다고 해도, 일정 수준의 자연법칙하에 진화에 바탕하기 때문이다. 무엇이든 인간의 지능을 추구한다고 하면, 이러한 기저의 예측기들이 무엇인지 어떻게 조화되는지, 자연을 닮은 시뮬레이터 속에서 우리가 가진 오감들을 반영하고 그에 기반하여 실험하거나, 그와 수학적인 등가의 무엇을 추구해야 하지 않는가

 

반응형
Posted by 작동미학
머신러닝AI2021. 1. 7. 23:54

재미있는 기사를 읽게 되어 소개해본다.

 

www.aitimes.kr/news/articleView.html?idxno=18835

 

KAIST 백세범 교수 연구팀, 데이터 학습하지 않은 심층신경망에서 고등 인지 기능 자발적 발생 원

KAIST(총장 신성철)는 바이오및뇌공학과 백세범 교수 연구팀이 학습 과정을 전혀 거치지 않은 신경망에서 고등 시각 인지 기능이 자발적으로 발생할 수 있음을 증명했다.이번 연구 결과는 신경망

www.aitimes.kr

 

논문을 읽어볼 수는 없었지만, 결론을 내려보면 "심층신경망 시뮬레이션 연구를 통해 모든 연결 가중치가 무작위로 초기화된 신경망에서도 `계층 구조'와 무작위적 피드 포워드 연결만 형성된다면 특정 수량에 선택적으로 강한 반응을 보이는 신경망 유닛들이 자발적으로 생성"된다고 쓰고 있다.

 

조금더 설명해보면, 계층 구조와 피드 포워드 연결만 가지고 있는 신경망이라면 그 가중치를 임의로 주어도 무언가 이 녀석이 특정 판단을 하는 인식기가 되기 쉽다(?)는 이야기이다. 특별히 무언가를 학습시키지 않아도 그렇다는 말인데, 이 이야기는 신경망이라는 구조 자체가 우리가 흔히 이야기는 '지능'이라는 성격을 갖기 쉬운 구조라는 말로 바꾸어 이야기할 수 있다.

 

진화관점에서 바라보면, 원시적으로 외부에 대한 센서 역할을 하는 세포가 정보를 특정 세포에 전달하여 반응을 조절했는데, 이 특정 세포군이 신경망 형태를 띄게 진화를 했다고 치자. 그러면 이 신경망 형태의 세포군들은 무언가 지능적인 판단이 가능했을 수 있다. 그러면 이제 간단하게 이런 신경망 형태의 중간 조직을 가진 생명체가 돌연변이로 나타나면 그 중에 일부는 좀 쓸만한 인식을 했겠다. 그러면 곧바로 살아남게 되고 이런 일이 가속되는 것이 가능하다는 이야기다.

 

바꾸어 말하면 우리 인간이 지능이라고 표현하는 것들은 사실은 이 신경망이라는 구조가 만들어내는 무언가 추상되게 일관된 인식기 같은 것일지도 모른다는 말로 또 다르게 말해볼 수 있다.

 

예컨데, 이런 신경망 구조를 별도 학습도 없이 임의의 가중치로 여러개 생성시켜서 사실 유전자 알고리즘 같은 것으로 계속 선택하여 바꾸면서 적합성만 평가해줘도, 어느 순간에서인가는 고등한 생명체가 탄생할 수도 있다는 가능성을 알려주는 연구라고 할 수 있지 않을까?

 

실험적으로도 수학적으로 후속으로 여러가지 시도해볼 것이 많은 재미있는 연구가 아닐까 싶다.

반응형
Posted by 작동미학