월간 보관물: 2016 4월

DeepMind moves to TensorFlow

오늘 구글은 블로그를 통해 딥마인드(Deepmind.com)가 토치(Torch)에서 텐서플로우(TensorFlow)로 연구, 개발 프레임워크를 교체한다고 발표하였습니니다.

토치는 그동안 딥마인드와 페이스북이 사용하면서 코드 기여도 상당했었지만 딥마인드가 토치를 더이상 사용하지 않게 됨으로써 토치 진영에는 페이스북과 트위터가 남게 되었습니다. 어찌보면 예상된 수순이었을지 모르겠습니다. 이세돌과 알파고가 바둑대전을 할 때 제프딘이 언급한 것 처럼 이미 알파고에 텐서플로우가 일정 부분 사용되고 있었기 때문입니다.

며칠 전 선다 피차이(Sundar Pichai) 구글 CEO가 보낸 창업자의 편지(Founder’s letter)에서 앞으로 세상은 모바일 퍼스트(mobile first)에서 AI 퍼스트(AI first)로 변할 것이라고 말하고 있습니다.

“We will move from mobile first to an AI first world.”

이런 비전의 첫 교두보인 텐서플로우가 무엇보다도 널리 쓰이길 바라는 것이 구글에서는 당연할 것입니다. 딥마인드는 지난 몇 달간 기존의 연구를 텐서플로우로 변경하면서 테스트를 해왔고 이제 앞으로 딥마인드에서 수행하는 모든 연구는 텐서플로우를 이용할 것이라고 합니다.

물론 텐서플로우를 PR 하는 것이라고 비아냥 거리는 냉소도 인터넷에 돌아다니긴 합니다.

OpenAI first Work – Gym

openai-gym

OpenAI가 오늘 첫번째 작업물인 강화학습(Reinforcement Learning) 툴킷인 Gym블로그를 통해 공개했습니다. 소스는 깃허브를 통해 확인하실 수 있습니다.

Gym은 강화학습 알고리즘을 평가하고 개발하는 데 도움을 주는 툴킷으로 OpenAI에서 앞으로 연구할 강화학습 분야에 도움이 되기위해 만들었다고 합니다. Gym은 파이썬으로 작성되어 있고 특별한 프레임워크에 종속적이지 않으므로 TensorFlowTheano와도 함께 사용할 수 있습니다. 다만 현재는 파이썬 2.7.x 버전용입니다.

Gym은 강화학습을 위한 다양한 테스트 환경(environment)을 제공하여 누구나 자신의 에이전트(agent)를 개발할 수 있도록 하고 그 결과를 업로드하여 다 같이 공유할 수 있도록 하고 있습니다. 이런 접근 방법은 일전에 소개해 드렸던 Gradientzoo와 일맥상통합니다.

Gym이 발표되고 나서 흥미로운 기사가 와이어드에 실렸습니다. 기사에 의하면 지난 여름 OpenAI 설립을 준비하면서 몬트리올 대학교의 Yoshua Bengio 교수에게 자문을 구했고(Geoff Hinton은 구글, Yann LeCun은 페이스북을 위해 이미 일하고 있으므로) 업계 최고의 연구자 목록을 뽑아 컨택하기 시작했다고 합니다. 그래서 최종 10명중 9명이 OpenAI에 합류하게 되었다고 합니다.

OpenAI는 이보다 하루 더 전에 UC 버클리의 Pieter Abbeel 교수를 풀타임으로 고용하게 되었다고 밝혔습니다. Pieter Abbeel 교수는 강화학습 개발을 위한 프레임워크인 rllab을 만들었으며 로봇과 강화학습 분야에 권위자로 알려져 있습니다. 그의 랩의 학생들도 이번 여름에 OpenAI에서 인턴을 할 거라는 소문입니다.

First Contact with TensorFlow

tensorflowbookcover-1024x7122x

‘First Contact with TensorFlow’ Book Cover. 출처: http://www.jorditorres.org

스페인 카탈루냐 공과대학의 Jordi Torres 교수가 텐서플로우를 소개하는 책 ‘First Contack with TensorFlow‘을 공개했습니다. 책의 서두에서도 밝혔지만 이 책은 ‘Fundamental of Deep Learning‘ 같은 책 처럼 머신러닝의 이론적 배경에 무게를 두기 보다는 텐서플로우를 처음 접하는 사람들을 위한 입문서 용도로 쓰여 졌습니다.

이 책은 대략 140여 페이지 정도로 pdf 나 인쇄본으로 구매할 수도 있지만 온라인에서 무료로 읽을 수 있도록 책 전체를 공개하고 있습니다. 부가적으로 Jordi Torres 교수가 강의에 활용했던 슬라이드는 여기에서 다운받으실 수 있습니다.

이 책의 한글 번역본이 출간 되었습니다. 🙂

아래 포스트에 포함된 글과 코드를 최신 텐서플로우 버전에 맞추어 수정하였습니다. 하지만 코드는 가능하면 테스트를 거친 번역서 깃허브의 주피터 노트북을 참고해 주세요.

원 도서의 라이센스(CC BY-NC-SA 3.0)에 따라 전체 내용을 번역하여 공유합니다. 파이썬 3  notebook으로 작성한 이 책의 코드는 여기에서 보실 수 있습니다. 텐서플로우 논문 요약 자료도 함께 참고하세요.

추천사, 서문, 실용적접근

1. 텐서플로우 기본다지기

2. 텐서플로우 선형회귀분석(Linear Regression)

3. 텐서플로우 클러스터링(Clustering)

4. 텐서플로우 단일 레이어 뉴럴 네트워크(Single Layer Neural Network)

5. 텐서플로우 다중 레이어 뉴럴 네트워크(Multi Layer Neural Network)

6. 병렬처리

맺음말

감사의말, 저자, BSC, UPC 그리고 GEMLEB 모임

TensorFlow 코딩게임(Codingame)

스크린샷 2016-04-26 오후 1.20.35

여러가지 프로그래밍을 게임하듯 즐기면서 배울 수 있는 코딩게임(www.condingame.com)에 텐서플로우 코딩게임이 생겼습니다.

이 게임은 텐서플로우를 이용해서 MNIST 데이터셋인 손글씨 숫자(handwritten digits)를 인식하는 뉴럴 네트워크를 만드는 것입니다. 목표 정확도는 50% 입니다. “Enter your code between here” 와 “And here” 사이에 있는 print 문을 주석 처리하고 텐서플로우 튜토리얼을 참고하여 알고리즘을 파이썬 코드로 작성하시면 됩니다. 작성이 완료되면 맨 아래 두개 문장의 주석을 제거해 주시고 오른쪽 아래 부분에 위치한 ‘PLAY TESTCASE’ 버튼을 눌러 주시면 됩니다.

튜토리얼을 무난하게 따라 하셨다면 91.2% 의 정확도를 얻으실 수 있습니다. 좀 더 정확도를 높이려면 콘볼루션 네트워크를 만드는 텐서플로우의 다른 튜토리얼도 참고하세요.

Gradientzoo – 머신러닝 모델 공유

스크린샷 2016-04-26 오후 1.50.21

파이썬에서 학습된 머신러닝 모델을 저장하고 복원하는(즉 serialization 과 deserialization) 몇가지 방법 중 보통은 pickle 이나 dill 을 사용할 수 있습니다. 최근에는 JSON 을 사용하는 경우도 많이 있는 것 같습니다. 이와 관련된 주제로 한 번 정리를 하면 좋을 것 같습니다.

Gradientzoo 는 오픈소스 프로젝트로서 학습된 모델을 직렬화하는 파이썬 라이브러리 뿐만 아니라 이를 공유하는 사이트도 모두 오픈소스로 공개하였습니다. 다른 사람이 만든 모델을 다운받아 이를 이용하여 모델링을 시작하자는 취지 입니다. graidentzoo는 현재 Keras, Lasagne, TensorFlow 를 지원하고 있습니다.

DenseCap: Fully Convolutional Localization Networks for Dense Captioning

densecap

DenseCap 데모화면. 출처: cs.stanford.edu

스탠포드 비전랩(Vision Lab)의 Fei-Fei Li 교수와 PhD 학생들이 최근 연구한 이미지 캡셔닝 프로그램인 DenseCap에 대한 사이트와 코드를 깃허브에 공개하였습니다. 사실 동명의 논문은 작년 말에 공개되었고 그 직후 바로 소스코드가 공개되었습니다.

논문의 내용을 자세히 읽진 못했지만 CNN 과 RNN 모델을 같이 사용한 것으로 보입니다. 테스트 데이터는 비주얼 게놈 데이터 셋을 사용했습니다. 토치(Torch) 프레임워크를 사용했기 때문에 코드는 주로 루아(Lua)로 되어 있습니다. 논문과 코드 뿐만이 아니라 데모 사이트도 공개했는데요. 열정이 대단합니다. 다만 초기 로딩되는 속도가 좀 느릴 수 있습니다.

densecap_browser

이미지가 로딩되면 감지한 오브젝트를 이미지 위에 표시하고 이미지 밑에는 캡션이 달리게 됩니다. ‘W’ 키를 누르면 좀 더 많은 오브젝트를 잡아내고 ‘S’ 키를 누르면 하나씩 덜어내게 됩니다. ‘R’은 랜덤이미지, ‘A’는 이전이미지, ‘D’는 다음 이미지를 선택하는 핫 키 입니다.

‘Fundamental of Deep Learning’ Preview

rc_lrg

O’Reilly에서 텐서플로우와 관련된 첫 번째 책인 ‘Fundamental of Deep Learning‘이 2016년 말에 출간 예정입니다. 지금은 Early Release 단계로 미리 구입해서 PDF나 이북 리더기로 읽으실 수 있습니다. 이 글은 2016년 4월 8일자 판을 기준으로 처음 작성되었습니다. 책이 업데이트 되면 포스트의 내용을 수정하거나 추가하도록 하겠습니다.

이 전 포스트에서 말씀드린대로 이 책은 원래 Theano를 기반으로 딥러닝을 설명하려고 했으나 구글에서 텐서플로우를 발표하고 나서 Theano대신 텐서플로우를 선택하게 되었습니다. 이런 결정을 하게 된 이유가 무엇인지 두 프레임워크의 차이를 비교하며 설명하고 있습니다.

책의 전체 챕터는 총 12장 이지만 현재 작성된 것은 5장까지 입니다. 아직 절반도 쓰여지지 않았지만 도서의 평점은 매우 좋은 편입니다. 마지막까지 좋은 결과물로 이어지길 기대합니다.

1. The Neural Network
– Building Intelligent Machines
– The Limits of Traditional Computer Programs
– The Mechanics of Machine Learning
– The Neuron
– Expression Linear Perceptrons as Neurons
– Feed-forward Neural Networks
– Linear Neurons and their Limitations
– Sigmoid, Tanh, and ReLU Neurons
– Softmax Output Layers
– Looking Forward

계속 읽기

TensorFlow 0.8 – Distributed!

오늘 구글은 텐서플로우의 0.8 버전 업데이트를 발표하였습니다. 이번 버전은 그 동안 텐서플로우의 단점으로 지적되어왔던 분산(distributed) 처리 기능을 추가한 것 입니다. 이전 포스트에서 미국 에너지부의 산하 연구기관인 PNNL에서도 텐서플로우의 분산처리 버전을 공개할 것이라고 발표했었는데 구글의 이번 발표로 기대감이 좀 줄어들게 되었습니다.

아래 그래프는 GPU 갯수를 늘려 분산처리를 했을 때 속도 향상에 대한 그래프입니다. PNNL에서 발표한 자료에서도 분산 처리를 한 만큼 선형적으로 성능이 향상되지는 않았습니다. 텐서플로우 0.8 버전에서도 GPU 코어수가 늘어남에 따라 대략 50% 정도 성능 향상에 수렴하는 것으로 보입니다.

image00

분산 처리를 위해 PNNL은 MPI(메세지 패싱 인터페이스)를 사용했다고 했는데 구글은 gRPC를 이용했다고 합니다. 그 외 눈에 띌만한 변경사항으로는 랜덤 포레스트(Random Forest) 알고리즘이 추가되었고 분리되어 개발되던 skflow가 텐서플로우 레파지토리 안으로 들어왔습니다. 따라서 skflow를 사용하시려면 Python의 import 문이 조금 바뀌게 됩니다.

from tensorflow.contrib.learn.python import learn

0.8 버전을 이용하여 텐서플로우 튜토리얼을 업데이트 하도록 하겠습니다.

텐서플로우 0.8 버전을 설치하시려면 파이썬 패키지 매니저인 pip 를 통해 손쉽게 업그레이드 하실 수 있습니다.

# for Linux
# Python 2.x and GPU
$ pip install --upgrade https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.8.0rc0-cp27-none-linux_x86_64.whl
# Python 2.x and CPU
$ pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.8.0rc0-cp27-none-linux_x86_64.whl
# Python 3.x and GPU
$ pip install --upgrade https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.8.0rc0-cp34-cp34m-linux_x86_64.whl
# Python 3.x and CPU
$ pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.8.0rc0-cp34-cp34m-linux_x86_64.whl

# for Mac
# Python 2.x
$ pip install --upgrade https://storage.googleapis.com/tensorflow/mac/tensorflow-0.8.0rc0-py2-none-any.whl
# Python 3.x
$ pip install --upgrade https://storage.googleapis.com/tensorflow/mac/tensorflow-0.8.0rc0-py3-none-any.whl

그외 주요 변경 사항은 아래 페이지에서 참고하실 수 있습니다.

https://github.com/tensorflow/tensorflow/releases/tag/v0.8.0rc0

(추가) 업그레이드가 아니고 텐서플로우를 처음 설치하시는 경우에는 pip 명령에서 ‘–upgrade’ 옵션을 빼셔야 합니다.

앱(app) –> 봇(bot)

herbg

과연 앱(app)의 시대에서 봇(bot)의 시대로 넘어가고 있다고 할만 합니다. 페이스북의 F8 컨퍼런스 전후로 경쟁자들이 앞다투어 봇 개발 플랫폼을 오픈했습니다. 페이스북은 4월 12일 F8 컨퍼런스에서 ‘Bots for Messenger‘을 런칭했습니다. 페이스북의 메신저 봇은 일년전 인수한 자연어처리 스타트업인 Wit.ai를 기반으로 하고 있고 페이스북 M에서 사용한 인공지능 플랫폼을 이용한다고 합니다.

페이스북의 메신저 봇의 발표가 예견되면서 KikLine의 봇 플랫폼(Kik, Line)도 잇달아 발표되었습니다. 지난 달 말에는 마이크로소프트가 봇 프레임워크를 발표했습니다.

챗(chat) 봇은 이전 포스트에서 소개해 드렸던 미팅 스케줄링 에이전트 Amy와는 조금 다릅니다. 하지만 이런 뉴스들은 우리가 AI를 일상에서 가장 먼저 접하게 될 접점은 텍스트를 중심으로 한 메세지(이메일 혹은 채팅)가 될 것임을 강하게 암시하고 있습니다. 영화 her가 아주 멀지 않았습니다.

텐서플로우 Playground

tensorflow-playground

구글에서 뉴럴 네트워크 모델링을 브라우저에서 멋진 비주얼라이제이션을 통해 맛볼 수 있게 한 재미있는 사이트를 공개했습니다. 현재 알고리즘은 백프로파게이션(backpropagation)이 디폴트로 되어 있습니다. 좌측에 몇가지 테스트 데이터셋을 고를 수 있고 히든 레이어는 6개까지 추가시킬 수 있습니다. 각 레이어에 뉴런은 8개까지 늘릴 수 있습니다.

상단에는 러닝속도(learning rate)와 액티베이션(activation) 함수, 레귤러리제이션(regularization) 방식, 레귤러리제이션 정도를 선택할 수 있습니다. 액티베이션 함수는 하이퍼볼릭 탄젠트(tanh), 시그모이드(Sigmoid), 선형(Linear), 렐루(ReLU) 중 하나를 선택할 수 있고 레귤러리제이션은 L1, L2 중 하나를 선택할 수 있습니다. 분류(Classification)를 선택하면 4개의 데이터 셋이 있고 회귀분석(Regression)을 선택하면 2개의 데이터 셋 중 하나를 고를 수 있습니다.

오렌지, 블루 두가지의 데이터 종류를 구분합니다. 좌상단의 시작 버튼을 누르면 각 뉴런에서 어떤 종류의 데이터에 대한 가중치가 높아지는지를 시각적으로 확인하실 수 있습니다. 사실 이 프로그램은 텐서플로우를 이용한 것은 아니고 자바스크립트로 작성되어(정확히는 타입스크립트) 브라우저에서 실행됩니다.

자바스크립트에서 머신러닝을 수행하려는 시도가 많이 있습니다. 그 중에서도 가장 유명한 것은 ConvNetJS 입니다.