머신러닝 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 (배포)

 

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

 

 

 

 

 

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

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

 

인공지능(Artificial Intelligence)

인공지능(Artificial Intelligence)이란 기계 혹은 시스템에 의해 만들어진 지능, 즉 인공적인 지능을 뜻한다.

앞으로 인공지능에 대해 더 탐구해보면 알겠지만 다양하고 복잡한 알고리즘들을 사용하는 것 치고는 뜻이 참 간단하고 추상적임을 알 수 있겠다. 필자도 처음에는 저런 추상적인 뜻만 보고 인공지능이란 참으로 흥미롭고 재미있는 학문이겠구나! 라고 생각했다.

(애초에 모든 분야가 호기심은 자극한다. 내 전공도 처음에는 오 재미있겠는데?로 시작해서 4년 내내 재미없음과 잘못되었음을 깨닫는 과정을 거쳤다. 깨달았을 때는 이미 늦음ㅠ)

잘못된 생각이었다고 생각하지만 어쩌겠는가. 이미 발을 들였으니 얻어가는 것이라도 있게 열심히 공부해 보자.

 

당장 구글에서 인공지능을 검색하면 위키백과의 인공지능을 볼 수 있다. 위키백과에서 옹골차게 인공지능의 흐름까지 알려주니 지하철이나 버스에서 왔다갔다할 때 가끔씩 읽어보는 것도 나쁘지 않다고 생각한다.

 

구글에 인공지능을 검색하면 이런 이미지가 나온다.

 

인공지능을 크게는 머신러닝과 딥러닝으로 구분할 수 있다. 그림에서 보다시피 머신러닝은 딥러닝을 포함한다. 

그럼 머신러닝과 딥러닝은 정확하게 뭘까?

 

 

머신러닝

여기 기똥찬 블로그를 찾았다. 여태까지 내가 배운 머신러닝을 기똥차게 압축한 블로그다. 블로그에 있는 글을 참고해서 정말 간단하게 머신러닝을 말하자면 문제를 해결하기 위한 맞춤 코드를 작성하지 않고 많은 양의 데이터를 일반 알고리즘에 공급하여 데이터를 기반으로 한 자체 로직이 만들어지는 것이 머신러닝이다. 

 

매번 뜬구름 잡는 소리로만 개념을 이해하다가 블로그 덕에 이런 사이트를 찾다니 참 행운이다. 여러분도 이 링크를 타고 들어가서 읽어보면 큰 도움이 될 것이다. 머신러닝의 전반적인 흐름과 개요를 완벽하게 잡았다랄까! 

 

 

딥러닝

여기 또다른 블로그의 링크를 걸어두었다. 여기도 딥러닝을 잘 설명해주고 있고 머신러닝과 딥러닝의 차이 등에 대해 잘 설명해주고 있다. 블로그에 들어가서 자세히 읽어보면 딥러닝을 이해하는데 큰 도움이 될 것이다. 또 내 블로그에서 간단히 딥러닝을 말해보겠다.

 

 

뉴런                                                                                                        다중 퍼셉트론

 

딥러닝은 인간의 뉴런에서 따온 학습 방법이다. 생명과학을 한 사람이라면 뉴런에 대해 알 것이다. 필자는 수능때 생물1을 봤기 때문에 뉴런과 유전에 대해 아주 빠삭했었는데 지금은 문과 친구들 부모님의 혈액형으로 친구의 혈액형을 때려맞추는 수준으로만 남아있다. 따라서 뉴런에 대해 자세히 설명해줄 여력이 없다. 궁금한 사람은 찾아보면 되겠으나, 최소한의 이해를 돕기 위한 야매 설명을 하자면 그냥 뉴런과 뉴런이 손에 손잡고 전기를 전달해서 반사작용이나 행동을 한다고 보면 되겠다. (생물하는 사람들이 보면 대노할 수준의 설명이 아닐까하는 마음ㅋㅎ) 이런 뉴런의 특징을 퍼셉트론이라는 것으로 구현해 낸다고 보면 된다. 퍼셉트론이 동작하는 방식은 다음과 같다. 각 노드의 가중치와 입력치를 곱한 것을 모두 합한 값이 활성함수에 의해 판단되는데, 그 값이 임계치(보통 0)보다 크면 뉴런이 활성화되고 결과값으로 1을 출력한다. 뉴런이 활성화되지 않으면 결과값으로 -1을 출력한다. 더 자세한 설명은 퍼셉트론을 다루는 파트에서 더 자세히 하겠다.

 

+) 몇줄 요약

머신러닝은 규칙을 사람이 만들지만, 딥러닝은 신경망이 주어진 데이터로부터 특징과 규칙을 직접 학습(end-to-end machine learning)한다. 따라서 머신러닝은 사람이 생각한 특징, 파생변수가 정확도 향상에 큰 역할을 하는 경우가 많고 딥러닝은 신경망의 학습능력에 따라 정확도가 달라진다. 인공지능은 이 모든 것을 포괄하면서 더 사람답게, 인간의 지적 능력을 거의 똑같이 구사하고자하는 것을 의미한다.

 

 

+ Recent posts