メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

深層決定論的方策勾配 (DDPG) エージェント

深層決定論的方策勾配 (DDPG) アルゴリズムは、連続行動空間をもつ環境向けの Off-Policy actor-critic 手法です。DDPG エージェントは、決定論的方策を学習すると同時に、Q 値関数クリティックを使用して最適な方策の値を推定します。ターゲット アクターおよびターゲット クリティックに加え、経験バッファーを備えています。DDPG エージェントは、オフライン学習 (環境なしで保存されたデータからの学習) をサポートします。さまざまな種類の強化学習エージェントの詳細については、強化学習エージェントを参照してください。

Reinforcement Learning Toolbox™ において、深層決定論的方策勾配エージェントは rlDDPGAgent オブジェクトによって実装されます。

DDPG エージェントは、次の観測空間と行動空間をもつ環境で学習させることができます。

観測空間行動空間
連続または離散連続

DDPG エージェントは次のアクターとクリティックを使用します。

クリティックアクター

Q 値関数クリティック Q(S,A)。rlQValueFunction を使用して作成

決定論的方策アクター π(S)。rlContinuousDeterministicActor を使用して作成

学習が実行されている間、DDPG エージェントは次を行います。

  • 学習時に各タイム ステップでアクターとクリティックの学習可能なパラメーターを更新する。

  • リング経験バッファーを使用して過去の経験を保存する。エージェントは、バッファーからランダムにサンプリングされた経験のミニバッチを使用して、アクターとクリティックを更新する。

  • 各学習ステップで、確率的ノイズ モデルを使用して、方策によって選択されたアクションに摂動を与える。

DDPG エージェントが使用するアクターとクリティック

方策と価値関数を推定するために、DDPG エージェントは次の 4 つの関数近似器を維持します。

  • アクター π(S;θ) — アクターはパラメーター θ をもち、観測値 S を受け取り、長期的な報酬が最大になる対応するアクションを返します。ここでの π は確率分布を表すのではなく、アクションを返す関数を表すことに注意してください。

  • ターゲット アクター πt(S;θt) — 最適化の安定性を向上させるために、エージェントは最新のアクター パラメーター値を使用してターゲット アクターの学習可能なパラメーター θt を周期的に更新します。

  • クリティック Q(S,A;ϕ) — クリティックはパラメーター ϕ をもち、観測値 S とアクション A を入力として受け取り、対応する長期報酬の期待値を返します。

  • ターゲット クリティック Qt(S,A;ϕt) — 最適化の安定性を向上させるために、エージェントは最新のクリティック パラメーター値を使用してターゲット クリティックの学習可能なパラメーター ϕt を周期的に更新します。

Q(S,A;ϕ) と Qt(S,A;ϕt) は両方とも同じ構造とパラメーター表現をもち、π(S;θ) と πt(S;θt) は両方とも同じ構造とパラメーター表現をもちます。

学習が実行されている間、アクターは θ のパラメーター値を調整して方策を改善します。同様に、学習が実行されている間、クリティックは ϕ のパラメーター値を調整して行動価値関数の推定を改善します。学習後は、学習済みエージェント内部のアクターとクリティックにおいて、調整されたパラメーター値が維持されます。

アクターおよびクリティックの詳細については、Create Policies and Value Functionsを参照してください。

DDPG エージェントの作成

DDPG エージェントの作成および学習は、MATLAB® コマンド ラインまたは強化学習デザイナー アプリを使用して行うことができます。強化学習デザイナーを使用したエージェントの作成の詳細については、Create Agents Using Reinforcement Learning Designerを参照してください。

コマンド ラインで、環境の観測仕様とアクション仕様に基づいて既定のアクターとクリティックを使用する DDPG エージェントを作成できます。これを行うには、次の手順を実行します。

  1. 環境用の観測仕様を作成します。既に環境オブジェクトがある場合は、getObservationInfo を使用してこの仕様を取得できます。

  2. 環境用のアクション仕様を作成します。既に環境オブジェクトがある場合は、getActionInfo を使用してこの仕様を取得できます。

  3. 必要に応じて、既定ネットワークの各学習可能層のニューロンの数、または LSTM 層を使用するかどうかを指定します。これを行うには、rlAgentInitializationOptions を使用してエージェント初期化オプション オブジェクトを作成します。

  4. 必要に応じて、rlDDPGAgentOptions オブジェクトを使用してエージェント オプションを指定します。あるいは、この手順をスキップし、後でドット表記を使用してエージェント オプションを変更することもできます。

  5. rlDDPGAgent を使用してエージェントを作成します。

あるいは、カスタムのアクターとクリティックを作成し、それらのオブジェクトを使用してエージェントを作成することもできます。この場合、アクターおよびクリティックの入力と出力の次元が、その環境の対応するアクション仕様および観測仕様と確実に一致するようにしてください。

  1. 環境用の観測仕様を作成します。既に環境オブジェクトがある場合は、getObservationInfo を使用してこの仕様を取得できます。

  2. 環境用のアクション仕様を作成します。既に環境オブジェクトがある場合は、getActionInfo を使用してこの仕様を取得できます。

  3. アクターの近似モデルを作成します。初期パラメーター値をもつカスタム基底関数、またはニューラル ネットワーク オブジェクトを使用できます。

  4. rlContinuousDeterministicActor を使用してアクターを作成します。前の手順で作成したモデルを最初の入力引数として使用します。

  5. クリティックの近似モデルを作成します。初期パラメーター値をもつカスタム基底関数、またはニューラル ネットワーク オブジェクトを使用できます。

  6. rlQValueFunction を使用してクリティックを作成します。前の手順で作成したモデルを最初の入力引数として使用します。

  7. rlDDPGAgentOptions オブジェクトを使用してエージェント オプションを指定します。あるいは、この手順をスキップし、後でドット表記を使用してエージェント オプションを変更することもできます。

  8. rlDDPGAgent を使用してエージェントを作成します。

関数近似のためのアクターとクリティックの作成の詳細については、Create Policies and Value Functionsを参照してください。

DDPG 学習アルゴリズム

DDPG エージェントは以下の学習アルゴリズムを使用し、タイム ステップごとにアクター モデルとクリティック モデルを更新します。学習アルゴリズムを構成するには、rlDDPGAgentOptions オブジェクトを使用してオプションを指定します。

  • クリティック Q(S,A;ϕ) をランダムなパラメーター値 ϕ で初期化し、同じ値でターゲット クリティック パラメーター ϕt を初期化する (ϕt=ϕ)。

  • アクター π(S;θ) をランダムなパラメーター値 θ で初期化し、同じ値でターゲット アクター パラメーター θt を初期化する (θt=θ)。

  • π(S;θ) で表される初期方策に従って一連のアクションを実行し、ウォーム スタートを実行します。

    1. 各エピソードの始めに、環境からの初期観測値を取得します。

    2. 現在の観測値に対して、アクション A = π(S;θ) + N を選択します。ここで、N はノイズ モデルからの確率的ノイズです。ノイズ モデルを構成するには、NoiseOptions オプションを使用します。

    3. アクション A を実行します。報酬 R と次の観測値 S' を観測します。

    4. 経験 (S,A,R,S') を経験バッファーに保存します。

    経験バッファーのサイズを指定するには、エージェントの rlDDPGAgentOptions オブジェクトの ExperienceBufferLength オプションを使用します。ウォームアップ アクションの数を指定するには、NumWarmStartSteps オプションを使用します。

  • ウォーム スタートの手順の後、各学習タイム ステップで次のようにします。

    1. ウォーム スタートの手順で説明した 4 つの操作を実行します。

    2. DC タイム ステップごとに (DC を指定するには LearningFrequency オプションを使用)、次の 2 つの操作を NumEpoch 回実行します。

      1. 収集されたすべての経験を使用して、最大 B 個の異なるミニバッチを作成します。B を指定するには、MaxMiniBatchPerEpoch オプションを使用します。各ミニバッチには、経験バッファーからランダムにサンプリングされた M 個の異なる (通常は非連続の) 経験 (SiAiRiS'i) が含まれます (各経験は 1 つのミニバッチにのみ含まれなければならない)。M を指定するには、MiniBatchSize オプションを使用します。

        エージェントが再帰型ニューラル ネットワークを含む場合、各ミニバッチには M 個の異なるシーケンスが含まれます。各シーケンスには、K 個の連続した経験 (ランダムにサンプリングされた経験から開始) が含まれます。K を指定するには、SequenceLength オプションを使用します。

      2. それぞれの (ランダムに選択された) ミニバッチに対して、ミニバッチ学習操作で説明した学習操作を実行します。

      LearningFrequency が既定値の -1 である場合、ミニバッチの作成 (項目 a で説明) と学習操作 (項目 b で説明) は、各エピソードが終了した後に実行されます。

簡単にするために、このアルゴリズムのアクターとクリティックの更新は、基本的な確率的勾配降下法を使用した勾配の更新を示しています。実際の勾配更新方法は、rlCriticOptimizerOptions プロパティに割り当てられた rlOptimizerOptions オブジェクトで指定したオプティマイザーによって異なります。

ミニバッチ学習操作

各ミニバッチに対して実行される操作は次のとおりです。

  1. S'i が終了状態の場合、価値関数のターゲット yiRi に設定します。それ以外の場合、次のように設定します。

    yi=Ri+γQt(Si',πt(Si';θt);ϕt)

    価値関数のターゲットは、経験報酬 Ri と将来の割引報酬の合計です。割引係数 γ を指定するには、DiscountFactor オプションを使用します。

    累積報酬を計算するために、エージェントはまず、サンプリングされた経験からの次の観測値 S'i をターゲット アクターに渡すことによって、次のアクションを計算します。エージェントは、ターゲット クリティックに次のアクションを渡すことによって累積報酬を求めます。

    NumStepsToLookAhead の値を N に等しいと指定した場合、N ステップの収益 (次の N ステップの報酬と、N 番目の報酬を発生させた状態の割引推定値を加算したもの) がターゲット yi の計算に使用されます。

  2. すべてのサンプリングされた経験にわたる損失 Lk を最小化して、クリティック パラメーターを更新します。

    Lk=12Mi=1M(yiQk(Si,Ai;ϕk))2

  3. すべての DA クリティックを更新し (DA を設定するには、PolicyUpdateFrequency オプションを使用)、以下のサンプリングされた方策勾配を使用してアクター パラメーターを更新し、割引累積長期報酬の期待値を最大化します。

    θJ1Mi=1MGaiGπiGai=AQ(Si,A;ϕ)whereA=π(Si;θ)Gπi=θπ(Si;θ)

    ここで、Gai はアクター ネットワークによって計算されたアクションに関するクリティックの出力の勾配であり、Gπi はアクター パラメーターに関するアクターの出力の勾配です。両方の勾配が観測値 Si に対して評価されます。

  4. クリティックの更新 TargetUpdateFrequency 回ごとに、ターゲットの更新方法に応じて、ターゲットとなるアクターとクリティックを更新します。詳細については、ターゲットの更新方法を参照してください。

ターゲットの更新方法

DDPG エージェントは、以下のターゲット更新方法のいずれかを使用して、ターゲットとなるアクターとクリティックのパラメーターを更新します。

  • 平滑化 — 平滑化係数 τ を使用して、タイム ステップごとにターゲット パラメーターを更新します。平滑化係数を指定するには、TargetSmoothFactor オプションを使用します。

    ϕt=τϕ+(1τ)ϕt(critic parameters)θt=τθ+(1τ)θt(actor parameters)

  • 周期的 — 平滑化なしでターゲット パラメーターを周期的に更新します (TargetSmoothFactor = 1)。更新期間を指定するには、TargetUpdateFrequency パラメーターを使用します。

  • 周期的平滑化 — 平滑化を使用してターゲット パラメーターを周期的に更新します。

ターゲット更新方法を構成するには、rlDDPGAgentOptions オブジェクトを作成し、次の表に示すように TargetUpdateFrequency パラメーターと TargetSmoothFactor パラメーターを設定します。

更新方法TargetUpdateFrequencyTargetSmoothFactor
平滑化 (既定)11 未満
周期的1 より大きい1
周期的平滑化1 より大きい1 未満

参照

[1] Lillicrap, Timothy P., Jonathan J. Hunt, Alexander Pritzel, Nicolas Heess, Tom Erez, Yuval Tassa, David Silver, and Daan Wierstra. “Continuous Control with Deep Reinforcement Learning.” ArXiv:1509.02971 [Cs, Stat], September 9, 2015. https://arxiv.org/abs/1509.02971.

参考

オブジェクト

トピック