파이선 코딩을 배우는 초보자도 머신 러닝에 한번 도전해 보자.
머신 러닝을 배우려는 초보자들이 가지게 될 의문점들을 하나하나 찾아내어
실제 풀어보고 결과를 확인해볼 수 있도록 완전히 뒷문으로 들어가 시작하는 머신 러닝!
_____________________________________________________________________________________________________
TensorFlow 예제하면 무엇이 떠오르는가? 당연히 MNIST hand written digits recognition 일 것이다. MNIST는 Modeified National Institute of Standards and technology 의 약자이다. 즉 미국에서 NIST 는 우리나라로 치면 표준과학기술 연구소에 해당하지만 그 역할 중에 수기숫자 전산 데이터베이스를 만들어 관리하는 역할도 포함하는 듯하다.
TensorFlow의 익숙한 사용자는 이미 느끼고 있겠지만 특히 Tensorboard를 사용해 보면 학습 횟수에 따라 감소하는 cost 함수의 거동과 Computational Graph를 관찰해 볼 수도 있다. 처음에는 신기하게 보일지 모르지만 사용하다 보면 불편하기 짝이 없다는 느낌이 밀려온다. 결국 텐서플로우 코딩하다 보면 알고리듬이란 것이 어느 정도 체득이 되기 때문에 굳이 Graph를 볼 필요성도 그다지 없어지게 된다. 아울러 Session.run 이란 방식을 사용하는데 아무리 경험이 쌓여도 대단히 불편하게만 느껴진다. 컴맹 탈출한지도 얼마되지 않은 필자가 이렇게 느끼는데 MNIST 프로젝트에 평생의 청춘을 다 보낸 사람인 LeCUN이나 그 주위 연구개발자들의 평은 과연 어떨까? 아무리 좋게 봐도 떨떠름한 수준일 것이다. 어디 좀 쿨한 Back end 머신 러닝 소프트웨어가 없나 하는 생각들을 많이 할 듯하다.
한창 때에 미국에서 이공계 출신들의 꿈의 직장이라 불리우던 Bell Lab에서 세월을 보낸 LeCUN이 이제는 Facdbook에서 AI lab 리더 역할을 한다는 얘기를 읽었다. Bell Lab 하면 Unix 와 C , VI 에디터의 원조로 기억된다.
Facebook AI lab에서 2016년 가을에 나온 물건이 바로 PyTorch이다. 물론 PyTorch 라고 해서 뭐 그리 특별한 기능이 있겠는가마는 예전의 MNIST 정도는 기본적으로 처리할 수 있어야 할 것이며 아울러 이 머신 러닝 동네에서 좀 뜨려면 아무래도 내놓을 만한 알고리듬이나 데이타 세트 또는 예제를 하나 보여주어야 하는데 그것이 바로 CIFAR-10(Canadian Institute For Advanced Research)인 듯한데 즉 손으로 쓴 숫자를 넘어 이미지를 학습하고 테스트 이미지를 식별해 내는 문제이다.
머신러닝 분야에서 기억할 만한 알고리듬 하면 1950년대 말의 Rosenblatt의 Perceptron 이라든지 또는 스탠포드 전기공학과 교수였던 Widrow 교수가 박사과정 학생과 연구 후 발표한 ADALINE 알고리듬이 있을 것이며 1980년대에는 Backpropagation 알고리듬을 제안했던 Hinton 교수 정도를 들 수 있을 것이다. 데이터 과학 분야에서는 Fisher 교수와 Anderson 교수가 연구했던 Iris flowers data set가 근 70년간 머신 러닝 공부에 활발히 이용되고 있는 정도이다. 과연 PyTorch에서 CIFAR-10이 어느 정도 역할을 할 수 있는지 기대가 된다.
필자도 텐서플로우로 CNN까지 훑어 본 다음 학습에 적절한 예제를 찾느라 고심했었으나 단서를 찾기 힘들었다. 대부분 인터넷에 올라온 자료에 따라 해보면 실행이 안되거나 OS 가 매치가 안되는 경우가 대부분이다. 즉 파이선 코딩 초보자라면 쉽게 접근하기 힘든 구조로 되어 있다. 특별히 막아 놓은 것은 없으나 이미지 학습과 테스트를 하려면 아나콘다 스파이더 편집기와 Jupyter Notebook에서 텐서플로우 기본 사용법에 숙달 된 후 이어지는 CNN 까지는 개념 정리가 되어야 접근 할 수 있는 분야로 보인다. 별것 아니지만 초보자를 위해 이 스토리를 아무도 얘기해 주지 않는 것이다. 필자의 경우 이런 루트를 독학으로 정확히 걸어왔으며 그 히스토리는 필자의 저서에 잘 나타나 있는데 이제는 CIFAR-10 예제를 Jupyter Notebook을 사용하여 실행할 수 있는 수준까지 접근한 것 같다.
파이선 코딩 초보자를 위한 톈서플로우∙OpenCV 머신러닝 머리말과 url 목차 파일 다운로드
https://steemit.com/kr/@codingart/pryx1-opencv
MNIST 예제를 거의 다 풀어낸 LeCun의 알고리듬은 머신 러닝의 학습범위가 미국인들이 작성한 수기숫자에 한정되어 있기 때문에 일반적인 사진이나 그림을 포함한 오브젝트 모두를 인식하는데 까지 적용되는 것은 아니다. 그러한 확장은 2012년 CNN 기반의 Alexnet 등장에 의해서 이루어졌다. Alex Krizhevsky 역시 캐나다에서 힌튼교수의 박사과정이었는데 아무래도 클 나무는 떡잎부터 알아본다고 힌튼 교수의 의사에 반해서 Alexnet 알고리듬을 구성하였다는 얘기가 있다. 어쨌든 2012년도 콘데스트에서 우승을 해 결과가 좋았고 선배인 LeCUN 이 밀어줄 정도라 일약 머신 러닝계에 신선한 충격을 줄 정도로 괜찮은 데이터 세트와 CNN 알고리듬의 효용성을 제시한 듯하다.
Alex Krizhevsky의 업적을 요약해보면 2012 년 이미지 분석 컨테스트에서 에러율을 15.3%로 줄여 최고의 인식률을 달성했다. Alexnet 의 기본적인 구성은 LeNet 과 유사하지만 Sigmoid 함수 또는 tanh 함수 채용을 지양하고 LeRU함수를 사용했던 바 NN이나 CNN의 표준으로 자리를 잡게 되었다.
CNN 방식에 의한 MNIST 수기 수자 인식 문제를 다룸에 있어서도 이미 AlexNet 의 영향을 받았기 때문에 ReLU 함수가 사용되어 충분한 컴퓨팅 시간을 허용할 경 우면 99%의 인식률이 얻어진다. Alexnet 이전부터 MNIST 인식률을 개선하기 위
한 무수한 노력들이 있었겠지만 일단 NN 이후로 CNN 기법에 의해 MNIST 인식률 99% 달성하므로서 완전한 정리가 이루어졌으며 바둑에 있어서는 Wide Deep에 의해 이세돌 기사를 상대로 4승 1패함으로서 종지부를 찍게 되었다.
PyTorch 홈페이지 튜토리얼 부분에 이 Trainning a Classifier 예제가 들어 있는데 이 예제 연습을 위해서는 첫째 윈도우즈 7이나 10 시스템에 Anaconda 가 설치되어 있어야 하며 둘째로 Jupyter Notebook을 최소한 간단한 사용법을 알아야 하며 아울러 CNN에 관한 이해가 선행되어야 할 것이다.
CNN 에 관한 전반적인 설명은 앞서 소개한 블로그 주소에 소개되어 있는 필자의 저서를 참고하도록 하자. 아울러 PyTorch 윈도우즈 7 시스템 설치 문제는 최근에 포스팅한 블로그를 참조하면 될 것이다. 윈도우즈 10에서 설치 경험도 곧 블로그에 올릴 계획이다.
7-1 Anaconda3 PyTorch install on Wondows 7
https://steemit.com/kr/@codingart/6bfrfx-7-1-anaconda3-pytorch-install-on-wondows-7
이미지 분석을 위한 PyTorch 의 자연스러운 출현이 있었듯이 머신 러닝 분야의 발전은 불과 몇 종류의 Back end 엔진들로 상징 된다. 그 중 TensorFlow 가 오래된듯하며 이어서 Scikit-learn 이 2005년부터 시작된 Google Summer of Code에서 출현했으며 2010년부터 보급이 되었다.
2007년에 몬트리올 대학에서 발표한 Theano 가 있으며 2015년 후에 Keras를 Back end로 포함하였다.
그 다음이 Keras 로서 2015년에 구글 엔지니어였던 프랜시스 꼴레가 릴리스했는데 Stand alone 형이 아니라 인터페이스가 가능한 Back end형이기 때문에 텐서플로우, 마이크로소프트의 CNTK, Theano에서 실행이 가능하며 최근에는 CNN 및 RNN 까지도 지원하고 있다. Keras 는 현재 머신 러닝 분야에서 20% 안팎의 높은 사용 점유율을 보여주고 있디.
CNTK는 마이크로소프트의 Cognitive Tool KIT 으로서 Deep Learning 시스템이며 Keras를 Backend로 가져다 쓰고 있다. 아울러 PyTorch 또한 2016년 가을에 출현하였다.
즉 머신 러닝을 연구를 위한 툴들로서 텐서플로우에서 scikit-learn을 거쳐 Keras 와 PyTorch를 사용해보면 좋을 것이다.
자 그렇다면 LeCUN 과 그의 Facebook lab에서 PyTorch를 발표했는데 PyTorch엔 TensorFlow 와 Keras 와 어떻게 차별화되는 특징이 있는지? 알아보기로 하자. 철저한 차별화가 없다면 엄청나게 치열한 Open Source Machine Learning 시장에서 하루도 버티기 힘들 것이다. 이 분야가 겉보기에는 아무런 실속이 없는 오픈소스 시장인 듯해도 적어도 최고의 머신 러닝 알고리듬 개발을 목표로 하기 때문에 머지않아 이 시장을 휘어잡을 수 있는 강력한 Back end가 출현한다면 즉 영화 터미네이터에서 얘기하던 스카이네트처럼 곧 다가 올 미래의 인공지능 시장을 싹쓸이 할 가능성이 현저히 높다.
지금현재까지 출현한 Tensor Flow, scikit-learn, Keras, PyTorch 중에서 TensorFlow는 이미 어는 정도 역할을 다해 단지 머신 러닝 교과서에서 입문자나 초보자를 상대로 한 교육 지침서에 머물 공산이 크며, scikit-learn 은 필자도 열공 중인데 아직은 잔여 수명이 좀 있는 듯한 느낌이다. 아우러 Keras 는 상당히 뛰어난 프로그래머가 만들어서 인지 마이크로소프트도 공짜로(오픈소스니까 돈 줄 필요가 없음) 주워다 쓰는 판인오늘 부터러도 예제를 돌려볼 계획이다. 마이크로소프트의 CNTK 는 어차피 Keras를 주워다 쓰는 놈이므로 당장 그렇게 머신 러닝의 핵심은 아닌 듯하니 나중에 이것 저것 공부 다하고 난뒤 킬타(킬링 타임)용으로 보면 될 것이다. PyTorch 예제는 달포 전부터 해봤는데 이미지 분석을 주제로 하는 CIFAR-10 부터가 진짜 시작인 듯하다. 여러 머신 러닝 진영들이 인공 지능 시장 싹쓸이를 목표로 칼을 갈면서 진검 승부에 들어서고 있는 듯한데 이참에 굿이나 보고 떡만 먹어볼 계획이다.
뒷문(Backdoor)으로 들어와 머신 러닝 공부 시작한지 얼마 되지 않지만 이런 블로그 글을 올릴 수 있는 점으로 보아 길은 제대로 찾아 온 듯하다.
'머신러닝' 카테고리의 다른 글
텐서플로우 코딩을 제대로 하기 위해 어레이 구조를 이해해 보자 (0) | 2019.01.21 |
---|---|
윈도우즈 10에서 Anaconda3 PyTorch Install (0) | 2019.01.20 |
Iris flowers data 사용 TensorFlow Deep Learning 코드와 데이타 파일 (0) | 2019.01.15 |
파이선 코딩 초보자를 위한 텐서플로우∙OpenCV 머신러닝 머리말과 url 목차 파일 다운로드 (0) | 2019.01.11 |
목차 (0) | 2018.12.07 |