<머신러닝 입문기 (1)>

<머신러닝 입문기 (1)>

곧 퇴직하는 전임의 선생님들 대상으로 해외연수경험에 대해 강의를 하게 되었다. 당직을 서며 교육자료를 만들다보니 벌써 그 시절이 짠하다. 캐나다에서 재미삼아 해봤던 코딩, 머신러닝 이야기를 정리해본다. 물론 나는 이 분야 전문가는 커녕 하수 of 하수임을 먼저 밝힌다.

캐나다에서 이런저런 생활 이야기만 주로 올렸다만 사실은 연구실에 따박따박 출근하면서 이것저것 했었다. 연수를 준비할 무렵에 이 시간을 어떻게 사용하면 좋을지 기대섞인 고민을 했다. 그때 나에게 아픈 손가락처럼 생각되는 컴퓨터 프로그래밍이 떠올랐다. 풋내기 시절 공대에 입학하고 실전에 맞딱드렸을 때, 나는 무언가 잘못된 것을 직감했다. 나라는 인간은 컴퓨터를 비롯한 전산장치에 그닥 흥미가 없고 잘 다루지도 못했다. 새나 좋아하고 물고기 이름이나 외울줄 알았지 왼도우도 혼자서 설치하지 못했고, 왠만한 프로그램을 까는 일도 나에게는 큰 고역이었다. 디지털 장치에 대한 혐오감, 분노가 쌓이던 와중에 프로그래밍이라니….. 하지만 1학년 들어가자마자 배우는 프로그래밍 과목은 졸업필수 과목이었다. 그때 아마 C++을 배웠던 것으로 기억하는데 처음 수업 몇 번을 듣고 도저히 내가 소화할 수 없을 것 같아서 드랍해버렸다. 물론 몇 년이 지나 4학년으로 복학해서 Java로 바뀐 과목을 수강해 졸업했지만 그 때의 좌절감은 여전히 큰 트라우마로 남아 있다.

여하튼 진로가 바뀌고 프로그래밍과는 거리가 먼 삶을 살아왔다. 그런데 왠지 다시 그 친구를 만나야할 것만 같았다. 인터넷 서점에서 파이썬 입문 서적을 대충 아무거나 골라 사서 캐나다로 갔다. 연구실에 출근해서 책의 첫 장부터 마지막장까지 내용과 예제들을 풀어봤다. 코드가 돌아가면 약간 재밌다 정도까지는 느꼈지만 딱 거기까지였다. 1독을 마치고 특별히 프로그래밍으로 진행할 프로젝트가 없어서 깨작깨작 소소한 코딩을 하고 있었다. 그러던 중에 마침 한국에서 했던 동물실험 데이터를 간단히 분석할 일이 있었다. GPT가 코딩언어를 잘 짜준다는 풍문을 들어서 내가 원하는 분석과 결과 시각화를 짜주는 코드를 GPT와 함께 작업했다. 그 이후 마치 특이점이 온 것처럼 요리조리 코딩을 사용할 수 있게 되었다. 물론 GPT없이 직접 코딩을 하라면 엄두도 못낼 실력이지만 동시에 그와 함께라면 못할 일이 없을 것 같다는 자신감마저 들었다.

그러다보니 나와는 상관없을 것 같던 머신러닝도 다가갈 수 있을 것 같아 유튜브로 이런저런 강의를 찾아 들었다. 마침 나에게는 북미 지근거리, 시차도 한 시간 밖에 안나는 곳에 머신러닝 업계의 샛별같은 친구@Minje Kim가 살고 있지 않은가? 틈틈이 그와 카톡을 주고 받으며 공부를 시작했다. 마침 우리 랩에는 머신러닝으로 해볼만한 프로젝트들이 보였다.

내가 연수를 간 University of Calgary의 Sean Dukelow교수님은 KINARM이라는 상지재활로봇의 개발단계부터 깊숙이 관여해오셨다. 이후 Calgary로 오셔서 다년간 뇌줄중 환자의 상지기능평가에 대한 어마어마한 data를 축적해놓고 있었다. KINARM은 다른 상지재활로봇과 달리 치료보다는 평가에 주안점을 둔 독특한 로봇이다. 간단히 설명하면 2차원 평면에서 다양한 종류의 과제들을 통해서 상지를 ‘뻗는’ 동작을 시키고, 그 과정에서 얻는 여러 변수들을 분석하여 뇌졸중에 의해 손상된 상지 기능을 세밀히 분석할 수 있게 된다. 연수지를 University of Calgary 정한 것도 사실 이 장비를 공부해보고 싶은 게 결정적이었다. 하지만 막상 수많은 종류들의 task들과 숫자들로 뒤덮힌 결과 report를 보니 이미 머리가 지끈거렸다. 사실 평가 후 대략적인 결과는 환자가 과제수행 중에 보여준 상지 움직임의 궤적만으로도 어느 정도 짐작할 수 있다. 물론 경험이 있는 임상가 혹은 연구자라면 말이다. 바로 이게 머신러닝이 잘하는 일 아닌가? 그래서 결과 이미지 정보만 가지고 임상적인 위중도를 예측하는 간단한 Computer vision을 만들어 보기로 했다. Sean도 흔쾌히 동의를 해줬고, Lab의 동료들도 재밌는 프로젝트같다고 많은 도움을 주었다. Chat GPT도 내가 하고자 하는 프로젝트를 꼼꼼하게 설명해줬더니 순식간에 Convolutional Neural Network을 활용한 머신러닝 코드를 짜줬다. 모든 일이 순탄할 것만 같았다.

결론적으로 이야기하자면 무척 흥분되는 작업이었고, 꽤 재밌는 결과들을 만들어 내었다. 하지만 그 과정이 결코 순탄치는 않았으며, 여러가지 깨닫는 점이 많았다. 사실 연수를 마치기 전에 논문까지 마무리를 하고 오려 했으나 다시 쭈욱 리뷰를 해보니 하자들이 있어서 다시 수정해야했다. 그 와중에 계엄이 터지며 손을 놓았다가 당직이란 기회를 얻어(?) 다시 작업을 시작했다. 깨닫는 점들 몇 가지만 이야기해보자.

1. 이미 우리는 AI의 노예
많은 사람들이 이야기하지만 대부분의 노력은 data를 정리하는데 소요된다. 나는 이 프로젝트를 위해서 랩에 있는 데이터 뒤지고, 찾고, 오류를 발견하고, neural net이 학습할 수 있게 data를 수정하는 일에 90% 이상의 시간을 썼다. 특히 컴퓨터 비전의 후속과제로 Kinematic AI를 만들었는데 이는 image로 학습하는 것이 아니라 image 이전에 상지의 움직임 자체에 대한 시계열 자료를 활용하는 프로젝트였다. 이를 위해서는 거의 하나에 거의 500메가 정도되는 raw Data csv 파일을 일일이 추리고 추려서 학습데이터로 만드는 노가다였다. 거의 한달 가까이를 꼬박 컴퓨터 앞에서 클릭하며 보냈던 것 같다. 눈이 벌겋게 되면서 클릭을 하고 있는 자신을 보니 영화 매트릭스에서 건전지가 되어 분홍색 액체속에 담겨 있는 인간들과 내가 다를 바가 무엇인가? 그러고 보면 인간이 하고 있는 모든 활동은 이미 AI학습을 위한 Data가 되어 버렸다. 죽어라고 쓰는 병원의 의무기록도, 다빈치 로봇에 앉아 수술하는 의사의 손동작도 다 학습대상이고 언젠가 AI가 해낼, 더 잘 해낼 일들이다. 이제 우린 뭐하나… 어차피 전공의도 없는 마당에 초진노트나 경과기록 빡빡하게 쓴다고 스트레스나 받지 말아야겠다.

2. 내 시스템의 오류확률
많은 양의 데이터를 정리하기 위해 단순반복작업을 하다보면 예기치 못한 실수를 항상 범하게 된다. 대체로 이런 일들은 코드를 돌리면서 발견한다. 자꾸 에러가 나는데 도무지 원인을 못찾다가 알고보니 저장해놓은 파일 이름 하나가 잘못 되었다든가 그런 어처구니 없는 상황들이다. 나의 경우 아무리 집중을 해도 대략 0.5~1%의 에러가 발생했다. 즉 200개 정도의 단순 반복작업을 한다면 1~2개 정도의 실수가 발생하는 것이다. 컴퓨터와 비교한다면 매우 높은 수치이다. 물론 단순반복 작업의 단계가 증가 하거나, 복잡도가 올라가면 실수의 확률은 증가한다. 처음에는 나의 실수가 발견될 때마다 화가 나고 자책감이 들기까지 했지만, 어느 정도 실수가 반복이 되고 나니 오히려 담담하게 받아들이게 되었다. 이건 내가 극복하기 힘든 내 시스템의 오류 확률인 것이다. 시험으로 예를 든다면 내가 시험에 대해서 100% 준비를 해서 그 내용을 모두 알고 있다고 해도 100문제 짜리 시험이라면 1개 정도 틀릴 확률이 50%이다. 우리나라의 교육에서 시험이라는 도구를 다시금 생각해보면 그 (개인의 오류확률*성실도) 정도로 산출되는 것이다. 나는 수능 (수능이 몇 문제였나)을 치지 않아서 잘 모르지만 내가 아무리 열심히 공부해도 내 점수는 대략적으로 정해져 있는 셈이다. 그래서 생각해보면 그런저런 평가들 가지고 사람을 이리 나누고 저리 나누고 하는게 다 뭔가 싶다. 어차피 AI한테는 비벼 보지도 못할 텐데….. 여튼 나라는 인간은 원체 오류가 많은 시스템이니, 그나마 엉덩이 무겁게 해서 합산한 곱이라도 올리는 전략 밖에 답이 없다는 것을 뒤늦게 깨닫는다.

(나머지는 다음에…)

댓글 남기기