RL/Practice

[Part 1.5] Contextual Bandits

숨니야 2018. 1. 4. 01:43

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


 이번 포스팅에서는 본격적인 강화학습에 대한 실습에 들어가기 앞서, Part 1의 MAB algorithm에서 강화학습으로 가는 중간 과정을 다룰 겁니다. MAB의 경우, agent가 학습하는 것은 reward를 최대로 하는 machine을 적당한 Exploration을 통해 찾고 이를 Exploit하는 겁니다. 이 때, agent를 state의 개념이 없이 action과 reward를 통해서만 학습을 진행하게됩니다.


   


< Fig 1. Multi-Armed Bandit >


 앞선 MAB algorithm을 온전한 강화학습으로 생각하기에는 부족한 요소가 있기때문에 강화학습의 입문 과정으로써, Contextual Bandits에 다루겠습니다. MAB와 다른 점은 여러 bandits가 있어, state가 존재한다는 것입니다. 각각의 bandit은 또 multi-armed이며, machine마다 maximum reward를 주는 arm이 다릅니다. 


< Fig 2. Contextual Bandits >


 하지만, 여전히 강화학습과의 차이점은 존재합니다. Contextual Bandits이 강화학습과 구별되는 차이점은 action을 하면 state가 변화지않습니다. 이전 posting에서 다룬 grid world 예제에서 agent는 action을 취하면 state가 변했습니다(s->s'). 하지만 Contextual Bandits에서는 오로지 env.으로부터 수동적으로 주어지는 상황이고 agent의 action으로 state가 변화하지 않습니다. 따라서, agent는 주어진 bandit에서 maximum reward를 얻는 arm을 찾는 것이 목표입니다.



Contextual Bandits

ㆍConstraints 

1) 각 arm은 각기 다른 reward를 제공한다.

2) 제한된 시간 내에 제한된 횟수만큼 arm을 이용할 수 있다.

3) 한 번에 하나의 arm을 당길 수 있다.

4) bandit은 env.으로부터 random하게 주어진다.


ㆍObjective : 정해진 시간 내에 bandit마다 총 reward를 maximize하는 policy를 찾는다.

 Agent가 매 episode마다 random하게 선택된 머신에 앉아 arm을 당기게 됩니다. 이 때, 선택된 머신에서의 arm을 Exploitation & Exploration하는 algorithm은 ε-greedy 방식을 채택합니다. 이렇게 env.가 agent에게 머신을 주는 것이 agent의 state가 되며, agent의 목적은 bandit마다 maximum reward를 주는 arm을 찾아내어 reward를 극대화하는 것입니다. 이를 반영한 code입니다. 부연설명은 주석으로 대체하겠습니다.




마치며

이제 강화학습에 필요한 요소가 담긴 basic example을 모두 다루었습니다. 이후의 실습은 온전한 강화학습에 대한 내용입니다.  다음 포스팅은 Part 2 Policy-Based Agent에 대해 포스팅하겠습니다. 

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

Reference

[1] https://medium.com/emergent-future/simple-reinforcement-learning-with-tensorflow-part-1-5-contextual-bandits-bff01d1aad9c


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