ポリシー勾配アルゴリズムに関する簡単なチュートリアル

政策の勾配が必要な理由

値ベースの強化学習手法は一般に決定論的です。状態が与えられると、考えられる各アクションの報酬 (決定された値) を計算できます。ただし、この決定論的手法では、100 個の石で遊ぶなどの一部の現実の問題には対処できません。じゃんけんゲームの場合、最善の解決策は、じゃんけんをランダムに使用し、これら 3 つのジェスチャーの確率が同じになるようにすることです。他のジェスチャーよりも確率が高いジェスチャーは、相手に気づかれてしまい、対応するジェスチャーを使用してゲームに勝ちます。

別の例として、お金の袋を入手するために上の写真の迷路を探索する必要があるとします。値ベースのアプローチを使用する場合、決定された状態で決定論的なフィードバックが得られるため、このメソッドを使用して灰色 (状態) ボックスの次のアクション (左または右) が決定されます。つまり、常に左か右かが決定されます。これは、間違ったループ (左側に 1 つの白い四角、左側に 2 つの灰色の四角) に陥ってしまい、お金の入った袋が手に入らない可能性があります。このときの状態を1つのマス目で表現するのではなく、迷路内のすべてのマス目で表現すべきではないかと疑問に思う人もいるかもしれない。しかし、巨大な迷路の中で、迷路全体の配置情報が得られない場合、常に同じ知覚状態で固定的な判断をしていても、ある部分で空回りしてしまうことを考えてみましょう。実際、多くの実践的な問題、特にチェスの問題は同様の特性を持っています。つまり、チェスのゲームの開始など、一見同じ状態に異なるアクションを適用する必要があります。

ポリシー勾配は上記の問題を解決するために作成されました。その秘密兵器は「ランダム性」です。まず、ランダム性により非決定的な結果が得られる場合がありますが、この非決定的な結果は完全にランダムではなく、特定の確率分布に従うランダムです。ポリシー勾配は報酬を計算しませんが、すべてのアクションを選択するための確率分布を出力し、確率に基づいてアクションを選択しますトレーニングの基本原理は、フィードバックによって戦略を調整することであり、具体的には、ポジティブな報酬を受け取った場合は対応する行動の確率を上げ、ネガティブな報酬を受け取った場合は対応する行動の確率を下げるというものです。下の左図の緑色の点はプラスの報酬が得られるアクションを表し、右図は更新された戦略を示しており、プラスの報酬が得られる領域の確率が増加している(円の中心までの距離が近づいている)ことがわかります。 。

ポリシー勾配アルゴリズムを詳しく見てみましょう。

基本的な考え方

オブジェクト システム: ポリシー勾配の学習オブジェクト。このオブジェクトは、車やゲームなどのシステム、または勢いじゃんけんゲームの対戦相手やプロの囲碁棋士などの対戦相手です。

ポリシー戦略:状態およびパラメータ条件下でアクションが発生する確率\pi_{\theta } (\alpha | s)を表しますs\シータ\アルファ

エピソード ラウンド: 特定の戦略を使用してアクションを生成し、開始状態から特定の終了状態の終わりまでオブジェクト システムと対話することを意味します。例えば、囲碁のラウンドは盤上の最初の一手から始まり、勝負の勝敗が決まるまでを指しますし、自動運転のラウンドは車が発進して指定された目的地に無事到着するまでを指します。もちろん、衝突したり車に突っ込んだりすることもあり、池も望ましくない最終状態です。

軌道:\ できる PG 学習のラウンドにおける状態s、アクション\アルファ、報酬rのシーケンスを表します。栗をあげる:\tau=((s_0,\alpha_0,r_0),(s_1,\alpha_1,r_1),......)この戦略は非決定的なアクションを生成するため、同じ戦略が複数のラウンドで複数の異なる軌道を生成する可能性があります。

ラウンド報酬:\sum r(\数値)ラウンド内の一連のアクションによって生成される合計報酬を表します。実装では、各ポリシーの報酬期待値を評価するときに、複数のエポックにわたって平均が取得されます。

ポリシー勾配の学習はポリシー最適化プロセスです。ポリシーは最初にランダムに生成されます。もちろん、このポリシーはオブジェクト システムについて何も知りません。そのため、このポリシーによって生成されたアクションは、オブジェクト システムから負の報酬を受け取る可能性があります。相手に勝つためには、少しずつ戦略を変えていく必要があります。ポリシー勾配は、学習ラウンドでラウンドが終了するまで同じポリシーを使用し、勾配上昇を通じてポリシーを変更して次の学習ラウンドを開始するなど、ラウンドの累積報酬が収束するまで続けます。

目的関数

前述の政策勾配の基本原則によれば、その目標は次の式で正式に説明できます。

J(\theta )=argmax_\theta E[r_0+r_1+r_2+....|\pi_\theta ]

この関数は、\pi_\シータステップ 0 から t までの戦略の累積報酬の期待値を表します。なぜ期待値なのかというと、各ステップの報酬は、特定の行動を選択して特定の報酬が得られるのではなく、戦略(行動選択の確率分布の生成)に基づく報酬期待値だからです。ポリシー勾配の目的は、最大の期待値を達成する\シータようにポリシーを構成するパラメータを決定することです。J(\シータ)今すぐ:

\theta ^*=argmaxJ(\theta )

\シータ勾配上昇は、数学的期待値の定義に従って、パラメーターを更新するためにポリシー勾配アルゴリズムで使用されます。

J(\theta )=E_{r\sim \pi_\theta (\tau)}[\sum r_\tau]=\int_{{}^{\tau}} r(t)\pi_\theta (t )dt

導関数を求めます。

\nabla_\theta J(\theta)=\int_{ {}^{\tau}}r(t)\nabla_\theta\pi_\theta(t)dt

ここでは先に進めません。\pi_\シータ(t)それに依存しているため\シータ、導関数を直接導出することができないため、ちょっとしたトリックを使用する必要があります。以下に従って\nabla logf(x)=\frac{\nabla f(x)}{f(x)}変換します。

\nabla_\theta \pi_\theta(t)=\pi_\theta(t)\frac{\nabla_\theta \pi_\theta(t)}{\pi_\theta(t)}=\pi_\theta(t ). )\nabla_\theta log\pi_\theta(t)

代わりの:

\nabla_\theta J(\theta)=\int_{ {}^{\tau}}r(t)\pi_\theta(t)\nabla_\theta log\pi_\theta(t) dt

今回は、計算が完了した後、期待値の定義に従って変換し直すと、次のようになります。

\nabla_\theta J(\theta)=E_{\tau \sim \pi_\theta(\tau)}[\nabla_\theta log\pi_\theta(\tau)r(\tau)]

なぜなら:

log(\pi_\theta(\tau))=\sum_{t=1}^{T} log(\pi_\theta(\alpha_t|s_t))+logp(s_{t+1}|s_t,\alpha_t )

r(\tau)=\sum_{t=1}^{T} r(s_t,\alpha_t)

最終結果は次のとおりです。

\nabla_\theta J(\theta)=E_{\tau \sim \pi_\theta(\tau)}[\sum_{t=1}^{T}\nabla_\theta log\pi_\theta(\alpha_t| s_t)(\sum_{t=1}^{T} r(s_t,\alpha_t))]

平均値によって期待値を近似します。

\nabla_\theta J(\theta)=\frac{1}{N}\sum_{i=1}^{N}[\sum_{t=1}^{T}\nabla_\theta log\pi_\theta (\alpha_t|s_t)(\sum_{t=1}^{T} r(s_t,\alpha_t))]

苦労してやっと計算が終わったのですが、これが最適化する目的関数です。よく理解できていなくても、ここからは、報酬が高い場合には対応する行動の確率が高くなる戦略、報酬が低い場合には確率が低くなるという傾向が直感的に理解できると思います。ポリシー勾配の学習プロセスは、従来の教師あり学習のプロセスと比較的似ています。各ラウンドは、順計算と逆伝播で構成されます。順計算は目的関数の計算を担当し、逆伝播はアルゴリズムのパラメータの更新を担当します。複数回の学習により、学習効果が安定して収束するように導きます。唯一の違いは、教師あり学習の目的関数が比較的単純であること、つまり、目標値と実際の値の差です。この差は 1 回の前方フィードバックを通じて取得できますが、ポリシー勾配の目的関数は次から導出されます。ラウンドで得られるすべての報酬、およびそれを計算するには特定の数学的変換が必要です。さらに、サンプリングは期待値をシミュレートするために使用されるため、シミュレーションの精度を高めるために同じパラメータのセットを複数回サンプリングする必要もあります。

アプリケーション

以下では、Atari PONG ゲームのプレイ方法の学習を例に、特定の問題を解決するために PG を適用する方法を紹介します。PONG は、卓球をシミュレートするゲームで、プレーヤーは画面の片側にある小さな平面を操作して、卓球ラケットを上下に動かしてボールを打つことをシミュレートします。相手がボールを譲らざるを得なくなった場合、相手側の得点が 1 つ増えますが、それ以外の場合は相手側の得点が加算されます。PONG ゲームを学習するためにポリシー勾配を使用する基本的なアイデアは、アルゴリズムによって制御される一方のパーティを使用して、ゲームによって制御されるもう一方のパーティと対戦し、アクションの確率分布 (上または下) を観察することで調整することです。パーティーのスコアを最大化するためにゲームの状態とスコアが変化します。学習プロセスは次のコードとして記述できます。

policy = build_policy_model()
game.start()
while True:
    state = game.currentState()
    action, prob = policy.feedforward(state)
    reward = game.play(action)
    trajectory.append((state, prob, action, reward))
    if game.terminated():
        if count < SAMPLE_COUNT:
            trajectories.append(trajectrory)
            trojectroy = []
            count += 1
            break
        else:
            policy.backpropagation(trajectories)
            game.restart()
            trajectory = []
            trajectories = []
            count = 0

行 1 では、ポリシー モデルを構築し、モデル パラメータをランダムに初期化します\シータモデルの機能は、フォワード フィードバックを通じて状態情報からすべてのアクションの確率分布 (たとえば、90% 上昇、10% 低下) を計算し、最も確率の高いアクションを選択して、それをゲームに送信することです。命令。

2 行目でゲームが始まります。

4行目はラケットの位置やボールの速度や方向などの現在のステータスを取得します。

行 5 では、ステータス情報をポリシー モデルに渡し、対応するアクションを計算します。\pi_\シータ逆フェーズ中に目的関数の導関数を計算するために、アクションの確率もここに記録されます。

Line 6 は 4 つの計算されたアクションを使用してゲームをプレイし、報酬を受け取ります

行 7 は、一連のインタラクション情報 (ステータス、アクションの確率、アクション、報酬) を現在の\ できる軌道に保存します。

8 行目 ゲームが終了していない場合 (卓球のボールがまだ両側から打たれている場合)、次のインタラクションで現在の戦略モデルを引き続き使用します。

10 行目: ゲームが終了した場合 (一方の当事者がピンポン球を打てなかった場合)、前のラウンドの軌道情報が保存され、同じ戦略モデルを使用してゲームの新しいラウンドが開始されます。個人差の影響により、同じ戦略モデルに対して複数の変数が生成されます。

15 行目で十分なサンプルを生成した後、ポリシー モデルの逆転送を通じてパラメータが更新され、更新されたポリシーを使用して新しいラウンドの学習が開始されます。

問題点と改善点

ポリシー勾配は理論的には値ベースの手法では処理できない複雑な問題を処理できますが、ポリシーを最適化するためにサンプルに依存するため、この手法はサンプルの個体差による影響を受ける分散が比較的大きく、学習効果を継続的に維持するのは容易ではありません。強化して収束する。基本的な改善のアイデアは、無効な要素を減らして分散を減らすことです。現在のアクションは過去の報酬に影響を与えないため、目的関数を次のように変更できます。

\nabla_\theta J(\theta)=\frac{1}{N}\sum_{i=1}^{N}[\sum_{t=1}^{T}\nabla_\theta log\pi_\theta (\alpha_t|s_t)(\sum_{t^{'}=t}^{T} r(s_{t^{'}},\alpha_{t^{'}})]

従来の割引係数を使用して、離れたアクションの影響を軽減することもできます。

\nabla_\theta J(\theta)=\frac{1}{N}\sum_{i=1}^{N}[\sum_{t=1}^{T}\nabla_\theta log\pi_\theta (\alpha_t|s_t)(\sum_{t^{'}=t}^{T} \gamma ^{|tt^{'}|}r(s_{t^{'}},\alpha_{t^ {'}}))]

さらに、実際の計算で生成されるラウンド報酬は、戦略の品質を正確に表していないという問題も考慮する必要があります。たとえば、戦略がすでに優れている場合、より低いラウンド報酬を生成するためにあまり良くないサンプルが使用されます。この報酬は負ではないため、従来のポリシー勾配アルゴリズムは依然としてこの軌道を生成するアクションの確率を増加させようとするため、学習効果は増加するのではなく減少してしまいます。したがって、アルゴリズムがベースライン値よりもアクションの確率を高め、ベースライン値を下回るアクションの確率を減らすことができるように、ベースライン値を導入する必要があります。

\nabla_\theta J(\theta)=\frac{1}{N}\sum_{i=1}^{N}[\sum_{t=1}^{T}\nabla_\theta log\pi_\theta (\alpha_t|s_t)(\sum_{t^{'}=t}^{T} r(s_{t^{'}},\alpha_{t^{'}})-b)]

現在、ベンチマーク値bは通常、平均値、つまり と見なされますb=\frac{1}{N}\sum_{i=1}^{N}r(\alpha_i,s_i)このベースライン値も更新に応じて動的に変化することがわかります。研究者たちは、より良いベンチマーク値を生成するために他の方法を使用しようと今でも試みていますが、実際、よく考えてみると、ベンチマーク値の動的な推定は、実際には価値関数の推定問題であることがわかります。したがって、ポリシー勾配アルゴリズムを値ベースのアルゴリズムと組み合わせて、より良い結果を達成できます。たとえば、Actor-critic は、実際にはポリシー勾配法と DQN を組み合わせたものであると私は考えています。これについては、機会があればもう一度話します~

おすすめ

転載: blog.csdn.net/FYZDMMCpp/article/details/112586572