取りあえず何か創る

ソフトウェアエンジニアだけど仕事以外でも何か作りたくなったので、主にその記録のためにブログを開設しました。

読書記録 ゼロから作るDeep Learning 4 強化学習編

0. この投稿の概要

  • ゼロから作るディープラーニングの新作、強化学習編を読んで学んだことをまとめます。ご存知の方が多いと思いますが、このシリーズは可能な限りライブラリを使わずにディープラーニングを実装しながら理解を深めていく構成になっています。

  • 本書のサポートページにコードは公開されているため、この投稿には特にコードを載せていません。トピックの箇条書きになって読みづらいと思いますが、購入の際の参考になれば幸いです。

1. 各章の概要

1章 バンディット問題

  • 本章では多腕バンディット問題に取り組む。これは複数の選択肢から最善策を選ぶ問題で、エージェントの行動が環境に影響を及ぼさない。
  • ε-greedyアルゴリズムによって、探索と活用の両方を行う。確率εでランダムにスロットマシンを選び、それ以外の場合はこれまで得られた報酬の平均が最も大きいスロットマシン選ぶ。
  • 報酬の計算は確率が一定の定常問題では各試行を等しく評価する標本平均で良いが、非定常問題では新しい試行に重きを置く指数移動平均を使う。

2章 マルコフ決定過程

  • 問題を解きやすくするためにマルコフ性を過程する。状態Stで行動Atを行い、報酬Rtを得て次の状態であるSt+1に遷移するというプロセスが繰り返される。本章では2マスのグリッドワールド問題に取り組む。
  • 状態価値関数: ある状態と方策が与えられ、時間経過と共に得られた報酬を割引率を考慮して和をとったもの。
  • 本章の問題では状態が2つ、行動2つでかつ決定論的な方策を過程したため、全ての状態価値関数を手計算して最適な方策を得た。

3章 ベルマン方程式

  • 決定論的ではない場合、状態価値関数を手計算で求めるのが困難になる。この場合現在の状態の価値関数と次に取りうる状態の価値関数の関係性を示すベルマン方程式を用いる。
  • 特に最適方策を考える場合は方策は決定論的になるためベルマン方程式は簡略化される。
  • ベルマン方程式により、価値の連立方程式が得られる。それを解ければ行動価値を最大にするような方策を得ることができる。
  • 本章で行動価値関数(Q関数)が導入される。これは状態価値関数の条件に行動aが追加される。この行動は方策には関係なく任意に決められる。このQ関数を最大化するようにaを選ぶと最適方策が得られる。この場合環境のモデルに依存しないで方策を求められるので、後ほど環境のモデルが未知の場合はQ関数を主に使っていくことになる。

4章 動的計画法

  • ベルマン方程式で得られた連立方程式を解く方法は状態が増えると途端に解くのが困難になる。本章では3×4のグリッドワールドの問題に取り組む。
  • 動的計画法(DP)はベルマン方程式の価値関数を推定値に置き換える。適当な初期値を与えて反復計算することで、真値に近づく反復方策評価。
  • 価値の評価と方策の改善を繰り返して最適方策を得る方策反復法(Policy Iteration)。方策の改善ではその時点での各状態の価値関数を最大にするように決定論的な方策を選ぶ。
  • 評価と改善をそれぞれ最大限行うことを繰り返す方策反復法に対して、それぞれ最小限だけ行うのが価値反復法(Value Iteration)。状態1つ毎に評価と改善を行う。評価と改善で現れる式はほとんど同じであることから、価値反復法は価値の更新式の1つにまとめられて実装もシンプルになっている。

5章 モンテカルロ法

  • DPでは環境のモデル(状態遷移関数、報酬関数)が既知であることが前提だった。モンテカルロ法はエージェントが環境とやり取りを繰り返して得た経験から価値関数を推定する。
  • 方策評価はエージェントの各ステップ毎に状態、行動、報酬を記録しておき、エピソードが終わったらそれを使って価値関数を計算する。
  • 方策制御はε-greedy法を用いる。完全なgreedyでは行動が固定されて同じ経験しか得られないため。また、方策が更新されていくため価値関数は指数移動平均を用いて得る。
  • これまでは評価と改善の対象となるターゲット方策と、エージェントが実際に行動を起こす際に使われる挙動方策を区別しないでいた。挙動方策に探索をさせ、ターゲット方策に活用させる手法を方策オフ型という。この時異なる分布からサンプルしたデータを使うため、重点サンプリングを用いる。

6章 TD法

  • モンテカルロ法はエピソードの終わりにたどり着かないと更新できないという欠点がある。TD法はサンプリングしたデータを元に価値関数を更新するが、エピソードの終わりをまたずにnステップ先の情報を使って逐次更新する。
  • 方策制御はSARSAが使われる。方策を決める際は環境モデルが必要でないQ関数を更新していく。1ステップ先の情報を用いるため、更新に必要なのはSt,At,Rt,St+1,At+1でありこれがSARSAの名前の由来になっている。方策オン型の場合は探索を行うためにε-greedy法を用いる。
  • 方策オフ型の場合は重点サンプリングを組み合わせるが、結果が不安定になりやすいという弱点がある。これを解決するのがQ学習。SARSAでは方策からサンプリングされたQ関数をターゲットに更新していたのに対し、Q学習ではQ関数の最大値をターゲットにする(方策に依存しない)ので、重点サンプリングによる補正が不要。
  • エージェントの実装方法は分布モデルとサンプルモデルがある。分布モデルでは行動の確率分布を明示的に保持するが、サンプルモデルでは分布を保持せずに行動を選択する場合はQ関数を最大化する行動をサンプリングする。

7章 ニューラルネットワークとQ学習

  • 状態と行動のサイズが大きくなるとQ関数をテーブルとして保持してそれを更新することが困難になる。これを解決するためにQ関数をディープラーニングで近似する。
  • グリッドワールドの問題をNNベースのQ学習で定式化。状態はone-hotベクトルで表し、NNは状態を入力にして行動の候補の数だけQ学習を出力する。
  • Q学習における更新のターゲット(Rt+γmaxQ(St+1,a))を教師データとする回帰問題と考えることができる。

8章 DQN

  • 取り組む問題はOpenAI Gymのカートポール。DQNでは学習を安定させるために経験再生とターゲットネットワークという技術が使われる。
  • Q学習ではエージェントの経験を使い学習を行うが、経験は前後のデータに強い相関があり学習データに偏りが生まれる。経験再生では経験を保存しておいて、そこからランダムに学習用データをサンプルすることで偏りを防ぐ。
  • DQNにおける正解ラベルであるQ学習のターゲットはQ関数の更新に伴い変動する。これでは学習が安定しないため、ターゲットの値を固定するために重みを更新するネットワークとは別にラベルを生成するためのターゲットネットワークを用意する。
  • DQNの拡張:
    • Double DQN: 学習のターゲットを2つのネットワークのQ関数を元に設定する。
    • 優先度付き経験再生: ターゲットとQ関数の差の大きさを元にサンプルする経験に優先度をつける。
    • DuelingDQN: Q関数をアドバンテージ関数+価値関数Vに分けてそれぞれを別のネットワークで学習する。

9章 方策勾配法

  • 価値関数を経由しないで方策を直接表す方策ベースの手法も存在する。報酬の総和の期待値を目的関数とし、ニューラルネットワークでモデル化した方策を勾配上昇法で最適化するのが方策勾配法。
  • 方策勾配法の改善:
    • REINFORCE: 勾配の計算時に、報酬の総和ではなくその時刻以降の報酬Gtだけを考える。それ以前の時刻の報酬は関係ないので。
    • ベースライン: 報酬Gtから予測値(ベースライン)を引いたものを使う。ベースラインには価値関数が使われることが多い。これにより、例えばカートポールが絶対に倒れるようなタイミングによる学習をスキップできる。
    • Actor-Critic: ベースラインとしてニューラルネットワークでモデル化した価値関数を用いる。価値ベースかつ方策ベースの手法。

10章 さらに先へ(興味あるトピックだけ抜粋)

  • 方策勾配法系列の発展: A2C、DDPG、PPO
  • DQN系列の発展: カテゴリカルDQN、Noisy Network、Rainbow、Agent57
  • 応用事例: NASAWS DeepRacer
  • 実システムへの適用: Sim2Real、オフライン強化学習、模倣学習

2. 感想

  • 相変わらず丁寧な作りで理解がしやすいシリーズでした。強化学習の手法を幅広く扱っていますが、300ページ程度にまとまっているのはとても素晴らしいです。ある手法の弱点を補うように別の手法が説明されていくので、各手法の関連もより明確になりました。
  • 技術は自分で使わないと身につかないのですが、強化学習は仕事でも使わないし個人開発ネタもなかなか思い浮かばないのが辛いです。いい加減強化学習についても本で同じ内容を何度も勉強し直すループから抜けねばと思っています。本書で書かれていた応用の中ではNASAWS DeepRacerが面白そうでした。

3. その他の学習ソース

  • 言うまでもなく本書はPython機械学習の経験をある程度持っている人向けです。本書を難しいと思った方は以下の本が手を出しやすいかと思います。内容としては初心者がDQNまで最短で到達するような構成になっています。扱う内容が狭い分、環境構築などの基礎も説明されています。

  • Youtubeの中ではDeepMindの講義動画がわかりやすかったです。もちろん英語ですが。

www.youtube.com