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

2016.07.13 Leewoongwon & Leeyoungmoo


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(Deep Q-Networks)

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

 

 

 

 


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

 

이 글은 모두의 연구소 강화학습 스터디의 이영무 연구원님이 작성하시고 제가 편집하였습니다.

 

1. What is TensorFlow

https://www.tensorflow.org/

TensorFlow에 대해서 홈페이지에서 설명하고 있습니다.

Screenshot from 2016-07-13 15:23:20.png

Screenshot from 2016-07-13 15:21:16.png

 

TensorFlow는 구글이 만든 오픈소스 소프트웨어 라이브러리로서 data flow graph를 이용하여 수치연산을 하는 용도로 사용됩니다. 원래는 구글 내부의 인공지능 연구소의 연구자들과 엔지니어들에 의해서 개발되고 사용되어왔지만 최근에 구글이 공개함으로서 모두가 그 라이브러리를 사용할 수 있게 되었습니다. 이로서 좀 더 일반 사용자들이 딥러닝에 대해서 쉽게 접근할 수 있게 된 것 같습니다.

 

위 TensorFlow의 홈페이지에 설치방법, tutorial등이 나와있습니다. 간단하게 이 tutorial을 기반으로 TensorFlow를 사용해보겠습니다.

 

2. Install TensorFlow

 

CPU만 이용할 것인지 GPU를 이용할 것인지, 어떤 Python버전을 사용하고 있는지, 운영체제는 무엇인

지에 따라서 설치 방법이 다르기 때문에 밑의 링크를 참고해주시기 바랍니다.

https://www.tensorflow.org/versions/r0.9/get_started/os_setup.html#pip-installation


현재 저희는 Ubuntu 64bit 운영체제를 사용하고 있고 CPU만을 사용하며, Python 2.7을 사용중이고 그

설치 과정은 다음과 같습니다.

 

pip를 이용해 TensorFlow를 설치하기 위해서 먼저 pip를 설치해주어야 합니다. 터미널 창을 열어주신 

다음에 다음 명령어를 실행시키면 설치가 됩니다.

sudo apt-get install python-pip python-dev

 

그 다음에 TensorFlow 파일들을 받아올 URL주소를 저장해줍니다.

export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.9.0-cp

27-non-linux_x86_64.whl

 

URL을 이용하여 pip를 통해 설치를 진행합니다.

sudo pip install –upgrade $TF_BINARY_URL

 

참고로 WindowsLinux 32bit 운영체제는 아직 공식적으로는 tensorflow를 지원하지 않습니다. 제가 처

음에 윈도우로 OpenAI를 사용하려다가 Ubuntu로 오게 된 여러 이유중에 하나입니다. 설치를 완료하셨다

면 이제 차근차근 Tutorial을 해보도록 하겠습니다.


 


 

3. Basic Usage

 

밑의 코드들은 color scripter라는 툴을 사용해서 올렸습니다. 코드를 글에 포함시킬 때는 유용한 것 같

습니다. 일단 가장 기본적인 부분을 보겠습니다. neural networks에 대해서 저번 글에서 설명했었는데

neural networks는 일종의 노드(뉴런)와 엣지(시냅스)로 이루어진 그래프입니다. Tensor라는 것은 다차

원 data array인데 예를 들어 강화학습에서 s,a,r,s'을 하나의 set으로 보고 그것으로 학습한다면 각각의

s, a, r은 array가 되는 것이고 이런 것이 모여서 tensor가 되는 것 같습니다. 그러한 tensor가 neural net

work에서 흐른다면 그것이 tensorflow가 되는 것이 아닐까 싶습니다. 그러한 graph를 만들어주면서 시

작을 합니다.

 

  • Building the Graph
1
2
3
4
5
6
import tensorflow as tf
 
matrix1 = tf.constant([[3.3.]])
matrix2 = tf.constant([[2.],[2.]])
 
product = tf.matmul(matrix1, matrix2)
cs

위는 그래프를 만들어주는 코드입니다. matrix 1은 정의되어 있듯이 1x2 행렬이고, matrix 2는 2x1행렬

입니다. tf.matmul이라는 함수는 두 개의 매트릭스를 곱해주는 연산을 수행합니다. neural networks의

구조를 다시 생각해보면 input에 해당하는 것이 matrix 1, 2이고 node에 해당하는 것이 matmul일 것입

니다. 그리고 output은 product라고 볼 수 있고 이러한 형태를 graph라고 TensorFlow는 부르고 있습니

다. 하지만 위의 코드는 graph라는 일종의 설계도만 만들어주는 것이지 실재로 계산을 해서 output의

값을 알려면 "Session"을 만들어서 sess.run을 해주어야 계산이 진행됩니다. 그렇다면 "Session"이란 무

엇일까요?

 

https://www.tensorflow.org/versions/r0.9/api_docs/cc/ClassSession.html

위 페이지를 참고하였을 때 제가 이해하기로는 Session이란 하나의 TensorFlow안의 Class로서 graph를

통해 Tensor를 계산하는 과정을 수행하는 것 같습니다. (아직 Session이라는 개념이 잘 와닿지 않습니

다)

 

 

  • Launching the graph in a session

1

2

3

4

5

6

7

sess = tf.Session()

 

result = sess.run(product)

print(result)

 

sess.close()

 
cs

위에서 만든 graph를 사용해서 계산을 하기 위해서 session을 만들어야 합니다.

sess = tf .Session() : session의 생성

result = sess. run(product) : product를 실행시킵니다.

sess.close() : session을 종료합니다. 결과가 [[12.]]으로 result에 저장됩니다.

 

 

 

 

  • Interactive Usage
1
2
3
4
5
6
7
8
9
10
11
12
13
import tensorflow as tf
sess = tf.InteractiveSession()
 
= tf.Variable([1.02.0])
= tf.constant([3.03.0])
 
x.initializer.run()
 
sub = tf.sub(x, a)
print(sub.eval())
 
sess.close()
 
cs

다음 글인 DQN코드에서도 이 IterativeSession을 사용하는데 이 session을 사용하면 session.run을 사용

하지 않고 initializer같은 함수를 사용할 수 있습니다.

 

x = tf.Variable([1.0, 2.0]) : x를 초기화시켜주는 것입니다. tf.constant와 다른 점은 constant는 상수이기

                                 때문에 따로 initialize해 줄 필요가 없지만 Variable은 initialize가 필요한다는

                                 점입니다.

 

X.initializer.run() : Interative Session이기 때문에 Initializer.run을 실행해도 initialization이 됩니다.

 

sub = tf.sub(x, a) : x에서 a를 빼줍니다.

 

print(sub.eval()) : tf.sub이라는 것을 통해 정의된 sub자체는 값이 아니고 하나의 operator이기 때문에 e

                      valuation이라는 함수를 사용해서 그 값을 얻어내야합니다.

 


 

다음 코드를 통해서 TensorFlow의 기본적인 명령어들에 조금 더 익숙해지실 수 있습니다.

 

  • Variables

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
state = tf.Variable(0, name="counter")
 
one = tf.constant(1)
new_value = tf.add(state, one)
update = tf.assign(state, new_value)
 
init_op = tf.initialize_all_variables()
 
with tf.Session() as sess:
  sess.run(init_op)
  print(sess.run(state))
  for _ in range(3):
    sess.run(update)
    print(sess.run(state))
 
# output:
# 0
# 1
# 2
# 3
 
cs

 

7번째 줄까지는 선언하는 부분으로 state라는 변수를 선언하고 1이라는 상수를 선언하고 두 개를 더한

것을 new_value로 정의합니다. update라는 것은 state에 new_value를 넣는 건데 이 코드에서는 state에

1씩 더해지게 됩니다.

 

9번째 줄부터 실재로 TensorFlow가 돌아가는 부분입니다. C언어에서의 main함수 같은 느낌입니다.

with tf.Session() as sess: sess = tf.Session()과 같은 표현인데 그 뒤를  block으로 여러 줄을 묶어줍니다.

따로 닫는 표현을 사용하지 않아도 됩니다.

 

sess.run(init_op) : init_op 는 tf.initialize_all_variables()을 의미합니다. 따라서 sess.run을 수행했을 때 ini

t_op라는 함수가 수행되게 됩니다.

 

print(sess.run(state)) : session run을 통해서 state를 product로 하는 operator를 작동시키고 그 값을 내

보냅니다. TensorFlow에서는 단순히 함수를 가져와도 session run을 하지 않으면 그 값이 출력되지 않

습니다.

 

sess.run(update) : 앞에서 언급했듯이 state에 1을 더해주는 operate를 진행하고 그 값을 state에 저장

                       합니다.

 

print(sess.run(state)) : 다시 state를 실행하여서 이전의 operate로 저장된 state값을 출력합니다.

 

따라서 결국 출력되는 결과는 0, 1, 2, 3입니다.

 

  • Feed
1
2
3
4
5
6
7
8
9
input1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32)
output = tf.mul(input1, input2)
 
with tf.Session() as sess:
  print(sess.run([output], feed_dict={input1:[7.], input2:[2.]}))
 
# output:
# [array([ 14.], dtype=float32)]

cs

 

feed는 변수를 어떤 값으로 고정시키는 것이 아니고 c언어에서의 scanf와 같이 사용자가 직접 그 변수

를 입력해주는 것입니다. 대신 scanf와 다른 것은 사용자가 코드안에서 입력해주어야 합니다.

 

처음 세 줄은 input과 output을 정의하고 그 형태를 지정하는 부분입니다. placeholder란 그 input의 모

양과 형태를 지정하는 함수인데 여기서는 형태는 float32이고 모양이란 input이란 행렬의 모양을 말하

는 것인데 설정을 따로 하지 않을 경우에 default로 1X1의 행렬이 들어가게 됩니다.

 

print(sess.run([output], feed_dict = {input1:[7.], input2:[2.]})) : dictionary 형태로 feed를 정의했는데 여

러 개의 행렬을 동시에 입력할 때 그러한 형태로 지정해줍니다. [7.]와 [2.]을 input으로 받아서 output에

해당하는 operator를 작동시키고 그 결과값을 저장하고 출력합니다.

 

 


이렇게 TensorFlow가 무엇인지 살펴보고 설치를 하였습니다. 그리고 TensorFlow의 명령어들을 수행해보면서 TensorFlow가 어떤 식으로 작동하는 지 알아보았습니다. 이 내용을 토대로 다음 글에서 DQN코드를 분석해보겠습니다.

번호 제목 글쓴이 날짜 조회 수
공지 강화학습 (Reinforcement Learning) 연구실 OpenRL 모임 안내 모두의연구소 2016.06.12 1300
22 softmax action result에 대한 reward 김상범 2017.10.31 255
21 강화학습 논문 웹사이트 모음 xelgana 2016.10.28 1548
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 532
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 5399
14 강화학습 그리고 OpenAI - 4: CartPole with Policy Gradient (1) Policy Gradient [9] file 이웅원 2016.07.15 10661
13 강화학습 그리고 OpenAI - 3: CartPole with Deep Q Learning (4) Code Review file 이웅원 2016.07.14 8420
» 강화학습 그리고 OpenAI - 3: CartPole with Deep Q Learning (3) TensorFlow 이웅원 2016.07.13 3887
11 강화학습 그리고 OpenAI - 3: CartPole with Deep Q Learning (2) DQN file 이웅원 2016.07.13 5947
10 강화학습 그리고 OpenAI - 3: CartPole with Deep Q Learning (1) CartPole example file 이웅원 2016.07.12 6604
9 DQN 발표자료 file 플룻 2016.07.11 966
8 강화학습 그리고 OpenAI - 2: Intro to Reinforcement Learning (2) Q Learning [4] file 이웅원 2016.07.08 16143
7 강화학습 그리고 OpenAI - 2: Intro to Reinforcement Learning (1) MDP &Value Function [2] file 이웅원 2016.07.04 17414
6 강화학습 그리고 OpenAI - 1: Introduction to OpenAI [3] file 이웅원 2016.07.01 20211
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