카테고리 보관물: Deep Learning

PyTorch: New Cool DL Library

0120-sdt-github

널리 사용되는 딥러닝 라이브러리 중 하나는 페이스북에서 많이 사용하는 토치(torch)입니다. 하지만 루아 스크립트 인터페이스 때문에 처음 딥러닝을 시작하는 사람들에게 선택되기는 쉽지 않습니다. 그와중에 구글이 파이썬 인터페이스를 전면으로 내세운 텐서플로우로 딥러닝 프레임워크 시장의 선두로 올라섰습니다. 하지만 앞으로 이야기가 조금 달라질 수 있을것 같습니다. 바로 텐서플로우보다 더 파이써닉한 파이토치(PyTorch)가 공개되었기 때문입니다. 이름을 보아서는 토치에 파이썬 인터페이스를 추가한 것으로 오해할 수 있지만, 이 라이브러리는 넘파이(NumPy) 정도를 제외하고는 거의 의존성이 없으며 텐서 연산을 위한 C++ 코드를 제외하고는 거의 모두 파이썬 구현으로 만들어졌습니다. 이는 대부분의 코드가 C++ 로 구현되어 있고 인터페이스를 파이썬으로 가진 텐서플로우를 비롯한 다른 라이브러리들과는 큰 차이가 납니다. 웹사이트에서 주장하는 바 그대로 “Python First” 입니다.

파이토치의 주요 장점은 모든 텐서의 연산에 대해 자동으로 그래디언트를 계산해 주는 Autograd, NumPy/SciPy 등과의 뛰어난 호환성, 깔끔한 코드 등입니다. 하지만 가장 관심을 끄는 것 중 하나는 다이나믹하게 컴퓨테이션 그래프를 만들어 주는 기능입니다. 즉 텐서플로우를 비롯한 다른 라이브러리들처럼 그래프를 정의하고 실행하는 것이 아니고 코딩되는 대로 그래프가 점진적으로 만들어지는 것입니다. 이런 장점을 가진 라이브러리로는 일본에서 만든 체이너(Chainer)가 있고 최근 카네기멜론 대학의 Clab 에서 공개한 DyNet(말 그대로 다이나믹 넷이죠), 그리고 MXNet을 개발하는 DMLC 에서 최근에 공개한 MinPy 등이 있습니다. 실제로 파이토치의 일부 기능은 체이너의 포크에서 시작되었다고 합니다. 이 프로젝트는 페이스북의 서미스 친탈라(Soumith Chintala)와 아담 파스케(Adam Paszke)가 관리하고 있으며 혼돈될 수 있지만 휴 퍼킨스(Hugh Perkins)가 만든 토치 래퍼인 pytorch와는 다릅니다.

기존의 네트워크와 앞으로의 연구가 얼마나 파이토치로 포팅되어 나올지가 궁금합니다. 자세한 파이토치의 기능은 예제를 뜯어 보면서 정리해서 올리겠습니다. 파이토치는 아직 PyPI 에 올라가 있지는 않지만 비교적 쉽게 설치가 가능합니다. 다만 아직 윈도우 버전이 준비되어 있지 않고 맥에서는 GPU 지원이 되지 않습니다.

# conda (linux, osx)
$ conda install pytorch torchvision -c soumith

# pip : linux + python2.7 + cuda7.5
$ pip install https://s3.amazonaws.com/pytorch/whl/cu75/torch-0.1.6.post22-cp27-cp27mu-linux_x86_64.whl 
$ pip install torchvision

# pip : linux + python2.7 + cuda8.0
$ pip install https://s3.amazonaws.com/pytorch/whl/cu80/torch-0.1.6.post22-cp27-cp27mu-linux_x86_64.whl 
$ pip install torchvision

# pip : linux + python3.5 + cuda7.5
$ pip install https://s3.amazonaws.com/pytorch/whl/cu75/torch-0.1.6.post22-cp35-cp35m-linux_x86_64.whl
$ pip install torchvision

# pip : linux + python3.5 + cuda8.0
$ pip install https://s3.amazonaws.com/pytorch/whl/cu80/torch-0.1.6.post22-cp35-cp35m-linux_x86_64.whl
$ pip install torchvision

# pip : osx + python2.7
$ pip install https://s3.amazonaws.com/pytorch/whl/torch-0.1.6.post22-cp27-cp27m-macosx_10_7_x86_64.whl 
$ pip install torchvision 

# pip : osx + python3.5
$ pip install https://s3.amazonaws.com/pytorch/whl/torch-0.1.6.post22-cp35-cp35m-macosx_10_6_x86_64.whl 
$ pip install torchvision

CS294: Deep RL Start!

지난번에 소개했던 버클리 대학의 CS294: Deep Reinforcement Learning의 2017년 봄 강좌가 시작되었습니다. 전 강좌가 녹화될 것이라고 예고했던 대로, 1월 18일 첫강좌가 유투브에 올려졌습니다. 그리고 앞으로의 강의도 모두 차례대로 플레이스 리스트에 추가될 것 같습니다. 또한 강의 시간에 맞추어 라이브로도 제공됩니다! 강의 시간은 매주 월, 수 오전 9시~10시 30분까지로 우리 시각은 화, 목 새벽 2시 부터입니다.

강의 스케줄과 슬라이드 및 과제물 등 더 자세한 내용은 코스 페이지에서 확인할 수 있고 강의와 관련된 포럼은 레딧으로 진행합니다. 동영상과 슬라이드 링크는 강의가 진행되는 대로 이 포스트에 업데이트하겠습니다.

A Course in ML

cover메릴랜드 대학의 조교수인 할 다움 3세(Hal Daumé III)의 ‘A Course in Machine Learning’이 최근 0.99버전으로 업데이트 되었습니다. 이 책은 웹사이트에서 무료로 책 전체를 다운받을 수 있으며 챕터 별로 나누어서 받을 수도 있습니다. 0.99 버전이라 완성도가 매우 높다고 볼 수 있습니다. 아마 정식 책으로 출간되기 보다는 자가 출판 형태로 판매가 되지 않을까 생각됩니다. 이 책은 약 1년전 부터 쓰여지기 시작했으며 깃허브에 책의 내용과 소스 코드를 공개되어 있습니다.

  1. Front Matter
  2. Decision Trees
  3. Limits of Learning
  4. Geometry and Nearest Neighbors
  5. The Perceptron
  6. Practical Issues
  7. Beyond Binary Classification
  8. Linear Models
  9. Bias and Fairness
  10. Probabilistic Modeling
  11. Neural Networks
  12. Kernel Methods
  13. Learning Theory
  14. Ensemble Methods
  15. Efficient Learning
  16. Unsupervised Learning
  17. Expectation Maximization
  18. Structured Prediction
  19. Imitation Learning
  20. Back Matter

Rules of ML: Best Practice for ML from Google

구글 연구원인 Martin Zinkevich 가 만든 ‘Rules of ML: Best Practices for ML Engineering‘ 이 공개되었습니다. 이 파일은 지난 NIPS 2016의 Reliable Machine Learning in the Wild 워크숍에서 발표한 내용을 정리한 것으로 보입니다. 늘상 보아오던 가이드라인이 아니라 실제 구글에서 여러 서비스를 만들면서 얻은 노하우를 사례를 들어가며 설명하고 있습니다. 이번 주말에 보아야할 문서로 안성맞춤입니다! 🙂

DeepCognition.ai

(업데이트) 세트렉아이의 전태균님이 이 플랫폼이 케라스(Keras)로 만들어졌다고 알려 주셨습니다. 모델을 만든 후 작성된 코드를 다운 받을 수 있는데요. 전태균님의 깃허브에서 직접 작성한 것deepcognition.ai 에서 만든 코드를 비교해 볼 수 있습니다.

Deep Cognition Labs에서 개발한 딥러닝 GUI 플랫폼인 DeepCognition.ai 베타 서비스가 릴리즈 되었습니다. 이 서비스는 웹 기반 어플리케이션으로 마우스 드래그앤 드롭으로 모델을 그리고, 훈련과 테스트를 클라우드 머신(AWS으로 추측됩니다)에서 수행합니다. 딥러닝 라이브러리는 텐서플로우를 사용한다고 합니다. 이와 비슷한 비즈니스 모델이 앞으로 계속 생길 듯하여 만드는 단계를 한번 따라가 보았습니다.

유료 서비스이지만 베타 중이어서인지 결재 정보를 넣지 않고도 간단한 모델을 만들 수 있었는데 임시적인 것인지 일시적인 오류인지는 모르겠습니다. 아직 친절한 설명은 충분하지 않지만 동영상 설명이 있어서 간단한 모델은 쉽게 따라할 수 있을 것 같습니다. 아래는 간단한 MNIST 예제를 만드는 과정입니다.

왼쪽에 간단한 메뉴가 구성되어 있는데 맨 위에 프로젝트를 생성하는 버튼이 있습니다. 프로젝트를 만들고 나서 최대화 아이콘을 누르면 워크 스페이스 같은 창으로 이동됩니다.

%e1%84%89%e1%85%b3%e1%84%8f%e1%85%b3%e1%84%85%e1%85%b5%e1%86%ab%e1%84%89%e1%85%a3%e1%86%ba-2017-01-18-%e1%84%8b%e1%85%a9%e1%84%92%e1%85%ae-11-11-23

계속 읽기

Keras go to TensorFlow

케라스(Keras)를 개발한 구글의 프랑소와 숄레(François Chollet)가 트위터에 남긴 글과 fast.ai 의 블로그로 미루어 보아 케라스가 텐서플로우의 contrib 아래로 들어갈 것 같습니다. 아마도 케라스에서 텐서플로우 부분만 떼어내서 들어가지 않을까 예상됩니다. tf.slim 은 contrib.laryercontrib.slim 에 있는 가장 널리 사용되는 텐서플로우 래퍼(wrapper) 중 하나입니다. 케라스가 포함되면 tf.slim과 함께 텐서플로우의 주요한 하이레벨 API 가 될 것 같습니다.

TensorFlow XLA with JIT Compilation

tf-jit

텐서플로우 XLA(Accelerated Linear Algebra)의 초기 버전이 얼마전 마스터 브랜치에 추가 되었습니다. XLA 는 텐서플로우 백서의 끝부분에 향후 과제로 언급된 성능향상을 위한 JIT 컴파일러에 대한 첫 결과물로 보입니다.

We also have a number of concrete directions to improve the performance of TensorFlow. One such direction is our initial work on a just-in-time compiler that
can take a subgraph of a TensorFlow execution, perhaps with some runtime profiling information about the typical sizes and shapes of tensors, and can generate an optimized routine for this subgraph.

텐서플로우 그래프가 JIT 컴파일 된다면 성능 향상은 물론 다양한 기기, 특히 모바일 기기에 손쉽게 구겨 넣을 수 있을 것으로 보입니다. 그리고 XLA를 지원하는 CPU, GPU 들도 나름 생태계를 만들어 가지 않을까 생각되네요. 이미 예상한 로드맵이라고는 하지만 혀를 내두르지 않을 수 없네요. 지난 NIPS에서 발표한 Jeff Dean의 XLA 자료도 함께 참고하세요.

TensorFlow 1.0.0 alpha Release

텐서플로우 1.0 알파 버전이 릴리즈 되었습니다. 지난번에 포스팅된 API 변화 내용 외에도 추가된 변경사항이 많이 있습니다. 아래는 추가적인 변경 사항 중 대표적인 몇가지 입니다.

  • 나눗셈과 나머지 계산이(/, //, %) 파이썬 2.x 스타일로 변경되었습니다. 즉 제수와 피제수 중 하나만 부동소수면 결과도 부동 소수 입니다(파이썬 3.x 은 제수, 피제수와 상관없이 부동 소수를 리턴합니다). tf.mod, tf.div 도 같은 맥락으로 변경되었으며 정수 결과를 얻기 위해서 tf.truncatemod, tf.truncatediv 를 사용할 수 있습니다.
  • tf.divide 가 현재 사용하고 있는 파이썬에 맞는 나눗셈을 합니다. 만약 파이썬 2 스타일을 원할 경우 tf.div 를, 파이썬 3 스타일로 나눗셈을 할 경우 tf.truediv 를 사용할 수 있습니다.
  • tf.multiply, tf.subtract, tf.negative 가 추가되고 tf.mul, tf.sub, tf.neg 는 deprecated 됩니다.
  • tf.scalar_summary, tf.histogram_summary 같은 summary 연산자가 삭제되고 tf.summary.scalar, tf.summary.histogram 이 추가 되었습니다.

이외에도 많은 버그와 수정사항이 포함되었습니다. 추가 기능으로 눈에 띠는 것은 커맨드라인 디버거(tfdbg)와 자바 API 입니다. tgdbg 는 인터렉티브한 쉘 환경을 사용해 텐서플로우 코드를 살필 수 있는 기능을 제공하는 것 같습니다. 자세한 내용은 커맨드라인 디버거 하우투 문서를 참고하세요(이 페이지의 이미지가 보이질 않네요). 자바 API는 아직 experiment 수준이지만 자바를 즐겨 쓰는 분들에게는 반가운 소식이 될 것 같습니다!

텐서플로우 1.0.0-alpha 버전을 설치하려면 pip 명령에 패키지를 직접 지정해야 합니다.

##### 파이선 2.7
# Ubuntu/Linux 64-bit, CPU only, Python 2.7
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.0.0a0-cp27-none-linux_x86_64.whl

# Ubuntu/Linux 64-bit, GPU enabled, Python 2.7
# Requires CUDA toolkit 8.0 and CuDNN v5.
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.0.0a0-cp27-none-linux_x86_64.whl

# Mac OS X, CPU only, Python 2.7:
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.0.0a0-py2-none-any.whl

# Mac OS X, GPU enabled, Python 2.7:
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/gpu/tensorflow_gpu-1.0.0a0-py2-none-any.whl

##### 파이썬 3.x
# Ubuntu/Linux 64-bit, CPU only, Python 3.4
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.0.0a0-cp34-cp34m-linux_x86_64.whl

# Ubuntu/Linux 64-bit, GPU enabled, Python 3.4
# Requires CUDA toolkit 8.0 and CuDNN v5.
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.0.0a0-cp34-cp34m-linux_x86_64.whl

# Ubuntu/Linux 64-bit, CPU only, Python 3.5
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.0.0a0-cp35-cp35m-linux_x86_64.whl

# Ubuntu/Linux 64-bit, GPU enabled, Python 3.5
# Requires CUDA toolkit 8.0 and CuDNN v5.
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.0.0a0-cp35-cp35m-linux_x86_64.whl

# Mac OS X, CPU only, Python 3.4 or 3.5:
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.0.0a0-py3-none-any.whl

# Mac OS X, GPU enabled, Python 3.4 or 3.5:
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/gpu/tensorflow_gpu-1.0.0a0-py3-none-any.whl

# 설치
$ sudo pip install --upgrade $TF_BINARY_URL

Windows CPU:

C:\> pip install --upgrade https://storage.googleapis.com/tensorflow/windows/cpu/tensorflow-1.0.0a0-cp35-cp35m-win_amd64.whl

Windows GPU:

C:\> pip install --upgrade https://storage.googleapis.com/tensorflow/windows/gpu/tensorflow_gpu-1.0.0a0-cp35-cp35m-win_amd64.whl

Synaptic: NN library for node.js

시냅틱(Synaptic)은 브라우저에서 뉴럴 네트워크를 구동시킬 수 있는 node.js 용 자바스크립트 라이브러리 입니다. 이전에 소개했던 keras.js 는 Keras 라이브러리에서 만든 모델을 브라우저에서 구동시키기 위한 자바스크립트 라이브러리 였지만 시냅틱은 의존성 없이 자체적인 뉴럴 네트워크를 꾸밀 수 있습니다. 제공되는 활성화 함수는 렐루, 하이퍼볼릭 탄젠트, 시그모이드 등을 포함하고 있고 주요 손실 함수는 크로스 엔트로피, 평균 제곱 오차가 있습니다. 또 기본 피드 포워드 뉴럴 넷 뿐만 아니라 리커런트 뉴럴 네트워크(LSTM)도 기본적으로 제공하고 있습니다. 하지만 필요에 따라 원하는 아키텍처를 만드는 것도 어렵지 않아 보입니다. 이 소스 코드는 깃허브에서 확인할 수 있으며 MIT 라이센스 입니다. 아직 완전한 라이브러리는 아니지만 빌드업할 수 있는 발판은 모두 갖춘 것 같습니다. 앞으로 얼마나 커뮤니티가 형성되고 라이브러리를 발전시킬지 기대가 됩니다.

CS294: Deep RL, Spring 2017

cs294

버클리 대학의 강화학습 강좌인 CS294 Deep Reinforcement Learning 의 올해 봄(2017 Spring) 강의가 녹화될 예정이라고 합니다! 이 강의는 버클리 대학의 세르게이 레빈(Sergey Levine) 교수외에 OpenAI의 존 슐만(John Schulman)이 함께 진행합니다. 강화 학습에 관심있다면 한껏 기대해 봐도 좋을 것 같습니다.

강의 페이지에 올려져 있는 맛보기 동영상은 존 슐만이 작년 머신러닝 서머스쿨에서 진행했던 강화 학습 강의입니다.