머신러닝 Workflow

 

대부분의 머신러닝은 위와 같은 방식으로 진행된다.

 

1) Data Preprocessing (데이터 전처리)

 

수집한 데이터가 깨끗할거라는 기대는 버리는게 좋다. 애초에 데이터를 수집하는 것 부터가 일이다. 예를 들어 스타일링 변화의 실패를 줄이고자 다양한 헤어스타일을 가상으로 나의 얼굴에 대입해본다고 생각하자. 여기서의 헤어스타일은 굉장히 자연스럽게 연출되기를 기대한다. 그럼 이 모델을 만들기 위해서는 우선 데이터가 필요하다. 앞서 말했지만 다량의 데이터들이 수학적인 알고리즘을 통해 데이터들끼리 자체적인 로직을 만들기 때문에 우리는 다!량!의! 데이터들이 필요하다. 당장 구글에 머리스타일을 검색해 보자. 다양한 각도와 구도의 이미지들을 볼 수 있다. 우리의 똑똑하지만 멍청한 인공지능은 깨끗하게 가공된 데이터가 아니면 학습률/예측률이 난리가 난다. (사실 인공지능은 영화들이 만들어낸 허구다. 나도 당장 로봇이 말하는 그런 AI만 생각했지 현재까지의 인공지능은 그냥 인간이 거의 다함ㅠ 이렇게 전처리가 빡셀줄 몰랐지) 그래서 인간은 노동을 통해 다량의 데이터들을 깨끗하고 정제된 데이터로 만들어 학습에 사용해야한다. 따라서 데이터 전처리는 단순 노동과 노동과 노동의 연속이다. (전처리 방법도 다양하기 때문에 진짜 죽음 뿐)

 

전처리를 하다보면 이런 상황 발생

 

 

2) EDA (Exploratory Data Analysis)  & Feature Engineering (탐색적 데이터분석)

 

EDA란 수집한 데이터를 다양한 각도에서 관찰하고 이해하는 과정이다. 한마디로 데이터를 알고리즘에 때려 박기 전에 그래프나 통계적인 방법으로 자료를 직관적으로 바라보며 특징을 찾고, 숨겨진 패턴을 발견하는 과정이다. 사실 필자는 이것의 중요성에 대해 잘 인식하지 못했다. 근데 이게 사실상 제일 중요하다. 전처리는 노동과 노동의 연속이라면 이 단계에서는 직관이 중시되기 때문이다. 생각보다 인공지능을 직접 하다보면 개발자의 직관이 많이 요구된다. 분명히 사용하는 알고리즘은 더럽게 복잡한 수학적 공식을 사용하지만 그건 컴퓨터의 영역이라면 개발자는 이 과정을 통해 데이터의 특징을 파악하여 발견한 특징들을 잘 활용하여 모델을 구성해야한다. 그래야 학습률이 좋다. 근데 이 과정도 전처리 못지 않게 노동과 노동과 노동의 연속이다. (사실 인공지능은 말만 번지르르하지 실제로 만들려면 그냥 단순 노동과 직관이 90%라고 해도 과언이 아니다.) 

 

 

3) Algorithm selection (알고리즘 선택)

 

WOW 드디어 알고리즘을 선택하는 단계이다! 여기가 이제 진짜 인공지능이라고 보면 되겠다만 문제는 여기도 노동과 노동의 연속이라는 것이다. (도망쳐) 앞으로 차차 다양한 알고리즘에 대해 글을 쓰겠지만 수학적인 내용은 굉장히 복잡하다. 필자는 전공에서 사용하는 수학 공식들부터도 어떻게 이런 수식들이 이런 결과를 도출할 수 있는가에 대한 경이로움을 느꼈는데 인공지능은 그거의 곱절로 놀랍고 놀랍다. (문제는 그만큼 복잡함) 내가 수학을 잘하고 좋아했더라면 알고리즘을 만드는 사람이 되지 않았을까 하는 헛된 꿈도 잠깐 꾸어봤지만, 나는 새로운 수식을 만들어낼 정도로 의지있고 똑똑한 사람이 아니기 때문에 (당장 남이 만든 공식 이해하기도 벅참) 있는 알고리즘이나 잘 활용하자는 생각이다. 문제는 다양한 알고리즘을 수학적으로 이해했다고 해도 적용과는 또 별개라는 것이다. 알고리즘들은 다양하고, 거기에 사용되는 속성들도 굉장히 다양하며 그것은 사람이 모두 설정한다. (인공지능 당신 하는게 도대체 뭔데) 그래서 앞과정을 다끝내도 여기와서도 멘탈이 터진다. 프로그래밍을 하려면 초월과 달관하는 자세는 필수라고 생각한다.

 

코딩이 오류가 나도, 기껏 오류 고쳐서 돌아가도 원하는 결과가 안나와도 나는 괜찮다.

 

 

4) Training / Evaluation / Parameter Tuning

 

이걸 한 번에 묶은 이유는 학습시키면 평가하고 평가가 원하는 결과가 안나오면 하이퍼 파라미터를 다시 조정하는 과정을 계속해서 반복해야 하기 때문이다. 이 과정은 그래도 앞의 과정들보단 낫다. 나는 기다리고 컴퓨터가 돌아가기 때문이다. 문제는 반복했는데도 일정수준 이상으로 높아지지 않으면 앞 과정들을 다시 반복해야한다는 것이다. 이런 결과가 생기면 또 멘탈이 터진다. 앞의 과정들을 잘 하면 이런 불상사는 없을 수 있겠으나 글쎄... 지금 당장 하고 있는 프로젝트도 이 과정에서 결과값이 안나오면 전처리를 다시 만지는걸 보아 불상사는 항상 생길 것 같다. (그것이 개발자의 인생이지 노답)

 

 

5) Deployment (배포)

 

이 과정까지 도달했다면 당신은 축배를 들어야한다. 당신은 진정한 인공지능을 만들어 냈다. 

 

 

 

 

 

당신은 이 글을 보면 아~ 인공지능은 대충 이런 구조로 되어있구나를 알 수 있게 될것이다.

문제는 코딩은 하나도 모르고 대충 느낌으로 알게 된다는 것이다! 나는 항상 이게 불만이었다. 모든 이론들은 이론상으로는 알겠다라고 느끼지만 실전에 들어가면 까막눈처럼 막막하기 때문이다. 따라서 다음에는 이 과정들을 함축적이면서도 자세하게 알려주는 문제에 대해 다루고자 한다. 커밍쑨!

+ Recent posts