close_btn
로그인, 회원가입후 더 많은 혜택을 누리세요 로그인 회원가입 닫기

강화학습 그리고 OpenAI - 1: Introduction to OpenAI

2016.07.01 20:50

이웅원 조회 수:20221 추천:21

2016.07.12 Leewoongwon


Reinforcement Learning 그리고 OpenAI

 

<Contents>

 

1. Introduction to OpenAI

 

2-1. Intro to Reinforcement Learning (1) MDP & Value Function

2-2. Intro to Reinforcement Learning (2) Q Learning

 

3-1. CartPole with Deep Q Learning (1) CartPole example  

3-2. CartPole with Deep Q Learning (2) DQN

3-3. CartPole with Deep Q Learning (3) TensorFlow

3-4. CartPole with Deep Q Learning (4) Code review

 

4-1. CartPole with Policy Gadient (1) Policy Gradient

4-2. CartPole with Policy Gadient (2) Code review

 

5-1. about Atari games

5-2. Atari "Pong"

5-3. Atari "Breakout"

 

6. MuJoCo

 

 


1. Introduction to OpenAI

 

저는 모두의 연구소의 자율주행 드론 연구실 DCULab의 연구실장을 맡고 있는 이웅원입니다.

 

처음에는 드론의 PID계수를 자동으로 맞춰주는 방법들을 찾았었습니다. genetic algorithm등 여러가지 방법들을 접하다가 Reinforcement learning을 접하게 되었습니다. 마침 모두의 연구소에서 강화학습 스터디가 시작되었고 그 때부터 David Silver교수님의 강의를 듣기 시작했습니다.

 

그렇게 강화학습을 차근 차근 공부해나가고 있을 때  OpenAI가 발표되었고 정말 해보고 싶다라는 생각을 가지고 "나중에 해야지"라며 미루고 있었습니다. 강의를 다 듣고도 수업의 내용이 이해가 가지가 않는 것을 보고서 직접 실습을 해야한다고 느꼈고 OpenAI를 시작하게 되었습니다. OpenAI를 사용하기 위해서는 기본적으로 강화학습 내용을 알아야 하므로 제가 배웠던 내용도 정리할 겸 강화학습 수업 내용도 정리해보았습니다.

 

 

 OpenAI란 무엇인지부터 살펴보며 시작해보겠습니다.

<About OpenAI>

 

https://openai.com/about/

다음 페이지에서 OpenAI란 무엇인지 설명해주고 있습니다.

Screenshot from 2016-07-12 13:54:13.png

OpenAI란 비영리 인공지능 연구회사입니다. 2015년 12월 11일에 와이 컴비네이터 샘 알트만과 테슬라와 스페이스엑스의 엘론 머스크가 총 10억 달러를 후원하여 설립하였습니다. OpenAI의 목표는 돈에 목적을 두지 않고 인류에 도움이 되는 방향으로 인공지능을 발전시키자는 것입니다. 현재는 함께 오픈된 공간에서 사람들과 같이 공유하며 인공지능의 발전을 이루려고 하고 있습니다. OpenAI에서는 OpenAI Gym이라는 toolkit을 제공하는데 OpenAI Gym에서는 다음과 같이 설명하고 있습니다. 

https://gym.openai.com/docs

 

Documentation

OpenAI Gym is a toolkit for developing and comparing reinforcement learning algorithms. It makes no assumptions about the structure of your agent, and is compatible with any numerical computation library, such as TensorFlow or Theano. You can use it from Python code, and soon from other languages.

OpenAI Gym consists of two parts:

  1. The gym open-source library: a collection of test problems — environments — that you can use to work out your reinforcement learning algorithms. These environments have a shared interface, allowing you to write general algorithms.
  2. The OpenAI Gym service: a site and API allowing people to meaningfully compare performance of their trained agents.

 

즉, 강화학습 알고리즘 개발 도구입니다. 현재는 Python으로 구성되어 있지만 곧 다른 언어들도 지원한다고 합니다. 또한 TensorFlow나 Theano같은 library와도 연동이 된다는 장점이 있습니다. 이 툴킷을 이용해서 강화학습 강의를 통해서 배웠던 알고리즘들을 적용시켜 볼 수 있으며 이론으로만 배울 때는 몰랐던 서로 다른 알고리즘들을 객관적으로 비교해 볼 수 있습니다. 또한 본인의 코드말고도 사이트에 올라와있는 다른 사람들의 코드 또한 볼 수가 있는 점에서 오픈소스 운동의 일환이라고 볼 수 있습니다.

 

따라서 3개월 동안 강화학습 스터디를 통해서 배웠던 내용을 실재로 적용시켜보기에는 최적이라는 생각이 들었습니다. 스터디는 앞에서 언급했듯이 Deepmind의 David Silver교수님의 강의를 듣는 것으로 진행했었는데 강화학습을 처음 시작할 때 듣기에 좋은 강의입니다. 교재는 Sutton교수님의 Introduction to Reinforcement Learning이라는 책을 사용였고 책과 강의의 링크는 다음과 같습니다.

https://www.youtube.com/watch?v=2pWv7GOvuf0

http://www0.cs.ucl.ac.uk/staff/d.silver/web/Teaching.html

 

Silver 교수님 강의 말고도 Udacity강의도 있습니다. 저희 스터디도 처음에는 유다시티 강의로 시작했다가 한꺼번에 많은 내용을 다루고 머리에 잘 안 들어오는 것 같아서 강의를 바꿨습니다. 개인적으로는 Silver교수님 강의가 학문적인 바탕을 탄탄히 깔아주는 것 같습니다. Udacity 강화학습 강의 링크는 다음과 같습니다. 

https://classroom.udacity.com/courses/ud600/lessons/4676850295/concepts/46733448110923

 

Silver교수님 강의를 들으면서 느꼈던 점은 실습하거나 직접 강화학습이 무엇인지를 체험하는 부분은 부족하다는 것입니다. 또한 강화학습 자체가 어려운 내용이라서 실재로 배웠던 알고리즘을 적응시켜보면 더 잘 이해가 되지 않을까하던 참에 OpenAI라는 것을 접하게 되었습니다. 따라서 이 툴을 가지고 저희가 배웠던 강화학습의 기법들을 이해하고 적용시켜보는 것이 이 포스팅의 목적입니다.

 

 


<OpenAI 개발환경 구축>

 

OpenAI를 사용하기 위해서는 파이썬과 파이썬으로 작업할 공간이 필요합니다. 그러한 개발환경을 구축하는 것을 Ubuntu와 Window의 경우를 나눠서 살펴보도록 하겠습니다. 저는 Ubuntu로 사용중입니다.

 

 

 

1. Ubuntu 14.04에서 개발환경 구축

 

저는 현재 Ubuntu 14.04를 사용중입니다. 원래는 Window 7에서 OpenAI를 사용하려다가 monitor라는 기능이나 Tensorflow등등 윈도우에서 잘 안 되는 것들이 많아서 ROS 때문에 사용중이던 외장하드 Ubuntu에 OpenAI를 설치하게 되었습니다. Ubuntu에서 OpenAI를 이용하시는 것을 추천드리기 때문에 먼저 다루겠습니다. 하지만 두 OS에서 설치과정은 대체적으로 비슷합니다.

 

 

1. Java 설치

저는 Python을 사용하기 위해서 eclipse를 설치했는데 다른 개발환경을 사용하셔도 될 것 같습니다. 저는 eclipse의 경우에 대해서만 언급하겠습니다. 최신 eclipse를 사용하려면 java 8을 설치해야하는데 단순히 터미널 창을 열어서 다음을 실행시켜주면 에러가 발생합니다.

sudo apt-get install openjdk-8-jdk 

Screenshot from 2016-07-08 14:24:18.png

 

이렇게 에러가 발생하는 이유는 우분투 14.04가 나왔을 당시에는 자바 8이 나오지 않은 상태여서 저 명령어로는 자바8을 설치할 수가 없습니다. 다음 페이지를 참고하시길 바랍니다.

http://tecadmin.net/install-oracle-java-8-jdk-8-ubuntu-via-ppa/#

따라서 저는 위 페이지에 따라서 다른 방법으로 자바를 설치했습니다.

 

sudo add-apt-repository ppa:webupd8team/java
sudo
apt-get update
sudo
apt-get install oracle-java8-installer

 

하지만 저는 마지막 줄이 실행이 안되어서 다음 문장으로 대체했습니다.

sudo apt-get install oracle-java8-set-default

 

또한 다음과 같은 명령어로 설치가 된 자바의 버전을 확인할 수 있습니다.

java -version

 

 

 

 

2. Python 설치

우분투에는 파이썬이 설치되어있습니다. 따라서 따로 설치해줄 필요가 없습니다.

 

 

3. Eclipse 설치

https://namu.wiki/w/%EC%9D%B4%ED%81%B4%EB%A6%BD%EC%8A%A4(%ED%86%B5%ED%95%A9%20%EA%B0%9C%EB%B0%9C%20%ED%99%98%EA%B2%BD)

이클립스는 자바를 기반으로 한 통합개발환경입니다. 운영체제에 상관없이 어디서든 이용이 가능하다는 장점이 있으며 개발자들을 위한 방대한 플러그인 지원이 상당히 활발한 툴중 하나입니다. 

 

https://www.eclipse.org/downloads/download.php?file=/oomph/epp/neon/R/eclipse-inst-linux64.tar.gz

이클립스 홈페이지로 가서 다운받고 설치해주시는데 위 링크의 압축파일을 풀어주시고 그 안에 있는 setup파일을 실행시킵니다.

Screenshot from 2016-07-08 13:22:57.png

 

목록중에서 첫 번째를 선택합니다.

Screenshot from 2016-07-08 13:24:27.png

 

 

설치가 완료되면 다음과 같은 화면이 뜹니다.

Screenshot from 2016-07-08 14:30:53.png

 

 

 

4. Eclipse 설정

 

(1) 먼저 창의 맨 위의 메뉴중에서 help를 선택합니다. help탭 --> install new software --> work with에 PyDev - http://pydev.org/updates 를 입력하고 설치해주면 됩니다. 이클립스에서 help창을 찾으려면 맨 위 부분인 workspace-Java-Eclipse보다 더 위쪽으로 마우스를 올려야 선택할 수 있습니다.

Screenshot from 2016-07-05 15:17:12.png

 

Screenshot from 2016-07-08 14:32:43.png

 

(2)eclipse의 window창에서 Preferences를 선택해줍니다.
Preference창에서 PyDev --> Interpreters --> Python Interpreter --> quick auto-config

 

Screenshot from 2016-07-08 14:35:06.png

 

 

(3)이제 새 프로젝트를 생성해주시면 됩니다. 왼쪽 맨 위의 상자모양을 눌르면 다음과 같이 나옵니다. 여러폴더중에서 PyDev폴더에서 PyDev Project를 선택합니다.

Screenshot from 2016-07-08 14:36:35.png

 

 

Project이름은 적당한 것으로 작성해줍니다. 저는 "Reinforcement Learning Practice"라고 작성했습니다.

 

Screenshot from 2016-07-08 14:37:09.png

 

좌측에 보이는 PyDev창에서 저희가 만든 프로젝트 우클릭해서 새로운 PyDev Module을 선택해주시고 파일 이름도 적당하게 작성해주시면 됩니다.

 

그래서 결국 아래와 같이 준비가 되시면 됩니다!

Screenshot from 2016-07-08 14:42:59.png

 

 

 

 

5. Git 설치

https://git-scm.com/

제목 없음.png

git에 대해서는 git homepage에 설명되어 있습니다. 위키피디아에서는 다음과 같이 정의합니다.

 

(Git /ɡɪt/[1])은 프로그램 등의 소스 코드 관리를 위한 분산 버전 관리 시스템이다. 기하학적 불변 이론을 바탕으로 설계됐고, 빠른 수행 속도에 중점을 두고 있는 것이 특징이다. 최초에는 리누스 토르발스가 리눅스 커널 개발에 이용하려고 개발하였으며, 현재는 다른 곳에도 널리 사용되고 있다.

 

깃의 작업 폴더는 모두, 전체 기록과 각 기록을 추적할 수 있는 정보를 포함하고 있으며, 완전한 형태의 저장소이다. 네트워크에 접근하거나 중앙 서버에 의존하지 않는다.

 

현재 주니오 하마노(Junio Hamano)가 소프트웨어 관리를 감독하고 있다. 깃은 GNU 일반 공중 사용 허가서 v2 하에 배포되는 자유 소프트웨어이다.

 

 

git을 설치하는 것은 Ubuntu에서는 상당히 간단합니다. 터미널 창에 다음과 같이 입력하면 됩니다.

sudo apt-get install git

 

 

6. OpenAI 설치

python으로 openai를 설치해주려면 pip를 설치해줘야 합니다. 다음과 같이 터미널 창에 입력합니다.

sudo apt-get install python-pip

 

OpenAI홈페이지에 보면 기본적인 기능들만 설치하는 방법과 필요한 모든 것을 설치하는 방법이 있는데 살짝 다릅니다. 그 방법들은 다음과 같습니다.

 

(1) 기본설치
git clone https://github.com/openai/gym
cd gym
sudo pip install
-e . # minimal install

 

(2) 모두설치

https://github.com/openai/gym#installing-everything

 

위에서 pip install -e .를 하기 전에

sudo apt-get install -y python-numpy python-dev cmake zlib1g-dev libjpeg-dev xvfb libav-tools xorg-dev python-opengl libboost-all-dev libsdl2-dev swig

를 먼저 실행한 다음에

sudo pip install -e .[all]

입력해주면 설치가 됩니다.

 

 

 



2. Window 7에서 개발환경 구축

 

 

윈도우에서 OpenAI를 사용하는 것을 추천드리지 않습니다. 설치하는 과정에 시간이 많이 걸렸고 사용하면서도 여러가지 문제들이 발생했으며 앞으로 사용하게 될 TensorFlow도 리눅스에서 잘 되기 때문에 왠만하면 Ubuntu에서 사용하시는 것을 권장드립니다.

 

1. Java 설치

 

자바 설치 페이지는 google에 자바를 치면 나옵니다
https://java.com/ko/download/windows-64bit.jsp

 

 

2. Eclipse 설치
 

https://www.eclipse.org/
 

 

 

3. Python 27설치
 

파이썬 홈페이지에 들어가서 Python 2.7.12버전을 설치합니다. 3버전과 2버전은 문법이 조금 차이가 나는데 일단은 2버전으로 설치하였습니다.
https://www.python.org/

 

 


 

4. git 설치


https://git-for-windows.github.io/
 

 

 

5. 여러가지 설정
 

우분투에서와는 다르게 기본적으로 파이썬이 설치되어있지 않았기 때문에 python이라는 명령어를 사용하기 위하서는 다음과 같은 설정을 해줘야합니다.

(1)내 컴퓨터 --> 시스템속성 --> 고급 시스템 설정

 

2.jpg

 

 

 

 

--> 환경변수 --> 시스템 변수에서 PATH를 더블클릭한 다음에

3.jpg

 

 

 

시스템 변수편집에서 변수 값의 끝에 ;C:\Python27 붙여주면 됩니다
4.jpg

 

 


이클립스 설정은 우분투와 동일합니다.

(2)Help--> install new software --> work with에 
PyDev - http://pydev.org/updates 를 입력, 설치

 

(3)eclipse의 window창에서 Preferences를 선택
Preference창에서 PyDev --> Interpreters --> Python Interpreter --> quick auto-config

(4)project를 생성

 

 

 

6. OpenAI gym설치


https://gym.openai.com/docs
 

 


1. 그냥 설치

 

cmd 창을 키고  차례대로 실행시켜주시면 설치가 됩니다.

git clone https://github.com/openai/gym

cd gym

pip install -e . # minimal install

 

2. 모두 설치   

이 부분은 제가 확실하다고는 말씀못드릴 것 같습니다. 윈도우에서 모두 설치는 현재로서는 성공하지 못한 것 같습니다. 모든 것을 설치하기 위해 pip를 update하고 cmake를 설치해야한다고 OpenAI홈페이지에 나와있습니다.

 

  • Cmake 다운로드 https://cmake.org/download/

Binary platform의 window win64-x64 installer !
 

  • Pip update 

Cmd 창 열어서 “pip install –ignore-installed pip” 입력
 

 


<OpenAI 간단 예제 실행해보기>


이제 OpenAI를 사용하기 위한 준비는 다 되었습니다. 따라서 잘 설치되었는지 확인을 하기 위해 예제를 한 번 시도해보겠습니다. 가장 간단한 예제는 OpenAI홈페이지에 나와있는 cartpole예제입니다.
https://gym.openai.com/docs
홈페이지에 나와있는 코드를 그대로 eclipse에 입력해줍니다.

11.jpg

 

 

그대로 실행해주면 다음과 같이 cartpole이 한쪽으로 움직이는 것을 볼 수 있습니다. 지정되어 있는 기본 행동으로서 한 쪽으로 움직이는 것입니다. 이제 이 CartPole을 학습시키면 됩니다. 말은 간단하지만 쉽지 않겠죠?

 

12.jpg

 

 

이 예제에서의 목표는 막대기가 세워진 채로 오랫동안 버티는 것입니다. 

 

여기까지 OpenAI를 설치해보고 간단한 예제를 실행해보았습니다. 다음 글에서는 강화학습의 개념에 대해서 살펴보는 시간을 가지겠습니다.


 

번호 제목 글쓴이 날짜 조회 수
공지 강화학습 (Reinforcement Learning) 연구실 OpenRL 모임 안내 모두의연구소 2016.06.12 1300
22 softmax action result에 대한 reward 김상범 2017.10.31 256
21 강화학습 논문 웹사이트 모음 xelgana 2016.10.28 1551
20 Monte-Carlo Tree Search 코드 [3] file 이영무 2016.10.06 1866
19 2016. 9. 1. Asynchronous 발표 자료 [1] file 최한철 2016.09.10 412
18 2016. 9. 1. 발표자료 [3] 최한철 2016.08.29 534
17 Fundamental of Reinforcement Learning 링크 이웅원 2016.08.24 1093
16 2016.08.18 OpenRL 발표자료 file 이웅원 2016.08.17 758
15 강화학습 그리고 OpenAI - 4: CartPole with Policy Gradient (2) Code Review [5] file 이웅원 2016.07.20 5400
14 강화학습 그리고 OpenAI - 4: CartPole with Policy Gradient (1) Policy Gradient [9] file 이웅원 2016.07.15 10669
13 강화학습 그리고 OpenAI - 3: CartPole with Deep Q Learning (4) Code Review file 이웅원 2016.07.14 8426
12 강화학습 그리고 OpenAI - 3: CartPole with Deep Q Learning (3) TensorFlow 이웅원 2016.07.13 3889
11 강화학습 그리고 OpenAI - 3: CartPole with Deep Q Learning (2) DQN file 이웅원 2016.07.13 5951
10 강화학습 그리고 OpenAI - 3: CartPole with Deep Q Learning (1) CartPole example file 이웅원 2016.07.12 6612
9 DQN 발표자료 file 플룻 2016.07.11 966
8 강화학습 그리고 OpenAI - 2: Intro to Reinforcement Learning (2) Q Learning [4] file 이웅원 2016.07.08 16160
7 강화학습 그리고 OpenAI - 2: Intro to Reinforcement Learning (1) MDP &Value Function [2] file 이웅원 2016.07.04 17425
» 강화학습 그리고 OpenAI - 1: Introduction to OpenAI [3] file 이웅원 2016.07.01 20221
5 Reinforcement Learning by Sutton Chapter 5~16 file 마르코프김 2016.07.01 579
4 Reinforcement Learning by Sutton Chapter 1~4 [1] file 마르코프김 2016.06.30 2212