
コース全体の概要を説明しています。
・強化学習用語のおさらい
・強化学習アルゴリズムのおさらい
・Advantage Actor-Critic について
・Spot's Story(ポチの物語)
・ブロック崩しの学習
・テトリス学習の難しさ
強化学習の基本用語について、その意味をもう一度振り返って確認してみましょう。
・環境とエージェント
・方策と価値
・マルコフ決定過程とベルマン方程式
強化学習の基本用語について、その意味をもういちど振り返って確認してみましょう。
・環境とエージェント
・行動、状態、報酬
・収益と強化学習の目的
強化学習の基本用語について、その意味をもういちど振り返って確認してみましょう。
・方策
・価値関数
・最適価値関数
・探索と利用
強化学習の基本用語について、その意味をもういちど振り返って確認してみましょう。
・マルコフ決定過程
・ベルマン方程式
強化学習にはいくつかのアルゴリズムがありました。このセクションで扱うアルゴリズム(計算手順)について簡単にまとめていますので、それぞれ確認していきましょう。
動的計画法とは最適な方策を計算するためのアルゴリズムです。学習環境が有限マルコフ決定過程であることが前提で、古くから用いられている手法ですので、強化学習を理解するには重要であるとされています。
動的計画法の性質をフィボナッチ数列やナップザック問題を例に確認していきましょう。
・部分問題
・メモ化
マルコフ決定過程について、イラストと数式で解説していきます。
最も理解しやすいアルゴリズムがモンテカルロ手法です。強化学習の中ではあまり真剣に取り上げられませんが、アルファー碁でもその理論が部分的に利用されています。
モンテカルロの弱点である最後まで試行しないといけないという欠点をこの方法で克服しています。以降のアルゴリズムの基本となっています。
Qテーブルを基にTD誤差を使った状態行動価値の学習を、計算式のアルファベットからとってSARSAと呼んでいました。次のQ学習とよく似ていますので確認しておきましょう。
SARSAは実際に行動を取る手法でしたが、Q学習では最大の価値を予測して学習していく手法でした。最も頻繁に解説される部分ですが簡単に確認しておきましょう。
Qテーブルが膨大になった場合の対処法としてニューラルネットワークが用いられていますが、理解しずらい部分かもしれませんので直観的に確認していくことにしましょう。
強化学習の最後に取り上げられる近年の手法が方策勾配法です。20世紀の教科書には載っていませんが、今、一番ホットな手法です。名前と同様に深く考えると大変難しいアルゴリズムですが「方策を直接学習する」ということだけ覚えておきましょう。
方策勾配法を基本としたアルゴリズムがReinforceです。翻訳すればそのまま「強化」となります。これも大変難しいですが、目を通しておいてください。ここまでが21世紀の強化学習の基本となります。
このセクションでは、A2C(Advantage Actor-Critic)のアルゴリズムについて詳しく解説していきます。
・Actor-Critic について
・Baseline の理解
・Advantageとは
・A3C(Asynchronous Advantage Actor-Critic)の構造
・同期分散処理Actor-Critic の構造
Actor-Criticは、方策部と価値関数の二つの学習パラメータをもつアルゴリズムで、AlphaGoでも用いられています。また、方策勾配法のReinforceは分散が大きくなるためモンテカルロ法と同様に学習の収束に時間がかかりますが、Actor-CriticはTD誤差を用いることによって収束を早めています。
ベースラインを用いることで学習の偏りをなくし、局所的な最小値に漸近的に収束させることができます。ベースラインを状態行動価値関数で表現してみましょう。
アドバンテージ関数は、割引報酬和からエージェントのTD誤差を予測します。実際に数式を追いかけてみましょう。
Asynchronous Advantage Actor-Critic は非同期分散型のActor-Critic手法です。ここでは、その全体像を解説していきます。
A3Cを同期分散処理にしたものがA2Cです。同期処理が行えるのでGPUを効率的に使うことができます。図でA3Cと見比べてみましょう。
A2Cの損失関数について、方策損失を図解を用いてわかりやすく解説します。特に対数の計算に気をつけましょう。
Advantageとエントロピー正則化項について解説します。
全体の損失項をまとめてA2Cの損失関数とします。直観的にわかりやすいグラフを用いて解説します。
Spot(ポチ)とは犬の愛称です。今どきのアメリカでは使われなくなった呼び名ですが、A2Cの学習方法をこの漫画で解説していきます。まずは、サンプリング処理について確認していきましょう。
原文は Intuitive RL: Intro to Advantage-Actor-Critic (A2C) (https://hackernoon.com/intuitive-rl-intro-to-advantage-actor-critic-a2c-4ff545978752)で、作者であるRudy Gilman氏の許可を得て教材用に脚色させていただきました。
サンプリングの後、学習のための処理に入ります。ここでは振り返り(省察)の処理と呼んでいます。
モンテカルロ法の場合について考えてみましょう。
強化学習に必要なTarget(目標)を算出します。TD誤差と割引報酬和について思い出してみましょう。これがA2Cで利用するTrue state value(実際の状態価値)です。
探索について解説しています。
エントロピーについて解説してます。エントロピーとは乱雑さを表す学術用語ですが、このような場面でも応用されています。概念をつかんでしまえば、難しいものではありません。プログラミングでもPython言語なら数行で成立します。
アドバンテージ関数はTD誤差と似たことをしているという考え方から入っていくと、分かりやすい関数です。計算方法は単純ですが、漫画を見て一度確認しておきましょう。
それぞれのの損失項を求めたあと、損失計算を行います。損失項には対数での計算が入っていますので、最大化と最小化を逆転させています。コーディングの時は足す部分なのか、引く部分なのかをよく考え、符号の付け方に十分気を付けるようにしましょう。
Google Colab のインストール手順を紹介します。
いよいよ、ブロック崩しのプログラムを動かしていくことにしましょう。一行一行丁寧に解説していきますので、長いレクチャーとなっていますが、全体としては大変シンプルな構造にしています。ブロック崩しを学習させるための最低限の実装にしていますので、おそらく世界で最も短いコードとなっていると思います。
まずは、全体像を把握するために、プログラムの構造をブロック単位で見ていきましょう。A2Cの理論は大変難しく見えても、プログラムでは実にあっさりとした構造になっていることがわかります。
世界で最も人気のあるPyTorchフレームワークを使います。必要なモジュールなどを読み込んでいきましょう。
A2Cのネットワークモデルの定義を行います。まず、畳み込み層などの初期化を行いましょう。重みの初期化(Heの初期化)も行います。
順伝播の部分について解説していきます。解説がいらないくらいの単純なCNNです。
Actorネットワークについて解説します。これは方策を司る部分です。ここも簡単ですのでしっかりとマスターしておきましょう。
Criticネットワークについて解説します。この部分は状態価値関数に該当します。Actorネットワークとどのように違うのか、コードで確認してきましょう。
ActorとCriticを同時に出力するメソッドです。これにより、学習時に余分な計算をしなくても良いようにしています。
ネットワークモデルに投入するためには、画像の形状を変更する必要があります。その関数について解説していきます。
強化学習で学習するためにはデータが必要です。AlphaGoZeroと同様に、セルフ・プレーでデータを集めます。
サンプリングのイメージを迷路ゲームで見てみましょう。
学習のための各関数をまとめて、振り返り処理のルーチンにしています。
振り返り処理で扱う関数は以下の通りです。
・True state value (実際の状態価値の計算)
・Calculate(損失項の計算)
・Update(更新)
サンプリングした経験データから、実際の状態価値を求めます。これは割引報酬和とも言えます。
割引報酬和の概念を知るために、迷路ゲームでイメージをつかみます。
サンプリングした画像でモデルに方策と状態価値を推論させます。この推論した値を基に以降のレクチャーでの損失項の計算が行われていきます。
Advantageの計算を行います。数式では大変難しそうでしたが、コーディングは簡単です。
エントロピーの損失項を求めるコードもPython言語を使えば簡単です。
PyTorchの更新処理をまとめたシンプルな関数です。最適化の定義と一緒に確認していきましょう。
これはテスト用の関数です。学習中にどれだけ収束したのか確認することができます。
以下のグローバル変数を定義します。
・環境モジュールの名前
・ネットワークモデルの保存先
・ログの出力頻度
・テストの頻度
・保存の頻度
学習用のハイパーパラメーターを設定します。ここはA2C用のハイパーパラメータは、Deep-Q-Networkよりも多いですが、理論が分かっていれば難しくありません。レクチャーでは、ネット上の様々な情報から考慮した値を設定しています。もっと良いパラメータが見つかったときはQ&Aに投稿してみましょう。
環境とネットワークモデル、そして最適化をインスタンス化します。インスタンス化とは、設計書から実物を作るイメージです。インスタンス化されたものは言葉通り、Object(物)と呼ばれます。
いよいと学習ループを実行させてみましょう。30分すると学習し始めているのがよくわかります。数時間~6時間で学習が収束します。
テストプレーと動画編集で学習結果を見てみましょう。セルを実行するだけで動画がブラウザ上に生成されます。
ブロック崩しではうまく学習できたものが、テトリスでは学習できません。なぜなのでしょうか。テトリスの感動的な歴史と共に考えてみましょう。
テトリス用の独自モデルの解説を行います。学習には成功しませんでしたが、興味深い構造となっています。畳み込み層を増やし、Actor-Criticを改造した2Actor-1Criticモデルです。
強化学習アルゴリズム Advantage Actor-Critic(A2C)を使って、ブロック崩しゲームを経験ゼロの状態から自動で学習させていく方法を紹介します。Advantage Actor-Critic のネットワークモデルは、AlphaGo Zero でも使われているもので方策と価値と同時に学習できます。更に「同期処理」という方法からGPUを効率的に利用でき、数日かかっていた学習うが数時間でできるようになっています。ネットワークモデルの部分は、続編のAlphaGo Zeroのコースの基礎となりますので受講しておくようにしましょう。
また漫画Spot's storyで、A2Cの学習の流れを分かりやすく解説しています。わからなくなったときは数式やプログラムと一緒に見比べてみましょう。
モデルの学習時間:30分~数時間
保存データの読み込みから再生まで1分程度と、時間がかかりません。
Google Colab 上で実行しますので、様々なツールの用意は不要です。またお使いのパソコンの環境に依存しません。
PythonコードとPyTorchフレームワークの教材で実行できます。ChatGPTの強化学習でも利用されている考え方で、データサイエンス・AI学習中の方にもお薦めです。