デュビデュバの技術ブログ

主に機械学習系の記事を書いていきます。コメント大歓迎です。よろしくお願いします。

画像の連結(OpenCV)

メモ。このファイルのディレクトリの子ディレクトリにimgの中に、arrow_0.png~arrow_7.pngを入れておく。変数はQ Learningの時使ったやつなので、このままでは動かない。

# 画像を読み込んで concatenate することで,くっつけてる。
import cv2
import numpy as np
# 矢印画像を読み込んで concatenate することで,くっつけてる。
arrow_images = [cv2.imread(''.join([os.path.dirname(os.path.abspath("__file__")), '/img/arrow_{}.png'.format(i)])) for i in range(env.nA)]
arrow_table = None
arrow_row = None

for i in range(q_table.shape[0]):
    if i % env.ncol == 0:
        if np.any(arrow_row):
            if np.any(arrow_table):
                arrow_table = np.concatenate([arrow_table, arrow_row], axis=0)
            else:  # 最初の行が完成した時
                arrow_table = arrow_row
        arrow_row = arrow_images[q_table_max[i]]  # i=0のとき
    else:
        arrow_row = np.concatenate([arrow_row, arrow_images[q_table_max[i]]], axis=1)
arrow_table = np.concatenate([arrow_table, arrow_row], axis=0)

cv2.imwrite('data/arrow_table.png', arrow_table)

Open AI Spinning Up で深層強化学習のお勉強 -Part 2: Kinds of RL Algorithms-

INTRODUCTION TO RL -Part 2: Kinds of RL Algorithms-

前回の続きです。 前回の記事はこちら。 coffee-g9.hatenablog.com OpenAI Spinning Upのページはこちら。 spinningup.openai.com

はじめに

基本的なRLの用語と表記法について説明したので、少し発展させます。現代のRLのアルゴリズムの概況と、アルゴリズム設計に関連するトレードオフの種類の説明です。

A Taxonomy of RL Algorithms

現在のRLアルゴリズム
Figure 1. 現在のRLアルゴリズム
図は上記ページから引用。

免責事項:アルゴリズムのモジュール性がツリー構造で十分に表現されていないため、現代のRLアルゴリズムの包括的な分類を描くことは非常に困難です。また、ページに収まり、導入として適度に消化可能なものを作成するには、かなり高度な資料(探索、転移学習、メタ学習など)を省略する必要があります。ここでの学習目標は

Model-Free vs Model-Based RL

RLアルゴリズムの最も重要な分岐点の1つは、エージェントが環境のモデルにアクセスできる(または学習する)かどうかの問題です。環境のモデルとは、状態の遷移と報酬を予測する関数を意味します。

モデルを持つことの主な利点は、エージェントが先を考え、選択可能な範囲で何が起こるかを見て、オプションを明示的に決定することによって計画できることです。エージェントは、学習済み方策で計画した結果を抽出できます。このアプローチの有名な例はAlphaZeroです。これが機能すると、モデルを持たないメソッドよりもサンプル効率が大幅に向上する可能性があります。

主な欠点は、通常、エージェントが環境の真のモデルを利用できないことです。この場合、エージェントがモデルを使用する場合、経験からモデルを学習する必要があり、これによりいくつかの課題が生じます。最大の課題は、エージェントがモデルの偏りに悪影響を受ける可能性があることです。偏ったモデルを学習すると、学習したモデルに対しては優れたパフォーマンスを発揮しますが、実際の環境では動作が最適化されません。モデル学習は基本的に難しいので、多大な時間を費やして計算しようとしても、成果を上げることができません。

モデルを使用するアルゴリズムモデルベースと呼ばれ、使用しないアルゴリズムモデルフリーと呼ばれます。モデルフリーの方法は、モデルの使用によるサンプル効率の向上はできませんが、実装および調整が容易になる傾向があります。このページ時点(2018年9月)では、モデルベースのメソッドよりもモデルフリーのメソッドの方が人気があり、より広範囲に開発およびテストされています。

What to Learn

RLアルゴリズムのもう1つの重要な分岐点は、何を学ぶべきかという問題です。

  • 確率的または決定的方策
  • 行動価値関数(Q関数)
  • 価値関数
  • 環境モデル

What to Learn in Model-Free RL

モデルフリーRLでエージェントを表現および訓練するには、主に2つのアプローチがあります。方策最適化Q学習です。

Policy Optimization

このファミリーのメソッドは、方策 \pi_\theta(s) を明示的に表します。これらは、直接的に性能の目的関数 J(\theta)に対する勾配上昇によって、または間接的に J(\theta)の局所近似を最大化することによって、パラメーターを最適化します。この最適化はほとんどの場合方策に基づいて(on-policy)実行されます。つまり、各更新は方策の最新バージョンに従って動作している間に収集されたデータのみを使用します。通常、方策の最適化には、on-policy価値関数 V^\pi(s)の近似器 V_\phi(s)を学習することも含まれます。これは、方策を更新する方法を見つける際に使用されます。

方策最適化方法の2つの例です。

  • A2C/A3Cは勾配上昇法を使用して、性能を直接最大化します。
  • PPOは間接的な最大化によって、代理の目的関数を最大化し、 J(\pi_\theta)の更新量を推定します。

Q-learning

このファミリーのメソッドは、最適な行動価値関数 Q^*(s,a) の近似器 Q_{\theta}(s,a)を学習します。通常、学習にはベルマン方程式に基づく目的関数を使用します。この最適化はほとんど常にoff-policyで実行されます。つまり、エージェントが環境を探索する方法に関係なく、各更新ではトレーニング中の任意の時点で収集されたデータを使用できます。対応する方策は、 Q^* \pi^*との関係によって得られます。Q学習エージェントが実行する行動は次のように表されます。


\begin{align}
a(s)= \arg \max_a Q_{\theta}(s,a)\tag{1}
\end{align}

Q学習の例には、以下が含まれます。

  • DQN:deep RLの分野の開始点
  • C51:deep RLの特殊形。 Q^*を期待するリターン分布を学習する。

Trade-offs Between Policy Optimization and Q-Learning

方策最適化手法の主な強みは、目的に合わせて直接最適化するという意味で、原理に基づいていることです。これにより、安定性と信頼性が高まります。対照的に、Q学習方法は、自己整合方程式を満たすように Q_{\theta}を訓練することにより、エージェントの性能を間接的に最適化するだけです。この種の学習には多くの失敗モードがあるため、安定性が低下する傾向があります。1しかし、Q学習は、方策最適化手法よりも効率的にデータを再利用できるため、動作するときサンプル効率が高いという利点があります。

Interpolating Between Policy Optimization and Q-Learning

偶然にも、方策の最適化とQ学習は互換性がなく(また、状況によっては同等であり)、2つの両極端の間にさまざまなアルゴリズムが存在します。この間に存在するアルゴリズムは、長所と短所を慎重にトレードオフできます。例として、

  • DDPGは、決定的方策とQ関数を同時に使用して学習し、互いを改善するアルゴリズムです。
  • SACは、確率的方策、エントロピー正則化、および他のいくつかのテクニックを使用して学習を安定させ、標準ベンチマークでDDPGよりも高いスコアを付ける特殊形です。

What to Learn in Model-Based RL

モデルフリーRLとは異なり、モデルベースRLのメソッドの定義しやすいクラスターは少数ではありません。モデルを使用する多くのorthogonal ways(直交方法?独立した方法的な意味?わからない。。。)があります。いくつかの例を挙げますが、リストは完全ではありません。いずれの場合も、モデルは与えられるか学習されます。

Background: Pure Planning

最も基本的なアプローチは、方策を明示的に表すものではなく、モデル予測制御(MPC)などの純粋な計画手法を使用して行動を選択します。MPCでは、エージェントが環境を観測するたびに、モデルに関して最適な計画を計算します。計画には、現在から一定の時間枠を引き継ぐためのすべての行動が記述されています。(無限先の将来の報酬は、学習済み価値関数を使用して計画アルゴリズムによって検討される場合があります。)エージェントは、計画の最初の行動を実行し、残りの計画をすぐに破棄します。環境との対話の準備のたびに新しい計画を計算し、計画期間が必要以上に短い計画の行動を使用しないようにします。

  • MBMFの研究ではdeep RL用のいくつかの標準的なベンチマークタスク上の学習済み環境モデルでMPCを探ります。

Expert Iteration

純粋な計画手法への直接的な後継には、方策\pi_\theta(a|s)の明示的な表現の使用と学習が含まれます。エージェントは、モデルで計画アルゴリズムモンテカルロ木探索など)を使用し、現在の方策からサンプリングすることで計画の行動候補を生成します。計画アルゴリズムは、方策のみが生成する行動よりも優れた行動を生成するため、方策に関連する「エキスパート」です。その後、方策は更新され、計画アルゴリズムの出力のような行動が生成されます。

Data Augmentation for Model-Free Methods

モデルフリーRLアルゴリズムを使用して方策またはQ関数をトレーニングしますが、1)架空の経験で実際の経験を水増ししてエージェントを更新するか、2)架空の経験のみを使用してエージェントの更新をします。

  • 架空の経験で実際の経験を強化する例については、MBVEを参照してください。
  • 純粋に架空の経験を使用してエージェントを訓練する例については、World Modelsを参照してください。

Embedding Planning Loops into Policies

別のアプローチでは、計画手順をサブルーチンとしてポリシーに直接埋め込みます。これにより、完全な計画がポリシーのサイド情報となり、標準のモデルフリーアルゴリズムで方策の出力を訓練します。重要な点は、このフレームワークでは、方策が計画を使用する方法とタイミングの選択を学習できるということです。これにより、モデルの偏りの問題が減少します。一部の状態でモデルが計画に不適切な場合、方策は、単純にそれを無視することを学習できるためです。

  • このスタイルの想像力に豊かなエージェントの例については、I2Aを参照してください。

Links to Algorithms in Taxonomy

アルゴリズムへのリンク集はSpinning Upのページ参照。

まとめ

モデルベースやモデルフリーのアルゴリズムで何を学べばよいかがわかりました。個人的に興味があるのはモデルフリー型の方です。有名なアルゴリズムはQiitaなどでも記事になっているので、そういった記事に助けられながら、元の論文も読んでいこうと思います。


  1. さらに詳しく知りたい場合のリンクがSpinning Upのページにあります。

Open AI Spinning Up で深層強化学習のお勉強 -Part 1: Key Concepts in RL- [その2]

INTRODUCTION TO RL -Part 1: Key Concepts in RL-

前回の続き。後半(Key Concepts and TerminologyのValue Functionsから)です。
前回の記事はこちら。 coffee-g9.hatenablog.com OpenAI Spinning Upのページはこちら。 spinningup.openai.com

Key Concepts and Terminology

前回の続きから。

Value Functions

状態の価値や状態と行動のペアを知ることは、しばしば役立ちます。価値とは、その状態または状態と行動のペアで開始し、その後特定の方策に従って無限期間行動する場合に期待されるリターンを意味します。ほぼすべてのRLアルゴリズムで、何らかの方法で価値関数が使用されます。

ここで注目すべき4つの主な機能があります。

  1. On-Policy 価値関数 V^\pi(s)
    状態sで開始し、常に方策\piに従って行動する場合の期待リターンを返します。
\begin{align}
V^\pi(s)=\underset{\tau\sim\pi}{\rm E}[R(\tau)|s_0=s]\tag{1}
\end{align}
  1. On-Policy 行動価値関数 Q^\pi(s,a)
    状態sで開始し、任意の行動a(必ずしも方策によるものではない)をとり、その後、無限期間方策\piに従った場合の期待リターンを返します。
\begin{align}
Q^\pi(s,a)=\underset{\tau\sim\pi}{\rm E}\bigl[R(\tau)|s_0=s,a_0=a\bigr]\tag{2}
\end{align}
  1. 最適価値関数 V^*(s)
    状態sで開始し、常に最適方策に従って行動する場合の期待リターンを返します。
\begin{align}
V^*(s)=\max_\pi \underset{\tau\sim\pi}{\rm E}\bigl[R(\tau)|s_0=s\bigr]\tag{3}
\end{align}
  1. 最適行動価値関数 Q^*(s,a)
    状態sで開始し、任意の行動aをとり、その後、無限期間最適方策に従った場合の期待リターンを返します。
\begin{align}
Q^*(s,a)=\max_\pi \underset{\tau\sim\pi}{\rm E}\bigl[R(\tau)|s_0=s,a_0=a\bigr]\tag{4}
\end{align}

You Should Know

価値関数について話すとき、時間依存性を考慮しない場合は、無限期間の割引リターンのみを意味します。有限期間の割引なしのリターン関数は、引数として時間が必要です。

You Should Know

価値関数と行動価値関数の間には、2つの重要な関係があります。

\begin{align}
V^\pi(s)&=\underset{a\sim\pi}{\rm E}\bigl[Q^\pi(s,a)\bigr]\tag{5}\\
V^*(s)&=\max_a Q^*(s,a)\tag{6}
\end{align}

The Optimal Q-Function and the Optimal Action

最適行動価値関数 Q^*(s, a)と最適方策によって選択された行動の間には重要な関係があります。定義より、 Q^*(s, a)は状態sで開始し、(任意の)行動aを実行し、その後、最適方策に従って無限期間動作するための期待リターンを提供します。

最適方策は、期待リターンを最大化する行動を選択します。その結果、もし Q^*が得られているなら、そこから最適行動 a^*(s)を直接求められます。

\begin{align}
a^*(s)=\arg \max_a Q^*(s,a)\tag{7}
\end{align}

注:Q^*(s,a)を最大化する複数の行動が存在する場合があり、その場合、それらはすべて最適行動であり、最適方策はそれらのいずれかをランダムに選択する場合があります。ただし、アクションを決定論的に選択する最適なポリシーが常に存在します。

Bellman Equations

4つの価値関数はすべて、ベルマン方程式と呼ばれる特別な自己整合方程式に従います。ベルマン方程式の背後にある基本的な考え方は次のとおりです。

出発点の価値は、そこにいることで得られる報酬に加えて、次に着地する場所の価値です。

On-Policyの価値関数のベルマン方程式は次のとおりです。

\begin{align}
V^\pi(s)&=\underset{a\sim\pi,s'\sim P}{\rm E}\bigl[r(s,a)+\gamma V^\pi(s')\bigr]\tag{8}\\
Q^\pi(s,a)&=\underset{s'\sim P}{\rm E}\Bigl[r(s,a)+\gamma\underset{a\sim\pi}{\rm E} \bigl[Q^\pi(s',a')\bigr]\Bigr]\tag{9}
\end{align}

ここで、s'は次状態であり、環境の状態遷移ルールよりサンプリングされます。 s'\sim Ps'\sim P(\cdot|s,a)の省略形です。 a\sim \pia\sim \pi(\cdot|s)の省略形で、 a'\sim \pia'\sim \pi(\cdot|s')の省略形です。

最適価値関数のベルマン方程式は次のとおりです。

\begin{align}
V^\pi(s)&=\underset{a\sim\pi,s'\sim P}{\rm E}\bigl[r(s,a)+\gamma V^\pi(s')\bigr]\tag{8}\\
Q^\pi(s,a)&=\underset{s'\sim P}{\rm E}\Bigl[r(s,a)+\gamma\underset{a\sim\pi}{\rm E} \bigl[Q^\pi(s',a')\bigr]\Bigr]\tag{9}
\end{align}

On-Policy価値関数と最適価値関数の重要な違いは、\maxの有無です。\maxが付いていることで、エージェントが行動を選択するときはいつでも、最適な行動をするために、最も高い価値につながる行動を選択しなければなりません。

You Should Know

「ベルマンバックアップ」という用語は、RLの文献で頻繁に登場します。状態、または状態と行動のペアのベルマンバックアップは、ベルマンの方程式の右側、つまり報酬と次の値です。

Advantage Functions

RLでは、行動の絶対的評価は必要はなく、他の行動との平均的な相対評価が必要です。つまり、その行動の相対的な利点を知りたいのです。アドバンテージ関数を使用して、この概念を正確にします。

方策\piのアドバンテージ関数 A^\pi(s,a)は、状態sでランダムに行動するより、状態sで特定の行動aを選択した方がどれほど優れているかを示します。数学的には次のように表されます。

\begin{align}
A^\pi(s,a)=Q^\pi(s,a)-V^\pi(s)\tag{10}
\end{align}

You Should Know

アドバンテージ関数は方策勾配メソッドにとって非常に重要です。

(Optional) Formalism

これまで、あまり厳密にではなくエージェントの環境について説明してきましたが、文献を深く読むと、これらの理論の前提としてマルコフ決定過程(MDP)に遭遇する可能性があります。MDPは5タプル\langle S,A,R,P,\rho_0 \rangleです。ここで、

  • S はすべての有効な状態の集合
  • A はすべての有効な行動の集合
  • R:S\times A\times S \to \mathbb{R} は報酬関数であり、r_t=R(s_t,a_t,s_{t+1})
  • P:S \times A \to \mathcal{P}(S) は遷移確率関数です。状態sから行動aを実行した場合、確率P(s'| s,a)で状態s'に遷移します。
  • \rho_0 は開始状態の分布です。 マルコフ決定過程という名前は、システムがマルコフ性に従うということを意味します。遷移は、直前の状態と行動にのみ依存し、過去の履歴には依存しません。

まとめ

イントロのpart1は強化学習の概要でした。part1の内容はすべての強化学習の基礎となる内容です。これらを基盤に各々のアルゴリズムが各々の特性をもったものになります。最後のマルコフ決定過程はこれら基盤の前提にあたる部分ですがかなり重要です。特に、「遷移は、直前の状態と行動にのみ依存し、過去の履歴には依存しない。」というところです。 マルコフ決定過程については以下の本で学びました。式や定義などしっかり書かれていておすすめです。

次回はINTRODUCTION TO RL -Part 2: Kinds of RL Algorithms-です。

OpenAI Spinning Upの記事一覧 coffee-g9.hatenablog.com

Open AI Spinning Up で深層強化学習のお勉強 -Part 1: Key Concepts in RL- [その1]

INTRODUCTION TO RL -Part 1: Key Concepts in RL-

今回のページです。長いので分けます。今回は前半(Key Concepts and TerminologyのThe RL Problemまで)だけ。 spinningup.openai.com

はじめに

INTRODUCTION TO RLで学べる事

  • RLについて議論するための言葉と表記
  • RLアルゴリズムが行うことについての高レベルの説明(どうやってという説明は避けている)
  • アルゴリズムの基礎となる数学(少し)

簡単に言えば、RLとはエージェントと、試行錯誤による学習方法の研究です。エージェントの行動に報酬または罰則を与えることで、今後その行動を繰り返したり行わなくなったりする可能性が高くなるという考えを形式化します。

What Can RL Do?

囲碁とかビデオゲームとかロボット制御とか、いろいろできます。詳しくは上記ページをご覧ください。

Key Concepts and Terminology

エージェントの環境相互作用のループ
Figure 1. エージェントの環境相互作用のループ
図は上記ページから引用。

RLの主なキャラクターは、エージェント環境です。環境は、エージェントが住み、相互作用する世界です。対話のすべてのステップで、エージェントは世界の状態(場合によっては部分的に)を観測し、実行するアクションを決定します。環境は、エージェントがそれに応じて行動するときに変化しますが、単独で変化する場合もあります。

また、エージェントは環境から報酬を与えられます。これは、現在の状態がどれだけ良いか悪いかを伝える数値です。エージェントの目標は、リターンと呼ばれる累積報酬を最大化することです。強化学習は、エージェントが目標を達成するために行動を学習する方法です。

RLをより具体的に説明するには、追加の用語を導入する必要があります。

  • states and observations (状態と観測)
  • action spaces (行動空間)
  • policies (方策)
  • trajectories (軌跡)
  • different formulations of return (リターンのさまざまな定式化)
  • the RL optimization problem (RL最適化問題)
  • value function (価値関数)

States and Observations

状態 sは環境の状態の完全な説明です。環境について隠されている情報はありません。それに対し、観測 oは状態の部分的な説明であり、情報が省略される場合があります。

deep RLでは、ほとんどの場合、状態と観測は実数値のベクトル、行列、または高次テンソルで表されます。たとえば、視覚的な観察は、そのピクセル値のRGBの行列で表すことができます。ロボットの状態は、関節の角度と速度で表すことができます。

エージェントが環境の完全な状態を観測できる場合、環境が完全観測されていると言います。エージェントが部分的な観測のみできる場合、環境は部分的観測されていると言います。これは所謂、完全知覚と不完全知覚の話とは違って、十分か不十分にかかわらず、全体か部分かの話だと思います。

You Should Know

強化学習の記法では観測 oと書いた方が適切な箇所を状態 sと書いてある場合があります。具体的には、エージェントが行動を決定する方法についての記述です。行動は状態を条件に決定されますが( sと記述)、エージェントはしばしば状態にはアクセスできず、観測しか得られないためです(現実的には o)。

Action Spaces

異なる環境では、異なる種類の行動が許されます。特定の環境におけるすべての有効な行動のセットは、多くの場合行動空間と呼ばれます。AtariやGoなどの環境には、エージェントが利用できる動きの数が限られている離散行動空間があります。エージェントが物理的な世界でロボットを制御するような環境には、連続行動空間があります。連続行動空間では、行動は実数値のベクトルです。

この区別は、deep RLのメソッドにとって非常に重要です。環境が離散行動空間か連続行動空間によってアルゴリズムを大きく作り直さなければならない場合もあります。

Policies

方策は実行する行動を決めるために、エージェントが使用するルールです。方策が決定論的である場合、通常は \muを使って次のように表されます。

 a_t = \mu(s_t)\tag{1}

また、確率論的である場合、 \piを使います。

 a_t \sim \pi(\cdot|s_t)\tag{2}

方策は基本的にエージェントの脳なので、「方策」という言葉を「エージェント」の代わりに使用することは珍しくありません。例えば、「方策は報酬を最大化しようとする。」などです。

deep RLでは、パラメータ化された方策を扱います。方策は出力が、一連のパラメータ(例えば、ニューラルネットワークの重みとバイアス)に依存する計算可能な関数であり、最適化アルゴリズムを介して動作を変更するできます。

多くの場合、このような方策のパラメータを\thetaまたは\phiで示し、添え字としてこれを記述して、強調して表示します。


\begin{align}
 a_t &=\mu_\theta(s_t)\tag{3}\\
a_t &\sim \pi_\theta(\cdot|s_t)\tag{4}
\end{align}

Deterministic Policies

例:決定的方策。以下は、Tensorflowで連続行動空間の単純な決定的方策を構築するためのコードスニペットです。

obs = tf.placeholder(shape=(None, obs_dim), dtype=tf.float32)
net = mlp(obs, hidden_dims=(64,64), activation=tf.tanh)
actions = tf.layers.dense(net, units=act_dim, activation=None)

ただし、mlpは、指定されたサイズと活性化関数で複数のdenseレイヤーを互いに積み重ねる関数です。

Stochastic Policies

主に2種類あり、離散行動空間で使えるカテゴリー方策 (categorical policies)と、連続行動空間で使える対角ガウス方策 (diagonal Gaussian policies)です。

確率的方策の使用と訓練には、主に2つの計算が重要です。

  • 方策からの行動のサンプリング
  • 特定の行動の対数尤度の計算  \log\pi_\theta(a|s) 以下では、カテゴリー方策と対角ガウス方策を行う方法について説明します。

Categorical Policies

いったん後回し

Diagonal Gaussian Policies

いったん後回しその2

Trajectories

軌跡\tauとは、環境の一連の状態と行動であり、

 \tau= (s_0,a_0,s_1,a_1,...)\tag{5}

環境の初期状態s_0は、初期状態分布から確率\rho_0でランダムにサンプリングされます。

 s_0 \sim \rho_0(\cdot)\tag{6}

状態遷移(時刻tの状態s_tと時刻t+1の状態s_{t+1}との間に環境に何が起こるか)は、環境の自然の法則に支配され、唯一の直近の行動a_tに依存しています。それらは決定的であれば、

 s_{t+1} = f(s_t,a_t)\tag{7}

確率的であれば、

 s_{t+1} \sim P(\cdot|s_t,a_t)\tag{8}

です。行動はエージェントの方策から得られます。

You Should Know

軌跡は、エピソード(episodes)ロールアウト(rollouts)とも呼ばれます。

Reward and Return

報酬関数R強化学習において非常に重要です。それは、環境の現在の状態、今とった行動、そして次の環境の状態に依存します。

 r_t = R(s_t, a_t, s_{t+1})\tag{9}

多くの場合は現在の状態 r_t = R(s_t)または状態行動対 r_t = R(s_t, a_t)にのみに依存するように単純化されます。

エージェントの目標は、軌跡上の累積報酬を最大化することです。累積報酬はすべてのケースを[tax:R(\ tau)]で表しますが、実際にはいくつかの意味があります。どの意味かは状況からわかるので、表記はあまり重要ではありません。

累積報酬の1つに有限期間の割引なしリターンがあります。これは、一定のステップ数で得られる報酬の合計です。

\begin{align}
R(\tau)=\sum^T_{t=0}r_t\tag{10}
\end{align}

別の累積報酬に無限期間の割引リターンがあります。これは、エージェントがこれまでに獲得したすべての報酬の合計ですが、報酬が獲得される時刻によって割引されます。割引係数は\gamma\in(0,1) です。

\begin{align}
R(\tau)=\sum^\infty_{t=0}\gamma^tr_t\tag{11}
\end{align}

現在得られる報酬の方が、将来得られる報酬よりも大きくなります。つまり、時間が経つにつれて、報酬が減っていきます。数学的には、有限期間のリターンは収束しない場合がありますが、無限期間の割引リターンは、割引係数によって収束します。

You Should Know

これら二つのリターンの違いは明確ですが、実際にdeep RLで用いるとき、使いわけが曖昧に記述されている場合があります。

The RL Problem

リターンの種類や方策の種類に関係なく、RLの目標は、エージェントが期待リターンを最大化する方策を選択することです。

期待リターンについて話すには、まず、軌跡上の確率分布について話す必要があります。

環境の遷移と方策の両方が確率的であると仮定します。この場合、Tステップの軌跡の確率は次のとおりです。

 \begin{align} P(\tau|\pi)=\rho_0(s_0)\prod_{t=0}^{T-1}P(s_{t+1}|s_t,a_t)\pi(a_t|s_t) \tag{12}\end{align}

期待リターンはJ(\pi)を用いて次のように表されます。

 \begin{align}J(\pi)= \int_{\tau} P(\tau | \pi)R(\tau)= \underset{\tau \sim \pi}{\rm E}[R(\tau)]\tag{13} \end{align}

RLの主要な最適化問題は、

 \begin{align}\pi^* = \arg \max_{\pi} J(\pi)\tag{14}\end{align}

と表され、\pi^*最適方策です。

前半まとめ

ボリューミーですね。RLのやっていることは図の通りですし、リターンを最大化したいというのも自然です。RLは、エージェントが方策を徐々に改善していって、リターンが最大になる方策を見つけるということです。Stochastic Policiesのところは後で更新します。

OpenAI Spinning Upの記事一覧 coffee-g9.hatenablog.com

Open AI Spinning Up で深層強化学習のお勉強 -Algorithms-

Algorithms

今回のページとソースコードです。ざっくりとまとめていきます。 spinningup.openai.com github.com

What's Included

以下のアルゴリズムのコードが含まれているようです。

  • Vanilla Policy Gradient (VPG)
  • Trust Region Policy Optimization (TRPO)
  • Proximal Policy Optimization (PPO)
  • Deep Deterministic Policy Gradient (DDPG)
  • Twin Delayed DDPG (TD3)
  • Soft Actor-Critic (SAC)

これらはすべて、非再帰MLP(Multilayer perceptron: 多層パーセプトロン)actor-criticsで構成されており、Gym Mujocoのような、完全知覚で、画像ベースではない環境に適しています。

Why These Algorithm?

これらは核となるdeep RLアルゴリズムです。特にPPOとSACは、最近のdeep RL分野の歴史からの有用な進歩を反映しています。これらは、方策学習アルゴリズム間の信頼性とサンプル効率に関するSOTA(state of the art: 最先端技術)です。また、deep RLでアルゴリズムを設計および使用する際に生じるトレードオフの一部についても学べます。

The On-Policy Algorithms

Vanilla Policy Gradientは、deep RLの出現よりも大きく先行しています。そのため、deep RL分野で最も基本的なアルゴリズムです。 VPGのコア要素は、80年代後半から90年代初頭にさかのぼります。そこから、最終的にTRPOやPPOなどの強力なアルゴリズムを導く研究となっていきます。

これらのアルゴリズムの重要な特徴は、すべてOn-Policy型ということです。つまり、古いデータを使用しないため、サンプルの効率が低下します。しかし、これには十分な理由があります。これらのアルゴリズムは、考慮している目的(方策の性能)を直接最適化し、更新を計算するために方策の上のデータが必要であることが数学的にわかります。したがって、このアルゴリズムファミリは、安定性を優先してサンプルの効率を犠牲にしますが、サンプルの効率の不足を補うために機能する技術(VPG→TRPO→PPO)の進歩を見ることができます。

The Off-Policy Algorithms

DDPGはVPGと同様に基盤となるアルゴリズムですが、DDPGにつながった決定的勾配降下の理論は2014年まで公開されていませんでした。DDPGはQ学習アルゴリズムと密接に関連しており、互いに改善しあうQ関数と方策を同時に学習します。

DDPGやQ学習のようなアルゴリズムは、Off-Policyなので、非常に効率よく古いデータを再利用することができます。これは、最適化用のベルマン方程式のおかげです。Q関数は、(環境内で高報酬のエリアでの十分な経験がある限り)どんな環境の相互作用データを使ってもベルマン方程式を満たす学習ができます。

しかし、ベルマン方程式を満たす学習をしても、優れた方策性能が得られるという保証はありません。経験的には、あるモデルが優れた性能を得ることができた場合、サンプル効率はとてもよいです。しかし、性能の保証はないため、このようなアルゴリズム潜在的に脆弱で不安定になります。TD3とSACはDDPGの子孫であり、これらの問題を軽減するためにさまざまな工夫をしています。

Code Format

Spinning Upの実装はすべて標準テンプレートに準拠しています。アルゴリズムのコアロジックを含むアルゴリズムファイルと、アルゴリズムの実行に必要なさまざまなユーティリティを含むコアファイルの2つのファイルに分割されています。

The Algorithm File

アルゴリズムファイルは常に、経験バッファオブジェクトのクラス定義で始まります。これは、エージェントと環境の相互作用からの情報を格納するために使用されます。

次に、アルゴリズムを実行し、次のタスクをこの順序で実行する1つの関数があります。

  1. ロガーのセットアップ
  2. ランダムシード設定
  3. 環境のインスタンス
  4. 計算グラフのプレースホルダーを作成する
  5. actor_critic関数を引数としてアルゴリズム関数に渡すことで、actor-criticの計算グラフを構築する
  6. 経験バッファのインスタンス
  7. アルゴリズムに固有の損失関数と診断の計算グラフを作成する
  8. レーニング運用の作成
  9. TFセッションの作成とパラメーターの初期化
  10. ロガーを介したモデル保存のセットアップ
  11. アルゴリズムのメインループの実行に必要な関数の定義(アルゴリズムに応じて、コア更新関数、アクション取得関数、テストエージェント関数など)
  12. アルゴリズムのメインループの実行:
    1. 環境でエージェントを実行する
    2. アルゴリズムの主要な式に従って、エージェントのパラメーターを定期的に更新します
    3. 主要なパフォーマンス指標を記録し、エージェントを保存する

また、コマンドラインからGym環境でアルゴリズムを直接実行するためのサポートがあります。

The Core File

コアファイルは、アルゴリズムファイルほどテンプレートに忠実ではありませんが、おおよその構造を持っています。

  1. プレースホルダーの作成と管理に関連する機能
  2. 特定のアルゴリズムactor_criticメソッドに関連する計算グラフの節を構築するための関数
  3. その他の便利な関数
  4. アルゴリズムと互換性のあるMLP actor-criticの実装。方策と価値関数の両方が単純なMLPで表されます。

まとめ

アルゴリズム全部coreファイルとalgorithmファイルに分かれていてみやすい。勉強が捗る。VPGめっちゃ古いですね。

OpenAI Spinning Upの記事一覧 coffee-g9.hatenablog.com

Polyak Averaging

Polyak Averaging

Polyak Averagingは、最適化アルゴリズム中のパラメーター空間内のいくつかのポイントの平均化です。そのため、最適化中にポイント \theta_1, \theta_2... が得られた場合、Polyak Averagingは次のようになります。


\hat\theta_t = \frac{1}{t}\sum_{i=0}^t\theta_i \tag{1}

以下の図のようなイメージです。

Polyak Averaging
Figure 1. Polyak Averaging
Polyak Averaging
Figure 1. Polyak Averaging

Figure 1のように、最適化の際にステップ幅が大きすぎて最小値の点を通り越してしまった場合であっても、それらの点の平均をとることで赤の点のように、最小値に近い値を得ることができます。 このように、Polyak Averagingは凸関数の場合、強力な収束性をもちます。

Polyak-Ruppert Averaging

ディープラーニング最適化問題のほとんどは非凸であり、最適化アルゴリズムがたどる経路は非常に複雑です。イテレーションの最初の段階の点がパラメーター空間において現在の点からかなり離れている可能性があります。そのため、単純平均だけでは有効でないかもしれません。よって、より最適化が進んだ現在に近い点を重視するために、\hat\theta_t を加重平均します。


\hat\theta_t = \alpha\hat\theta_{t-1}+(1-\alpha)\hat\theta_t,\alpha\in[0, 1] \tag{2}

これにより最近のイテレーションが過去のものよりも加重されたパラメータが得られます。


Open AI Spinning Up で深層強化学習のお勉強 -Introduction-

以下サイトで深層強化学習について学んでいきたいと思います。 spinningup.openai.com

余談ですけど、強化学習とかやっていると、「学習」って単語を人間に使えなくなりませんか?「学習」って言おうとしてもなんか違和感でわざわざ「勉強」とか「学ぶ」とか言ってしまいます。私だけかな。笑

強化学習については、今年(2019年)に出た以下の本を読みました。この本はわかりやすいし、細かい理論も書いてあったのですが、実装は無かったので、Spinning Upします。

Spinning Up で学べる事

OpenAIが作成した教育リソースで、深層強化学習について学習できるようです。 主に以下のことが学べるみたい。

  • RLの用語、アルゴリズムの種類、基本理論の簡単な紹介
  • RL研究で成長する方法についてのエッセイ
  • トピックごとにまとまった、重要論文のまとめリスト
  • よく文書化された、スタンドアローンな主要アルゴリズムのコード
  • ウォームアップ用のいくつかの演習

Spinning Up について

こんな感じのことが書いてました。

現在公開されている深層強化学習アルゴリズムはコード設計の詳細な説明が省略されているか、コードがアルゴリズムとどのように関わっているのかがわかりにくいです。Spinning Upは深層強化学習について新たに何を学べばよいか、また、どうやってアルゴリズムをコードに変換すればよいかをクリアにする助けとなりえます。

OpenAIの使命は、AGI(Artificial General Intelligence)の安全な開発と、より一般的なAIからの利益の広範な分配を確保することです。Spinning Upのようなティーチングツールは、これらの両方の目標を達成するのに役立ちます。

こうやって知識を共有してくれることは、とてもありがたい話ですね。

ソースコードについて

  • 性能を保ちながら、可能な限りシンプルに。
  • 互いに非常に一貫性があり、アルゴリズム間の基本的な類似性を明らかにしている
  • ロギング、保存、ロード、MPIユーティリティ以外は、コードは共有されず、自己完結している
  • 実装は、理論とコードのギャップを最小限に抑えるために、可能な限り擬似コードに近づくようにパターン化

可読性の高いソースコードは勉強しやすそうです。

まとめ

アルゴリズムについて学べて、ソースコードまでついていて、しかもそのコードは同じ形式になっているらしいです。すごく勉強が捗りそう。

次回

順番的には次回インストール編なのですが、インストールはすでに苦労しました。。。(下のQiita記事)
なんでだろう。全部pipで突っ込んでるのが悪いのかな。動いたし、そろそろパソコン買い換えだからいいけど。買い換えたらちゃんとAnaconda使おっと。。。

qiita.com



OpenAI Spinning Upの記事一覧 coffee-g9.hatenablog.com