기계학습, K-제조업 소트프웨어 직군의 이직 러시, 자율주행
누군가가 <기계학습을 사용하고 싶다>라고 하면 개인적으로 가장 강조하는 부분은 모델 평가 (model evaluation)이다. 딥러닝 시대에 들어서 학습 알고리즘은 계속 발전하고 바뀌지만 이 모델 평가라는 콘셉트는 아직까지도 꾸준히 사용되는 부분이기 때문이다. 데이터 기반 예측을 할 때 변하지 않는 일종의 준칙이다. 다양한 모델 평가 방법이 있지만 보통은 학습과 평가에 사용하는 데이터를 나누는 것이 핵심 아이디어이다. 보통 아래와 같은 순서로 모델 평가를 진행한다.
학습용 데이터셋에서 학습 알고리즘에 따라 모델을 학습한다.
이때 학습 알고리즘에 따라서 모델이 여러 개 존재할 수 있다. 보통 여러 개가 존재한다.
학습된 모델들을 평가용 데이터셋에서 평가하여 성능을 얻는다.
성능이 가장 좋은 모델을 최종 모델로 선택한다.
왜 이런 짓이 왜 필요한지 간단한 비유를 들 수 있다. 가령 올해 수능의 문제가 작년과 동일하다고 가정해보자. 이러면 다들 문제를 다 외워버리는 식으로 대응을 하면서 학생들의 실력 평가가 힘들어진다. 이것이 학습 알고리즘에서도 동일하게 일어난다. 학습 및 평가에 사용하는 데이터셋이 같으면 데이터셋을 전부 기억해버리면 된다. 데이터 과학 분야에서 보통 과적합 (overfitting)이라고 언급되는 이야기이다. 즉, 이를 막기 위해서는 현재 모델이 괜찮은지에 대한 평가를 언제나 학습용 데이터셋 밖에서 진행해야 한다. 게다가 요즘 기계학습 알고리즘, 특히 딥러닝 모델들은 데이터 전체를 다 기억하고 다 맞출 수 있을 정도로 크고 웅장하기 때문에 이러한 모델 평가는 매우 매우 중요해졌다.
이러한 기본적인 이야기들이 강조가 안되다 보니 정말 가끔 국내 학회 발표장에서 학습과 평가를 모두 같은 데이터셋 진행한 충격과 공포의 논문을 발견할 수 있다. 그리고 꼭 주장하는 것은 자기들은 99%에 가까운 높은 성능을 달성했다는 것이다. 이러한 것들은 결과로 인정받기 위한 절차를 제대로 밟지 못해서 발표장에 오기 전에 걸러졌어야 하는데 말이다. 이렇게 꼰대가 되어간다.
평가를 제대로 못하면 알고리즘뿐만 아니라 당연히 사람이나 조직 또한 문제가 생긴다. 사람의 경우도 어떤 경험한 사실에 대해서 어떤 관점을 고수하는 경우가 있기 때문이다. 흔히 말하는 꼰대들의 문제점이다. 이러한 특정 경험에 과적합한 관점은 지나간 과거는 설명을 잘할 수 있다. 하지만, 새롭게 등장한 현재 상황을 설명하거나 예측하는 데는 오히려 방해가 될 수 있다.
조직에서도 모델 평가는 중요하다. 요새 한국의 모 대기업들에서 요즘 소프트웨어 직군이 다른 기업으로 이직이 잦은 것이 알려있다. 이게 주변 친구들의 이야기를 듣다 보면 K-제조업의 조직 운영 방식에 과적합한 모습들이 보인다. 연봉도 당연히 중요하겠지만 과장하면, 소프트웨어 개발 과정에서 나오는 프로덕트의 평가를 어떻게 가져가야 할지 이해를 못해서 이러한 이직이 규모가 커진 것 같다. 상황을 보면 다음과 같다.
(1) 몇몇 조직의 리더 급이 매우 과도한 성능 지표를 제시한다.
(2) 밑에 있는 엔지니어는 이게 불가능한 것을 알기 때문에 어떻게든 원하는 수치를 만들기 위해 노력한다.
데이터셋에서 어려운 예시를 제거하는 식으로 목표 수치를 달성하는 식으로 일들이 일어난다고 한다.
일부의 헤드의 경우는 평가 기준 자체에 대한 이해가 떨어져서 아예 숫자가 높게 나오는 다른 평가 기준으로 바꿔서 보고하는 경우도 있다고 한다. 사전에 구체적인 기준이 정해져 있지 않기 때문일 것이다.
(3) 이런 것들이 누적되다 보니 실제 프로덕트를 구성하는 컴포넌트들이 엉망이고 프로젝트가 산으로 간다. 고과 평가도 별로고 팀이 해체되는 경우도 있다.
(4) 현타가 온 엔지니어들이 주변 회사들에서 오퍼를 주니까 열심히 이직 러시를 진행 중이다.
이것이 결국은 기존 제조업처럼 일을 하기 때문이다. 기존 제조업은 보통 데이터셋이 현실 세계 (real world)이다. 현실 세계는 지구 상 누구에게나 보편적인 데이터셋이기 때문에 여기서 뭔가 조작을 하거나 사기를 치기 어렵다. 가령 자동차나 반도체를 만든다고 할 때, 이를 극한의 환경이나 트랙에서 테스트를 하면 어지간한 일반 상황에서는 다 작동할 수 있다. 반도체가 온도가 낮을 때 동작을 잘한다고 영하의 온도에서 측정된 반도체 성능을 실제 성능이라고 우기기 어려운 것과 같다. 우리는 섭씨 20도 근처의 지구에서 살기 때문이다. 요즘은 35도
하지만, 흔히 데이터 과학에서 말하는 데이터셋은 다르다. 데이터셋은 어떤 현실의 일부를 데이터로 측정한 것이기 때문에 어떤 데이터를 그 안에 포함할지를 결정해야 한다. 실질적으로 컴퓨터의 계산능력에 한계가 있기 때문에 결국 데이터셋은 현실을 완벽히 나타내지 못한다. 실제 모델이 동작하는 상황을 최대한 잘 묘사하는 데이터셋을 구축하는 것이 실제 모델을 잘 만드는 것보다 중요하다. 물리 모델과 데이터 과학의 모델이 갖는 이 차이를 인식하는 것이 아마 기계학습 알고리즘을 프로덕트나 서비스에 구현하고자 하는 조직에서 가장 먼저 알아야 될 사실이 아닐까 싶다.
자율 주행 환경을 예로 데이터셋을 구축할 때 발생하는 문제를 생각해보자. 일상적인 주행의 경우는 사실 큰 문제가 없을 가능성이 크다. 사람이 평생 주행하면서 학습하고 경험하는 것보다 자율 주행 데이터는 더 규모가 크고 많기 때문이다. 그럼 언제가 문제일까? 만약 자율 주행 모델이 데이터셋에 존재하지 않는, 현실에서도 굉장히 희귀한 상황들에 자동차가 놓인다면 우리는 알고리즘이 어떻게 동작할지 알기 힘들다. 데이터가 없으면 아예 평가를 할 수가 없다. 가령, 자율주행 관련 도덕 혹은 법률 논쟁 등을 보면 자율주행 알고리즘이 어떤 사람을 쳐야 될지를 고민한다. 이것은 굉장히 사람의 관점에서의 이야기인 것이다. 보통 이런 데이터는 데이터셋에 없을 것이 당연하기 때문에 실상은 사고가 났을 때 차량의 동작 자체가 보증이 안된다.
이를 어떻게 해결할 수 있을까? 상업적인 해결책은 사고와 같은 희귀 상황에 대한 데이터를 최대한 많이 다양하게 수집해서 학습 데이터셋에 집어넣는 것이다. 이 부분이 테슬라가 구글 웨이모나 다른 회사들보다 자율주행에서 가장 앞선다고 보는 이유이다. 테슬라가 판매한 수많은 차량이 실제 도로에서 주행을 하며 이미 사고도 냈었으니 말이다. 이러한 데이터를 다 들고 있으면 아무래도 자율 주행 알고리즘을 만드는 게 큰 도움이 될 수 있다. 그래서 자율 주행을 제대로 구현하려고 한다면, 사고 데이터를 많이 수집한 곳들 (테슬라, 정부, 보험사, 한문철 변호사님...?)이 실상 제일 중요한 곳이 아닐까 개인적으로 판단한다.
(광고 주의!) 자 이렇게 사고 영상 인식이 자율주행에서 중요합니다. 뻘글만 쓰는 게 아니라 연구도 하는 사람입니다. Traffic Accident Benchmark for Causality Recognition, ECCV 2020
살펴본 바와 같이 데이터를 모으는 것은 산업적으로 꽤 괜찮은 해결책이다. 아마 이 분야는 테슬라가 가장 잘하지 않을까 싶은데, 예상대로 테슬라가 Full Self-Driving (FSD)이라고 부르는 아직은 완전하지 않은 자율 주행 기능을 구독형 모델로 판매한다고 한다. (https://www.bloter.net/newsView/blt202107190014) 아무래도 자율주행 기능을 최신으로 유지하기 위해서는 데이터와 모델을 꾸준히 업데이트해줘야 할 것이기 때문에 하드웨어보다는 소프트웨어의 형태로 관리하는 것이 유리하다는 판단이 아닌가 싶다. 자동차는 원래 하드웨어였는데 자동차의 특정 기능을 구독형 모델로 판다니 시대가 참 달라졌다. 테슬라뿐만 아니라 IT서비스 분야에서는 최근 MLOps라는 형태의 설루션이 각광받고 있다. 데이터를 모으고 기계학습 알고리즘을 학습해서 문제를 푸는 방식이 꽤 성공적이라는 것을 보여주는 것일 것이다. 이미 인공지능이라는 단어 또한 이미 최첨단은 지났고 실생활에 녹아들고 있는 모습이 아닐까 싶다.