인공지능? 평균지능의 자동화 작업일뿐

2927

어느 VC 지인이 아래의 신문 기사를 보여주면서 가능한 이야기냐고 묻더라.

(Source: TheNextWeb.com)

인공지능이 기계 결함을 “듣고” 그 문제를 지적할 수 있다는 글이다. 교량이 무너질 것 같고, 긴 쇠파이프가 문제가 있는 것 같을 때, 사진처럼 전파로 확인하는 기계를 들고 돌아다니면서 마치 의사가 사람 몸에 청진기 쓰듯이 쓰는 것이다.

당연히 안 될 이유가 없다.

근데, 말처럼 그렇게 쉽게 되지는 않는다.

오늘 글을 한 줄 요약하자면, 청진기 하나만으로 사람의 모든 질병을 싹 다 파악할 수 있는 의사가 있을까, 그걸 기계에 다 입력해서 구현해놓으면 정확도는 인간이 더 높을까, 기계가 더 높을까는 질문이 될 것 같다.

 

Anomaly Detection

위의 내용은 파비의 데이터 사이언스 강좌의 Anomaly Detection에서도 다르는 내용이다. 데이터가 주어져 있다면, 정상인 99.99%의 데이터를 바탕으로 정상 모델을 만들고, 그 정상 모델이 0.01%의 비정상을 비정상이라고 잡아낼 수만 있으면 괜찮은 Anomaly Detection이라고. 다른 일반적인 0/1 찾는 Classification 모델들과 다른 점은 정상 데이터만 넣은 모델을 쓴다는 점, Imbalanced data를 쓰기 때문에 생기는 문제를 해결하기 위해서 여러가지 Cheating을 쓸 수 밖에 없다는 점을 받아들이는 정도일 것 같다.

어차피 높은 정확도가 나오기 어려운 작업이기 때문에, Anomaly 케이스들을 많이 모으는데 집착하는게 아니라, Normal인 케이스들을 많이 모아서 Anomaly가 std.dev 값이 높게 나오도록 만드는게 더 합리적이라는 것 정도는 아마 교과서에서 충분히 찾아볼 수 있을 것이다.

(Note: 파비 데이터 사이언스 강의 자료)

Data pre-processing

이 작업의 가장 큰 문제는 데이터 전처리에 있다. 위와 비슷한 기계 결함 확인하는 신호 데이터들은 시계열과 비슷한 Sequence 데이터일 확률이 높다. 어떤 파장의 전파를 쏘고, 그 전파가 매질을 뚫고가는 속도를 보는 지진파 (S파, P파)가 좋은 예시가 될 것이고, 미세 진동을 인지하기 위해서 초음파 반응을 보는 경우도 있다. 기계 분야 전문가가 아닌 관계로 줏어들은 지식은 부족하지만, 교육받은 인간이 할 수 있는 생각이라는게 어차피 큰 틀에서 비슷할 것이기 때문에, 파장/파동 형태의 데이터를 처리하는 작업일 것이라는데는 큰 의구심이 없다.

문제는, 파장형태의 데이터가 그렇게 깔끔, 간단하게 나오질 않는다는거다. 인간이 만든 기계가 쏘고 받는 데이터는 언제나 1-point들을 여러개 결합한 방식인데, 자연적으로 생겨난 파장은 연속된 값이다. 10개 포인트로 짐작한 데이터의 Sequence가 실제 Sequence와 비슷할 확률은 얼마나 될까? (물론 많은 비용을 들여 데이터 수집 Frequency를 높이면 정확도는 올라간다.)

더 큰 문제는 이런 데이터에 수 많은 Noise가 있다는데 있다. 파장 하나만 쏘고, 하나의 반응 값만 받을 수 있으면 굉장히 간단할텐데, 실제 업무 중에는 수 많은 Noise 데이터가 뒤섞일 수 밖에 없다. 주변의 모든 Noise를 없앤 실험실에서 작업하는게 아니기 때문이다.

학부 교과서 수준에서 Kalman filter라는게 있고, Sequence 데이터 처리 게임에 뛰어들면 이런 종류의 Filter는 헤아릴 수 없이 많다. Sequence 데이터가 AR(2) 정도라고 생각하면, 경제학에서 VAR을 이용해서 그 AR의 효과를 상각시키며 시계열 데이터를 처리하는 방식이 있고, 공학에도 거의 같은 방식으로 AR 구조를 Vector화 시키고 여러개 Vector를 행렬로 묶어 처리하는걸 봤었다. (학문 연구 방법은 다들 거기서 거기다.)

근데 이렇게 오차 부분을 정리하면 깔끔하게 Sequence만 남을까? 실제 데이터를 그렇게 깔끔하게 정리할 수 있으면 기적이다. Filter를 써서 처리한다는건 단지 평균적으로 처리할뿐, 모든 데이터 포인트 각각에서 완벽하게 오차를 정리하는 작업이 아니기 때문이다.

(Note: Kalman Filter 방정식)

AI 추종자들의 착각

인공지능에 맹목적인 추종을 하는 분들은, 저런 것도 “딥러닝”이라는거에 집어넣으면 그냥 알아서 척척척 찾아주는거 아니냐고 하던데, Neural Network의 논리 구조를 이해하는 분들은 감을 잡겠지만, 오차 투성이 데이터 넣고 feed-forward, back-propagation 배치 몇 번 돌고나면 모델이 learning하는게 아니라 noise 값들 때문에 unlearning 하는 상황 (속칭 꼬이는 상황)에 직면하게 될 것이다. 답답한 질문을 받는 경우가 많아서 Non-stationarity가 섞인 데이터에서 모델 “학습”이 무의미하게 작동하는 예시를 수업에 넣어놨는데, Neural Network 모델이 Logit + Tree 일 뿐이라는 사실을 인지하신 분들은 이해하고 받아들이시는 걸 보고 반가웠었다.

운이 좋아서 noise 제거가 잘 되는 모델이 나왔다고 해 보자. 저렇게 “Learning”한 값들을 다른데도 마구 갖다 쓸 수 있을까? 당장 Noise가 있었던 공간이 달라지면 Noise 형태가 달라질텐데? 목소리 인식같이 비슷한 패턴을 잡는 작업을 하는게 아니라, 0.01%의 Anomaly를 잡아내려는데 처음보는 Noise가 들어가 있다면?

모르긴 몰라도, 공장 안의 기계라고 했을 때, 날씨, 기온, 습도, 배치된 인력 숫자, 공장 가동률, 주변 다른 기계 작동 여부 등등 수 많은 Noise 요소에 영향을 받을 것이다. 믿기 어렵겠지만 인간의 언어는 꽤나 패턴이 분명한 파동이다. 공장의 기계 설비들은 어떨까? Noise 제거를 위해 수 많은 Filter들이 괜히 나온게 아니다.

(Note: 데이터 사이언스 강의 자료)

사진 필터

인XX그램에는 수십개의 사진 필터가 있다. 여자 분들께 인기 많은 아이폰 사진 어플들을 보면, 필터들 때문에 그 사진 어플을 쓰는구나는 짐작이 갈만큼 특이한 종류의 필터들이 많다. 이 필터들은 어떻게 만드는 걸까?

그냥 개발자한테 만들어 달라고 하면 되는거 아닌가요?

IT업계에서 개발자가 하는 거의 대부분의 일은 남들이 해 놓은 Library를, 그 중에서 오픈소스로 공개해놓은 Library를 “갖다쓰는” 작업이다.

그럼 새 필터는 어떻게 만드는걸까?

사진 필터는 어떤방식으로 만들어지는지 간단하게 한번 정리해보자.

위의 강의노트 일부를 보면 알겠지만, 결국 이미지 인식할 때 쓰는 3×3 윈도우 같은데에 0~1 사이의 특정값을 넣고, 행렬 곱셈 연산 및 Pooling 작업을 하는게 바로 필터가 적용되는 방식이다.

특정 필터가 어떤 효과를 줄 것이라는건 결국 어떤 행렬을 쓰는가에 달려있다.

강의노트에 넣어놓은 기본 필터들을 바탕으로 어떤 범위의 값을 넣으면 어떻게 되겠지라는 감은 잡을 수 있긴 하겠지만, 행렬 연산이라는게 그렇게 간단하지 않다. 고교시절 3×3행렬 곱셈을 한번만 해 봤어도 이해하실 것이다.

아마 어떤 range의 값을 잡고나면, 그 range를 좁혀보는 수 많은 trial-and-error를 인간의 눈으로 확인하는 작업이 있을 것이고, 색상별로 원하는 형태로 나오는지 가늠해보려고 색상이 다른 그림들, 다양한 색상 조합이 된 그림들을 넣어가며 비교 대조하는 작업들이 따라올 것이다.

결국 수학적인 허들을 넘고나면 그 다음부터는 “노가다” 작업이 된다. 그 “노가다”를 줄이려면 어떻게 해야될까? 아마 색상의 RGB값 조합이 만들어내는 색상 및 그 상호조화에 대해 매우 많은 “도메인” 지식이 있는 분들이 뛰어난 성과를 보여주실 것이다.

데이터 사이언스라는게 도메인 지식과 수학 지식의 결합이라는게 바로 이런 뜻이다.

 

은행에서 쓰는 Default 모델

IT업계만 그런 것도 아니다. 은행가서 대출 받으려고하면 은행에서 별의별 서류들을 요구하는걸 겪어본 적들이 있을 것이다. 은행은 당신들이 제공한 서류를 바탕으로 어떤 사람인지를 정보화하고, 대출회수가 불가능해질 확률이 얼마인지, 그 확률에 따라 대출을 해 줄지, 이자율을 어떻게 해야할지를 결정하는 작업이 눈에 보이지 않는 곳에서 이뤄질 것이다.

그 신용평가 모델은 어떻게 만들었을까?

그런 모델은 금융시장에 대한 이해가 깊고, 수학, 통계학 모델링에 대한 탄탄한 지식을 갖추고 있는 분들 다수가 모인 그룹이 만들고 보완하며 오랜 시간을 들여서 나왔다. 그리고 여전히 조금씩 모델을 바꿔가며 수정, 보완하고 있을 것이다. 그냥 딥러닝에 넣으면 뚝딱 나오는 모델이 아니라.

나가며 – 데이터, 인공지능, 평균지능 vs. 직관, 창조, 전문성

위의 VC 지인이 물어본 내용도 같은 작업일 것이라고 생각한다. 도메인 지식과 모델링 지식이 적절하게 결합되고, 필요한 데이터를 얻어내기 위해 오랜 시간의 Noise처리를 하는 수고를 투입하면 원하는 결과물을 얻을 수는 있을 것이다. 그렇게 만든 수식 조합이 지금 쓰고 있는 Non-AI 시스템보다 압도적으로 뛰어난 걸까? AI를 쓰면 인간이 못 잡아내던걸 다 잡아낼 수 있을까? 완벽 Noise 제거가 아니라, 평균 Noise 제거라는 사실을 다시 떠올려보시라.

의사들이 청진기만으로 모든 질병을 다 찾아낼 수 없지만 최소한 감을 잡는데 쓴다는 이야길 흔히 듣는다. 환자가 불편을 호소하는 말과 행동, 청진기를 통해서 얻을 심박수 데이터들을 결합해서 가설을 세우고, 다른 장비들을 이용해서 여러가지 질병 가능성들을 테스트하는 작업이 의사들의 주 업무라고 보면, 더 많은 사례 정보를 갖고 있는 기계가 더 정확할 것 같은 착각이 든다. 근데, 환자의 언행과 기계 정보를 결합하는 작업이 기계적이지 않기 때문에, 전문가의 직관이 포함되는 영역이기 때문에, 어떤 의사는 더 진찰 & 치료를 잘하고, 또 어떤 의사는 환자를 괴롭히는 사람이 된다.

불행하게도 그 직관을 기계적으로 구현하려면 데이터가 있어야되는데, 그 데이터는 그 직관을 가진 분들이 만들어내는 데이터다. 더 불행한 사실은 그 직관을 쉽게 말로 설명해서 어떤 변수가 어떤 결과를 낳는다는 인과관계를 만드는 작업 마저도 그 직관을 만들어 낸 분들의 결과물이다. 패턴매칭 알고리즘에 넣어서 “학습”을 시켜보려는데, 그 1개 사건 밖에 없다면? 이 지점에서 직관이라는 단어를 달리 설명하면 기존 데이터와의 Matching 작업이 아니라, 창조 작업이라고 봐야한다. 냉정하게 말해서 단순 의료 데이터로는 평범한 (more precisely 직관없는) 의사의 흔히하는 일상적인 진료 업무만을 대체할 수 있을 뿐이다.

항상 IT업계 분들, 특히 개발자 분들께 이런 이야기를 자주 하게 되는데, 당신들의 업무 대부분이 구글링해서 찾아낸 Library로 해결되고, Stack의 설명을 읽어보면 해결된다는 이유로 다른 직업도 그렇게 “다수의 정보”가 모이기만하면 해결될 것이라는 착각에서 벗어나시면 좋겠다.

학문별로 전문가들은 다 전문가 타이틀을 달 이유가 있는 분들이다.