월간 보관물: 2015 11월

skflow: scikit-learn 스타일의 TensorFlow 인터페이스

구글에서 TensorFlow 를 오픈소스로 공개하면서 Python API 와 C/C++ API 를 같이 제공했습니다. 하지만 문서화 등을 고려하면 TensorFlow를 사용할 때에는 Python 이 주력 언어로 보입니다. 구글은 Python API 에 한 걸음 더 나아가 이미 유명한 scikit-learn 패키지와 유사한 인터페이스로 TensorFlow 를 사용할 수 있는 skflow 를 공개했습니다.

https://github.com/google/skflow

scikit-learn 의 fit/predict 방식을 사용했던 개발자들은 좀 더 손쉽게 TensorFlow 를 시작할 수 있을 것 같습니다. skflow 를 설치하는 방식은 TensorFlow 와 마찬가지로 pip 에서 git 레파지토리를 지정해서 가능합니다.

$ pip install git+git://github.com/google/skflow.git

skflow 와 TensorFlow 를 활용한 튜토리얼도 있는데요. 시간이 되면 번역을 하여 공유하도록 하겠습니다. (추가: 번역된 글입니다.)

Introduction to Scikit Flow and why you want to start learning TensorFlow

TensorFlow 를 이용한 생태계가 얼마나 활성화 될 지 기대가 됩니다.

[update] 텐서플로우 0.6 이 릴리즈 되면서 skflow 를 import 하면 아래와 같은 에러가 발생합니다.

In [1]: import skflow
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-1-cb8af396def9> in <module>()
----> 1 import skflow
...
 23 import tensorflow as tf
 24
---> 25 linear = tf.nn.linear

AttributeError: 'module' object has no attribute 'linear'

이는 linear 함수가 tensorflow.models.rnn 아래에서 tensorflow.python.ops.rnn_cell 밑으로 이동했기 때문입니다. 이 문제를 해결하기 위해서는 업데이트된 skflow 를 재설치 해 주시면 됩니다.

$ pip install --upgrade git+git://github.com/google/skflow.git

재설치하더라도 skflow 의 버전은 0.0.1 로 변하지 않습니다.

(추가) skflow 0.1 버전이 릴리즈 되었습니다.

텐서플로우 vs 테아노(Theano) vs 토치(Torch)

텐서플로우가 나오면서 기존의 딥러닝 프레임워크인 테아노(Theano)와 토치(Torch)와 비교하는 글이 있어 소개합니다.

텐서플로우는 테아노와 유사하게 네트워크 기반의 심볼릭 그래프를 사용합니다. 파이썬과 C/C++ 모두 사용이 가능하지만 주력은 파이썬인 것 같습니다. 모바일과 서버 환경 모두를 고려하고 있습니다. 부가적으로 텐서보드(TensorBoard)를 통해 비주얼라이제이션을 지원합니다.  단점은 이전 포스트에서도 언급되었지만 성능상에서 다른 경쟁자들에 비해 다소 뒤떨어집니다.  그리고 테아노의 scan 같은 네트워크에 있는 심볼릭들을 루핑(loop)할 수 있는 기능은 없습니다.

테아노는 심볼릭 텐서 그래프를 사용하는 최초의 프레임워크로 토치 같은 프레임워크보다 더 유연합니다. 테아노를 기반으로 하는 고수준 프레임워크들도 존재하고 있고 텐서플로우나 토치에서는 지원되지 않는 윈도우즈 환경에서도 사용할 수 있습니다. 반면 텐서플로우에는 없는 컴파일 프로세스로 인한 오버헤드는 단점으로 꼽을 수 있습니다. 파이썬 모듈을 로딩하는 import theano 명령이 느리고 확장이나 개선이 어려운 복잡한 구조를 가지고 있습니다.

토치는 컨볼루션(합성곱 신경망) 부분에서 좋은 성능을 보이고 있고 여러가지 컨볼루션 알고리즘을 구현하고 있습니다. 페이스북에서 토치 기반의 머신러닝 패키지 몇가지를 공개했습니다. 인터페이스는 직관적이어서 좋지만 파이썬 인터페이스가 없습니다. ㅠ.ㅠ 텐서플로우나 토치와 같은 그래프 방식대신 레이어 구조입니다.

텐서플로우와 토치(Torch) 벤치마킹

토치는 루아(Lua) 기반의 딥러닝을 위한 신경망 알고리즘 패키지 입니다. 여러 알고리즘을 벤치마킹하는 Soumith 가 토치와 텐서플로우를 비교해 보았는데요. 결과적으로는 토치의 완승입니다. 텐서플로우가 토치보다 2~3배 가량 느린 것으로 나타났습니다. 이에 대한 내용은 구글팀이 이미 알고 있으면 버그(?) 수정을 위해 작업을 진행하고 있다고 합니다.

마이크로소프트 머신러닝 툴킷 DMTK 오픈소스로 배포

구글에 이어 마이크로소프트까지 머신러닝 오픈소스화에 뛰어 들었습니다. 구글, 페이스북이 주도하는 머신러닝 커뮤니티에 뒤지지 않으려는 행보같습니다. 사실 윈도우즈 환경에서는 대표할 만한 머신러닝 툴킷이 없는 것도 사실입니다. 파이썬이나 R 같은 대표적인 도구들은 윈도우즈 보다는 오히려 맥이나 리눅스에서 더 잘 돌아가는 것 같거든요.

마이크로소프트 입장에서는 클라우드 Azure 를 생각해서라도 머신러닝 생태계를 좌시할 수만은 없었을 것 같습니다. DMTK는 Distributed Machine Learning Toolkit 의 약자입니다. 서버와 클라이언트로 구성이 되어 있으며 C++ 로 개발되어 있습니다. 자동 설치 배포판은 아직 존재하지 않으며 윈도우즈에서는 비주얼 스튜디오로 그리고 리눅스에서는 make 명령으로 컴파일 할 수 있도록 안내하고 있습니다. 아직 맥 환경은 제공하지 않는 듯 합니다.