機械学習
強化学習

強化学習:Q学習でMountain Carの学習(Part4)


はじめに

Part3はこちらになります。

強化学習:Q学習でMountain Carの学習(Part3)

Part3まで、強化学習、Q学習の説明とMountain Carの学習を行いました。

今回は、いままで説明できなかった強化学習についての補足的な内容を書きたいと思います。

今回が最終回です。

Part3までの内容

・強化学習、マルコフ決定過程の説明

・OpenAI gymのMountain Carの説明

・Q学習の説明、実装、Mountain Carの学習

本記事の概要

・報酬関数の設計の注意点

・強化学習と深層学習

・強化学習のおすすめ本

知っておくと良さそうな知識

・pythonの知識

・機械学習・最適化に関するイメージ

・簡単な数学の知識(集合論、統計数学)

使用環境

・Windows10

・python3.6


強化学習と報酬設計

Part1の図を再掲します。

MDP.png

MDPは、エージェンが状態を観測し、行動を選択して、その見返りとして報酬を得るモデルです。

そして、エージェントは報酬を多く獲得する行動を学習します。

今回、OpenAI Gymが提供している強化学習用の環境Mountain Carを利用しましたが、環境を自作して学習させることを考えます。

状態や行動、状態遷移は解きたい問題をそのままモデル化すればいいでしょう。しかし、報酬は本来の問題にはない概念で、環境の設計者が自分で考えて決める必要があります。

つまり、強化学習は「報酬関数を入力にして、最適行動列を出力するアルゴリズム」という言い方もできます。

報酬関数は、終端状態の途中でどう行動すればいいのかのヒントになる情報を含んでいないことが望ましいです。

なぜなら、このような報酬関数は、環境の設計者が答えを出すための手がかりをエージェントに教えていることになるからです。

Part1で説明した強化学習の前提を確認しましょう。

・目指したいゴールの状態が分かっているが、ゴールへの到達方法が不明という前提

つまり、終端状態の良し悪しは分かるけど、そこにどうやって向かえばいいのか全然知らない体で報酬関数を設計した方が強化学習らしくなります。

例えば、Mountain Carの報酬設計は、終端状態(ゴールに到達)まで報酬が-1という設計になっています。

これは、「ゴールまでの行き方は全く知らないけど、時間がかかるのは悪い」という理念に基づいていると思います。

もし強化学習で環境を自作することがあれば、以上の点に留意すると良いと思います。


強化学習と深層学習

近年、機械学習の分野で深層学習がブームになっています。

特に、画像認識の分野では人間を超えるようなパフォーマンスを機械学習で実現され、日々進歩しています。

強化学習においても、深層学習利用の研究が進められています。

2015年、Google DeepMind社がAtariのゲームの学習を強化学習と深層学習の組み合わせで実現し、注目を浴びました。

(Atariとは、ブロック崩しのようないくつかのゲームの集まりです。)

この手法はDQN(Deep Q-Network)と呼ばれ、今日までDQNの改良手法が多数提案され、更なるパフォーマンス向上を遂げています。

DQNの概要は以下になります。

・Q学習では、状態集合が有限という前提のため、大規模な環境の学習ができない

・そこで、連続的な状態空間においてもQ学習ができるように、Q学習を関数近似する

・Q学習の関数近似をニューラルネットワークで実現し、深層学習の技術を適用する

DQNの論文です。

Playing Atari with Deep Reinforcement Learning

いつかDQNについても記事にしたいと思っています。


強化学習のおすすめ本

個人的にオススメな強化学習の本を2冊紹介します。

・『速習 強化学習 ―基礎理論とアルゴリズム―』 (共立出版)

和訳本で、強化学習の理論と強化学習のアルゴリズムについて書いており、

上記のDQNや、その発展手法(2016年くらいまでの内容)の紹介もあります。

理論部分については、Part1~Part3までで割愛した内容を含め、簡潔にまとめられています。

ただし、簡潔であるが故、数学に慣れていない方が読むのはしんどいかもしれません。

逆に、数学に多少の知識と慣れがある人に取ってはきれいにまとまった内容で分かりやすいと思います。

解析学の基本的な数式を追えるくらいの実力は必要かもしれません。

・『つくりながら学ぶ!深層強化学習 PyTorchによる実践プログラミング』 (マイナビ)

こちらは、強化学習やpythonを初めて触る人向けに書かれた本です。

理論的な内容も書いてありますが、上記の本より易しく、擬似コードではなくソースコードを掲載し、丁寧に説明してあります。

紹介されているアルゴリズムは上記本より少ないですが、DQNからA3Cあたりまで紹介されており、最近の流行の強化学習をプログラミングしながら学ぶことができます。

ただ、pythonの説明がそこまで詳しくないので、多少はpythonの知識がないと理解が難しいかと思います。

まとめると、数学に慣れていて強化学習の理論をざっと学びたい人には『速習 強化学習 ―基礎理論とアルゴリズム―』、数学はよく分からないけどとりあえず強化学習を動かしたい人には『つくりながら学ぶ!深層強化学習 PyTorchによる実践プログラミング』がおすすめです。


おわりに

強化学習について、補足的な内容を書きました。

これで、「強化学習:Q学習でMountain Carの学習」シリーズは終了です。

強化学習は、ゴール状態の評価を決め、報酬を設計してしまえば自動的に行動列を学習してくれるフレームワークです。

行動の自由度が高く、学習の難易度の高いロマン的な学習手法だと思っています。

今後はもっと勉強し、他の手法について記事にできたらと思っています。

以上、本シリーズを読んでくださってありがとうございました。