월간 보관물: 2016 11월

TensorBoard support Embedding Visualization

 

텐서플로우 0.12 버전의 텐서보드에서 임베딩 벡터를 시각화하는 기능이 추가되었습니다. 와우! 좀 더 자세한 내용은 텐서플로우 임베딩 비주얼라이제이션 하우투를 참고하세요.

TensorFlow v0.12.0 RC0

텐서플로우 0.12 버전의 릴리즈 캔디데이트(Release Candidate)가 깃허브에 올라왔습니다. 0.12 버전에서 가장 눈에 띄는 것은 윈도우즈에 대한 지원과 Go 언어를 위한 API 추가인 것 같습니다. 윈도우 버전은 파이썬 3.5 에서 가능합니다. 0.12 RC0 버전 부터는 텐서플로우 패키지가 PyPI 에 업로드되어 있어 pip 명령으로 간단히 설치할 수 있게 되었습니다. 다만 맥, 리눅스의 GPU 버전은 파일 사이즈 때문에 PyPI 에 업로드가 안된다고 하네요. 😦

맥, 리눅스, 윈도우즈 CPU 버전(아나콘다 권장)

$ pip install tensorflow

윈도우즈 GPU 버전(아나콘다 권장)

$ pip install tensorflow-gpu

맥, 리눅스 GPU 버전

# Ubuntu/Linux 64-bit, GPU enabled, Python 2.7
# Requires CUDA toolkit 8.0 and CuDNN v5. For other versions, see "Installing from sources" below.
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-0.12.0rc0-cp27-none-linux_x86_64.whl

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

# Ubuntu/Linux 64-bit, GPU enabled, Python 3.4
# Requires CUDA toolkit 8.0 and CuDNN v5. For other versions, see "Installing from sources" below.
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-0.12.0rc0-cp34-cp34m-linux_x86_64.whl

# Ubuntu/Linux 64-bit, GPU enabled, Python 3.5
# Requires CUDA toolkit 8.0 and CuDNN v5. For other versions, see "Installing from sources" below.
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-0.12.0rc0-cp35-cp35m-linux_x86_64.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-0.12.0rc0-py3-none-any.whl

sudo pip install --upgrade $TF_BINARY_URL

MXNet, DL Framework of Choice at AWS

지난 주 아마존 CTO 워너 보글스(Werner Vogels)는 AWS 에서 사용할 수 있는 딥러닝 프레임워크로 MXNet 을 추가했으며 앞으로 아마존이 MXNet 의 개발을 지원하겠다고 발표하였습니다. MXNet 은 카네기 멜론 대학과 워싱톤 대학이 시작한 이후 많은 대학과 회사들의 후원을 받고 있는 딥러닝 오픈소스 라이브러리입니다. 깃허브 활동에서도 크게 뒤쳐지지 않고 활발히 개발되고 있습니다. 특징으로는 파이썬, 줄리아(Julia), R, 매트랩(Matlab), 스칼라(Scala) 등 다양한 인터페이스를 지원하는 것이 눈에 띄입니다. 성능과 대용량 처리 부분에서도 크게 뒤지지 않는 듯 보입니다.

그럼 아마존의 데스트니(DSSTNE)는 어떻게 되는 것인지 모르겠습니다. 자체 라이브러리의 생태계를 만들어 가는 것이 역부족이라고 느낀 것일까요. 아니면 구글이 스탠포드 비전랩의  Fei Fei, Li 교수와 스냅챗의 Jia Li 를 구글 클라우드의 머신러닝 유닛을 이끌 수장으로 영입한 것이 영향을 미쳤을지도 모릅니다. 문제는 프레임워크가 아니고 클라우드 비즈니스라고 말이죠.

또 트위터가 2015년 웻랩(Whetlab)을 인수하면서 영입한 AI 연구자 다섯명이 트위터 코텍스(Twitter Cortex)를 떠난다는 소식이 있었습니다. 그 중에 업계에 비교적 잘 알려진 휴고 라로쉘(Hug Larochelle)은 구글로 자리를 옮겼습니다. 구글이 요슈아 벤지오(Yoshua Bengio) 교수가 있는 몬트리올 대학 MILA 랩에 3백만 달러(역대 최고라 하는군요)를 지원하기로 발표하면서 휴고 라로쉘이 구글의 몬트리올 랩의 리더가 되었습니다. 거기에 최근에는 OpenAI 가 클라우드 플랫폼으로 마이크로소프트의 애저(Azure)를 선택한다고 발표하니 아마존이 다급해진 것일까요. 여러모로 프레임워크로 경쟁하기 보다는 실리를 추구하는 쪽으로 선회한 것일지 모르겠습니다.

아마존의 AWS 에는 MXNet, Caffe, Tensorflow, Theano, Torch 그리고 CNTK 가 미리 설치되어 있는 딥러닝 AMI 가 있습니다. 그리고 사용자는 여전히 입맛에 맞는 프레임워크를 설치해서 사용할 수 있습니다. 하지만 앞으로 AWS RDS 처럼 관리형 딥러닝 서비스가 나온다면 MXNet 이 첫번째 후보가 될수 있을 것 같습니다.

PixelCNN [1601.06759] Summary

Pixel Recurrent Neural Networks‘[1601.06759] 페이퍼에는 세개의 네트워크 모델을 설명하고 있습니다. PixelRNN 으로 명명된 Row LSTM, Diagonal BiLSTM 과 PixelCNN 입니다. 이 중에 PixelCNN 부분을 재현해 보았습니다. PixelCNN 은 PixelRNN 에 비해 비교적 학습 속도가 빠르고 PixelCNN 후속 페이퍼도 계속 나오고 있습니다. 문제를 단순화하기 위해 MNIST 손글씨 숫자 흑백 이지미를 대상으로 하였습니다.

PixelCNN 의 몇가지 주요한 핵심 중 하나는 입력 특성을 콘볼루션할 때 필터의 일부분만 사용한다는 점입니다. 입력 특성맵과 출력 특성맵이 같은 크기이고(텐서플로우에서 ‘SAME’ 패딩) 스트라이드가 1일 때 홀수 크기의 필터는 필터의 중심이 입력 특성맵의 모든 픽셀을 지나가게 됩니다. 이 때 필터의 중심에서 오른쪽 그리고 아래 부분의 가중치를 0 으로 셋팅하면 입력 특성맵에서 필터의 중심의 왼쪽과 위쪽의 픽셀에만 가중치를 적용(콘볼빙)하게 됩니다. 이를 그림으로 나타낸 것이 페이퍼에 잘 나와 있습니다.

왼쪽 그림에서 아래 레이에에서 콘볼빙하여 윗 레이어의 특성 맵을 만들 때 아래 레이어의 3 x 3 필터 중심(붉은색)의 왼쪽과 위의 픽셀에만 가중치가 곱해지는 것을 보이고 있습니다. 이를 마스크 콘볼루션(masked convolution)이라고 부르고 있습니다. 필터를 마스크하기 위해서는 필터의 중심에서 우측과 아래의 가중치를 0 으로 셋팅하면 됩니다.

계속 읽기

GAN & PixelCNN

뉴럴 네트워크를 사용해 이미지를 생성해 내는 몇가지 방법 중 최근 GAN(Generative Adversarial Networks)와 PixelCNN 에 관한 새로운 페이퍼와 코드가 공개되어서 소개해 드립니다.

GAN 에 관련된 페이퍼로는 이안 굿펠로우(Ian Goodfellow), 요수아 벤지오(Yoshua Bengio) 교수 등이 쓴 Generative Adversarial Networks와 인디코, 페이스북의 서미스 친탈라(Soumith Chintala) 가 쓴 Unsupervised representation learning with deep convolutional generative adversarial networks 등을 시작으로 여러편이 나왔던 것 같습니다. 최근에 버클리 대학의 AI 리서치랩(BAIR)에서 GAN 을 사용하여 이미지 대 이미지 변환을 만드는 pix2pix 의 페이퍼와 토치 코드를 공개하였습니다. 이 코드의 텐서플로우 버전이 나올지 기대됩니다.

pix2pix

출처: pix2pix 페이퍼

PixelCNN 은 딥마인드 팀이 내 놓은 Pixel Recurrent Neural Networks 와 역시 딥마인드 팀이 작성한 Conditional Image Generation with PixelCNN Decoders 가 있습니다. PixelRNN 과 PixelCNN 에 대한 텐서플로우 구현은 김태훈님의 pixel-rnn-tensorflow 레파지토리가 잘 알려져 있습니다. OpenAI 의 안드레이 카패시(Andrej Karpathy) 등이 최근에 PixelCNN 을 보완한 PixelCNN++ 의 페이퍼와 텐서플로우 코드를 공개하였습니다. 이 페이퍼는 ICLR 2017 에 등록되어 있습니다. PixelCNN++ 에 대해 좀 더 자세한 내용이 확인되면 다시 포스팅하겠습니다.

Intel’s DL Chip & Framework

intel-dlia-fpga-sc16

출처: datacenterfrontier.com

인텔에서 새로운 딥러닝 칩인 DLIA(Deep Learning Inference Accelerator)와 딥러닝 프레임워크 너바나 그래프(Nervana Graph) 를 발표(datacenterfrontier, nervanasys)했습니다. DLIA는 일전에 마이크로소프트가 발표했던 Catapult 처럼 FPGA 방식입니다. 이름에서 알 수 있듯이 모델 학습이 아니고 추론(Inference)에 맞춰져 개발되었습니다.

ngraph_preview_3-1

출처: nervanasys.com

너바나 그래프(ngraph)는 프론트엔드, ngraph API, 트랜스포머 세 부분으로 구성되어 있다고 합니다. 너바나 그래프의 큰 특징은 여러 딥러닝 프레임워크의 API 를 그대로 사용해서 그래프를 만들면 이를 트랜스포머를 사용하여 변환한 후 여러 하드웨어에 맞추어 실행시킬 수 있는 점입니다. 현재 프리 릴리즈에서 제공하는 프론트엔드는 너바나시스템즈의 네온(neon) 프레임워크와 구글의 텐서플로우 입니다. 아직 텐서플로우의 모든 API 를 지원하지는 않습니다만 아마도 빠르게 개발이 진행될 것으로 보입니다. 아래는 텐서플로우로 만든 그래프를 트랜스포머로 변경하여 실행시키는 간단한 예제 중 일부 코드입니다.

# write tensorflow models
x = tf.placeholder(tf.float32, [args.batch_size, 784])
t = tf.placeholder(tf.float32, [args.batch_size, 10])
w = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
y = tf.matmul(x, w) + b
cost = tf.reduce_mean(-tf.reduce_sum(t * tf.log(tf.nn.softmax(y)), reduction_indices=[1]))
init = tf.initialize_all_variables()

# import graph_def
with tf.Session() as sess:
    graph_def = sess.graph_def
importer = TFImporter()
importer.parse_graph_def(graph_def)

# get handle of ngraph ops
x_ng, t_ng, cost_ng, init_op_ng = importer.get_op_handle([x, t, cost, init])

# transformer and computations
transformer = ngt.make_transformer()
updates = SGDOptimizer(args.lrate).minimize(cost_ng)
train_comp = transformer.computation([cost_ng, updates], x_ng, t_ng)
init_comp = transformer.computation(init_op_ng)
transformer.initialize()

# train
mnist = input_data.read_data_sets(args.data_dir, one_hot=True)
init_comp()
for idx in range(args.max_iter):
    batch_xs, batch_ys = mnist.train.next_batch(args.batch_size)
    cost_val, _ = train_comp(batch_xs, batch_ys)
    print("[Iter %s] Cost = %s" % (idx, cost_val))

위 코드에서 importer.parse_graph_def 대신 importer.parse_protobuf 를 사용하면 텐서플로우의 SummaryWriter 로 저장한 모델을 불러서 임포트 시킬 수 있다고 합니다. 즉 다른 사람이 만든 그래프를 코드 레벨이 아니고 데이터 레벨로 공유 받아서 ngraph 를 실행시킬 수 있습니다. ngraph 의 또 하나의 재미있는 특징은 텐서의 차원에 네이밍을 하여 재사용 가능한 Axis 를 도입한 점입니다. 딥러닝 모델들이 텐서의 차원을 맞추는 귀찮니즘을 동반하고 있다는 걸 잘 캐치한 것 같습니다.

인텔은 작년에 FPGA 분야의 선두 업체인 알테라(Altera)를 인수했고 지난 8월에는 너바나(Nervana) 시스템즈를 인수하였습니다. DLIA 와 ngraph 는 그 이후에 내놓는 첫 결과물인 것 같습니다. 앞으로는 인텔이 칩 분야 뿐만 아니라 프레임워크에서도 어떤 성과를 내놓을지 기대를 해봐도 좋을 것 같습니다.

ICLR2017 Paper Index

일전에 ICLR2017 을 위해 등록된 페이퍼가 500 개가 넘는다고 포스팅했었는데요. 오픈리뷰 사이트가 가끔 먹통이 되거나 굉장히 느려지기도 해서 페이퍼 리스트를 모두 받아 저자와 기관 그리고 키워드로 인덱싱 해서 깃허브에 올려 놓았습니다.

대략 훑어 보니 요슈아 벤지오(Yoshua Bengio) 교수가 16 편 그리고 애런 코빌(Aaron Courville) 교수가 10 편으로 가장 많은 페이퍼에 참여했습니다. 담당 기관별로는 몬트리올 대학이 37 편, 버클리 대학과 페이스북, 마이크로소프트가 각 34 편, OpenAI 와 스탠포드 대학이 21 편 그리고 구글이 96 편 입니다! 키워드별로 보면 Deep learning 이 311 편으로 가장 많고 Unsupervised Learning 이 89 편, Natural language processing 이 88 편 입니다. 한 페이퍼가 중복되어 리스트 될 수 있으니 참고하세요.

OpenAI + Microsoft

OpenAI 가 딥러닝을 위한 플랫폼으로 마이크로소프트의 Azure 를 사용하기로 협약했다는 발표가 OpenAI 블로그마이크로소프트의 블로그에 각각 실렸습니다. OpenAI 는 그 동안 시라스케일(Cirrascale)을 사용하고 있는 것으로 알려졌었는데요. 아마존이 AWS 에 새로운 GPU 인스턴스를 출시했음에도 불구하고 동일한 K80 GPU 를 쓰고 있는 Azure 를 택한 것은 다소 의외인 것 같습니다. 마이크로소프트가 뭔가 파격적인 제안을 했을까요?

OpenAI 블로그에 따르면 Azure 에서 수천에서 수만대 까지 인스턴스를 사용할 것 같다고 합니다. 마이크로소프트가 이번 계기로 자사의 딥러닝 툴킷 CNTK 의 저변을 넓히는 데 힘을 얻을 수 있을까요. 깃허브의 딥러닝 인기도 조사(?)를 하고 있는 프랑소와 숄레(François Chollet)의 최근 트윗을 보면 바이두의 패들패들이 CNTK 보다 조금 더 활발히 움직이고 있는 것으로 보입니다.

cxutsrnucaebsg4

Quiver: Deep Visualization for Keras

카페(Caffe)의 모델에서 피처를 비주얼라이제이션 해 주는 Deep Visualization Toolbox(github)가 비교적 잘 알려져 있습니다. 아래 동영상으로도 유명하죠.

Deep Visualization Toolbox 의 케라스(Keras) 버전격인 퀴버(Quiver, github)가 만들어졌습니다. 케라스의 백엔드를 텐서플로우로 사용하면 퀴버가 텐서플로우에서도 유용하게 사용될 수 있을 것 같습니다. 케라스의 생태계가 빠르게 성장하고 있는 것 같네요. 아래 동영상과 깃허브 레파지토리를 함께 참고하세요.

(업데이트) 얼마전에 구글의 withgoogle.com 에 aiexperiments 가 추가되었는데요. 여기에 진 코간(Gene Kogan)이 만든 콘볼루션의 피처와 필터를 보여주는 데모 ‘What Neural Networks See‘ 가 있습니다. 동영상에서 데모를 보여주면서 설명도 해 주고 있습니다. 이 소스는 C++ 로 만들어져 있으며 깃허브에서 확인하실 수 있습니다.

Python for Data Analysis 2nd Ed.

rc_cat판다스(pandas) 라이브러리를 만든 웨스 맥키니(Wes Mckinney)의 ‘Python for Data Analysis‘의 2판이 준비되고 있습니다. 아직 절반도 채 못 쓰여졌지만 이북(ebook) 형태로 미리 구매하여 보실 수 있습니다. 2판은 조금 분량이 늘어나고 웨스의 전공 분야인 금융 어플리케이션에 대한 사례가 빠졌습니다. 대신 고급 판다스, 통계 모델과 사이킷런(scikit-learn)이 한 챕터씩 추가되었습니다. 그리고 표지의 두더지 사진이 반대 방향으로 바뀌었네요! 🙂

 

rc_cat1비슷한 성격의 또 하나의 데이터 과학 책인 ‘Python Data Science Handbook‘ 곧 출간될 예정입니다. 이 책은 워싱톤 대학의 연구원인 제이크 반더플라스(Jake VanderPlas)가 썼습니다. Python for Data Analysis 보다 조금 볼륨이 작고 겹치는 부분이 많이 있습니다. 총 6개 장으로 구성되어 있고 파이썬, IPython, 넘파이, 판다스, 맷플롯립, 사이킷런에 대해 한 챕터씩 할애하고 있습니다.