@yuichirominato 2018.12.30更新 287views

【強化学習】OpenAI Gymつかってみた

OpenAI Gym 強化学習 機械学習 深層学習

はじめに

量子コンピュータを活用して期待されていることの1つが機械学習です。近年では深層学習も大きく発達しています。量子コンピュータでも2019年は大きく機械学習が発展しそうです。機械学習や深層学習と量子コンピュータの統合を目指していきたいと思います。

今回は特に機械学習の中でも強化学習に焦点を置いて少しずつ量子コンピュータや量子アニーラとの統合を目指します。

勉強会について

MDR社では技術検討会と称して、勉強会で強化学習や深層学習の勉強会を量子コンピュータと並行して行なっております。その中でも深層強化学習をはじめとして幾つかの勉強会はすでに盛況となっており、強化学習は大きな盛り上がりを見せています。

https://mdrft.connpass.com/

今回は強化学習の学習プラットフォームについて紹介したいと思います。これは特に量子コンピュータ、古典コンピュータに制限されるものではありません。

今回は 主にGPUやCPUを活用した強化学習を見直したいと思います。

OpenAI Gym

OpenAIというAIを運用する団体が提供するシミュレーション環境です。
https://openai.com/

Githubやpipで入手できます。
https://github.com/openai/gym

サイトはこちら。
https://gym.openai.com/

参考記事

こちらの記事を参考にして進めてみます(ほぼそのままです)。

「OpenAI Gym 入門」
https://qiita.com/ishizakiiii/items/75bc2176a1e0b65bdd16

インストール

pipでインストールできます。

pip install gym

macOSでの依存ライブラリは参考サイトからこちら。

brew install cmake boost boost-python sdl2 swig wget

アタリのゲームライブラリ

pip install 'gym[atari]'

基本的使い方

自分ではローカルのipythonを使って試してみました。
手順はこちらを参考にそのままやってます。

「OpenAI Gym 入門」
https://qiita.com/ishizakiiii/items/75bc2176a1e0b65bdd16

import gym
#環境名を選択し、インスタンスを作成
env = gym.make('MountainCar-v0')

#環境初期化
observation = env.reset()                                                             

#環境を試しに描画
env.render()
                                                                          

こんな感じで得られます。

観測・状態

Github wikiより環境の値のパラメータについてわかります。
https://github.com/openai/gym/wiki/MountainCar-v0

こちらを再度参考にします。
「OpenAI Gym 入門」
https://qiita.com/ishizakiiii/items/75bc2176a1e0b65bdd16

state

現在のstateが取得できます。

In [15]: print(observation)                                                                    
[-0.56466142  0.        ]

stateのmaxとmin値が得られます。

In [17]: print(env.observation_space.high)                                                      [0.6  0.07] In [18]: print(env.observation_space.low)                                                       [-1.2  -0.07] 

配列の最初はpositionで2つ目はvelocityです。

action

actionは離散値で三種類
左へ押す、何もしない、右へ押すができます。
actionを決めてstepにいれて返り値をもらいます。

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

#一応離散値を確認
print(env.action_space)
>> Discrete(3)

その他

その他情報はwikiに色々書いてあります。
https://github.com/openai/gym/wiki/MountainCar-v0#observation

Reward / 報酬について

報酬は各ステップ-1ずつ。ゴールすると0.5左の丘を登ってもペナルティーなし。
-1 for each time step, until the goal position of 0.5 is reached. As with MountainCarContinuous v0, there is no penalty for climbing the left hill, which upon reached acts as a wall.

Starting State / スタートについて

ランダムポジションで速度0
Random position from -0.6 to -0.4 with no velocity.

DQNでとく

とりあえずkeras+tf+keras-rlをつかってみました。

pip install keras
pip install tensorflow
git clone https://github.com/matthiasplappert/keras-rl.git
pip install ./keras-rl

ファイルはこちらを再度参考にします。

「OpenAI Gym 入門」
https://qiita.com/ishizakiiii/items/75bc2176a1e0b65bdd16

from keras.models import Sequential
from keras.layers import Dense, Activation, Flatten
from keras.optimizers import Adam
import gym
from rl.agents.dqn import DQNAgent
from rl.policy import EpsGreedyQPolicy
from rl.memory import SequentialMemory

env = gym.make('MountainCar-v0')
nb_actions = env.action_space.n

model = Sequential()
model.add(Flatten(input_shape=(1,) + env.observation_space.shape))
model.add(Dense(16))
model.add(Activation('relu'))
model.add(Dense(16))
model.add(Activation('relu'))
model.add(Dense(16))
model.add(Activation('relu'))
model.add(Dense(nb_actions))
model.add(Activation('linear'))

memory = SequentialMemory(limit=50000, window_length=1)

policy = EpsGreedyQPolicy(eps=0.001)
dqn = DQNAgent(model=model, nb_actions=nb_actions,gamma=0.99, memory=memory, nb_steps_warmup=10,
               target_model_update=1e-2, policy=policy)
dqn.compile(Adam(lr=1e-3), metrics=['mae'])

history = dqn.fit(env, nb_steps=50000, visualize=False, verbose=2)

dqn.test(env, nb_episodes=1, visualize=True)

とりあえず攻略できました。

(省略)  49861/50000: episode: 314, duration: 1.080s, episode steps: 154, steps per second: 143, episode reward: -154.000, mean reward: -1.000 [-1.000, -1.000], mean action: 1.065 [0.000, 2.000], mean observation: -0.247 [-1.200, 0.537], loss: 2.305731, mean_absolute_error: 31.488895, mean_q: -46.481899 done, took 255.957 seconds Testing for 1 episodes ... Episode 1: reward: -145.000, steps: 145 

Recommended


CONTACT

info@mdrft.com

ブログトップへ Wikiへ移動

量子コンピュータ一般

量子ゲートアルゴリズム

量子アニーリング一般

量子アニーリングアルゴリズム

BlueqatSDKの使い方