태그 보관물: OpenAI

Recent Progress in Generative Modeling

OpenAI의 일리아 서츠케버(Ilya Sutskever)가 지난 4월 스탠포드 대학에서 열린 ‘Scaled Machine Learning‘에서 발표한 ‘Recent Progress in Gernerative Modeling‘ 발표자료가 공개되어 있습니다. 다만 이 컨퍼런스의 발표 동영상은 찾을 수 없어서 아쉽습니다.

Reinforce Pong at Gym

한달 전에 스탠포드 비전 랩의 안드레이 카패시(Andrej Karpathy)가 블로그에 강화학습에 대한 글인 ‘Deep Reinforcement Learning: Pong from Pixels‘를 올렸었습니다. 조금 늦었지만 블로그의 글을 따라가 보려고 합니다. 안드레이는 스탠포드 뿐만이 아니라 구글과 OpenAI에서도 여러 프로젝트에 참여했고 강화학습과 관련된 여러 도서를 읽고 관련 강의도 들었다고 합니다. 강화학습을 쉽게 소개하기 위해 글을 썼다고 하는데 말처럼 쉽지는 않은 것 같습니다.

OpenAI 짐(Gym)은 강화학습 알고리즘을 훈련시키고 평가할 수 있는 프레임워크입니다. 짐에 포함된 퐁(Pong) 게임은 아타리(Atari) 2600에 포함된 간단한 컴퓨터 게임의 시뮬레이션 버전입니다. 두사람이 오른쪽과 왼쪽에 있는 자기 막대를 움직여 공을 받아 넘겨야 하고 상대방이 놓쳐서 화면 옆으로 사라지면 점수를 1점 얻게 됩니다(이를 편의상 한 판이라고 부르겠습니다). 이렇게 점수를 획득하여 가장 먼저 21점을 얻는 쪽이 이기는 게임입니다. 짐에서는 화면의 왼쪽 편이 하드 코딩되어 있는 컴퓨터 에이전트이고 오른쪽 편이 강화학습을 통해 우리가 학습시켜야할 에이전트입니다.

짐 라이브러리에서는 공이 위치가 이동되었을 때를 한 스텝(step)이라고 표현합니다. 게임 화면에서 공이 이동할 때 마다 스크린샷을 찍는다고 생각하면 비슷합니다. 매 스텝마다 짐은 우리에게 리워드(reward)를 줍니다. 이겼을 때는 1, 졌을 때는 -1, 이도저도 아닌 공이 게임 판 위를 여전히 돌아다니고 있는 중간에는 0을 리턴합니다. 우리는 매 스텝마다 막대의 위치를 위로 올릴 것인지(UP), 아래로 내릴 것인지(DOWN)를 결정하여 짐 라이브러리에 전달합니다. 게임을 이길 수 있도록 막대의 위치를 제어하는 것이 우리가 풀어야 할 숙제입니다.

계속 읽기

OpenAI Gym 맥북 설치

강화학습 개발 도구인 OpenAI 짐(Gym)을 맥북에 설치하면서 몇가지 얻은 팁을 공유합니다. 짐은 강화학습을 위한 여러가지 환경을 제공합니다. 그 중에 atari, box2d, mujoco, pachi, doom 환경을 지원하기 위해 별도 파이썬 패키지가 설치됩니다. 이 중에 doom-py 가 파이썬3 에서 설치가 되지 않고 문제를 일으키네요. 깃허브 이슈를 쫒아서 이리저리 해 보았지만 성공하지 못했습니다. 짐을 이용하려면 파이썬2를 사용하는 것이 좋을 것 같습니다(짐의 파이썬3 지원은 아직 실험적이라고 합니다).

만일을 대비해서 virtualenv 나 conda 환경을 사용하시길 추천드립니다. 맥북에서 설치할 때 필요한 시스템 패키지는 brew 를 이용하여 설치합니다.

$ brew install cmake boost boost-python sdl2 swig wget

우분투나 다른 리눅스 배포판에서는 조금 다른데요. 짐의 readme 파일을 참고하세요. 짐에 기본적으로 포함되어 있는 환경은 algorithmictoy_textclassic_control 입니다. 그런데 저는 무식하게 짐의 기본 환경외에 다른 환경도 모두 설치했습니다. 만약에 필요한 환경만 골라서 설치하려면 아래 pip 명령에서 ‘gym[atari]’ 처럼 필요한 환경 이름으로 바꾸어 주면 됩니다.

pachi-py 컴파일시 OSX SDK 참조를 찾지 못해 에러가 발생할 수 있습니다. 설치하기 전에 환경변수 MACOSX_DEPLOYMENT_TARGET 와 SDKROOT 를 적절히 셋팅해 주어야 합니다. 저는 OSX 버전이 10.11 이고  SDK 위치는 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk 였습니다.

$ export MACOSX_DEPLOYMENT_TARGET=10.11 
$ export SDKROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk
$ pip install gym[all]
...

짐을 설치하고 나서 스탠포드 비전랩의 Andrej Karpathy가 올린 강화학습 예제를 돌려 보고 있습니다. 아마 족히 며칠은 걸릴 것으로 예상됩니다. 뭔가 결과가 나오면 다시 포스팅하겠습니다.

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)

OpenAI’s first paper – Improved Techniques for Training GANs

openapi-gan-mnist.png

피처 매칭(feature matching)을 사용한 반감독 학습에서의 불완전한 이미지(좌측), 미니배치 식별(minibatch discrimination) 방식을 이용하여 생성한 MNIST 원본과 거의 구분할 수 없는 이미지(우측). (출처: OpenAI 페이퍼)

OpenAI의 첫번째 페이퍼 ‘Improved Techniques for Training GANs‘가 arXiv에 공개되었습니다. GANs(Generative Adversarial Networks)에 관한 이 페이퍼에서는 반감독(semi-supervised) 학습을 사용하여 MNIST, CIFAR-10 등의 분류 정확도를 높이는 것과 사람이 구분할 수 없을 정도로 실제와 비슷한 이미지를 만들어 냈다고 합니다. 코드는 깃허브에 공개되었고 텐서플로우와 씨아노(Theano)를 이용하여 작업되었습니다.

OpenAI: Request for Research

OpenAI에서 Request for Research 페이지를 오픈했습니다. 이 페이지를 만든 목적은 딥러닝 분야에서 어떤 연구들이 주로 관심의 대상이 되는지를 알리려고 하는 것입니다(제게는 좀 어렵네요). 페이지는 깃허브에 공개되어 있어서 누구라도 관심 분야를 추가하거나 개선 방법이나 해결 방안을 업데이트 할 수 있습니다.

리스트 중에 재미있는 것은 ‘Spam the spammers’ 입니다. 스팸 메일을 보낸 사람에게 무조건 스팸을 보내는 봇을 만드는 것입니다. 물론 스패머의 스팸 필터에 걸러지면 안되겠죠. 이게 만들어지면 지메일에 먼저 적용됐으면 좋겠습니다. 😉

Unsupervised Learning through Video Prediction

구글 IO 2016 기조 연설에서 선다 피차이(Sundar Pichai) CEO가 스스로 학습하여 물건을 집는 로봇팔 영상을 보여 주었었습니다. 해당 페이퍼는 Ian Goodfellow 와 구글 브레인팀이 작성한 것으로 어제 공개되었습니다. 그리고 테스트 애니메이션은 여기서 확인할 수 있습니다. 애니메이션만 봐서는 잘 감이 오지 않네요. 페이퍼를 읽어보고 싶은데 늘 시간은 부족하네요. ^^

video-prediction

번외로 Ian Goodfellow가 있는 OpenAI에 팀원이 새로 추가되었습니다. 그리고 아마 근시일안에 첫번째 연구결과를 공개할거라는 소문입니다.

OpenAI에 오기까지 by Greg Brockman

며칠전 OpenAI 의 창립 멤버 중 한명이자 CTO인 Greg Brockman이 ‘My Path to OpenAI’ 란 제목의 을 블로그에 올렸습니다. Greg은 실리콘 밸리 디지털 결재시스템 스타트업인 Stripe의 CTO 였습니다. 이 글이 흥미로운 것은 그가 하버드나 MIT 대학을 나왔다는 것 때문이 아니라 자신이 좋아하는 일을 위해 Stripe를 그만두고 인공지능 분야에 대해 공부하기 시작했다는 점입니다. 인공지능 분야에서 대단한 연구를 했다거나 소프트웨어를 개발한 것도 아닙니다. 그저 이게 내가 평생을 두고 할 일이라는 직관만이 있었던 것 같습니다.

인맥이 좋은 건지 열정이 좋은 건지 Greg은 그 후 Sam Altman을 만나서 OpenAI에 합류하게 되었습니다. 아마도 Greg이 Stripe에서 초기 스타트업을 빌드업했던 경력이 높게 평가되지 않았을까 생각합니다.

이 글에서 Greg이 Ilya Sutskever에 대한 첫 인상을 기록하고 있습니다.

“Ilya는 기술의 원천(source of grounding) 같았습니다. 폭 넓은 지식과 비전이 있었고 현재 시스템들의 한계와 능력에 대한 상세한 내용을 언제든지 설명할 수 있는 채비를 갖추고 있습니다.”

Ilya는 Greg의 요청으로 딥러닝에 대한 정의를 아래와 같이 했다고 합니다.

감독학습 방식(supervised)의 딥러닝의 목적은 어떤 종류이던 X를 Y에 매핑하는 문제를 푸는 것 입니다. X는 이미지나 말(speech), 글(text)이 될 수 있고 Y는 카테고리나 문장(sentence)이 될 수도 있습니다. 이미지를 카테고리로, 말(speech)을 글(text)로, 글(text)을 카테고리로, 바둑 형세를 다음 수순 등으로 매핑하는 것은 엄청나게 유용하고 다른 방식으로는 처리할 수가 없습니다.

딥러닝이 매력적인 것은 거의 분야(domain) 독립적이라는 것 입니다. 즉 한 분야에서 얻은 많은 식견(insight)을 다른 분야에 적용할 수 있습니다.

자세히 들여다 보면 딥러닝 모델은 추상화 레이어를 구축합니다. 이 추상화 레이어가 모든 일을 해내지만 정확히 어떻게 처리하는 지를 이해하는 것은 어렵습니다. 딥러닝 모델은 매우 간단하지만 미스테리하게 효과적인 백프로파게이션 알고리즘을 사용하여 점진적으로 뉴럴 네트워크의 뉴런간 가중치(synaptic strength)를 변경하면서 학습해 갑니다. 결론적으로 우리는 대규모의 복잡하 시스템을 몇라인의 코드만으로 구축할 수 있습니다.(최종 결과가 아니라 모델과 학습 알고리즘만 코딩하면 되기 때문에)

(추가) Stripe는 Y combinator가 투자한 회사(http://yclist.com/)라 Sam Altman과의 친분은 어쩌면 당연한 것일지 모르겠습니다. Y combinator 외에 Elon Musk가 개인적으로 Stripe에 시드(seed) 머니를 투자(기사1, 기사2)했습니다. 아마 적잖은 이익을 얻었을 것으로 예상됩니다.

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에서 인턴을 할 거라는 소문입니다.

The Expanding Universe of Modern AI

nvidia-ai-big-bang

클릭하시면 확대해서 보실 수 있습니다. 출처: Nvidia

Nvidia 에서 인공지능 분야의 테크놀러지 빅뱅(Big Bang)을 한 눈에 조감할 수 있는 이미지를 만들어 오늘 공개했습니다.

맨 왼쪽에는 연구분야로서 알파고로 유명한 딥마인드, OpenAI, 몬트리올/뉴욕/MIT 대학교 등이 눈에 뜨입니다. 그 다음으로는 핵심 기술이나 프레임워크로서 페이스북이 지원하는 Torch, 구글의 TensorFlow, 버클리의 Caffe, 몬트리올 대학교의 Theano, 마이크로소프트의 CNTK 등을 Nvidia의 cuDNN이 떠 받치고 있는 모습니다. ^^

그 오른쪽에는 머신러닝을 플랫폼화한 아마존 웹서비스와 IBM 왓슨, 구글, 마이크로소프트의 Azure가 있습니다. 그 다음으로가 가장 관심이 갈 만한 인공지능 분야의 떠오르는 스타트업입니다. 가운데 얼마전 세일즈포스로 인수된 메타마인드(MetaMind)가 있습니다. 여기에 언급된 회사들을 한번쯤 눈여겨 보아두면 아마 언젠가 뉴스에서 큰 기사거리로 만날 수 있을 것 같습니다.

산업부분의 리더 들이 가장 오른쪽에 위치해 있는데요. Andrew Ng 박사가 합류한 바이두(Baidu)가 아직 뚜렷한 성과를 내지 못해서인지 이곳에 있는 게 약간 의외입니다. 머지않아 구글이나 페이스북과 나란히 위치해 있는 그림으로 바뀌지 않을까요.