OpenAI Gym で強化学習をやってみる

今回は、OpenAI Gym を使って、車の山登りの強化学習をやってみます。

こんにちは cedro です。

皆さん、OpenAI Gym をご存知ですか?

OpenAI Gym とは、イーロン・マスク氏サム・アルトマン氏が率いる、人工知能を研究する非営利団体「OpenAI」が提供している強化学習用の環境(ジム)で、これを使ってエンジニアは様々な強化学習を試してみることができます。

どんなものがあるかと言うと、Atari社のゲームでは「インベーダー」「パックマン」「アステロイド」など59個があります。

この他、囲碁のようなボードゲーム歩き方のシミュレーションなどの他に、車の山登り(上の動画)や倒立振子といった基礎的なものまであります。

ということで、今回は、 OpenAI Gym を使って、車の山登り強化学習をやってみます。

 

OpenAI Gym の環境をインストールします

まず、Github からパッケージをダウンロードします。

gym フォルダーに移動し、パッケージをインストールします。

gym をインストールします。

依存ライブラリーをインストールします(これは、OSXの場合です)。

その他の環境をインストールします。

評価結果を動画で保存するために、ffmpeg をインストールします。

今回使うプログラムは、Chainer で書かれているため、Chainer をインストールします。

Chainer の強化学習ライブラリーである、ChainerRL をインストールします。

 

プログラムを用意します

今回は「機械学習名古屋」の6月の勉強会で使われたプログラムをありがたく使用させて頂きます。

このプログラムは、いわゆるDNQ(Q学習をDNNで近似したもの)で、ε-greedy法でランダム行動を選択したり、過去の経験(状態、行動、報酬などの組み合わせ)をランダムに選択して学習に利用する機能を持っています。

 

プログラムをダウンロードしたら、MLN_201806 フォルダー内にある handson_dqn.py の21行目 env = gym.make(CartPole-v0) を上記に修正します。「’  ’」の中に表示されているのは、モデル名です。

ちなみに、モデル名が ‘CartPole-v0′ のままだと倒立振子、’Acrobot-v1′ に変更すると関節のある二本のアームモデルに変更できます。

 

python handson_dqn.py -h と入力すると、どんなパラメーター設定ができるかの一覧表が表示されますので、これを元に色々いじってみます。

 

強化学習をやってみます。

ポイントとなるパラメーターの説明をします。

1)割引率
将来貰える報酬をどれくらい現在の価値として考慮するかを表すパラメータです。割引率0なら直後の報酬のみを考えることになり、割引率1なら将来貰える報酬を全てそのまま考えることになります。但し、割引率1だと計算が収束しないので、通常は0.9位が良く使われます。

2)ε-greedy 法の終了ε 値
一端、報酬が高い行動が見つかったとしても、その行動だけにとらわれると、もっと報酬の高い行動を見つけるチャンスを失うかもしれません。そのため、確率εでわざとランダムな行動をとるという設定です。

3)訓練エピソード数
いわゆる訓練回数です。1回のエピソードの最大ステップ数は、20,000です。

 

① 訓練エピソード数:50回、割引率:99%、ε値:5%で強化学習をやってみます。

50回訓練すると、勢いをつけるのに一往復半掛かっていますが、見事に頂上へ行くようになります。

 

② 訓練エピソード数:100回、割引率:99%、ε値:5%で強化学習をやってみます。

100回訓練すると、1回前へ少し動くのが勿体ないですが、勢いを付けるのに半往復になりました。

 

③ 訓練エピソード数:200回、割引率:99%、ε値:5%で強化学習をやってみます。

200回訓練すると、1回バックして勢いを付けるだけで、一気に頂上まで行くまでに進歩します。動きにムダがなくなりましたね。

まだ、強化学習の中身は、あまり良く分かっていませんが、今回は、まず触ってみました。

では、また。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)