Tag Archives: Gym

Universe: Measurement and training for AI

universe

얼마전에 소개해 드렸던 OpenAI 의 AI 벤치마킹 프레임워크 Universe 가 오늘 공식 런칭했습니다. Universe 는 어떤 프로그램도 Gym 환경으로 변환시킬 수 있도록 해 주며 VNC 리모트 클라이언트를 통해 도커 서버에 키보드와 마우스 이벤트를 전달하고  AI 에이전트에는 화면의 픽셀과 리워드를 돌려 줍니다. 이런 과정을 아래 그림으로 간단하게 잘 표현하고 있습니다.

interface-725abed463ba2b83d4a68fd08d1818fed900a939cb9c4b9eb1bac07952b4fe61

오늘 런칭을 하면서 플래시 게임, 브라우저 작업, PC 게임 등을 포함한 천여개의 환경을 준비했고 앞으로 수만개로 늘릴 예정입니다. 이미 EA, 마이크로소프트 등의 많은 회사들과 게임 사용을 위한 허락을 받았다고 합니다. 특별히 플래시 게임의 리워드를 위해서 화면의 점수를 읽기 위한 콘볼루션 뉴럴 네트워크를 도커 머신에서 돌리고 있다고 합니다. 그리고 자신의 어플리케이션을 Gym 환경으로 변환하는 툴도 곧 공개할 예정입니다.

알파고를 비롯해 이미지 인식, 번역 등 아직까지는 특정 작업에 촛점을 맞춘 AI 들이 연구되고 있습니다. OpenAI 는 Universe 를 통해 보다 일반적인 지능(General Intelligence)으로 확대하려는 의지를 나타내고 있습니다. 여러 게임을 하면서 학습한 AI 가 새로운 게임에도 금방 적응을 한다거나 컴퓨터 화면의 알람을 클릭해 열어서 나에게 알려주고 이메일을 읽고 필요에 따라 분류 하는 등 사람이 화면을 보고 처리하는 그대로 AI 도 할 수 있을까요.

Universe 관련 페이퍼도 많이 나올 것 같습니다. 또 구글이나 페이스북 등은 또 어떤 카드를 준비할지 궁금합니다. 더 자세한 내용은 OpenAI 의 블로그깃허브, 와이어드 기사를 참고하세요.

OpenAI Universe

OpenAI 의 Gym(https://github.com/openai/gym) 은 강화학습을 연구를 위한 툴킷으로 여러 환경(environment)을 제공하고 있습니다. OpenAI Universe 는 거기에 한걸음 더 나아가 모든 게임, 웹사이트, 어플리케이션을 위한 AI 벤치마킹을 목표로 개발되고 있습니다. 이번주 초에 Universe 베타 테스터를 모집한다는 소식에 참여를 해보았습니다. 아직 깃허브는 일반에게 공개되지 않았지만 베타 테스팅이 끝나는 1~2개월내에 정식 런칭할 것으로 예상됩니다.

Universe 는 Gym 위에 만들어진 라이브러리로 일반 게임의 내부를 건드리지 않고 강화학습의 환경을 만들기 위해서 클라우드의 VNC 서버와 통신을 하면서 게임의 픽셀(768x1024x3)과 리워드, 액션 등을 전달해 주는 역할을 합니다. AI 에이전트는 키보드와 마우스 이벤트를 Gym 을 통해 Universe 환경으로 이벤트를 전달합니다. 클라우드에는 도커 머신이 헤드리스(headless) 크롬 브라우저에서 플래시 게임을 실행합니다. 현재는 테스트 기간이라 한 사람당 32개의 환경을 동시에 실행시킬 수 있지만 정식 런칭이 되면 유저당 환경의 갯수를 제한할 것으로 보입니다.

아래는 베타 테스트로 제공하는 샘플 게임으로 무식하게 제가 전진만 시킨 VNC 영상을 캡쳐했습니다.

아직 도큐멘트가 준비되지 않아 자세한 내용을 파악하는 게 쉽지는 않은 것 같습니다. 새로운 내용이 확인되는대로 업데이트 하겠습니다. 혹 베타 테스트에 참여하고 싶으신 분은 OpenAI 의 그렉 브록맨(Greg Brockman)에게 자신의 깃허브 아이디(username)와 함께 메일(gdb@openai.com)을 보내시면 됩니다.

torch-twrl: RL for Torch

resultsvideo

트위터 Cortex 팀에서 토치(Torch)를 이용한 강화학습 프레임워크인 torch-twrl를 오픈소스로 공개한다고 발표하였습니다. torch-twrl은 OpenAI Gym과도 함께 쓸 수 있으며 소스는 깃허브에 공개되어 있습니다. 토치를 사용한 강화학습 프레임워크로는 rltorch가 이미 있지만 torch-twrl이 외부 라이브러리 의존성이 적다고 합니다. 토치와 관련된 뉴스가 페이스북이 아니고 트위터에서 들려왔네요. 어쨋든 토치 커뮤니티에는 반가운 소식입니다.

keras-rl

케라스(Keras) 기반의 강화학습 라이브러리인 keras-rl이 깃허브에 올라왔습니다. 케라스 기반으로 하고 있으므로 당연히 씨아노(Theano)와 텐서플로우(TensorFlow)를 백엔드로 선택하여 사용할 수 있습니다. keras-rl은 OpenAI Gym을 이용하여 강화학습 모델을 테스트할 수 있도록 되어 있습니다. 현재 구현되어 있는 강화학습 알고리즘은 아래와 같습니다.

  • Deep Q Learning (DQN) [1], [2]
  • Double DQN [3]
  • Deep Deterministic Policy Gradient (DDPG) [4]
  • Continuous DQN (CDQN or NAF) [6]

현재 작업 중으로 곧 추가될 알고리즘도 있습니다.

  • Asynchronous Advantage Actor-Critic (A3C) [5]

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)를 결정하여 짐 라이브러리에 전달합니다. 게임을 이길 수 있도록 막대의 위치를 제어하는 것이 우리가 풀어야 할 숙제입니다.

Continue reading

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)

Deep Q Learning with Gym and TensorFlow

model

텐서플로우와 OpenAI에서 공개한 강화학습 도구인 Gym을 이용한 Q Learning 구현물이 깃허브에 공개되었습니다. 이 코드는 2015년 네이처지에 실린 구글 딥마인드(DeepMind) 팀의 ‘Human-Level Control through Deep Reinforcement Learning‘ 논문을 텐서플로우와 Gym으로 구현한 것입니다. 결과 화면은 흥미롭습니다.

best

원 논문은 구현은 토치로 개발되었습니다. 원 논문의 소스는 여기서 다운받을 수 있습니다.

(추가) 이 코드는 쿠키런 게임을 개발한 데브시스터즈에서 만들었습니다. 강화학습 분야는 역시 게임회사에서 관심이 많은 것 같습니다.

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