카테고리 보관물: News

PyTorch vs TensorFlow

조금 자극적인 이 제목은 최근 올라온 레딧(Reddit)의 포스트입니다. 댓글이 뜨겁게 이어지고 있는데요. 코멘트를 읽어 보면 딥러닝 프레임워크에 대한 사람들의 생각을 엿볼 수 있습니다. 재미있는 몇가지 내용을 요약합니다.

  • TF: 분산 환경에 대한 지원, 윈도우즈나 모바일 환경등 다양한 디바이스에 포팅 가능, 디플로이 지원(텐서플로우 서빙을 의미하는 듯), 텐서보드!!, 최근 베치마크에서 성능이 낮았지만 1.0 버전은 모른다, 그래도 Theano 보단 빠르다, 프러덕트에 사용할 거라면, 레이어 구조에 익숙하다면, 폭 넓은 커뮤니티와 구글의 백업
  • Keras: 심각한 작업에 맞닥뜨리면 쓸모가 없다, 교육용이라면
  • pytorch: 빠름 빠름(거의 토치만큼, Theano의 두배), 대세는 다이나믹 그래프(top down 코딩), define+run이 싫다면, 아직 추가되어야 할 게 많다, 연구용이라면 나쁘지 않을 듯, 파이써닉하니까, 디버깅이 편하다, 그래디언트 직접 핸들링, numpy->Tensor(GPU)->Variable(그래디언트) 추상화 좋음
  • 회사에서는 TF, 집에서는 pytorch
  • Lasagne의 API는 아름답고, Caffe는 사망함

scikit-learn 개발자에게 물어봅시다!

지금 번역하고 있는 책(Introduction to Machine Learning with Python)의 저자 안드리아스 뮐러(Andreas Müller)는 사이킷런(scikit-learn)의 핵심 개발자로 사이킷런 개발과 운영에 모두 깊게 참여하고 있습니다. 또 앤디는 뉴욕대학교의 리서치 엔지니어였는데 올해부터는 콜롬비아 대학에서 머신 러닝 강의를 맡고도 있습니다.

책을 번역하면서 저자에게 직접 이메일 인터뷰를 할 기회를 얻었습니다. 머신 러닝과 사이킷런에 관한 것이라면 무엇이든지 보내 주세요! 재미있고 또 다른 독자에게도 유익한 질문이면 더 좋겠지요. 보내주신 질문을 정리해서 저자에게 보내겠습니다. 이 질문과 저자의 대답은 번역서에도 부록으로 실을 예정입니다. haesunrpark+sklearn at gmail.com 으로 보내 주셔도 되고 아래 입력 폼을 사용하셔도 됩니다!

  • Kwak ** 님: IncrementalPCA 처럼 LDA(Linear Discriminant Analysis)에 온라인 러닝을 할 수 있는 기능을 추가할 계획은 없나요?
  • Choi ** 님: 실전에서 Bagging 만으로 충분하기 때문에 Jackknife(Leave-one-out) 방식의 회귀 모델이 없는 것인가요?
  • piper 님: 딥러닝이 큰 붐을 일으키고 있습니다. 딥러닝(뉴럴 네트워크)외에 다른 지도학습 알고리즘을 사용했을 때의 장점은 무엇일까요? 딥러닝 엔지니어도 머신 러닝을 꼭 알아야 하는 지 궁금합니다.
  • lunrot 님: Hidden Markov Model 이 사이킷런 0.17 에서 제외된 이유는 무엇인가요? 혹시 다시 추가될 가능성은 없는지요?

YouTube-BB Datasets

image00

구글이 작년 가을에 공개한 YouTube-8M 데이터셋에 이어 이번에는 YouTube-BoundingBoxes 데이터셋을 공개하였습니다. 화면에 어떤 오브젝트가 있는지를 알아내는 것뿐만 아니라 오브젝트가 어디로 이동하고 있는지 시간에 따라 어떤 변화를 가지는지 연구하기 위한 데이터셋입니다. 무려 24만개 동영상에서 23개 오브젝트에 대해 백만개 이상의 사각 영역 좌표를 표시해 놓았습니다. 사람이 처리한 동영상 데이터셋으로는 최대라고 합니다. 브라우저로 데이터셋을 둘러 볼 수 있으며 동영상의 유투브 아이디와 오브젝트 좌표, 나타난 시간이 담겨 있는 훈련/검증 데이터를 다운받을 수 있습니다. 관련 페이퍼도 참고하세요. 그런데 다른 오브젝트는 그렇다쳐도 toilet 데이터는 왜 만든 걸까요? 🙂

PyTorch: New Cool DL Library

0120-sdt-github

(업데이트) 파이토치는 토치(Torch)의 코어 C 라이브러리를 공유하고 있으며 대략 2016년 5월 경에 시작된 것으로 추측됩니다. 텐서플로우도 다이나믹 그래프를 위한 시도를 하고 있으나(TensorFlow Fold) 아직 페이퍼외에 코드로 공개된 것은 없습니다.

널리 사용되는 딥러닝 라이브러리 중 하나는 페이스북에서 많이 사용하는 토치(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

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

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

계속 읽기

Scikit-learn & Pandas Cheat Sheet

데이터캠프(Datacamp) 블로그에서 파이썬 머신러닝 라이브러리인 사이킷런(scikit-learn)과 데이터 분석을 위한 라이브러리 판다스(pandas)의 치트 시트를 만들어 공개했습니다. 사이킷런과 판다스를 좋아한다면, 잘 정돈된 이 치트 시트를 프린트해서 책상에 붙이고 싶은 충동을 억제하기 힘들 것 같습니다. 🙂

(업데이트) 넘파이(NumPy) 치트시트도 추가되었습니다. 싸이파이(SciPy) 치트시트도 추가 되었습니다. 와우! (2017-02-22) 맷플롯립의 치트시트도 추가되었습니다!

(클릭하면 전체화면으로 볼 수 있습니다. pdf 버전은 여기-scikit-learn, pandas, numpy, SciPy, matplotlib-에서 받을 수 있습니다.)

scikit_learn_cheat_sheet_python

pandaspythonfordatascience

numpy_python_cheat_sheet

python_scipy_cheat_sheet_linear_algebra

python_matplotlib_cheat_sheet

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 자료도 함께 참고하세요.

Synaptic: NN library for node.js

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

NIPS 2016 GAN Tutorial Summary

nips_2016_gan_report

OpenAI 의 이안 굿펠로우(Ian Goodfellow)가 NIPS 2016의 GAN 튜토리얼을 요약한 리포트를 만들어서 Arxiv 에 등록하였습니다. 생성 모델(generative model)이 인기를 끄는 이유와 어떻게 작동하는지, GAN(Generative Adversarial Network)이 다른 모델과 다른 점과 GAN이 작동하는 상세 내용을 다룹니다. 또 최근 GAN 연구 동향과 최신 모델도 함께 다루고 있어 놓치기 아까운 리포트인 것 같습니다!