태그 보관물: Python Machine Learning

Python Machine Learning 2nd Ed. 번역 후기

cover_1

세바스찬 라시카의 Python Machine Learning 2nd Ed. 의 번역과 역자 교정을 마쳤습니다. 작업된 책이 조판으로 넘어가면 늘 아쉽습니다. 이때는 지식보다는 끈기가 더 중요한 것 같습니다. 작업 과정을 되돌아 보며 후기를 남깁니다.

개인적으로 머신 러닝 분야의 실용서 베스트 네 개를 꼽으라면 안드리아스 뮐러와 사라 가이도의 “Introduction to Machine Leaning with Python“, 오렐리앙 제롱의 “Hands-On Machine Learning with Scikit-Learn and TensorFlow“, 프랑소와 숄레의 “Deep Learning with Python“, 세바스찬 라시카의 “Python Machine Learning”입니다. 제가 이 네 권을 모두 번역했다는 사실이 믿기지 않습니다. 사실 가장 먼저 보았던 세바스찬의 책은 1판의 번역서가 이미 다른 곳에서 출간되었기 때문에 2판을 번역할 기회를 얻기 힘들거라 생각했습니다. 정말 큰 행운이 따랐기 때문에 이 책을 번역할 수 있었습니다. 기회를 주신 길벗 출판사에 다시금 감사드립니다.

네 권의 책은 모두 나름대로 저마다 다른 색깔을 가지고 있습니다. 앤디의 책은 머신 러닝 파이프라인 전반의 흐름을 잘 정리하였습니다. 역시 사이킷런의 핵심 개발자답습니다. 오렐리앙의 책은 이론과 코드가 균형을 잘 잡고 있고 머신러닝과 딥러닝 부분을 잘 설명하고 있습니다. 프랑소와의 책은 이론보다 코드를 중심으로 딥러닝 특히 케라스 라이브러리를 중점적으로 다룹니다. 케라스 창시자인 그가 바라보는 딥러닝과 인공지능의 청사진을 엿볼 수도 있습니다.

세바스찬의 책은 이들 중 가장 먼저 아마존 인공지능 분야 베스트셀러가 된 책입니다. 오렐리앙의 책처럼 머신러닝과 딥러닝을 모두 아우르고 있지만 넘파이를 사용해 알고리즘을 밑바닥부터 만들기 시작합니다. 이론과 코드가 잘 안배되어 있고 사이킷런과 텐서플로를 함께 사용합니다. 다른 책에서는 잘 설명되지 않는 선형 판별 분석과 커널 PCA를 자세히 다루고 있습니다. 웹 애플리케이션에 머신러닝 모델을 임베딩하여 배포하는 장은 이 책의 특징 중 하나입니다.

Python Machine Learning 2판이 2017년에 출간되었기 때문에 사용한 라이브러리 버전이 낮습니다. 번역서에서는 사이킷런의 최신 버전 0.20을 기준으로 새롭게 바뀐 점과 중요한 변화를 포함시켰습니다. 딥러닝 챕터를 바꾸는 작업이 어려웠습니다. 작년 말에 텐서플로 2.0 프리뷰가 나왔지만 아직 정보가 부족했고 정식 릴리스 일정을 알 수 없기 때문입니다. 출판사와 협의한 끝에 출간 일정이 조금 늦춰지더라도 텐서플로 2.0을 기준으로 딥러닝 부분을 바꾸기로 결정했습니다. 덕분에 13~16장에 텐서플로 2.0 알파 버전에서 새롭게 바뀐 부분을 반영할 수 있었습니다.

작년 9월부터 작업을 시작했습니다. 다른 일들도 있었지만 너무 오래 걸렸네요. 매년 겨울마다 큰 곤욕을 치르는 것 같습니다. 친절하게도 저자 세바스찬이 직접 에러타로 인해 수정된 pdf와 이미지를 보내주었습니다. 제가 추가로 찾은 에러타는 원서 깃허브에 올렸고 신중하게 판단하여 번역서에 반영하였습니다. 세바스찬이 에러타와 함께 덕담도 건네 왔습니다. “It’s good to know that the translation will be in good hands! :)”.

복잡한 수식과 많은 주석 때문에 고생하셨을 디자이너와 교정자에게 감사드립니다. 편집과 번역 전반의 과정을 잘 안내해 주신 안윤경 님께도 감사드립니다. 부디 많은 사람들에게 사랑받는 책이 되었으면 좋겠습니다. 감사합니다! 😀

“머신 러닝 교과서” 베타 테스터 모집합니다!

 

“머신 러닝 교과서”의 정오표 페이지는 여기입니다.

 

지난 겨울내내 끙끙맸던 세바스찬 라시카의 “Python Machine Learning” 2nd Ed. 번역을 마쳤습니다. 원서와 달리 번역서는 사이킷런 0.20과 텐서플로 2.0을 기준으로 출간됩니다. 특히 딥러닝을 설명하는 후반 챕터는 텐서플로 2.0에 맞게 많은 부분을 새롭게 작성하였습니다.

길벗 출판사에서 이 책의 베타 테스터를 모집합니다. 페북 글을 참고하시고 관심있으신 분은 신청해 주세요. 감사합니다! 🙂

Convolution vs Cross-correlation

합성곱convolution 혹은 콘볼루션 신경망은 주로 시각 분야 애플리케이션에 널리 사용됩니다. 위키피디아의 합성곱 정의를 보면 “하나의 함수와 또 다른 함수를 반전 이동한 값을 곱한 다음, 구간에 대해 적분하여 새로운 함수를 구하는 수학 연산자이다“라고 잘 설명되어 있습니다. 그리고 다음과 같은 애니메이션으로도 많이 익숙합니다.

no_padding_no_strides1

조금 더 적분스러운 표현의 그림은 위키피디아의 그림이 직관적입니다.

convolution_of_spiky_function_with_box2

그림으로 표현이 어려운 점은 두 함수 중 하나를 반전시킨다는 점입니다.

합성곱과 거의 비슷한 연산으로 교차상관cross-correlation이 있습니다. 교차상관의 정의를 보면 한 함수를 반전한다는 것만 빼고는 합성곱과 동일합니다.

합성곱: (f*g)(t) = \int_{-\infty}^{\infty} f(\tau)g(t-\tau)\, d\tau

교차상관: (f*g)(t) = \int_{-\infty}^{\infty} f(\tau)g(t+\tau)\, d\tau

합성곱 신경망의 입력값에 필터(가중치 혹은 커널)를 콘볼루션하려면 필터를 뒤집어서 적용해야 합니다. 그런데 어차피 필터의 값을 학습하려는 것이 목적이기 때문에 뒤집어서 콘볼루션을 하나 그냥 하나 동일합니다. 학습과 추론inference시에 필터만 일정하면 됩니다. 그래서 딥러닝 프레임워크들은 합성곱이 아니고 그냥 교차상관으로 구현되어 있습니다. 하지만 관습상 합성곱이라고 부릅니다. 사실 이게 중요한 문제는 아닌 것 같습니다.

인기를 끌었던 “파이썬 머신 러닝” 2판이 나오면서 합성곱에 대한 내용이 많이 보강되었습니다. 보통 다른 책들은 피드포워드 신경망(혹은 퍼셉트론) 정도를 넘파이NumPy로 직접 구현해 보고 합성곱 신경망부터는 텐서플로 같은 라이브러리를 사용하는 것이 일반적입니다. 합성곱이나 패딩, 스트라이드 등을 코드로 구현하기가 번거롭기 때문이겠죠.

여기서 저자는 직접 합성곱을 구현한 코드를 추가했습니다. 그런데 교차상관이 아니라 (필터를 뒤집어서) 진짜 합성곱을 했습니다. 물론 합성곱과 교차상관에 대한 비슷한 점을 언급하기는 했지만 굳이 합성곱을 구현할 필요가 있었을까, 보통의 경우 교차상관을 사용한다고 언급해주면 좋지 않았을까 하는 생각이 들었습니다. 그래서 메일을 보냈더니 다음 중쇄할 때 관련 코멘트를 추가한다고 회신이 왔네요.

혹시 원서를 읽으시는 분이 있다면 다른 라이브러리들이 진짜 합성곱 연산을 하는 것으로 오해하지 마세요. 🙂

Python ML 2nd Edition

cover_1세바스찬 라쉬카Sebastian RaschkaPython Machine Learning2판이 준비되고 있습니다. scikit-learn을 중심으로 쓰여진 파이썬 머신러닝 도서로 인기가 많았던 1판에 비해 여러가지 내용이 추가되어 페이지도 많이 늘어 났습니다(501 페이지 600 페이지가 넘네요).

가장 큰 변화는 구글 텐서플로TensorFlow에 대한 소개와 CNN, RNN 챕터를 추가한 것입니다. 아래 목차를 참고하세요.

  1. Machine Learning – Giving Computers the Ability to Learn from Data
  2. Training Machine Learning Algorithms for Classification
  3. A Tour of Machine Learning Classifiers Using Scikit-Learn
  4. Building Good Training Sets – Data Pre-Processing
  5. Compressing Data via Dimensionality Reduction
  6. Learning Best Practices for Model Evaluation and Hyperparameter Optimization
  7. Combining Different Models for Ensemble Learning
  8. Applying Machine Learning to Sentiment Analysis
  9. Embedding a Machine Learning Model into a Web Application
  10. Predicting Continuous Target Variables with Regression Analysis
  11. Working with Unlabeled Data – Clustering Analysis
  12. Implementing a Multi-layer Artificial Neural Network from Scratch
  13. Parallelizing Neural Network Training with TensorFlow
  14. Going Deeper: The Mechanics of TensorFlow
  15. Classifying Images with Deep Convolutional Neural Networks
  16. Modeling Sequential Data Using Recurrent Neural Networks

이 책은 9월에 출간될 예정이지만 소스 코드는 깃허브에서 주피터 노트북으로 읽으실 수 있습니다.