머신러닝

Back Door에서 시작하는 머신 러닝에의 초대:

coding art 2020. 1. 1. 16:30
728x90

머신 러닝 문제를 해결하기 위해서 파이선 코드를 작성해 보자. 왜 파이선 코드인가? C/C++ 이나 쟈바와 같은 언어들도 있지만 이런 언어를 바탕으로 머신 러닝 코드를 작성하는 것은 쉬운 일이 아니다. 언어 자체의 수준의 높낮이 문제가 아니라 그러한 언어들의 사용 목적 방향 자체가 머신 러닝과는 그다지 상관이 없기 때문 아닐까? 다시 말하면 그런 언어들은 머지 않아 점차 사라질 가능성이 높아 보인다. 1990년대 초에 출현한 파이선 언어도 수많은 컴퓨터 언어 중의 하나였지만 구글의 선택을 받게 되었는데 즉 TensorFlow 라이브러리 모듈의 광범위한 사용 및 보급이 이루어졌던 것이다. 아울러 배워서 사용해 보면 그다지 복잡하지도 않으며 C++에서 사용하는 기능들은 웬만큼 커버가 됨과 동시에 거추장스러운 build 과정도 없어 사용하기에 매우 편리하다. 2020년까지 가장 폭 넓게 보급된 컴퓨터 언어가 무엇인가 물어 본다면 다음 그래프에서 볼 수 있듯이 단연 파이선 보급률이 선두를 차지하고 있다.


C++ Java도 상당히 높은 보급률을 보여주고 있지만 이 언어들은 아시다시피 80년대부터 철저하게 돈 벌이 그 자체를 위해 시장을 독점하기 위한 별 시답지 않은 형태로 컴퓨터 언어 시장을 준 독점해 왔다는 사실을 잘 알 것이다. 하지만 지금의 시대가 어떤 시대인가? 이미 오픈소스의 시대에 진입한 상태이므로 상업성이 게재되어 있든 말든 가장 효율적이면서도 오픈소스적인 컴퓨터 언어들만이 살아남는 시대가 도래 한 듯하며 그 중에 하나가 파이선일 것이다. 구글 측에서도 마이크로소프트나 오라클의 아성을 깨는 정도가 아니라 아예 씨를 말리기 위한 전략도 있을 것으로 짐작할 수 있지만 그 보다는 사용자 입장에서의 선호도에 따라 Java C/C++ 의 보급률이 지속적으로 하락하고 있다. 아마도 윈도우즈 10 을 마지막으로 One of Computer Languages 가 되지 않을까 싶다. 필자의 최근 경험으로도 동일한 머신 러닝 문제를 C++ 과 파이선으로 접근해 보면 C++ 접근에서는 시간 투자 대비 성과가 거의 없다는 판단을 하고 있다. 당장 IT 업계에서 일하려면 모르겠지만 굳이 새로이 배울 필요성이 없어 보인다.

 

그렇다면 머신 러닝을 시작하려면 어떻게 시스템을 준비해야 할 것인가 검토해 보기로 하자. 아직은 윈도우즈 10을 사용 중이므로 유료이지만 당분간은 사용하도록 하자. 아울러 무료 제공되며 Jetson Nano 보드에서 사용하는Ubuntu 18.04 라든지 또는 라즈베리 파이보드에서 사용하는 Raspbean과 같은 리눅스 계열 OS들을 들 수 있을 것이다. 처음에는 윈도우즈 10 이 아닌 이들 OS가 생소하긴 하지만 컴퓨터 바이러스도 없고 쓰다 보면 사용법을 쉽게 배울 수 있기도 하다.


윈도우즈 10에서 쓸만한 파이선 편집 시스템으로는 Anaconda Pycharm을 들 수 있다. 필자는 2018년 초 부터 Anaconda를 설치하여 사용하고 있으며 이를 사용하여 201812월 말에 파이선 코딩 초보자를 위한 TensorFlow OpenCV 머신 러닝2019년 여름에는 파이선 코딩 초보자를 위한 Scikit PyTorch 머신 러닝을 교보문고 POD 코너에서 출간하기도 했다. 이 책의 중요한 출간 목적 중의 하나가 오픈소스 시대에 설사 컴퓨터 사이언스를 전공하지 못한 분야의 사람들에게도 AI 인공지능에 접근할 수 있도록 일종의 백도어를 제공하자는데 있다. 남의 정보를 훔쳐내는 백도어가 아니라 머신 러닝의 세계로 들어가는 입구를 찾아 보자는 취지이다. 일단 들어가면 나올 필요는 없을 것이다.

 

위 그림의 1장 내용을 살펴보면 필자가 경험했던 Anaconda 설치 과정이 작업일지 형태로 고스란히 들어 있다. 사실 책에서 이런 내용은 부록에 수록해야 마땅하지만 컴퓨터 코딩 파트가 부록으로 배제된 머신 러닝이란 불가능하다는 점을 깨달았으면 한다. 하지만 후반의 OpenCV 머신 러닝 분야는 라즈베리 파이 보드에서의 경험 내용을 기반으로 하고 있다. 이 부분은 2020년 새해에 접어 들어서도 여전히 중요한 바 Pi Camera를 실시간으로 다룰 수 있다는 이점이 있어 여전히 손을 놓지 못하고 있다.

 

2017년 구글 머신 러닝 홈페이지를 보았을 때에 MNIST 문제 파이선 코딩이 있었지만 2018년 언제가 다시 들어가 보니 Iris flower 예제가 올라와 있었다. 읽어 보니 그리 잘 알 순 없었지만 아나콘다에서 실행해 보는 데는 그다지 문제가 없었으며 그 작업 내용은 파이선 코딩 초보자를 위한 TensorFlow OpenCV 머신 러닝” 1-5절에 이미 실려 있다. 하지만 머신 러닝을 섭렵해 보면 1권의 범주를 넘어 터져 나가는 부분이 많이 있음을 실감하게 되어 2019년 여름에 출간한 그림입니다.

원본 그림의 이름: CLP00000458000b.bmp

원본 그림의 크기: 가로 579pixel, 세로 805pixel 파이선 코딩 초보자를 위한 Scikit PyTorch 머신 러닝에서는 전반부에 Scikit 라이브러리를 사용하여 Classification과 관련된 코딩을 본격적으로 다루어 보았다. 이때의 참고 서적이 바로 Sebastian Raschka Python Machine Learning이다. 참고로 Sebastian Raschka 는 미국 위스콘신대 통계학과의 젊은 조교수이며 그의 저서는 통계학적인 내용이 많아 사실 내용 설명들이 다소 이해하기 어려운 부분이 많았다. 이 참고 서적을 구입해서 한번 리뷰해 본 후 원서 책값 날렸다는 느낌이 강하게 들었으나 본전 생각에 열심히 파 본 결과가 바로 이 책이다. 하지만 Sebastian Raschka 가 생각하는 범위를 넘어 자료가 별로 없었다고 생각되는 Transfer Learning 분야를 PyTorch로 독학한 내용을 담았으며 이 무렵에 구글의 Colabo 에서 GPU 컴퓨팅을 무료로 지원한다는 점을 알게 되었다. 사실 구글 ColaboGPU 지원이 없었다면 Transfer Learning 예제 실행이 윈도우즈 10 컴퓨터에서도 쉽지 않았으리라 생각된다.

 


아울러 이 책에서 특기할만한 내용으로서 Iris flowers Classification 문제를 처음으로 다루었으며 통계학의 천재로 알려져 있던 Fisher 교수의 LDA(Linear Discriminant Analysis) 기법을 리뷰해 본 내용인데 지금까지 알려진 모든 알고리듬들이 97%을 보여주는 데 이 LDA 와 결합된 기법을 사용하면 Iris flowers Classification 문제에서 인식률 100%가 가능하다는 점을 입증(Verification)하였다. 그 후에도 필자의 저서가 커버하는 범위를 체크해본 바에 의하면 Semantic Segmentation 분야가 빠졌다는 사실을 확인하였으며 2019년 말 필자의 블로그에 그 내용들을 올렸다.

 

머신러닝을 배우려는 초보자에게는 일단 고교과정까지의 교육에 플러스하여 수학분야에서 이산수학(Discrete Math)의 경험을 가질 필요가 있다. 필자의 경우 대학원에서 이산수학 TA(Teaching Assitant) 경험을 가지고 있다. 단순한 레포트 채점이 아니라 Fisher 교수처럼 Biostatiscs를 강의하는 담당교수의 권고대로 수업을 충실히 듣고 TA를 하였다. 현재 다루어 보는 많은 코드들의 구성 내용들이 이산수학적인 면이 대단히 많다는 점을 경험적으로 느끼는데 쉽게 말하자면 컴퓨터 사이언스형으로 뇌구조를 바꾸어줄 필요가 있을 것이다.

 

마지막으로 필자가 머신 러닝에 깊숙이 들어오게 된 과정을 정리해 보면 2016년 말부터 사물인터넷(IOT: Internet Of Things)을 할 수 있는 아두이노 C 부터 시작하여 2017년 상반기에 라즈베리 파이 IOT를 하다가 가을부터 간단한 머신 러닝 코드를 다루어 보았으며 20183월경에 아나콘다를 윈도우즈 10에 설치하게 되어 오늘 날에 이르게 되었다. 그 과정 전체가 필자의 블로그에 담겨있으니 참조하기 바란다.