深層 Q ネットワーク (DQN) エージェント
深層 Q ネットワーク (DQN) アルゴリズムは、離散行動空間をもつ環境向けの Off-Policy 強化学習手法です。DQN エージェントは、最適な方策に従う場合に予想される割引累積長期報酬を推定するために Q 値関数に学習させます。DQN は、ターゲット クリティックと経験バッファーを特徴とする Q 学習のバリアントです。DQN エージェントは、オフライン学習 (環境なしで保存されたデータからの学習) をサポートします。Q 学習の詳細については、Q 学習エージェントを参照してください。さまざまな種類の強化学習エージェントの詳細については、強化学習エージェントを参照してください。
Reinforcement Learning Toolbox™ において、DQN エージェントは rlDQNAgent オブジェクトによって実装されます。
DQN エージェントは、次の観測空間と行動空間をもつ環境で学習させることができます。
| 観測空間 | 行動空間 |
|---|---|
| 連続または離散 | 離散 |
DQN エージェントは次のクリティックを使用します。
| クリティック | アクター |
|---|---|
Q 値関数クリティック Q(S,A)。 | DQN エージェントはアクターを使用しません。 |
学習が実行されている間、エージェントは次を行います。
学習時に各タイム ステップでクリティックの学習可能なパラメーターを更新する。
ε-greedy 探索を使用して行動空間を探索する。各制御間隔中に、エージェントは確率 ϵ でランダムなアクションを選択するか、確率 1-ϵ で行動価値関数に関して貪欲にアクションを選択します。貪欲なアクションは、行動価値関数が最大となるアクションです。
リング経験バッファーを使用して過去の経験を保存する。エージェントは、バッファーからランダムにサンプリングされた経験のミニバッチに基づいてクリティックを更新します。
DQN エージェントが使用するクリティック
最適な方策の価値を推定するために、DQN エージェントは 2 つのパラメーター化された行動価値関数を使用します。各関数は、対応するクリティックによって維持されます。
クリティック Q(S,A;ϕ) — 観測値 S とアクション A が与えられた場合、このクリティックは、最適な方策に従った場合の割引累積長期報酬の期待値の対応する推定値を保存します (これは最適な方策の価値です)。
ターゲット クリティック Qt(S,A;ϕt) — 最適化の安定性を向上させるために、エージェントは最新のクリティック パラメーター値を使用してターゲット クリティックの学習可能なパラメーター ϕt を周期的に更新します。
Q(S,A;ϕ) と Qt(S,A;ϕt) は両方とも、同じ構造とパラメーター表現をもつ関数近似器オブジェクトによって実装されます。学習が実行されている間、学習アルゴリズムはクリティックのパラメーター値を調整して、行動価値関数の推定を改善します。学習後は、学習済みエージェント内部のクリティックにおいて、調整されたパラメーター値が維持されます。
クリティックの詳細については、Create Policies and Value Functionsを参照してください。
DQN エージェントの作成
DQN エージェントの作成および学習は、MATLAB® コマンド ラインまたは強化学習デザイナー アプリを使用して行うことができます。強化学習デザイナーを使用したエージェントの作成の詳細については、Create Agents Using Reinforcement Learning Designerを参照してください。
コマンド ラインで、環境からの観測仕様とアクション仕様に基づいて既定の DQN エージェントを作成できます。既定の DQN エージェントは、深層ニューラル ネットワーク モデルに依存する関数の既定の近似器を使用します。これを行うには、次の手順を実行します。
環境用の観測仕様を作成します。既に環境オブジェクトがある場合は、
getObservationInfoを使用してこの仕様を取得できます。環境用のアクション仕様を作成します。既に環境オブジェクトがある場合は、
getActionInfoを使用してこの仕様を取得できます。必要に応じて、それぞれの学習可能なパラメーター層のニューロンの数 (既定は 256 ニューロン)、または LSTM 層を使用するかどうか (既定では LSTM 層は使用されない) を指定します。これを行うには、
rlAgentInitializationOptionsを使用してエージェント初期化オプション オブジェクトを作成します。必要に応じて、
rlDQNAgentOptionsオブジェクトを使用してエージェント オプションを指定します。あるいは、この手順をスキップし、後でドット表記を使用してエージェント オプションを変更することもできます。rlDQNAgentを使用してエージェントを作成します。
あるいは、クリティックを作成し、それを使用してエージェントを作成することもできます。この場合、クリティック内の観測層とアクション層の次元が、その環境の対応するアクション仕様および観測仕様と確実に一致するようにしてください。
環境用の観測仕様を作成します。既に環境オブジェクトがある場合は、
getObservationInfoを使用してこの仕様を取得できます。環境用のアクション仕様を作成します。既に環境オブジェクトがある場合は、
getActionInfoを使用してこの仕様を取得できます。クリティックの近似モデルを作成します。問題のタイプと次の手順で使用する特定のクリティックに応じて、このモデルは
rlTableオブジェクト (離散観測空間のみ)、初期パラメーター値をもつカスタム基底関数、またはニューラル ネットワーク オブジェクトになります。作成するモデルの入力と出力は、次の手順で使用するクリティックのタイプによって異なります。rlQValueFunctionまたはrlVectorQValueFunctionを使用してクリティックを作成します。前の手順で作成したモデルを最初の入力引数として使用します。rlDQNAgentOptionsオブジェクトを使用してエージェント オプションを指定します。あるいは、この手順をスキップし、後でドット表記を使用してエージェント オプションを変更することもできます。rlDQNAgentを使用してエージェントを作成します。
DQN エージェントは、再帰型深層ニューラル ネットワークを関数近似器として使用するクリティックをサポートします。
関数近似のためのアクターとクリティックの作成の詳細については、Create Policies and Value Functionsを参照してください。
DQN 学習アルゴリズム
DQN エージェントは以下の学習アルゴリズムを使用し、タイム ステップごとにクリティック モデルを更新します。学習アルゴリズムを構成するには、rlDQNAgentOptions オブジェクトを使用してオプションを指定します。
クリティック Q(s,a;ϕ) をランダムなパラメーター値 ϕ で初期化し、同じ値でターゲット クリティック パラメーター ϕt を初期化する ()。
ε-greedy 方策に従って一連のアクションを実行し、ウォーム スタートを実行します。
各エピソードの始めに、環境からの初期観測値を取得します。
現在の観測値 S に対して、確率 ϵ でのランダム アクション A を選択します。それ以外の場合は、クリティック価値関数が最大となるアクションを選択します。
ϵ とその減衰率を指定するには、
EpsilonGreedyExplorationオプションを使用します。アクション A を実行します。報酬 R と次の観測値 S' を観測します。
経験 (S,A,R,S') を経験バッファーに保存します。
ϵ が最小値より大きい場合、
EpsilonGreedyExplorationで説明されているように減衰演算を実行します。
経験バッファーのサイズを指定するには、エージェントの
rlDQNAgentOptionsオブジェクトのExperienceBufferLengthオプションを使用します。ウォームアップ アクションの数を指定するには、NumWarmStartStepsオプションを使用します。ウォーム スタートの手順の後、各学習タイム ステップで次のようにします。
ウォーム スタートの手順で説明した 5 つの操作を実行します。
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 で説明) は、各エピソードが終了した後に実行されます。
ミニバッチ学習操作
各ミニバッチに対して実行される操作は次のとおりです。
EpsilonGreedyExplorationオプションで指定した減衰率に基づいて、ランダム アクションを選択するための確率しきい値 ϵ を更新します。サンプリングされたすべての経験にわたって損失 Lk を 1 ステップで最小化し、クリティック パラメーターを更新します。
Lk を最小化するために使用されるオプティマイザー オプションを指定するには、
CriticOptimizerOptionsオプション (これにrlOptimizerOptionsオブジェクトが格納されている) に格納されているオプションを使用します。エージェントが再帰型ニューラル ネットワークを含む場合、各バッチ要素の和は、それ自体が時間 (シーケンス) 次元の和になります。
S'i が終了状態の場合、価値関数のターゲット yi を Ri に設定します。それ以外の場合、次のように設定します。
ここで、通常の DQN アルゴリズムはターゲット クリティックによって維持される行動価値関数を最大化するアクションを選択しますが、double DQN アルゴリズムはベース クリティックによって維持される行動価値関数を最大化するアクションを選択します。
割引係数 γ を設定するには、
DiscountFactorオプションを使用します。double DQN を使用するには、UseDoubleDQNオプションをtrueに設定します。NumStepsToLookAheadの値を N に等しいと指定した場合、N ステップの収益 (次の N ステップの報酬と、N 番目の報酬を発生させた状態の割引推定値を加算したもの) がターゲット yi の計算に使用されます。クリティックの更新
TargetUpdateFrequency回ごとに、ターゲット更新方法に応じて、ターゲットとなるクリティックのパラメーターを更新します。詳細については、ターゲットの更新方法を参照してください。
ターゲットの更新方法
DQN エージェントは、以下のターゲット更新方法のいずれかを使用して、ターゲットとなるクリティックのパラメーターを更新します。
平滑化 — 平滑化係数 τ を使用して、タイム ステップごとにターゲット パラメーターを更新します。平滑化係数を指定するには、
TargetSmoothFactorオプションを使用します。周期的 — 平滑化なしでターゲット パラメーターを周期的に更新します (
TargetSmoothFactor = 1)。更新期間を指定するには、TargetUpdateFrequencyパラメーターを使用します。周期的平滑化 — 平滑化を使用してターゲット パラメーターを周期的に更新します。
ターゲット更新方法を構成するには、rlDQNAgentOptions オブジェクトを作成し、次の表に示すように TargetUpdateFrequency パラメーターと TargetSmoothFactor パラメーターを設定します。
| 更新方法 | TargetUpdateFrequency | TargetSmoothFactor |
|---|---|---|
| 平滑化 (既定) | 1 | 1 未満 |
| 周期的 | 1 より大きい | 1 |
| 周期的平滑化 | 1 より大きい | 1 未満 |
参照
[1] Mnih, Volodymyr, Koray Kavukcuoglu, David Silver, Alex Graves, Ioannis Antonoglou, Daan Wierstra, and Martin Riedmiller. “Playing Atari with Deep Reinforcement Learning.” ArXiv:1312.5602 [Cs], December 19, 2013. https://arxiv.org/abs/1312.5602.
参考
オブジェクト
rlDQNAgent|rlDQNAgentOptions|rlQValueFunction|rlVectorQValueFunction|rlQAgent|rlSARSAAgent|rlLSPIAgent