Main Content

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

ソフト actor-critic (SAC) エージェント

ソフト actor-critic (SAC) アルゴリズムは、モデルフリーのオンライン Off-Policy actor-critic 強化学習手法です。SAC アルゴリズムは、長期的に期待される報酬と、方策のエントロピーの両方を最大化する最適な方策を計算します。方策エントロピーは、特定の状態に関する方策の不確実性の尺度です。エントロピー値が高いほど、より多くの探索が促進されます。累積長期報酬の期待値とエントロピーの両方を最大化することは、環境の利用と探索のバランスを取るのに役立ちます。

さまざまな種類の強化学習エージェントの詳細については、強化学習エージェントを参照してください。

Reinforcement Learning Toolbox™ ソフトウェアでの SAC エージェントの実装では、価値関数の過大推定を防ぐ 2 つの Q 値関数のクリティックが使用されます。SAC アルゴリズムの他の実装では、追加の価値関数クリティックを使用します。

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

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

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

クリティックアクター

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

確率的方策アクター π(S)。rlContinuousGaussianActor を使用して作成

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

  • 学習時にアクターとクリティックのプロパティを定期的に更新する。

  • 連続行動空間のガウス確率分布の平均と標準偏差を推定し、分布に基づいてアクションをランダムに選択する。

  • 収益の期待値と方策のエントロピーのバランスを取るエントロピー重み項を更新する。

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

エージェントの UseExplorationPolicy オプションが false に設定されている場合、最大尤度のアクションが sim および generatePolicyFunction で常に使用されます。その結果、シミュレーションされたエージェントと生成された方策は確定的に動作します。

UseExplorationPolicytrue に設定されている場合、エージェントは確率分布をサンプリングすることによってアクションを選択します。結果として、方策は確率的となり、エージェントはその観測空間を探索します。

このオプションはシミュレーションと展開にのみ影響します。学習には影響しません。

アクター関数近似器およびクリティックの関数近似器

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

  • 確率的アクター π(A|S;θ) — アクターはパラメーター θ をもち、状態 S にあるときに、各連続行動 A を実行する条件付きガウス確率の平均と標準偏差を出力します。

  • 1 つまたは 2 つの Q 値クリティック Qk(S,A;ϕk) — それぞれパラメーター ϕk をもつクリティックは、観測値 S とアクション A を入力として受け取り、長期報酬とエントロピーの両方を含む、対応する価値関数の期待値を返します。

  • 1 つまたは 2 つのターゲット クリティック Qtk(S,A;ϕtk) — 最適化の安定性を向上させるために、エージェントはターゲット クリティック パラメーター ϕtk を最新の対応するクリティック パラメーター値に周期的に設定します。ターゲット クリティックの数はクリティックの数と一致します。

Q1(S,A;ϕ1) と Q2(S,A;ϕ2) の 2 つのクリティックを使用する場合、各クリティックは異なる構造をもつことができます。クリティックが同じ構造をもつ場合、異なる初期パラメーター値をもたなければなりません。

各クリティック Qk(S,A;ϕk) と対応するターゲット クリティック Qtk(S,A;ϕtk) は、同じ構造とパラメーター表現をもたなければなりません。

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

学習が実行されている間、エージェントは θ のパラメーター値を調整します。学習後、パラメーターは調整された値のままになり、学習済みのアクター関数近似器が π(A|S) に保存されます。

アクションの生成

SAC エージェントのアクターは、平均値と標準偏差の出力を生成します。アクションを選択するために、アクターはまずこれらのパラメーターをもつガウス分布から非有界アクションをランダムに選択します。学習が実行されている間、SAC エージェントは非有界の確率分布を使用して、特定の観測値に対する方策のエントロピーを計算します。

SAC エージェントが有界アクションを生成する必要がある場合、アクターは、ガウス分布からサンプリングされた非有界アクションに "tanh" 演算と "スケーリング" 演算を適用することにより、有界アクションを生成します。

Generation of a bounded action from an unbounded action randomly selected from a Gaussian distribution

エージェントの作成

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

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

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

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

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

  4. 必要に応じて、rlSACAgentOptions オブジェクトを使用してエージェント オプションを指定します。

  5. rlSACAgent オブジェクトを使用してエージェントを作成します。

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

  1. rlContinuousGaussianActor オブジェクトを使用して確率的アクターを作成します。SAC エージェントの場合、平均値を目的のアクション範囲に適切にスケーリングするために、アクター ネットワークには、平均値の出力パスの最後の 2 つの層として tanhLayerscalingLayer が含まれていてはなりません。ただし、標準偏差値が確実に非負となるように、アクター ネットワークには、標準偏差値の出力パスの最後の層として reluLayer を含めなければなりません。

  2. rlQValueFunction オブジェクトを使用して 1 つまたは 2 つのクリティックを作成します。

  3. rlSACAgentOptions オブジェクトを使用してエージェント オプションを指定します。

  4. rlSACAgent オブジェクトを使用してエージェントを作成します。

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

学習アルゴリズム

SAC エージェントは以下の学習アルゴリズムを使用し、アクターとクリティックのモデルとエントロピーの重みを定期的に更新します。学習アルゴリズムを構成するには、rlSACAgentOptions オブジェクトを使用してオプションを指定します。ここで、K = 2 はクリティックの数、k はクリティックのインデックスです。

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

  • アクター π(S;θ) をランダムなパラメーター値 θ で初期化する。

  • π(S) の初期ランダム方策に従って一連のアクションを実行して、ウォーム スタートを実行する。アクションごとに、経験を経験バッファーに保存する。ウォームアップ アクションの数を指定するには、NumWarmStartSteps オプションを使用する。

  • 各学習タイム ステップについて、次のようにする。

    1. 現在の観測値 S に対して、π(S;θ) の方策を使用してアクション A を選択します。

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

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

    4. 経験バッファーから M 個の経験 (Si,Ai,Ri,S'i) のランダムなミニバッチをサンプリングします。M を指定するには、MiniBatchSize オプションを使用します。

    5. DC タイム ステップごとに、すべてのサンプリングされた経験にわたる損失 Lk を最小化して、各クリティック パラメーターを更新します。DC を指定するには、LearningFrequency オプションを使用します。

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

      S'i が終了状態の場合、価値関数のターゲット yi は経験報酬 Ri に等しくなります。それ以外の場合、価値関数のターゲットは、Ri、クリティックからの将来の最小割引報酬、および重み付きエントロピーの合計になります。

      yid=Ri+γmink(j=1Ndπd(Ajd'|Si';θ)Qtk(Si',Ajd';ϕtk))αdj=1Ndπd(Ajd'|Si';θ)lnπd(Ajd'|Si';θ)yic=Ri+γmink(Qtk(Si',Aic';ϕtk))αclnπc(Aic'|Si';θ)yih=Ri+γmink(j=1Ndπd(Ajd'|Si';θ)Qtk(Si',Ajd',Aic';ϕtk))αdj=1Ndπd(Ajd'|Si';θ)lnπd(Ajd'|Si';θ)αclnπc(Aic'|Si';θ)

      ここで、以下となります。

      • A'i は、アクター π(S'i) の非有界出力から派生させた有界アクションです。

      • γ は割引率であり、DiscountFactor オプションを使用して指定します。

      • は、状態 S にあるときのアクターの出力範囲の重み付き方策エントロピーです。α は、EntropyLossWeight オプションを使用して指定するエントロピー損失の重みです。

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

    6. DA タイム ステップごとに、次の目的関数を最小化して、アクターのパラメーターを更新します。DA を設定するには、LearningFrequency オプションと PolicyUpdateFrequency オプションの両方を使用します。

      Jπd=1Mi=1M(mink(j=1Ndπd(Ajd|Si;θ)Qtk(Si,Ajd;ϕtk))+αdj=1Ndπd(Ajd|Si;θ)lnπd(Ajd|Si;θ))Jπc=1Mi=1M(mink(Qk(Si,Aic;ϕk))+αclnπc(Aic|Si;θ))Jπh=1Mi=1M(mink(j=1Ndπd(Ajd|Si;θ)Qtk(Si,Ajd,Aic;ϕtk))+αdj=1Ndπd(Ajd|Si;θ)lnπd(Ajd|Si;θ)+αclnπc(Aic|Si;θ))

    7. DA タイム ステップごとに、次の損失関数を最小化して、エントロピーの重みも更新します。

      Lαd=1Mi=1M(αdj=1Ndπd(Ajd|Si;θ)lnπd(Ajd|Si;θ)αdd)Lαc=1Mi=1M(αclnπc(Aic|Si;θ)αcc)

      ここで、 はターゲット エントロピーであり、EntropyWeightOptions.TargetEntropy オプションを使用して指定します。

    8. DT ステップごとに、ターゲットの更新方法に応じてターゲット クリティックを更新します。DT を指定するには、TargetUpdateFrequency オプションを使用します。詳細については、ターゲットの更新方法を参照してください。

    9. ステップ 4 ~ 8 を NG 回繰り返します。ここで、NG は勾配ステップの数であり、NumGradientStepsPerUpdate オプションを使用して指定します。

ターゲットの更新方法

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

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

    ϕtk=τϕk+(1τ)ϕtk

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

    ϕtk=ϕk

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

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

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

参照

[1] Haarnoja, Tuomas, Aurick Zhou, Kristian Hartikainen, George Tucker, Sehoon Ha, Jie Tan, Vikash Kumar, et al. "Soft Actor-Critic Algorithms and Application." Preprint, submitted January 29, 2019. https://arxiv.org/abs/1812.05905.

参考

オブジェクト

関連する例

詳細