CS 228: Probabilistic Graphical Models Lecture Notes

확률 그래프 모델(Probabilistic Graphical Models)의 유명한 강의로는 벤처 회사 칼리코(Calico)로 간 다프네 콜러Daphne Koller 스탠포드 교수의 코세라 강의 ‘Probabilistic Graphical Models‘가 있습니다. 또 다프네 콜러의 동명의 저서도 유명합니다. 이보다 조금 더 부드럽게 시작할 수 있는 자료로 스탠포드 CS 228 강의 노트가 웹 사이트로 공개되었습니다. 동영상 보다 글을 좋아하지만 책은 부담스러운(정말 부담스럽습니다:) 경우에 딱 좋은 것 같습니다.

Caffe2: Mobile first DL Framework

스크린샷 2017-04-19 오후 4.57.55

페이스북이 딥러닝 프레임워크 카페(Caffe)의 새로운 포크인 카페2(Caffe2)를 오늘 공개하였습니다. 카페2는 페이스북과 NVidia를 비롯해 많은 회사들과 협력한 결과라고 합니다. 특별히 NVidia에서도 블로그를 통해 카페2 소식을 알렸습니다. 카페를 개발한 양칭 지아Yangqing Jia가 버클리를 나와서 구글 브레인으로 갔었는데 어느새 페이스북으로 옮겼군요. 이미 작년에 카페2의 개발 소식이 흘러나왔던 것 같습니다. 카페2는 파이토치와는 다르게 모바일과 대용량 스케일의 상용 제품을 위한 프레임워크로 촛점을 맞추고 있다고 합니다. 그렇다고 파이토치와 명확하게 선을 그을 수는 없지만, 파이토치 보다는 더 성능과 다양한 디바이스 포팅에 중점을 두고 있습니다. 파이토치는 연구자들이 다양한 네트워크를 실험할 수 있는 높은 자유도가 장점입니다. 하지만 카페2와 파이토치의 저수준 라이브러리들은 앞으로 계속 머지되거나 아이디어를 공유할 것 같습니다. 바이두가 텐서플로우의 패치를 보냈는데 구글이 이를 거부했다는 소식에서 부터 구글이 사용하는 텐서플로우와 오픈소스 텐서플로우에는 차이가 있다는 것이 카페2와 함께 레딧해커뉴스에서 회자되고 있습니다.

현재 카페2가 안정화된 상태는 아닙니다. 양칭에 의하면 페이스북이 먼저 개밥먹기를 하고 있답니다. 파이썬 바이너리 패키지가 준비되어 있지 않아 설치도 번거롭습니다. 하지만 카페의 Model zoo를 이용할 수 있다는 것과 모바일 퍼스트 정책은 많은 사람들의 관심을 끌것 같습니다. OpenCL와 iOS의 Metal을 지원하려고 준비 중에 있다고 합니다.

누가 Caffe가 죽었다고 했던가요? 🙂

(업데이트) 구글 브레인의 리더 Rajat Monga 가 바로 댓글로 의견을 냈네요. 구글이 텐서플로우에 대해 감추고 있는 것은 없답니다.

또 페이스북에서 F8 행상 이후에 몇몇 대학 교수를 초빙해서 카페2에 대한 워크샵을 열 예정이라고 밝혔습니다. 이미 많은 대학의 딥러닝 커리큘럼이 텐서플로우로 가고 있어서 더 늦기전에 변화가 필요하다고 생각했을 것 같습니다.

TensorFlow 1.1.0 RC2 and Imperative Style

텐서플로우 1.1.0 버전의 RC2 가 릴리즈 되었습니다. 1.1.0 RC2 의 CPU, GPU 버전이 PYPI에 등록되어 있으므로 pip 명령으로 간단하게 설치할 수 있습니다. 텐서플로우 바이너리는 64bit 용이며 윈도우즈(파이썬 3.5)를 제외하고는 대부분의 파이썬 버전을 지원합니다. 만약 안정적인 버전의 텐서플로우를 설치하시려면 tensorflow==1.0.1 와 같이 텐서플로우 패키지 이름 뒤에 버전을 명시하면 됩니다.

$ pip install --upgrade tensorflow

$ pip install --upgrade tensorflow-gpu

텐서플로우 1.1.0 버전의 릴리즈 노트에는 없지만 contrib 폴더에 텐서플로우의 명령형(imperative) 스타일을 지원하는 라이브러리가 추가되어 있습니다. 요즘 많은 관심을 끌고 있는 파이토치(PyTorch)나 MXNet 등을 의식한 것일까요? 선언적(declarative)인 계산 그래프의 생성이 수면 아래로 내려가 샘플 코드를 보면 깔끔해진 것을 볼 수 있습니다.

import tensorflow.contrib.imperative as tf
x = tf.Variable(np.random.normal(size=[2, 2]), dtype=tf.float32)
y = tf.constant([[1, 2.]])
z = tf.matmul(y, x)
print(z)
array([[-1.231673  ,  3.14744973]], dtype=float32)

NumPy 사용하듯 텐서 계산을 할 수 있고 파이썬의 while, for, if 문을 사용해 계산 그래프를 만들 수 있습니다. 단점은 기본 텐서플로우보다 속도가 느려진다는 것과 모델을 훈련 시킬때 파이썬 반복문에 의해 그래프가 계속 자라나지 않도록 tf.step() 을 사용해야 합니다. 조금 더 자세한 예제는 깃허브를 참고하세요.

tf-seq2seq: open-source seq2seq framework in TF

68747470733a2f2f332e62702e626c6f6773706f742e636f6d2f2d3350626a5f64767430566f2f562d71652d4e6c365035492f41414141414141414251632f7a305f365774565774764152744d6b3069395f41744c6579794779563641

구글에서 이번주 신경망 기계번역, 즉 NMTneural machine translation를 위한 seq2seq 모델을 오픈소스로 공개하였습니다. 이 소스는 텐서플로우로 작성되어 있으며 깃허브에 공개되어 있습니다. 이 소스는 같이 공개된 ‘Massive Exploration of Neural Machine Translation Architectures‘ 페이퍼에서 사용된 코드입니다. 이 페이퍼에서 25만 GPU 시간을 들여 다양한 하이퍼파라미터 튜닝을 한 결과를 공유하고 있습니다. 어쩌면 많은 애플리케이션들이 연이어 나오는 뛰어난 알고리즘보다 이런 실험 결과를 더 목말라하고 있을지 모르겠습니다. 깃허브에 있는 tf-seq2seq 코드는 마치 일반 애플리케이션처럼 다운로드 받아 yaml로 모델을 정의하고 학습시킬 수 있습니다. 딥러닝 라이브러리들이 설정 방식에서 코딩 방식으로 빠르게 전환되더니 도메인 특화된 모델은 다시 패키지화될 수 있는것 아닌가 예상해 봅니다. 자세한 사용법은 도큐먼트를 참고하세요. 비록 한글 데이터는 없지만 구글의 선빵은 놀랍습니다. 🙂

TPU Revealed

2017-04-05_1013

구글이 자사의 데이터센터에서 사용하고 있는 머신러닝 칩셋인 TPU(Tensor Processing Unit)에 대한 성능과 구성에 대해 자세한 내용을 페이퍼공개했습니다. 페이퍼 내용을 보면 GPU/CPU 조합 보다 15~30배 가량 성능이 높다고 합니다. 개인적으로 눈길을 끄는 것은 2016년 7월에 작업한 것으로 보이는 이 페이퍼에 구글의 머신 러닝 추론inference을 위해 사용하고 있는 텐서플로우 모델 워크로드의 60%가 기본적인 피드포워드feed-forward 신경망이라는 점입니다.

스크린샷 2017-04-10 오전 1.54.39

이 수치가 거의 10개월 전의 데이터이고 텐서플로우, 즉 TPU로 서빙한 것에 국한될 수 있지만 예상외로 차이가 많은 것 같습니다. 페이퍼에서도 언급하고 있듯히 TPU의 성능 향상은 CNN을 타깃으로 하지만 실제로는 MLP가 주요 애플리케이션에 사용되고 있는 것 같습니다. 그렇다면 가중치 크기로 보아 비교적 레이어의 유닛수가 많은 MLP0은 유투브 추천에 MLP1은 광고 추천에 사용되는 것이 아닐까 조심스럽게 추측해 봅니다.

Sonnet: DeepMind’s New TF Wrapper

sonnet-logo-blogpost-170330-r01-width-1500

딥마인드가 새로운 텐서플로우 래퍼 라이브러리 소네트Sonnet오픈소스로 공개했습니다. 이로써 텐서플로우 래퍼 라이브러리가 또 하나 늘었네요. 소네트는 객체지향(OOP) 스타일을 따르고 있어 파이토치와 같이 개발의 편의와 재미를 줄 수 있을 것 같습니다. 소네트의 핵심은 텐서플로우의 그래프 정의를 파이썬 오브젝트화시킨 모듈입니다. 소네트의 모듈을 이용해 파이썬 오브젝트를 만들어 계산 그래프 정의 부분을 객체화시킨 효과를 가집니다. 그리고 자신만의 모듈을 정의해서 사용할 수도 있습니다. 자세한 내막은 다르겠으나 겉 모양새는 씨아노의 래퍼인 라자냐lasagne와 흡사해 보입니다.

아직은 초기 버전이라 직접 컴파일하여 설치해야 하고 맥/리눅스의 파이썬 2.7 만 지원합니다(구글 내부에서는 아직 파이썬 2.7의 레거시가 상당하다는 소문입니다). 소네트도 배워야할지 아직 잘 모르겠습니다. 딥마인드가 단발성의 릴리즈는 아니라고 하는 것을 보아서는 제대로된 릴리즈를 계획하고 있을 것 같습니다. pip 설치나 파이썬 3.5, 윈도우즈 지원등이 된다면 케라스Keras와 자주 비교될 것 같습니다. 가장 인기있는 텐서플로우 래퍼 라이브러리인 케라스를 만든 구글의 프랑소와 숄레는 소네트에 대해 아직 아무런 반응을 보이진 않고 있습니다. 🙂

Sentiment Neuron

image03-1

OpenAI에서 한 RNN 연구에 관해 블로그 포스팅페이퍼 그리고 코드(텐서플로우)를 공개했습니다. 내용을 간단히 요약하면 4,096 개의 multiplicative LSTM 뉴런으로 8천 2백만개의 아마존 리뷰에 대해 다음 문자(character)를 예측하도록 학습시켰습니다. 그런다음 Stanford Sentiment Treebank 데이터셋으로 이 뉴런들의 가중치 합에 대해 학습시켰습니다. 종전의 다른 모델과 비교해서 적은 수의 샘플로도 감성 분석에 대해 높은 성능을 내었다고 합니다.

그런데 이 뉴런 중 한개가 뉴런이 양성과 음성적인 리뷰를 구분하는 데 결정적인 역할을 하고 있다는 것을 발견했습니다. 다른 RNN 모델처럼 이 네트워크를 이용하여 리뷰 텍스트를 만들어 낼 수 있는데 이 감성 뉴런의 값을 덮어쓰면 양성 리뷰, 음성 리뷰를 선택해서 만들 수 있습니다. 아마존 리뷰를 이용해서 다음 문자에 대해서 학습을 시킨 것인데 감성 분석에 뛰어난 뉴런이 만들어진 것이 흥미롭습니다. 블로그에서도 언급되었지만 레이블 데이터를 만드는 물리적인 한계를 이런 비지도 학습의 연구가 도움을 줄 수 있을 것 같습니다.

잘 알려진 알렉 래드포드Alec Radford와 일리아 서스키버Ilya Sutskever가 페이퍼의 저자인데 커뮤니티의 반응은 썩 좋지는 않은 것 같습니다. 블로그 글이 약파는 느낌이라던가 Character RNN에 대해 잘 알려진 글을 쓴 안드레이 카패시Andrea Karpathy가 왜 저자로 안들어 갔는지 등등 말이 많네요. 🙂

TensorFlow 1.1.0 RC1

텐서플로우 1.1.0 RC1 버전이 릴리즈 되었습니다. 1.1.0 RC1 의 CPU, GPU 버전이 이미 PYPI에 등록되어 있으므로 pip 명령으로 간단하게 설치할 수 있습니다. 아마 근시일내에 1.1.0 정식 버전이 출시될 것 같습니다.

$ pip install --upgrade tensorflow

$ pip install --upgrade tensorflow-gpu

PyTorch v0.1.11 Release

파이토치 0.1.11 버전이 릴리즈 되었습니다. 텐서플로우와 케라스와 일관되게 하려고 Adamax 옵티마이저의 기본 파라미터 값이 변경되었습니다(lr=2e-3, eps=1e-8). 또 CuDNN v6 지원과 성능 향상 이외에도 많은 기능이 추가되고 버그가 수정되었습니다. 자세한 내용은 릴리즈 노트를 참고하세요.

아나콘다를 사용하면 맥과 리눅스에서 파이토치를 쉽게 설치할 수 있습니다. 맥OS에서 CUDA 지원을 사용하려면 소스 컴파일을 해야합니다. 아직 윈도우즈 환경은 지원하지 않고 있습니다.

conda install pytorch torchvision -c soumith

ICCV GAN Tutorial & Yann’s Video at Tsinghua Univ.

컴퓨터 비전 컨퍼런스인 ICCV(International Conference on Computer Vision) 2017이 오는 10월 이탈리아 베니스에서 열립니다. 이번 ICCV 에서 이안 굿펠로우Ian Goodfellow가 1-day GANs 튜토리얼을 연다고 합니다. 얀 리쿤Yann LeCun, 서미스 친탈라Soumith Chintala 등 유명한 GANs 연구자들이 발표자로 참가합니다. 다루는 주제는 대략 아래와 같습니다.

  • Introduction to GANs
  • Semi-supervised learning with GANs
  • Practical tricks and tips for training GANs
  • Plug and Play Generative Models
  • Latent variable inference for GANs
  • Approximate Nash equilibria in neural net GANs
  • Evaluating generative models
  • Interactive image generation with GANs
  • Connections between adversarial training and reinforcement learning

다른 건 몰라도 GANs 팁은 서미스 친탈라가 하지 않을까 생각됩니다. 이안 굿펠로우는 GANs 연구에 집중하기 위해 OpenAI에서 다시 구글 브레인으로 옮겼다고 하더니 최근 활동을 보면 맞는것 같습니다.

자세한 내용은 모르지만 지난달 말 칭화대에서 “Deep Learning and The Future of AI”란 행사가 열렸던 것 같습니다. 여기서 발표한 얀 리쿤 교수의 동영상이 유투브에 올라왔습니다. 부럽네요. 🙂