強化学習でMicropolisの自律エージェントを作った
はじめに
この記事は 2019年4月から8月まで取り組んだ研究についてまとめることを目的としたものです。研究内容は「強化学習によるMicropolisの自律エージェントの作成」です。強化学習・Micropolisについての説明も加えつつ、取り組んだ内容を書いていければと思います。
前提
筆者は
某大学で情報系の学部3年生です。それまで機械学習に触れたことはありませんでしたが、2019年4月より本テーマに取り組むことになり強化学習を中心として勉強を進めています。まだまだ勉強中で、書いてあることに間違いも含まれているかと思います。発見された方は遠慮なくご指摘していただけると助かります。よろしくお願いします。
強化学習とは
Wikipediaには以下のように記載されています。
強化学習(きょうかがくしゅう、英: Reinforcement learning)とは、ある環境内におけるエージェントが、現在の状態を観測し、取るべき行動を決定する問題を扱う機械学習の一種。
強化学習は教師あり学習や教師なし学習と並ぶ機械学習の一種です。「最終的に得られる価値を最大化する」ことが最終目標となります。ここで「最終的に」とつけましたが、強化学習においてはこれが非常に重要となります。その場で得られる報酬よりも、行動をとり続けた最後に得られる報酬を優先するのです。
例えば、スーパーに牛乳を出来るだけ安く買いに行くことを考えましょう。普段¥150で売られていたとします。今目の前においてある¥150の牛乳を購入すれば、ひとまず「牛乳を買う」という目的は達することができます。ここで、「10分後にタイムセールが始まり、牛乳は¥130になる」という情報が得られたとします。これなら、今は買わずに10分間待ってから牛乳を買ったほうが、「より安く」牛乳を買うことができます。
牛乳の例では、「すぐ買う」という選択肢よりも「10分待つ」という選択肢が結果的に「より安い」という報酬を与えています。このように最終的に得られる報酬を最大化するように行動を学習するのが強化学習です。
強化学習では対象の問題がゲームとなることが多いです。これは環境・エージェントの行動を規定しやすいためです。現実の問題はいわゆるグレーゾーンが多く、ルールとして定めることが難しいです。これは強化学習に限った話ではなく、機械学習全体でいえることでしょう。
Micropolisとは
Micropolisは街づくりを行うシミュレーションゲームSimCityシリーズの第1作目です。3×3を基本とした建物のマスを平面状のマップに設置していくことで街を作っていきます。都市の規模を大きくしていくことが目標ですが、明確なクリア条件は指定されていません。
Micropolisにおいて、住宅地(R:緑のセル)・商業地(C:青のセル)・工業地(I:黄色のセル)が最も重要な要素です。ゲーム初期において、これらをバランスよく立てていくことが重要となります。
問題設定
今回の問題は「Micropolisでできる限り人口を増やす」と設定しました。Micropolisには公害や地価など様々な要素がありますが、これらの値は気にせず人口を増やすことだけに集中します。
強化学習の問題を定義するには「報酬」・「状態」・「行動」が必要です。本問題では、「報酬」として人口を定義しています。また住宅地・工業地・商業地がバランスよく建てられているかを表す指標として「多様度」を導入しており、これも報酬の一つとしています。「状態」には指定した範囲の街の様子を定義しています。「行動」には各種建物を建てる・取り壊すことを定義しています。
なお、今回はエージェントに環境の情報全てを与えることはしないので、本問題はモデルフリーの問題となります。
手法
概要
強化学習アルゴリズムとして有名なA2Cという手法を用います。
A2Cとは
以下の図をもとに説明していきます。
※A2Cの説明としてはとても弱いので、詳しく知りたい方はOpenAIのリファレンスやA3Cの論文等をご覧いただくと良いと思います。
強化学習におけるエージェントの役割は、「状態と報酬を入力とし、行動を出力する」ことです。したがって、エージェントは状態と報酬を入力とし行動を出力とする関数を持ち、この関数を学習によって発展させていきます。
A2Cはadvantage Actor Criticを略したもので、Actor Critic法の一種です。強化学習において行動を選択する基準を「方策」と呼びます。Actor Critic法は、実際に行動を決める方策を持ったActorと方策を評価するCriticを同時に学習させる手法です。Criticで学習させるV(s)は状態がsである時の価値を表し「状態価値」と呼ばれます。状態価値は得られた報酬の和の期待値をとったものです。Actorで学習させるQ(s,a)は状態がsのとき行動aが持つ価値を表し「行動価値」と呼ばれます。
A2Cはその名に含まれているアドバンテージをCriticの学習に用います。アドバンテージとは、行動価値から状態価値を除いた値で、純粋に行動の価値を表す値です。行動価値は状態への依存が大きいため、行動だけの評価を行うためにアドバンテージを導入します。
A2Cではこの他にもCriticの学習のためにいくつかのエントロピーの導入や学習の効率化のための分散学習など様々な手法が取り入れられています。
実験
モデル
レイヤー | 出力 | メモ |
---|---|---|
Input | 32*W*H | 状態の種類*高さ*幅 |
Conv. | 32*W/2*H/2 | 3*3 Kernel, stride 2, ReLu |
Conv. | 32*W/4*H/4 | stride 2, ReLu |
Conv. | 32*W/8*H/8 | stride 2, ReLu |
View. | (32*W/8*H/8) | |
FC1. | 64 | ReLu |
FC2. | 24 | Softmax |
FC3. | 1 |
入力として状態:(建物の種類)×(H:高さ)×(W:幅)を使います。出力はActorで用いる行動24種とCriticで用いる価値の2種類になります。
最適化手法にはAdaDeltaを使いました。
結果
報酬に人口を用いた場合の学習結果は以下のようになりました。
報酬に多様度を用いた場合の学習結果は以下のようになりました。
人口を用いた場合は報酬が4万、すなわち最大4万人程度の都市を構築するエージェントを作成できたことがわかります。一方、報酬に多様度を用いた場合は全く学習が進まず、実際にエージェントを動かしても一つも建物は生成されませんでした。
報酬に人口を用いた際に生成されたエージェントを実際に動作ささせた動画が以下になります。
ゲーム初期に鍵となる発電所・住宅地は設置されており、工業地も生成されていることがわかります。工業地がほとんど生成されていないことや公害がほったらかしになっていることが問題点と言えるでしょう。
終わりに
ここまで読んで頂きありがとうございます。取り組んだことすべてを描き切ることはできませんでしたが、全体像が伝われば幸いです。
近年強化学習は非常に勢いがあると感じています。OpenAI FiveやDeepMindのAlphaStarなど興味深い研究ばかりです。私も強化学習を取り組む者の端くれとして一層研究に励めたらなぁと思います。
参考文献
2019年になって日本語の強化学習の文献がどんどん出てきているように思います。
[1] これからの強化学習, 牧野貴樹 他著, 森北出版, 2016.
第1部は易しいですが、第2部以降からグッと難易度が上がると思います。
[2] Pythonで学ぶ強化学習, 久保隆宏, 講談社, 2019
今年出版された本で、9月にもう改訂版が出るんだとか。必要十分な説明と豊富なコードを備えています。
理論は裏切らない。
- 作者: 牧野貴樹,澁谷長史,白川真一,浅田稔,麻生英樹,荒井幸代,飯間等,伊藤真,大倉和博,黒江康明,杉本徳和,坪井祐太,銅谷賢治,前田新一,松井藤五郎,南泰浩,宮崎和光,目黒豊美,森村哲郎,森本淳,保田俊行,吉本潤一郎
- 出版社/メーカー: 森北出版
- 発売日: 2016/10/27
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (3件) を見る
機械学習スタートアップシリーズ Pythonで学ぶ強化学習 入門から実践まで (KS情報科学専門書)
- 作者: 久保隆宏
- 出版社/メーカー: 講談社
- 発売日: 2019/01/17
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る