카테고리 보관물: Deep 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에 맞게 많은 부분을 새롭게 작성하였습니다.

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

TensorFlow 2.0.0-alpha0 Release

텐서플로 Dev Summit에 맞추어 텐서플로 2.0.0 알파 버전이 릴리스되었습니다. 🙂

자세한 내용은 릴리스 노트를 참고하세요. 텐서플로 2.0.0-alpha0 버전은 pip를 사용해 설치할 수 있습니다.

$ pip install tensorflow==2.0.0-alpha0
$ pip install tensorflow-gpu==2.0.0-alpha0

TensorFlow 2.0 Keras API Overview

이 글은 “Keras: Overview“을  번역한 것입니다. 이 글은 텐서플로 문서 깃허브에 머지되어 있습니다. 잘못된 점이 있으면 블로그를 통해 알려 주시거나 깃허브에 PR을 보내 주세요.

케라스: 빠르게 훑어보기

Note: 이 문서는 텐서플로 커뮤니티에서 번역했습니다. 커뮤니티 번역 활동의 특성상 정확한 번역과 최신 내용을 반영하기 위해 노력함에도 불구하고 공식 영문 문서의 내용과 일치하지 않을 수 있습니다. 이 번역에 개선할 부분이 있다면 tensorflow/docs 깃헙 저장소로 풀 리퀘스트를 보내주시기 바랍니다. 문서 번역이나 리뷰에 지원하려면 이 양식을 작성하거나 docs@tensorflow.org로 메일을 보내주시기 바랍니다.

tf.keras 임포트

tf.keras케라스 API 명세{:.external}의 텐서플로 구현입니다. tf.keras는 머신러닝 모델을 만들고 훈련하기 위한 고수준 API로서 텐서플로의 특수 기능을 모두 지원합니다. 여기에는 즉시 실행, tf.data 파이프라인(pipeline), Estimators가 포함됩니다. tf.keras를 이용하면 유연성과 성능을 손해보지 않고 텐서플로를 쉽게 사용할 수 있습니다.

tf.keras를 임포트하여 텐서플로 프로그램을 시작합니다:

!pip install -q pyyaml # pyyaml은 선택사항입니다.
from __future__ import absolute_import, division, print_function, unicode_literals

!pip install tf-nightly-gpu-2.0-preview
import tensorflow as tf

from tensorflow import keras

tf.keras는 케라스 API와 호환되는 어떤 코드라도 실행시킬 수 있지만 다음 사항을 유념하세요:

  • 최신 텐서플로 릴리스에 포함된 tf.keras 버전은 PyPI에 있는 최신 keras 버전과 같지 않을 수 있습니다. tf.keras.__version__을 확인해 보세요.
  • 모델의 가중치를 저장할 때 tf.keras는 기본적으로 체크포인트 포맷을 사용합니다. HDF5를 사용하려면 save_format='h5'로 설정하세요.

간단한 모델 만들기

Sequential 모델

케라스에서는 층(layer)을 조합하여 모델(model)을 만듭니다. 모델은 (일반적으로) 층의 그래프입니다. 가장 흔한 모델 구조는 층을 차례대로 쌓은 tf.keras.Sequential 모델입니다.

간단한 완전 연결(fully-connected) 네트워크(즉, 다층 퍼셉트론(multi-layer perceptron))를 만들어 보겠습니다.

from tensorflow.keras import layers

model = tf.keras.Sequential()
# 64개의 유닛을 가진 완전 연결 층을 모델에 추가합니다:
model.add(layers.Dense(64, activation='relu'))
# 또 하나를 추가합니다:
model.add(layers.Dense(64, activation='relu'))
# 10개의 출력 유닛을 가진 소프트맥스 층을 추가합니다:
model.add(layers.Dense(10, activation='softmax'))

여기에서 Sequential 모델을 어떻게 사용하는지 간단하지만 완전한 예제를 볼 수 있습니다.

Sequential보다 더 고수준의 모델을 구성하는 방법을 배우려면 다음을 참고하세요:
케라스 함수형 API 가이드
클래스 상속을 통하여 층과 모델을 밑바닥부터 만드는 방법

계속 읽기

TensorFlow 1.13.1 Release

텐서플로 1.13.1 버전이 릴리스되었습니다. 1.13.1 버전은 모든 운영체에서 파이썬 3.7 바이너리를 지원하며 CUDA 10을 사용하여 빌드되었습니다. 주말 사이에 1.13.0 버전이 준비되었지만 텐서보드 의존성을 수정하면서 1.13.1 버전으로 릴리스되었습니다.

텐서플로 2.0에서는 LSTM의 셀 상태를 위한 기본 활성화 함수가 hard_sigmoid에서 sigmoid로 바뀔 예정입니다. 이로인해 1.x 버전에서 만든 체크포인트 파일을 2.0에서 사용하려면 순환 활성화 함수 매개변수(recurrent_activation)를 hard_sigmoid로 고정해야 합니다.

자세한 내용은 릴리스 노트를 참고하세요. 텐서플로 1.13.1 버전은 pip를 사용해 설치할 수 있습니다.

$ pip install --upgrade tensorflow
$ pip install --upgrade tensorflow-gpu

이펙티브 텐서플로 2.0

이 글은 “Effective TensorFlow 2.0“을  번역한 것입니다. 이 글은 텐서플로 문서 깃허브에 머지되어 있습니다. 잘못된 점이 있으면 블로그를 통해 알려 주시거나 깃허브에 PR을 보내 주세요.

이펙티브 텐서플로 2.0

Note: 이 문서는 텐서플로 커뮤니티에서 번역했습니다. 커뮤니티 번역 활동의 특성상 정확한 번역과 최신 내용을 반영하기 위해 노력함에도 불구하고 공식 영문 문서의 내용과 일치하지 않을 수 있습니다. 이 번역에 개선할 부분이 있다면 tensorflow/docs 깃헙 저장소로 풀 리퀘스트를 보내주시기 바랍니다. 문서 번역이나 리뷰에 지원하려면 이 양식을 작성하거나 docs@tensorflow.org로 메일을 보내주시기 바랍니다.

텐서플로 2.0은 사용자의 생산성을 향상시키기 위해서 많은 것을 바꾸었습니다. 불필요한 API를 제거하고 API의 일관성을 높였으며(Unified RNNs,
Unified Optimizers) 파이썬 런타임(runtime)과 즉시 실행(eager execution)을 통합하였습니다.

여러 RFC 문서에서 텐서플로 2.0의 변경 내용을 확인할 수 있습니다. 이 가이드에서는 텐서플로 2.0을 사용한 개발 방식을 소개합니다. 여러분이 텐서플로 1.x에 친숙하다고 가정하겠습니다.

주요 변경 사항 요약

API 정리

많은 API가 TF 2.0에서 삭제 또는 이동되었습니다. 주요한 변화는 다음과 같습니다. tf.app, tf.flags, tf.logging을 삭제하고 absl-py 오픈 소스를 권장합니다. tf.contrib 아래에 있던 프로젝트를 이동했습니다. 자주 사용하지 않는 함수를 tf.math 같은 서브패키지(subpackage)로 이동하는 식으로 tf.* 네임스페이스(namespace)를 정리하였습니다. tf.summary, tf.keras.metrics, tf.keras.optimizers와 같은 일부 API는 2.0 버전으로 교체되었습니다. 교체된 이름을 자동으로 적용하려면 v2 upgrade script 사용하는 것이 가장 편리합니다.

즉시 실행

텐서플로 1.x에서는 사용자가 tf.* API를 호출해서 추상 구문 트리를 수동으로 구성했습니다. 그다음 session.run()을 호출할 때 출력 텐서와 입력 텐서를 전달하여 추상 구문 트리를 수동으로 컴파일합니다. 텐서플로 2.0은 (보통의 파이썬처럼) 즉시 실행됩니다. 텐서플로 2.0에서 그래프와 세션은 구현 상세(implementation detail)처럼 느껴질 것입니다.

즉시 실행으로 인한 부수효과 중 하나는 더이상 tf.control_dependencies()이 필요하지 않다는 것입니다. 모든 코드는 라인 순서대로 실행됩니다(tf.function 안의 코드도 이 효과로 쓰여진 순서대로 실행됩니다).

전역 메커니즘 제거

텐서플로 1.x는 겉으로 드러나진 않았지만 전역 이름 공간(namespace)에 크게 의존했습니다. tf.Variable()를 호출하면 기본 그래프에 노드(node)를 추가합니다. 노드를 참조하는 파이썬 변수가 삭제되더라도 그래프에 그대로 남아 있습니다. 이 tf.Variable 노드를 다시 참조할 수 있지만 생성할 때 지정한 이름을 알아야만 가능합니다. 변수를 직접 만들지 않았다면 어려운 일입니다. 이 때문에 사용자와 프레임워크가 변수를 추적할 수 있도록 여러 종류의 메커니즘이 늘어 났습니다. 변수 범위(variable scope), 전역 컬렉션(global collection), tf.get_global_step()이나 tf.global_variables_initializer() 같은 헬퍼 메서드 등입니다. 또 옵티마이저(optimizer)는 암묵적으로 훈련 가능한 모든 변수의 그래디언트(graident)를 계산합니다. 텐서플로 2.0은 이런 모든 메커니즘을 삭제했습니다(Variables 2.0 RFC). 대신 파이썬 변수를 추적하는 기본 메커니즘을 사용합니다! tf.Variable의 참조를 잃어 버렸다면 자동으로 가비지 컬렉션(garbage collection)될 것입니다.

사용자가 변수를 관리하는 일이 늘어나지만 케라스(Keras)(아래 참조)를 사용하면 최소화할 수 있습니다.

세션 대신 함수

session.run()은 거의 함수 호출과 비슷합니다. 입력과 함수를 지정하면 일련의 출력을 얻습니다. 텐서플로 2.0에서는 tf.function() 데코레이터(decorator)로 파이썬 함수를 감쌀 수 있습니다. 이렇게 하면 텐서플로가 이 함수를 하나의 그래프로 실행하기 위해 JIT 컴파일합니다(Functions 2.0 RFC). 이 메커니즘 덕택에 텐서플로 2.0에서 그래프 모드의 장점을 모두 계승할 수 있습니다.

  • 성능: 함수를 최적화할 수 있습니다(노드 가지치기(pruning), 커널 융합(kernel fusion) 등).
  • 이식성(portability): 함수를 저장하고 다시 불러올 수 있습니다(SavedModel 2.0 RFC). 모듈화된 텐서플로 함수를 재사용하고 공유할 수 있습니다.
# 텐서플로 1.x
outputs = session.run(f(placeholder), feed_dict={placeholder: input})
# 텐서플로 2.0
outputs = f(input)

파이썬과 텐서플로 코드를 자유롭게 섞어 쓸 수 있기 때문에 파이썬의 장점을 최대한 활용할 수 있습니다. 텐서플로는 파이썬 인터프리터가 없는 모바일, C++, 자바스크립트 같은 환경에서도 실행됩니다. 사용자가 환경에 따라 코드를 재작성하지 않도록 @tf.function를 추가하면 오토그래프(AutoGraph)가 파이썬 코드를 동일한 텐서플로 코드로 변경합니다.

  • for/while -> tf.while_loop (breakcontinue 문을 지원합니다.)
  • if -> tf.cond
  • for _ in dataset -> dataset.reduce

오토그래프는 임의의 중첩된 제어 흐름도 지원합니다. 시퀀스(sequence) 모델, 강화 학습(reinforcement learning), 독자적인 훈련 루프 등 복잡한 머신러닝 프로그램을 간결하면서 높은 성능을 내도록 구현할 수 있습니다.

계속 읽기

TensorFlow 1.13.0 RC2 Release

텐서플로 1.13.0 RC2 버전이 릴리스되었습니다. 이제 공식적으로 파이썬 3.7 바이너리를 지원합니다. macOS와 리눅스는 파이썬 2.7, 3.3, 3.4, 3.5, 3.6, 3.7을 지원하고 Windows는 파이썬 3.5, 3.6, 3.7을 지원합니다.

자세한 내용은 릴리스 노트를 참고하세요. 텐서플로 1.13.0 RC2 버전은 pip를 사용해 설치할 수 있습니다.

$ pip install --upgrade --pre tensorflow
$ pip install --upgrade --pre tensorflow-gpu

TensorFlow 공식 케라스 튜토리얼 한글화

tensorflow-docs

텐서플로의 공식 케라스 튜토리얼을 한글로 번역했습니다. 어제 텐서플로 사이트에 정식으로 배포되었네요! 🙂

아직 케라스 튜토리얼(Learn and use ML)만 번역되어 있습니다. 향후 번역은 텐서플로 2.0에 맞추어 진행하려고 합니다. 3월 텐서플로 Dev 서밋이 기다려지네요! 어쩌면 텐서플로 사이트가 새로 단장될지도 모르겠습니다. 🙂

Grokking Deep Learning

IMG_0282

trask_gdl_hires오래 끌어왔던 Grokking Deep Learning 책이 출간되어 드디어 책상에 도착했습니다. 이 책은 넘파이로 밑바닥부터 신경망을 구현하면서 배우도록 구성되어 있습니다. 전체가 300 페이지로 두껍지 않고 훌륭한 일러스트가 돋보이네요. 원래 계획했던 강화학습 부분이 빠져서 아쉽습니다. 저자가 NLP 연구자라서 그런지 합성곱 신경망 부분은 간략히 다루어져 있습니다. 대신 순환 신경망과 LSTM에 충분한 지면을 할애하고 있습니다. 목차는 아래를 참고하세요. 🙂

  1. Introducing deep learning: why you should learn it
  2. Fundamental concepts: how do machines learn?
  3. Introduction to neural prediction: forward propagation
  4. Introduction to neural learning: gradient descent
  5. Learning multiple weights at a time: generalizing gradient descent
  6. Building your first deep neural network: introduction to backpropagation
  7. How to picture neural networks: in your head and on paper
  8. Learning signal and ignoring noise: introduction to regularization and batching
  9. Modeling probabilities and nonlinearities: activation functions
  10. Neural learning about edges and corners: intro to convolutional neural networks
  11. Neural networks that understand language: king – man + woman == ?
  12. Neural networks that write like Shakespeare: recurrent layers for variable-length data
  13. Introducing automatic optimization: let’s build a deep learning framework
  14. Learning to write like Shakespeare: long short-term memory
  15. Deep learning on unseen data: introducing federated learning
  16. Where to go from here: a brief guide