Reinforcement Learning

RL (강화학습) 기초 - 1. OpenAI의 Gym 설치 및 예제 돌려보기

대소니 2017. 7. 12. 10:00



강화학습을 이론적으로 공부를 하기 위해서는 보통 Sutton 교수님의 책으로 시작을 하는데 이 책의 내용이 수학적이고 어려운 내용들이 많이 있다보니 접근하기가 쉽지는 않는 것 같습니다. 이후에는 이러한 이론적인 내용들도 시간이 되면 차근차근 정리해 보도록 할 것인데요.


이번에시작은 가볍고 재미있게 할 수 있는 방법으로 해보려고 합니다.


openAI 에서 간단한 게임들을 통해서 강화학습을 테스트 할 수 있는 Gym 이라는 환경을 제공하고 있습니다. 

Gym을 설치하고 간단한 예제를 돌려보면서 강화학습이란 것이 어떤 것인지 먼저 감을 잡아 볼 수 있을 것 같습니다.


제가 맥북에서 주로 작업을 하다 보니 우선은 Mac OS를 기준으로 해보겠습니다.

(Windows 에서도 설치해보니 동일한 방식으로 설치가 잘 됩니다)


파이썬을 기반으로 하고 있기에 아나콘다 환경에서 가상의 파이썬 환경을 하나 생성하고, 기본적인 환경의 Gym을 설치하고 예제를 돌려보는 내용이 될 것 같습니다.




1. 아나콘다에서 가상환경 생성


gym 이라는 이름을 가지는 새로운 파이썬3 버전의 가상환경을 만들어 줍니다.


$ conda create -n gym python=3.5 anaconda





2. 가상환경에 접속


새로 생성된 가상환경에 접속합니다.


$ source activate gym





3. Gym 설치하기


pip 명령어를 이용해서 기본 환경만 설치를 합니다.


$ pip install gym





4. 간단한 예제 실행하기


아나콘다 네비케이터에서 생성한 gym 환경을 선택하고 주피터 노트북을 실행 시켜 줍니다.




새로운 파이썬 파일을 하나 생성하고 아래와 같이 예제를 실행합니다.


import gym

env = gym.make('CartPole-v0')

for i_episode in range(20):

    observation = env.reset()

    for t in range(100):

        env.render()

        print(observation)

        action = env.action_space.sample()

        observation, reward, done, info = env.step(action)

        if done:

            print("Episode finished after {} timesteps".format(t+1))

            break



예제가 실행 되면 화면이 보여지면서 값이 출력이 되면 정상적으로 학습이 되고 있는 것을 볼 수 있습니다.





예제 프로그램에 대해서 간단하게 살펴보면,


gym 에서 제공하는 CartPole-v0 이라는 이름을 가지고 있는 환경을 생성합니다. 이 환경은 이미 만들어 놓은 것으로서 쉽게 불러와서 환경을 구성할 수 있도록 해줍니다.


이 환경에서 루프를 20번 정도 돌면서 에피소드를 반복적으로 수행하게 됩니다. 여기서 에피소드란 것은 한번 어떤 행동을 취하는 것을 말합니다. 여기서는 pole 이 쓰러지지 않도록 중심을 잡기 위한 액션을 하게 될 것입니다.


환경을 의미하는 env 객체는 reset 함수를 이용해서 초기화를 하고 observation 이라는 객체를 리턴해줍니다. 이 객체는 환경에서 보내주는 현재 상태 값들이 저장되어 있습니다.


이 환경에서 주는 피드백 값들을 통해서 어떤 랜덤한 액션을 취하고 그에 대한 reward (보상)을 통해서 학습을 하도록 되어 있습니다.

이것이 바로 강화학습에서 핵심이 되는 학습 방법이면서 학습 사이클입니다,


다시 말하면, 하나의 환경속에서 agent가 어떠한 행동을 취하고 그에 대한 피드백을 환경에서 다시 받음으로서 학습을 하게 됩니다. 보상이 크면 클 수록 그에 대한 행동이 효과적이라고 볼 수 있고 반대의 경우에는 잘못된 행동이라고 배우게 될 것입니다. 많은 경험과 시행착오를 통해서 agent는 자신이 속한 환경속에서 최적의 행동을 찾아낼 수 있게 되겠습니다.^^