월간 보관물: 2016 6월

Wide & Deep Learning with TensorFlow

image04

출처: 구글 리서치 블로그

구글 리서치 블로그에서 머신 러닝의 로지스틱 회귀(Regression)와 뉴럴 네트워크 모델을 조합하여 추천 시스템에 적용한 연구 내용을 올렸습니다. 두 모델을 조합하는 API는 TF learn에 위치해 있습니다. TF Learn은 이전에 독립된 레파지토리에 있다가 0.8 버전에서 합쳐진 scikit flow(skflow)를 다르게 부르는 것 같습니다. 하지만 또 다른 서드파티 라이브러리 tflearn과 헷갈리게 됐습니다.

와이드앤 딥 러닝 모델은 검색이나 추천시스템, 랭킹 모델에서 전체 트래픽은 많지만 매칭된 데이터는 드문 경우 모델이 너무 구체화(overfit)되거나 너무 일반화(underfit) 되는 것을 적절히 안배하기 위하여 고안되었다고 합니다. 블로그에서는 음식 추천을 예로 들어 설명하고 있는데요. 로지스틱 회귀의 경우 주어진 검색어에 대해 어떤 음식이 추천되었을 때 주문이 일어날 가능성이 높은 순으로 추천이 일어나게 될 것입니다. 이런 경우 추천시스템 쪽에서 이야기하는 세렌티피티(Serendipity)가 부족하다고 말합니다. 즉 사용자가 깜짝 놀랄 추천을 하지 못하고 판에박힌 아이템만 늘어놓게 되는 경우입니다. 임베딩 벡터를 사용한 딥 뉴럴 네트워크를 이용할 경우 프라이드 치킨을 검색한 사용자에게 햄버거를 추천할 수 있다고 합니다. 하지만 딥 러닝 모델은 아이스 라떼를 요청한 사람에게 뜨거운 라떼를 추천할 수도 있기에 와이드한 것과 딥한 두 모델을 적절히 안배하는 것이 좋다고 말하고 있습니다.

와이드 모델과 딥 모델에 각각 어떤 피처(feature)를 사용할지 뉴럴 네트워크의 레이어를 어떻게 구성할지는 당연히 이용자의 몫입니다. 와이드앤 딥 러닝 모델을 위해 skflow에 추가된 API는 tf.contrib.learn.DNNLinearCombinedClassifier 와 tf.contrib.learn.DNNLinearCombinedRegressor 입니다. 아마도 로지스틱 회귀를 위한 펼쳐진 뉴런의 모습에서 와이드(wide)하다는 표현을 쓰는 것으로 보입니다. 와이드앤 딥 러닝을 위한 튜토리얼예제 그리고 페이퍼를 참고하세요.

Silicon Valley Bot Startup trend

지난 4월에 실리콘밸리 컨설팅 회사인 Precoil의 David J. Bland 가 올린 트윗입니다. 엄청난 리트윗 수에서 알수 있듯이 인공지능의 붐을 타고 묻지마 창업 열풍이 일고 있다는 것을 많은 사람들이 동감하고 있는 것 같습니다. 버블이 있을 때 종종 그렇듯이 많은 스타트업들이 프로토타입을 만들고 펀딩과 매각로 큰 돈을 버는 것에만 촛점이 맞춰져 있는 것을 은연중에 비꼬고 있네요. 🙂

Crazy Baidu

월스트릿 저널에 바이두 앤드류 응(Andrew Ng)의 인터뷰 기사가 실렸습니다. 앤드류 응 박사가 구글을 떠나 바이두에 합류한지 2년 정도 밖에 되지 않았는데 구글, 페이스북에 뒤지지 않는 자신감을 가지는 것 같습니다. 그의 팀원이 800명이라 하며 중국내에서는 바이두에 견줄만한 회사는 없고 미국의 테크 공룡(아마도 구글이겠지요)들과 비교하자면 서로의 장점을 배워나가야 할 거라고 합니다. 이달 초 한 기사에서는 자율주행 자동차를 3년안에 상용화하고 2021년에는 대량 생산을 할 거라는 계획을 발표하기도 했습니다. 현재 바이두에 적용된 딥 러닝의 사례는 음식배달 서비스의 도착시간 예측이라고 합니다. 현재와 미래의 차이가 크네요.

인공지능 기술이 중국 정부에 의해 적절치 않게 사용되지 않겠냐는 의견에는 다소 회피하는 뉘앙스가 느껴집니다. 며칠전엔 AI 에이전트가 비행 시뮬레이션에서 파일럿을 이겼다는 기사를 트윗해서 조금 눈살이 찌푸려지기도 했습니다.

진격의 바이두, 유독 구글을 견제하는 엘론 머스크, 미묘한 경쟁 심리의 구글/페이스북 입니다.

Pycon APAC 2016에 텐서플로우 세션이 네개!

올해 파이콘 KR은 파이콘 APAC으로 열리게 되어 국내외 발표자들이 함께 참여하게 됩니다. 파이썬과 머신러닝 분야가 밀접하다 보니 텐서플로우 세션도 한개쯤 생기지 않을까 예상했었는데요. 무려 네개의 세션이 열릴 예정입니다. @.@

이중에 3개는 영어로 한 세션은 한국어로 진행됩니다. 파이콘 티겟 가격은 5만원으로 비용이 부담이 될 경우엔 재정 지원 프로그램을 이용할 수 있습니다.

파이콘 APAC 2016은 8월 13일(토)부터 15일(월)까지 강남 코엑스에서 열립니다. 아직 상세한 스케줄은 나오지 않았지만 전체 프로그램 목록은 확인할 수 있습니다.

(업데이트) 파이콘 APAC 2016의 전체 세션의 녹화 동영상이 공개되었습니다. 파이콘 APAC 2016 스케줄 목록에서 확인할 수 있습니다.

TensorFlow 0.9 Release

image00

텐서플로우 0.9 버전이 정식 릴리즈 되었습니다. 이번 릴리즈에서 가장 큰 변화는 애플 iOS 기기를 지원하는 것으로 0.9rc 버전에서 나타났던 여러 버그가 수정되었습니다. 또 라즈베리 파이도 지원 목록에 포함되었습니다. 각 모바일 환경에서의 텐서플로우 가이드 페이지를 참고하세요.

그리고 RNN 모델(tf.nn.dynamic_rnn, tf.nn.rnn, tf.nn.rnn_cell)이 정식으로 추가되었습니다. 이와 관련되어서 좀 더 자세한 내용이 정리되면 다시 포스팅하도록 하겠습니다.

0.9 버전의 설치는 이전 버전과 동일합니다. 파이썬 3.5 버전을 지원하는 것을 제외하고는 패키지 이름이 거의 유사합니다. pip 설치시 패키지 목록을 참고하세요.

설치 패키지 선택:

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

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

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

# Ubuntu/Linux 64-bit, CPU only, Python 3.4
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.9.0-cp34-cp34m-linux_x86_64.whl

# Ubuntu/Linux 64-bit, GPU enabled, Python 3.4 
# Requires CUDA toolkit 7.5 and CuDNN v4. For other versions, see "Install from sources" below.
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.9.0-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-0.9.0-cp35-cp35m-linux_x86_64.whl

# Ubuntu/Linux 64-bit, GPU enabled, Python 3.5 
# Requires CUDA toolkit 7.5 and CuDNN v4. For other versions, see "Install from sources" below.
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.9.0-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/tensorflow-0.9.0-py3-none-any.whl

pip를 이용하여 설치:

# Python 2
$ sudo pip install --upgrade $TF_BINARY_URL

# Python 3
$ sudo pip3 install --upgrade $TF_BINARY_URL

그리고 느리지만 OpenCL 지원을 위한 개발도 이루어지고 있습니다. 텐서플로우에서 OpenCL을 지원하게 되면 AMD와 인텔칩을 사용하는 GPU에서도 다양한 병렬 연산이 가능해 집니다. 빠르면 올해 안에 만나볼 수 있기를 기대해 봅니다.

Hello, TensorFlow!

오라일리 홈페이지에 텐서플로우의 구조에 대해 소개하는 글 ‘Hello, TensorFlow!‘이 게재되었습니다. 이 글은 매우 간단한 예제를 다루지만 데이터플로우 그래프에 촛점을 맞추어 자세하게 설명하고 있습니다. 이 글에 실린 예제를 바탕으로 하여 정리한 쥬피터 노트북을 참고해 주세요.

파이썬 변수는 오브젝트(객체)를 가리키는 이름입니다. 즉 오브젝트가 이름을 가지고 있는 것이 아니고 변수 이름이 오브젝트를 지칭하고 있습니다. 이런 파이썬의 특징을 텐서플로우도 그대로 가지고 있지만 파이썬은 각 라인이 해석될 때 실제적으로 연산이 되는 반면 텐서플로우는 실제 연산은 뒤로 미루어지고 오브젝트 끼리의 연산을 표현하는 데이터플로우 그래프를 만듭니다. 이렇게 데이터플로우 그래프를 만들고 난 후에는 세션을 통해 전체 혹은 그래프의 일부분을 실행합니다.

텐서플로우가 프로토콜 버퍼 형식으로 표현하는 간단한 데이터플로우 그래프를 직접 들여다 볼 수 있도록 안내하고 있으며 텐서보드를 이용해서 이를 비주얼하게도 볼 수 있도록 설명하고 있습니다. 텐서플로우가 씨아노(Theano)나 토치(Torch)처럼 그래프를 이용해 수치 연산을 표현하는 이유를 텐서플로우 튜토리얼의 내용에서 찾을 수 있습니다. Numpy 등의 수학 라이브러리들은 성능상의 이유로 C, C++ 로 개발되어 있는 경우가 많습니다. 하지만 이런 연산들을 프로그램 매 라인마다 파이썬과 C 코드 사이를 전환한다면 특히 GPU 연산일 경우 데이터 이동 등의 문제로 인해 성능을 극대화시키기 어렵습니다. 그래서 그래프 형태로 연산의 구조를 표현하여 저수준 라이브러리와 하드웨어에 연산과정을 한번에 위임하는 형태를 가지게 되었습니다.

‘Hello, TensorFlow!’ 의 예제를 쥬피터 노트북으로 정리하여 깃허브에 올려 놓았습니다. 노트북의 주석을 같이 참고하시면 좋을 것 같습니다.

TensorFlow Meetup’s Video

조금 지난 자료지만 IT 기업인 Altoros에서 주관한 텐서플로우 모임의 발표 영상 자료를 소개해 드립니다. 지난 4월 부터 5월 사이에 보스턴, 뉴욕워싱톤DC, 마드리드에서 각각 열렸었습니다. Altoros의 블로그 페이지에서 영상과 슬라이드 자료를 참고하세요.

보스턴:

  • Talk #1: Neural Networks with Google TensorFlow
  • Talk #2: Transfer learning on TensorFlow in 30 minutes
  • Fireside chat

뉴욕:

  • Talk #1: TensorFlow overview
  • Talk #2: Beyond LSTMs and Visualized Learning
  • Fireside chat

워싱톤DC:

  • Talk #1: TensorFlow overview
  • Fireside chat

마드리드:

  • Talk #1: TensorFlow overview
  • Talk #2: TensoFlow end-to-end examples

Torchnet: dl framework wrapper

오늘 페이스북이 ICML 2016에 맞추어 토치(Torch)를 기반으로 한 딥러닝 프레임워크의 래퍼(wrapper)인 토치넷(Torchnet)을 깃허브 레파지토리페이퍼와 함께 공개했습니다. 토치넷은 루아로 작성되었으며 좀 더 쉽고 빠르게 뉴럴 네트워크를 구축하기 위해 머신러닝을 위한 코드와 로직을 재사용할 수 있도록 만들어 줍니다. 토치넷의 역할은 씨아노(Theano)의 블럭(blocks)이나 퓨얼(fuel)과 유사하다고 합니다. 재미있는 점은 토치넷의 깃허브 레파지토리가 ‘github.com/torch/’ 에 있지 않고 ‘github.com/torchnet/’ 에 위치한다는 점 입니다. 페이스북은 토치넷이 토치를 넘어서 자체적인 생태계를 구축하길 원하는 것 같습니다. 페이퍼에도 토치넷은 토치 뿐만 아니라 텐서플로우(TensorFlow)나 카페(Caffe)도 지원할 수 있다고 언급하고 있습니다.

인공지능과 법적쟁점

얼마전 소프트웨어정책연구소 SPRi 에서 ‘인공지능과 법적쟁점‘ 이라는 리포트를 공개했습니다. 이 리포트에서는 인공지능을 활용하여 발생하는 문제가 현행 법적 체계 안에서 수용될 수 있는지를 검토하고 인공지능이 일으킨 사고나 창작물에 대한 법적 쟁점을 다루었습니다.

구체적으로 보면 인공지능 에이전트가 기사를 대신해서 쓰는 경우가 한 예입니다. 이미 해외에서는 간단한 사고, 사건 보도류의 기사를 인공지능 에이전트가 대신하여 작성하는 것으로 알려져 있습니다. 그렇다면 이런 기사의 저작권이 누구(인공지능 에이전트, 언론사, 인공지능 개발사)에게 있으며 어떤 법으로 보호를 해야하는 지 명확하지가 않습니다. 따라서 이런 상황에 대응할 수 있는 가이드라인과 법제도 개선이 필요하다고 언급하고 있습니다.

동물보호법은 동물의 권리를 인정하는 것은 아니고 동물이 받을 수 있는 고통에 대해 사회의 인식이 높아진 것으로 이해해야 합니다. 이렇게 생명에 대한 존중으로서 동물에 대한 사회적 인식이 높아지고 있지만 민법에 의해 동물은 물건에 포함되어 권리의 주체가 아니고 보호받거나 관리되어야 할 대상이라고 합니다.  즉 동물의 소유권은 해당 동물의 소유자에게 귀속됩니다. 인공지능을 물건으로 간주한다면 소유권은 해당 인공지능의 소유자에게 있습니다. 법적 주체는 사람과 법인으로 한정되어 있으므로 인공지능이 일으킨 문제에 대한 책임은 그 소유자에게 돌아갈 가능성이 높습니다.

계속 읽기

OpenAI’s Goal

OpenAI가 블로그에 4가지 연구 목표에 대해 발표하였습니다.

  1. 연구 성과 측정
  2. 가정용 로봇
  3. NLP 기반 에이전트
  4. 게임 에이전트

연구 성과 측정은 맨 처음 발표한 OpenAI Gym을 계속 발전시킬 것으로 보입니다. 가정용 로봇에 대한 것은 의외인 것 같습니다. 청소기 처럼 쉽게 구입할 수 있는 가사일을 돕는 로봇이지만 OpenAI에서 직접 제조하는 것은 아니라고 합니다. 자연어 처리를 통한 챗봇이나 어시스턴트에 대한 개발은 예상할 수 있는 분야인 것 같습니다. 게임 에이전트 부분은 구글 딥마인드의 성과에 어느정도 자극을 받은 결과가 아닐까 합니다.

며칠전에는 Generative Model에 대한 5가지 페이퍼와 코드를 정리해서 공개했습니다.

  1. Improved Techniques for Training GANs (code)
  2. Improving Variational Inference with Inverse Autoregressive Flow (code)
  3. InfoGAN: Interpretable Representation Learning by Information Maximizing Generative Adversarial Nets (code)
  4. Curiosity-driven Exploration in Deep Reinforcement Learning via Bayesian Neural Networks (code)
  5. Generative Adversarial Imitation Learning (code)