双生遅延深層決定論的 (TD3) 方策勾配エージェント
双生遅延深層決定論的 (TD3) 方策勾配アルゴリズムは、連続行動空間をもつ環境向けの Off-Policy actor-critic 手法です。TD3 エージェントは、決定論的方策を学習すると同時に、2 つの Q 値関数クリティックを使用して最適な方策の値を推定します。ターゲット アクターおよびターゲット クリティックに加え、経験バッファーを備えています。TD3 エージェントは、オフライン学習 (環境なしで保存されたデータからの学習) をサポートします。
TD3 アルゴリズムは、DDPG アルゴリズムを拡張したものです。DDPG エージェントは価値関数を過大推定する可能性があり、それによって準最適の方策が生成される可能性があります。価値関数の過大推定を減らすために、TD3 アルゴリズムは DDPG アルゴリズムに対する以下の変更を含んでいます。
TD3 エージェントは 2 つの Q 値関数を学習し、方策の更新時に関数の最小推定値を使用します。
TD3 エージェントは、Q 関数よりも少ない頻度で方策とターゲットを更新します。
方策を更新するとき、TD3 エージェントはターゲット アクションにノイズを付加します。これにより、Q 値推定値が高いアクションが方策によって利用される可能性が低くなります。
TD3 エージェントを使用し、指定したクリティックの数に応じて、次の学習アルゴリズムのいずれかを実装できます。
TD3 — 2 つの Q 値関数を使用してエージェントに学習させます。このアルゴリズムは、前述の 3 つの変更をすべて実装します。
遅延 DDPG — 単一の Q 値関数を使用してエージェントに学習させます。このアルゴリズムは、ターゲット方策平滑化および方策とターゲットの遅延付き更新を使用して、DDPG エージェントに学習させます。
さまざまな種類の強化学習エージェントの詳細については、強化学習エージェントを参照してください。
Reinforcement Learning Toolbox™ において、TD3 エージェントは rlTD3Agent
オブジェクトによって実装されます。
TD3 エージェントは、次の観測空間と行動空間をもつ環境で学習させることができます。
観測空間 | 行動空間 |
---|---|
連続または離散 | 連続 |
TD3 エージェントは次のアクターとクリティックを使用します。
クリティック | アクター |
---|---|
1 つ以上の Q 値関数クリティック Q(S,A)。 | 決定論的方策アクター π(S)。 |
学習が実行されている間、TD3 エージェントは次を行います。
学習時に各タイム ステップでアクターとクリティックの学習可能なパラメーターを更新する。
リング経験バッファーを使用して過去の経験を保存する。エージェントは、バッファーからランダムにサンプリングされた経験のミニバッチを使用して、アクターとクリティックを更新する。
各学習ステップで、確率的ノイズ モデルを使用して、方策によって選択されたアクションに摂動を与える。
TD3 エージェントが使用するアクターとクリティック
方策と価値関数を推定するために、TD3 エージェントは次の関数近似器を維持します。
決定論的アクター π(S;θ) — アクターはパラメーター θ をもち、観測値 S を受け取り、長期的な報酬が最大になる対応するアクションを返します。ここでの π は確率分布を表すのではなく、アクションを返す関数を表すことに注意してください。
ターゲット アクター πt(S;θt) — 最適化の安定性を向上させるために、エージェントは最新のアクター パラメーター値を使用してターゲット アクターの学習可能なパラメーター θt を周期的に更新します。
1 つまたは 2 つの Q 値クリティック Qk(S,A;ϕk) — それぞれ異なるパラメーター ϕk をもつクリティックは、観測値 S とアクション A を入力として受け取り、対応する長期報酬の期待値を返します。
1 つまたは 2 つのターゲット クリティック Qtk(S,A;ϕtk) — 最適化の安定性を向上させるために、エージェントは対応する最新のクリティック パラメーター値を使用してターゲット クリティックの学習可能なパラメーター ϕtk を周期的に更新します。ターゲット クリティックの数はクリティックの数と一致します。
π(S;θ) と πt(S;θt) は両方とも同じ構造とパラメーター表現をもちます。
各クリティックについて、Qk(S,A;ϕk) と Qtk(S,A;ϕtk) は同じ構造とパラメーター表現をもちます。
Q1(S,A;ϕ1) と Q2(S,A;ϕ2) の 2 つのクリティックを使用する場合、各クリティックは異なる構造をもつことができますが、TD3 はクリティックが同じ構造をもつ場合に最適に機能します。クリティックが同じ構造をもつ場合、異なる初期パラメーター値をもたなければなりません。
学習が実行されている間、アクターは θ のパラメーター値を調整して方策を改善します。同様に、学習が実行されている間、クリティックはパラメーター値を調整して、行動価値関数の推定を改善します。学習後は、学習済みエージェント内部のアクターとクリティックにおいて、調整されたパラメーター値が維持されます。
アクターおよびクリティックの詳細については、Create Policies and Value Functionsを参照してください。
TD3 エージェントの作成
TD3 エージェントの作成および学習は、MATLAB® コマンド ラインまたは強化学習デザイナー アプリを使用して行うことができます。強化学習デザイナーを使用したエージェントの作成の詳細については、Create Agents Using Reinforcement Learning Designerを参照してください。
コマンド ラインで、環境の観測仕様とアクション仕様に基づいて既定のアクターとクリティックを使用して、TD3 エージェントを作成できます。これを行うには、次の手順を実行します。
環境用の観測仕様を作成します。既に環境オブジェクトがある場合は、
getObservationInfo
を使用してこの仕様を取得できます。環境用のアクション仕様を作成します。既に環境オブジェクトがある場合は、
getActionInfo
を使用してこの仕様を取得できます。必要に応じて、既定ネットワークの各学習可能なパラメーター層のニューロンの数、または LSTM 層を使用するかどうかを指定します。これを行うには、
rlAgentInitializationOptions
を使用してエージェント初期化オプション オブジェクトを作成します。必要に応じて、
rlTD3AgentOptions
オブジェクトを使用してエージェント オプションを指定します。あるいは、この手順をスキップし、後でドット表記を使用してエージェント オプションを変更することもできます。rlTD3Agent
を使用してエージェントを作成します。
あるいは、カスタムのアクターとクリティックを作成し、それらのオブジェクトを使用してエージェントを作成することもできます。この場合、アクターおよびクリティックの入力と出力の次元が、その環境の対応するアクション仕様および観測仕様と確実に一致するようにしてください。
環境用の観測仕様を作成します。既に環境オブジェクトがある場合は、
getObservationInfo
を使用してこの仕様を取得できます。環境用のアクション仕様を作成します。既に環境オブジェクトがある場合は、
getActionInfo
を使用してこの仕様を取得できます。アクターの近似モデルを作成します。初期パラメーター値をもつカスタム基底関数、またはニューラル ネットワーク オブジェクトを使用できます。
rlContinuousDeterministicActor
を使用してアクターを作成します。前の手順で作成したモデルを最初の入力引数として使用します。クリティックの近似モデルを作成します。初期パラメーター値をもつカスタム基底関数、またはニューラル ネットワーク オブジェクトを使用できます。
rlQValueFunction
を使用して 1 つまたは 2 つのクリティックを作成します。前の手順で作成したモデルを最初の入力引数として使用します。クリティックが同じ構造をもつ場合、異なる初期パラメーター値をもたなければなりません。rlTD3AgentOptions
オブジェクトを使用してエージェント オプションを指定します。あるいは、この手順をスキップし、後でドット表記を使用してエージェント オプションを変更することもできます。rlTD3Agent
を使用してエージェントを作成します。
関数近似のためのアクターとクリティックの作成の詳細については、Create Policies and Value Functionsを参照してください。
TD3 の学習アルゴリズム
TD3 エージェントは以下の学習アルゴリズムを使用し、タイム ステップごとにアクター モデルとクリティック モデルを更新します。学習アルゴリズムを構成するには、rlTD3AgentOptions
オブジェクトを使用してオプションを指定します。ここで、K = 2 はクリティックの数、k はクリティックのインデックスです。
各クリティック Qk(S,A;ϕk) をランダムなパラメーター値 ϕk で初期化し、同じランダムなパラメーター値で各ターゲット クリティックを初期化する ()。
アクター π(S;θ) をランダムなパラメーター値 θ で初期化し、同じパラメーター値でターゲット アクターを初期化する ()。
π(S;θ) で表される初期方策に従って一連のアクションを実行し、ウォーム スタートを実行します。
各エピソードの始めに、環境からの初期観測値を取得します。
現在の観測値に対して、アクション A = π(S;θ) + N を選択します。ここで、N はノイズ モデルからの確率的ノイズです。ノイズ モデルを構成するには、
ExplorationModel
オプションを使用します。アクション A を実行します。報酬 R と次の観測値 S' を観測します。
経験 (S,A,R,S') を経験バッファーに保存します。
経験バッファーのサイズを指定するには、エージェントの
rlTD3AgentOptions
オブジェクトのExperienceBufferLength
オプションを使用します。ウォームアップ アクションの数を指定するには、NumWarmStartSteps
オプションを使用します。ウォーム スタートの手順の後、各学習タイム ステップで次のようにします。
ウォーム スタートの手順で説明した 4 つの操作を実行します。
DC タイム ステップごとに (DC を指定するには
LearningFrequency
オプションを使用)、次の 2 つの操作をNumEpoch
回実行します。収集されたすべての経験を使用して、最大 B 個の異なるミニバッチを作成します。B を指定するには、
MaxMiniBatchPerEpoch
オプションを使用します。各ミニバッチには、経験バッファーからランダムにサンプリングされた M 個の異なる (通常は非連続の) 経験 (Si、Ai、Ri、S'i) が含まれます (各経験は 1 つのミニバッチにのみ含まれなければならない)。M を指定するには、MiniBatchSize
オプションを使用します。エージェントが再帰型ニューラル ネットワークを含む場合、各ミニバッチには M 個の異なるシーケンスが含まれます。各シーケンスには、K 個の連続した経験 (ランダムにサンプリングされた経験から開始) が含まれます。K を指定するには、
SequenceLength
オプションを使用します。それぞれの (ランダムに選択された) ミニバッチに対して、ミニバッチ学習操作で説明した学習操作を実行します。
LearningFrequency
が既定値の -1 である場合、ミニバッチの作成 (項目 a で説明) と学習操作 (項目 b で説明) は、各エピソードが終了した後に実行されます。
簡単にするために、このアルゴリズムのアクターとクリティックの更新は、基本的な確率的勾配降下法を使用した勾配の更新を示しています。実際の勾配更新方法は、rlCriticOptimizerOptions
プロパティに割り当てられた rlOptimizerOptions
オブジェクトで指定したオプティマイザーによって異なります。
ミニバッチ学習操作
各ミニバッチに対して実行される操作は次のとおりです。
S'i が終了状態の場合、価値関数のターゲット yi を Ri に設定します。それ以外の場合、次のように設定します。
価値関数のターゲットは、経験報酬 Ri とクリティックからの将来の最小割引報酬の合計になります。割引係数 γ を指定するには、
DiscountFactor
オプションを使用します。累積報酬を計算するために、エージェントはまず、サンプリングされた経験からの次の観測値 S'i をターゲット アクターに渡すことによって、次のアクションを計算します。次に、エージェントは
TargetPolicySmoothModel
を使用して計算されたアクションにノイズ ε を付加し、ノイズの上限と下限に基づいてアクションをクリップします。エージェントは、ターゲット クリティックに次のアクションを渡すことによって累積報酬を求めます。NumStepsToLookAhead
の値を N に等しいと指定した場合、N ステップの収益 (次の N ステップの報酬と、N 番目の報酬を発生させた状態の割引推定値を加算したもの) がターゲット yi の計算に使用されます。すべてのサンプリングされた経験にわたる損失 Lk を最小化して、各クリティック パラメーターを更新します。
すべての DA クリティックを更新し (DA を設定するには、
PolicyUpdateFrequency
オプションを使用)、以下のサンプリングされた方策勾配を使用してアクター パラメーターを更新し、割引累積長期報酬の期待値を最大化します。ここで、Gai はアクター ネットワークによって計算されたアクションに関する最小クリティック出力の勾配であり、Gπi はアクター パラメーターに関するアクターの出力の勾配です。両方の勾配が観測値 Si に対して評価されます。
クリティックの更新
TargetUpdateFrequency
回ごとに、ターゲットの更新方法に応じて、ターゲットとなるアクターとクリティックを更新します。詳細については、ターゲットの更新方法を参照してください。
ターゲットの更新方法
TD3 エージェントは、以下のターゲット更新方法のいずれかを使用して、ターゲットとなるアクターとクリティックのパラメーターを更新します。
平滑化 — 平滑化係数 τ を使用して、タイム ステップごとにターゲット パラメーターを更新します。平滑化係数を指定するには、
TargetSmoothFactor
オプションを使用します。周期的 — 平滑化なしでターゲット パラメーターを周期的に更新します (
TargetSmoothFactor = 1
)。更新期間を指定するには、TargetUpdateFrequency
パラメーターを使用します。周期的平滑化 — 平滑化を使用してターゲット パラメーターを周期的に更新します。
ターゲット更新方法を構成するには、rlTD3AgentOptions
オブジェクトを作成し、次の表に示すように TargetUpdateFrequency
パラメーターと TargetSmoothFactor
パラメーターを設定します。
更新方法 | TargetUpdateFrequency | TargetSmoothFactor |
---|---|---|
平滑化 (既定) | 1 | 1 未満 |
周期的 | 1 より大きい | 1 |
周期的平滑化 | 1 より大きい | 1 未満 |
参照
[1] Fujimoto, Scott, Herke van Hoof, and David Meger. "Addressing Function Approximation Error in Actor-Critic Methods". ArXiv:1802.09477 [Cs, Stat], 22 October 2018. https://arxiv.org/abs/1802.09477.