강화학습 env을 제공해주는 gym 모듈

Categories: Tags:


서론

*참고

Opentutorials: Machine learning 1
Gym: Documentation

강화학습 설명

위는 강화학습을 표현한 사진입니다. agent가 action을 취했을 때 environment는 달라지고 그에 따른 reward와 state를 agent에게 돌려줍니다. 그리고 agent는 다시 이것을 가지고 policy에 따른 action을 취합니다.

위에서는 게임이 예시로 나왔는데 이렇게 강화학습을 공부하려면 반드시 environment가 필요합니다. 물론 내가 해결하려는 문제를 정의하고 그것을 가지고 environment를 설정하면 가장 좋겠지만, 저는 실패했습니다.

찾아보니까 미리 강화학습을 공부하기 위한 environment를 제공해주는 모듈이 있었습니다. 제목에 쓴 것처럼 gym이라는 모듈인데 이 모듈에 대해서 공부해보도록 하겠습니다.

gym

env

import gym
env = gym.make('CartPole-v0')
env.reset()
for _ in range(1000):
    env.render()
    env.step(env.action_space.sample()) # take a random action
env.close()

CartPole이라는 게임(막대기를 쓰러뜨리지 않는 게임)을 env으로 제공해준 건데 코드 자체는 어렵지 않습니다. env.render()를 통해서 env을 보여주고 env.step(env.action_space.sample())을 통해서 env에 action을 줍니다. 여기선 랜덤한 action을 줘서 그냥 막대기가 바로 쓰러지고 끝납니다. 학습시킨 액션을 주게 되면 이제 막대기가 서 있을 것 같습니다.

관찰

위에서 사용한 step()이라는 함수는 4가지 값을 리턴합니다.

  1. observation (object): an environment-specific object representing your observation of the environment. For example, pixel data from a camera, joint angles and joint velocities of a robot, or the board state in a board game.
  2. reward (float): amount of reward achieved by the previous action. The scale varies between environments, but the goal is always to increase your total reward.
  3. done (boolean): whether it’s time to reset the environment again. Most (but not all) tasks are divided up into well-defined episodes, and done being True indicates the episode has terminated. (For example, perhaps the pole tipped too far, or you lost your last life.)
  4. info (dict): diagnostic information useful for debugging. It can sometimes be useful for learning (for example, it might contain the raw probabilities behind the environment’s last state change). However, official evaluations of your agent are not allowed to use this for learning.

원본 문서에 있는 걸 그대로 썼습니다. 그렇습니다. 이런 것들을 이제 관찰해서 학습을 시킬 것 같습니다.

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("{}th Episode finished after {} timesteps".format(i_episode+1, t+1))
            break
env.close()

이런 식으로 테스트를 하면 한 에피소드에서 랜덤한 action을 취했을 때 몇 t 동안 버티는지를 보여줍니다. done 값이 env가 끝나면 true를 리턴하기 때문입니다. 오 신기합니다. 이런 env자체를 사용해서 이제 강화학습을 공부할 수 있을 것 같습니다.

gym 문서에 더 많은 내용이 있습니다. 들어가 보시면 Cartpole에 대한 자세한 설명도 쓰여 있고 다른 env들도 많습니다. 들어가 보시길 추천해 드립니다.

생각

MarI/O - Machine Learning for Video Games
사실 위의 인공지능 마리오 영상을 보고 너무 감명받아서 강화학습에 관해서 공부하고 싶었습니다. gym 모듈 보니까 마리오 모듈도 있던데 잘 공부해서 저도 한번 시도해보겠습니다.


ML내 다른 글 보기

댓글남기기