본문 바로가기

Reinforcement Learning/Practice

[Part 2] Policy-based Agents(Cart-Pole Problem)

스팅에 앞서 Reference의 contents를 review하는 글임을 밝힙니다.


Part 1과 Part 1.5에 이어 이번 포스팅에서는 제대로된(perfect) 강화학습에 대해 살펴보겠습니다. Part 1.5 포스팅에서는 Part 1과 1.5의 예제가 강화학습과 어떻게 다른지, 어떤 조건이 결여되어 있는지 설명했습니다. 이를 다시 짚고 Part 2로 넘어가는 것이 좋겠습니다.


< Fig1. Part 1, 1.5 vs Part 2(RL) >


원 포스팅의 글에서 이해를 돕기 위해 왼쪽에 간단한 그림을 추가했습니다. MAB(Part 1)의 문제에서는 State가 변하지 않고 오로지 하나의 bandit에서 arm을 선택하는 action을 통해 reward를 얻습니다. 그리고 이에 state의 개념을 더하여 여러 대의 bandit의 상황을 부여하고 이를 통해 각각 reward를 maximize하는 arm을 선택하는 policy를 찾는 것이 contextual bandit(Part 1.5)문제였습니다. 이제 perfect한 강화학습이 되기 위해서는 action을 통해서 agent의 state가 변하며, reward가 delayed reward가 되면 MDP로 정의된 강화학습 문제가 됩니다. 


이번 포스팅에서는 강화학습 예제로써, OpenAI gym의 Cart-Pole Problem을 다루겠습니다.



Cart-Pole Problem

Cart-Pole 문제는 cart 위에 막대기를 세워 최대한 오랫동안 버티는 것을 목표로 합니다. 2D 평면 위의 track에 cart가 있고 cart는 track 위에서 좌우로 움직일 수 있습니다. cart에는 아래와 같이 pole이 360˚ 회전할 수 있게 연결되어 있어, cart가 움직이지 않으면 pole은 중력에 의해 아래로 늘어뜨려지도록 환경이 구성되어있습니다. 따라서, cart는 계속 좌우로 움직이며 균형을 맞춰야 목표를 성취할 수 있습니다.



<Fig2. Cart-Pole no reset>


우리가 고려할 model은 아래와 같습니다.


ㆍObservation : [x, θ, dx/dt, dθ/dt]
- x : track 상에서 cart의 위치
- θ : pole과 normal line과의 각도
- dx/dt : cart의 속도
dθ/dt : θ의 각속도

ㆍEnding condition(of episode) 

1) θ가 15˚이상

2) 원점(O: cetroid of track)으로부터의 거리가 2.4 units이상 


ㆍAction : cart의 가하는 힘의 방향 (0 or 1)

ㆍReward : episode가 유지되는 시간

ㆍObjective : Ending condition을 피하며 reward를 최대로(pole의 균형을 오랫동안 유지)


The Agent taking random action

 Part 1.5의 env.에서 state를 추가한 발전된 env.에서의 agent를 구성해보겠습니다. Cart-pole에서 Part 1.5와 달라진 점은 env.로부터 agent가 state를 관찰(observe)한 다는 것입니다. Contextual Bandit에서는 random하게 state(bandit)가 주어지는데 cart-pole 예제에서는 initial state만 random하게 주어지고 agent가 이에 action을 취함에 따라 state가 변합니다.  

 먼저, 간단하게 agent가 random한 action을 취하도록 구성했을 때의 결과입니다.


agent가 episode마다 평균 16.1의 reward를 얻었습니다. random한 action을 취했을 때 평균 16.1 sec뿐이 버티지 못한 것입니다. 현재는 random action을 통해서 trial and error를 했다할 뿐이지 agent가 이를 학습하여 policy를 개선하지 않았습니다. 그렇다면 학습을 통해 개선시켜 보겠습니다.

The Agent with Neural Network(Policy Gradient)

 이전의 예제에서도 policy gradient의 방법을 통해서 agent가 학습을 했습니다. 하지만, 이전과 환경이 다릅니다. agent가 선택한 action에 따라 state가 변화하기때문에, 우리는 당장 현재 state뿐만 아니라 action을 통해 변화할 다음 state에서까지 득이 되는 action을 취해야합니다. 여기서 delayed-reward라는 개념이 적용됩니다. 미래에 얻을 reward도 결국 우리가 얻을 reward이고 이는 현재의 state와 action로 바로 얻을 수있는 reward는 아니지만 영향은 받습니다. 이 때문에 delayed reward라고 부릅니다. 이를 위해서 buffer에 경험한 것들을 충분히 모아서 update하는 식으로 policy를 발전시킵니다. 

 

 Network 구성은 아래 그림과 같이 1개의 layer, 두개의 weight(W1, W2)을 이용합니다. 각각의 Unit과 Activation func.은 표기한 바와 같습니다. 



<Fig3. Network 구성>


코드 부연설명은 주석으로 대체하겠습니다. 



 아래는 학습결과입니다. agent가 pole을 쓰러뜨리지 않고 오래 유지하고 있네요.

<Fig4. Trained agent in Cart-Pole Example>


마치며

다음 포스팅은 같은 문제에 대해서 조금 더 복잡한 부분을 학습하기 위해서 보다 발전된 Part.3 Model-based Agent에 대해 포스팅하겠습니다. 

오탈자나 잘못 언급된 부분이 있으면 댓글로 지적해 주세요 :)

Reference

[1] https://medium.com/@awjuliani/super-simple-reinforcement-learning-tutorial-part-2-ded33892c724


[2] http://ishuca.tistory.com/394?category=730862


[3] http://www.modulabs.co.kr/RL_library/3192


[4] http://gym.openai.com/docs