머신러닝 쓰나미
2006년 제프리 힌튼Geoffrey Hinton 등은 최고 수준의 정확도(>98%)로 손글씨 숫자를 인식할 수 있는 심층 신경망 훈련 기법에 관한 논문1을 발표했습니다. 이 기법을 딥러닝Deep Learning이라고 불렀습니다. 그때까지는 심층 신경망을 훈련시키는 것이 불가능하다고 생각했고2 대부분의 연구자는 1990년대부터 심층 신경망을 연구하지 않았습니다. 이 논문은 과학계의 관심을 다시 불러일으켰고 오래지 않아 많은 논문이 딥러닝이 가능하다는 사실뿐 아니라 (높은 컴퓨팅 성능과 많은 양의 데이터에 힘입어) 다른 머신러닝 기법과 비교할 수 없는 엄청난 성능을 낸다는 것을 보여주었습니다. 이런 열기는 다른 머신러닝 분야에도 곧바로 확산되었습니다.
10년이 지난 지금 머신러닝Machine Learning은 산업계를 정복했습니다. 오늘날 첨단 기술의 상품, 웹 검색 결과의 순위, 스마트폰 음성 인식, 비디오 추천, 바둑 세계챔피언과의 대결 등 마술 같은 일들의 중심에 서 있습니다. 머지않아 여러분 차는 머신러닝이 운전할 것입니다.
나만의 머신러닝 프로젝트
따라서 머신러닝에 흥미를 갖고 이를 배우고 싶어 하는 것은 당연합니다!
지능을 갖춘 로봇을 직접 만들고 싶나요? 얼굴을 인식하게 하거나 걸어서 돌아다니게 만들고 싶나요?
여러분 회사가 엄청난 양의 데이터(사용자 로그, 금융 데이터, 생산 데이터, 센서 데이터, 상담 통계, 인사 기록 등)를 가지고 있고 무엇을 할지 알고 있다면 다음과 같은 숨겨진 보석을 캐낼 수 있을 것입니다.
- 고객을 나누고 각 그룹에 맞는 최선의 마케팅 전략 찾기
- 비슷한 고객의 구매 이력을 기반으로 상품 추천하기
- 부정 거래 감지하기
- 내년도 매출 예측하기
- 그 외(https://www.kaggle.com/wiki/DataScienceUseCases)
이유가 무엇이든 머신러닝을 배우고 프로젝트에 도입하기로 결정했다면 아주 좋은 생각입니다!
목표와 방법
이 책은 여러분이 머신러닝에 관해 아는 것이 거의 없다고 가정합니다. 이 책의 목표는 데이터로부터 학습할 수 있는 프로그램을 실제 구현하기 위해 필요한 개념과 직관, 도구를 설명하는 것입니다.
(선형 회귀와 같이) 간단하고 아주 널리 사용되는 것부터 경연 대회에서 자주 우승을 차지하는 딥러닝 기법까지 많은 종류의 기술을 다룹니다.
머신러닝 알고리즘의 간단한 버전을 직접 구현하는 대신 실제 제품을 만드는 데 쓰는 파이썬 프레임워크를 사용할 것입니다.
- 사이킷런Scikit-Learn (http://scikit-learn.org/)은 매우 사용하기 쉽고 많은 머신러닝 알고리즘이 효율적으로 구현되어 있으므로 머신러닝을 처음 배울 때 사용하기 아주 좋습니다.
- 텐서플로TensorFlow (http://tensorflow.org/)는 분산 수치 계산을 위해 데이터 플로 그래프data flow graph를 사용하는 탁월한 라이브러리입니다. 수천 대의 다중 GPU 서버에 계산을 분산하여 대규모 신경망을 효과적으로 훈련하고 실행시킬 수 있습니다. 구글에서 만들었고 구글의 대규모 머신러닝 애플리케이션에서 사용하고 있습니다. 2015년 11월에 오픈소스로 공개되었습니다.
이 책은 실제 활용할 수 있는 방법을 사용합니다. 구체적인 작동 예제와 약간의 이론을 통해 머신러닝을 직관적으로 이해하도록 돕습니다. 이 책은 노트북 컴퓨터 없이 그냥 읽을 수 있지만 https://github.com/rickiepark/handson-ml/ 에 주피터 노트북으로 공개되어 있는 코드 예제를 직접 실험해보는 것이 좋습니다.
필요한 기술
이 책은 여러분이 파이썬 프로그래밍 경험이 있고 특히 넘파이NumPy (http://numpy.org/), 판다스Pandas (http://pandas.pydata.org/), 맷플롯립Matplotlib (http://matplotlib.org/) 같은 파이썬의 주요 과학 라이브러리와 친숙하다고 가정합니다.
이론적 배경을 이해하려면 미적분, 선형대수, 확률, 통계 등 대학 수준의 수학 지식도 필요합니다.
아직 파이썬을 모른다면 http://learnpython.org/가 시작하기 좋은 곳입니다. python.org의 공식 튜토리얼(https://docs.python.org/ko/3/tutorial/)도 매우 훌륭합니다.
주피터Jupyter를 사용해본 적이 없다면 2장에서 설치와 기본적인 내용을 배울 수 있습니다. 주피터는 여러분 도구상자에 있어야 할 아주 유용한 도구입니다.
파이썬의 과학 라이브러리와 친숙하지 않다면 주피터 노트북에 포함되어 있는 몇 가지 튜토리얼을 참고하세요. 선형대수와 관련된 간단한 튜토리얼도 포함되어 있습니다.3
이 책의 구성
이 책은 두 부분으로 구성되어 있습니다. 1부 ‘머신러닝’에서는 다음 주제를 다룹니다.
- 머신러닝이 무엇인가요? 어떤 문제를 해결하려고 하나요? 머신러닝 시스템의 종류와 기본적인 개념은 무엇인가요?
- 전형적인 머신러닝 프로젝트의 주요 단계
- 데이터를 사용해 모델 학습시키기
- 비용 함수 최적화하기
- 데이터 처리, 정제, 준비하기
- 특성 선택과 특성 공학
- 모델 선택과 교차 검증을 사용한 하이퍼파라미터 튜닝
- 머신러닝 주요 도전과제, 특히 과소적합과 과대적합(편향/분산 트레이드오프)
- 차원의 저주 문제를 해결하기 위해 훈련 데이터의 차원 감소시키기
- 가장 널리 사용되는 학습 알고리즘 : 선형 회귀, 다항 회귀, 로지스틱 회귀, k-최근접 이웃, 서포트 벡터 머신, 결정 트리, 앙상블 방법
2부 ‘신경망과 딥러닝’에서는 다음 주제를 다룹니다.
- 신경망이 무엇인가요? 어떤 작업에 잘 맞나요?
- 텐서플로를 사용하여 신경망 만들고 훈련시키기
- 가장 중요한 신경망 구조: 피드포워드 신경망, 합성곱 신경망, 순환 신경망, LSTM 신경망, 오토인코더
- 심층 신경망을 훈련시키기 위한 기법
- 대규모 데이터셋을 위한 신경망의 규모 확장
- 강화 학습
1부에서는 대부분 사이킷런을 기반으로 하고 2부에서는 텐서플로를 사용합니다.
CAUTION_ 깊은 곳으로 성급하게 뛰어들지 마세요. 딥러닝이 머신러닝에서 가장 흥미진진한 분야임에는 의심의 여지가 없지만 먼저 기초적인 것을 마스터해야 합니다. 또한 대부분의 문제는 (1부에서 설명할) 랜덤 포레스트나 앙상블 방법 같은 좀 더 간단한 기법을 사용하여 해결할 수 있습니다. 딥러닝은 이미지 인식이나 음성 인식, 자연어 처리 같은 복잡한 문제에 가장 적합합니다. 충분한 데이터와 컴퓨팅 성능이 있어야 하고 인내도 필요합니다.
그 외 자료
머신러닝을 배울 수 있는 자료가 많이 있습니다. 앤드류 응Andrew Ng의 코세라Coursera 머신러닝 강좌(https://www.coursera.org/learn/machine-learning/)4와 제프리 힌튼의 신경망과 딥러닝 강좌(https://www.coursera.org/course/neuralnets )가 아주 훌륭합니다. 이 강좌들을 들으려면 상당한 시간을 투자해야 합니다(아마 몇 달 정도).
머신러닝에 관한 좋은 웹사이트도 많이 있습니다. 물론 사이킷런의 독보적인 사용자 가이드(http://scikit-learn.org/stable/user_guide.html )도 포함됩니다. 인터랙티브한 튜토리얼을 제공하는 데이터퀘스트Dataquest (https://www.dataquest.io/)와 쿠오라Quora에 나열된(http://goo.gl/GwtU3A) 머신러닝 블로그도 좋습니다. 더 많은 자료는 딥러닝 웹사이트(http://deeplearning.net/)에서 찾을 수 있습니다.
물론 머신러닝을 소개하는 다른 책들도 많이 있습니다.5
- 조엘 그루스Joel Grus의 『밑바닥부터 시작하는 데이터 과학』(인사이트, 2016). 이 책은 머신러닝의 기초를 다루고 몇 가지 주요 알고리즘을 파이썬을 이용하여 직접 구현합니다(이름 그대로 밑바닥부터).
- 스티븐 마슬랜드Stephen Marsland의 『알고리즘 중심의 머신러닝 가이드』(제이펍, 2016). 이 책은 머신러닝을 잘 소개하고 있고 폭넓은 주제를 다루며 파이썬 코드 예제를 제공합니다(역시 밑바닥부터, 하지만 넘파이를 사용합니다).
- 세바스티안 라슈카Sebastian Raschka의 『파이썬 머신러닝』(지앤선, 2017). 또 다른 좋은 머신러닝 입문서입니다. 이 책은 파이썬 오픈소스 라이브러리(사이킷런과 씨아노Theano)를 사용합니다.6
- 야세르 S. 아부-모스타파Yaser S. Abu-Mostafa, 말릭 막돈 이스마일Malik Magdon-Ismail, 쓰엔-티엔 린Hsuan-Tien Lin의 『Learning from Data』(AMLBook). 이 책은 머신러닝의 이론적인 면을 다루고 특히 편향/분산 트레이드오프(4장)를 자세히 설명합니다.
- 스튜어트 러셀Stuart Russell, 피터 노빅Peter Norvig의 『인공지능 1, 2』(제이펍, 2016). 머신러닝을 포함하여 많은 주제를 다룬 좋은 (그리고 방대한) 책입니다. 머신러닝을 넓은 시각으로 바라보도록 도와줍니다.
마지막으로 Kaggle.com 같은 머신러닝 경연 대회 웹사이트에 참여하는 것이 학습하는 데 큰 도움이 됩니다. 실전 문제로 기술을 연습할 수 있고 머신러닝 전문가들로부터 도움과 통찰을 얻을 수 있습니다.
예제 소스
이 책에 포함된 모든 예제 코드는 옮긴이의 깃허브에서 내려받을 수 있습니다.
https://github.com/rickiepark/handson-ml
혹은 아래 주소에서도 예제 코드를 확인할 수 있습니다. 가끔 깃허브가 주피터 노트북을 제대로 보여주지 못하는 경우에 활용하면 좋습니다.
https://nbviewer.jupyter.org/github/rickiepark/handson-ml/tree/master/
1. 힌튼의 홈페이지에서 볼 수 있습니다. http://www.cs.toronto.edu/~hinton/ 옮긴이_ Hinton, G. E., Osindero, S., Teh, Y.의 「A fast learning algorithm for deep belief nets」(2006, https://goo.gl/aoYtUK)를 말합니다.
- 얀 르쿤(Yann Lecun)의 심층 합성곱 신경망이 1990년대 이후에 이미지 인식 문제에서 잘 작동했음에도 불구하고 범용적인 도구는 아니었습니다.
-
옮긴이_ 깃허브에 맷플롯립(tools_matplotlib.ipynb), 넘파이(tools_numpy.ipynb), 판다스(tools_pandas.ipynb)에 대한 튜토리얼과 선형대수 튜토리얼(math_linear_algebra.ipynb)이 포함되어 있습니다.
-
옮긴이_ 앤드류 응 교수는 최근 코세라에 다섯 개의 강좌로 이루어진 딥러닝 전문과정을 열었습니다(https://goo.gl/WnHK7a). 영어가 부담이 된다면 김성훈 님의 「모두의 머신러닝/딥러닝」(https://goo.gl/7PEkVy) 온라인 강좌를 추천합니다.
-
옮긴이_ 최근 인기가 높은 머신러닝 책은 사이킷런을 중심으로 방대한 알고리즘을 소개한 안드리아스 뮐러(Andreas Müller )와 세라 가이도(Sarah Guido)의 『파이썬 라이브러리를 활용한 머신러닝』(한빛미디어, 2017)과 케라스를 중심으로 딥러닝의 소개를 다룬 프랑소와 숄레의 『Deep Learning with Python』(Manning, 2018)이 있습니다. 파이썬으로 신경망을 직접 구현해보는 『밑바닥부터 시작하는 딥러닝』(한빛미디어, 2017)도 인기가 높습니다.
-
옮긴이_ 개정판에서는 씨아노 대신 텐서플로를 사용합니다.