Main Content

強化学習エージェントを使用した二足歩行ロボットの学習

この例では、深層決定方策勾配 (DDPG) エージェントと双生遅延深層決定方策勾配 (TD3) エージェントの両方を使用して、二足歩行ロボットに歩行を学習させる方法を説明します。この例ではそれらの学習済みエージェントの性能の比較も行います。この例で使用するロボットは、Simscape™ Multibody™ でモデル化されています。

これらのエージェントの詳細については、Deep Deterministic Policy Gradient (DDPG) Agents (Reinforcement Learning Toolbox)およびTwin-Delayed Deep Deterministic Policy Gradient Agents (Reinforcement Learning Toolbox)を参照してください。

この例では比較のために、同じモデル パラメーターをもつ二足歩行ロボット環境上で両方のエージェントに学習させます。この例では、次の設定が同じになるようにエージェントを構成します。

  • 二足歩行ロボットの初期条件の決定手法

  • [1] からヒントを得た、アクターとクリティックのネットワーク構造

  • アクター表現とクリティック表現のオプション

  • 学習オプション (サンプル時間、割引係数、ミニバッチ サイズ、経験バッファー長、探査ノイズ)

二足歩行ロボット モデル

この例では、二足歩行ロボットを強化学習の環境として使用します。学習の目標は、最小限の制御量を使用して、ロボットを直進歩行させることです。

モデルのパラメーターを MATLAB® ワークスペースに読み込みます。

robotParametersRL

Simulink モデルを開きます。

mdl = 'rlWalkingBipedRobot';
open_system(mdl)

ロボットは Simscape Multibody を使用してモデル化されています。

このモデルの場合、次のようにします。

  • 中立の 0 rad の位置では、両脚はまっすぐで足は平らになっているものとする。

  • 足の接触はSpatial Contact Force (Simscape Multibody)ブロックを使用してモデル化する。

  • エージェントは、-33 N·m のトルク信号を与えることで、ロボットの両脚の 3 つの独立した関節 (足関節、膝関節、および股関節) を制御できるものとする。実際に計算されたアクション信号は、-11 の範囲で正規化する。

この環境は、以下に示す 29 個の観測値をエージェントに提供します。

  • 胴体重心の Y 方向 (横方向) および Z 方向 (垂直方向) の平行移動。Z 方向の平行移動は、他の観測値と同様の範囲で正規化。

  • X 方向 (進行方向)、Y 方向 (横方向)、および Z 方向 (垂直方向) の平行移動速度。

  • 胴体のヨー角、ピッチ角、ロール角。

  • 胴体のヨー角速度、ピッチ角速度、ロール角速度。

  • 両脚の 3 つの関節 (足、膝、股関節) の角度位置と角速度。

  • 前のタイム ステップからのアクション値。

エピソードは、次のいずれかの条件が発生したときに終了します。

  • ロボットの胴体重心が、Z 方向に 0.1 m 未満になる (ロボットが落下) か、Y のいずれかの方向に 1 m を超えている (ロボットが過度に横に移動)。

  • ロール角、ピッチ角、ヨー角のいずれかの絶対値が 0.7854 rad を超えている。

各タイム ステップで与えられる以下の報酬関数 rt は、[2] からヒントを得ています。

rt=vx-3y2-50zˆ2+25TsTf-0.02iut-1i2

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

  • vx は、X 方向 (目標に向かう方向) におけるロボットの平行移動速度。

  • y は、目標の直線軌跡からのロボットの横方向の平行移動変位。

  • zˆ は、ロボットの重心の正規化された垂直方向の平行移動変位。

  • ut-1i は、前のタイム ステップにおける関節 i のトルク。

  • Ts は、環境のサンプル時間。

  • Tf は、環境の最終シミュレーション時間。

この報酬関数は、進行方向の正の速度に対して正の報酬を与えることで、エージェントに前進するよう推奨します。また、この関数は、タイム ステップごとに一定の報酬 (25TsTf) を与えることで、エピソードの終了を回避するようエージェントに推奨します。報酬関数に含まれるその他の項は、横方向および垂直方向の平行移動量の著しい変化に対するペナルティ、および過剰な制御操作に対するペナルティです。

環境インターフェイスの作成

観測値の仕様を作成します。

numObs = 29;
obsInfo = rlNumericSpec([numObs 1]);
obsInfo.Name = 'observations';

アクションの仕様を作成します。

numAct = 6;
actInfo = rlNumericSpec([numAct 1],'LowerLimit',-1,'UpperLimit',1);
actInfo.Name = 'foot_torque';

歩行ロボット モデルの環境インターフェイスを作成します。

blk = [mdl,'/RL Agent'];
env = rlSimulinkEnv(mdl,blk,obsInfo,actInfo);
env.ResetFcn = @(in) walkerResetFcn(in,upper_leg_length/100,lower_leg_length/100,h/100);

学習用のエージェントの選択と作成

この例では、DDPG エージェントまたは TD3 エージェントを使用してロボットに学習させるオプションを示します。好みのエージェントを使用してロボットをシミュレートするには、AgentSelection フラグを適宜設定します。

AgentSelection = 'TD3';
switch AgentSelection
    case 'DDPG'
        agent = createDDPGAgent(numObs,obsInfo,numAct,actInfo,Ts);
    case 'TD3'
        agent = createTD3Agent(numObs,obsInfo,numAct,actInfo,Ts);
    otherwise
        disp('Enter DDPG or TD3 for AgentSelection')
end

補助関数 createDDPGAgent および createTD3Agent は、次のアクションを実行します。

  • アクター ネットワークとクリティック ネットワークの作成。

  • アクター表現とクリティック表現のオプションの指定。

  • 作成したネットワークと指定したオプションを使用したアクター表現とクリティック表現の作成。

  • エージェント固有のオプションの設定。

  • エージェントの作成。

DDPG エージェント

DDPG エージェントは、観測値とアクションが与えられると、クリティック値の関数表現を使用して長期報酬を近似します。DDPG エージェントは、観測値が与えられると、どのアクションを実行するかをアクター表現を使用して決定します。この例のアクター ネットワークとクリティック ネットワークは、[1] からヒントを得ています。

DDPG エージェントの作成の詳細については、補助関数 createDDPGAgent を参照してください。DDPG エージェントのオプション設定の詳細については、rlDDPGAgentOptions (Reinforcement Learning Toolbox)を参照してください。

深層ニューラル ネットワークの値関数表現の作成の詳細については、Create Policies and Value Functions (Reinforcement Learning Toolbox)を参照してください。DDPG エージェント用のニューラル ネットワークの作成例については、Train DDPG Agent to Control Double Integrator System (Reinforcement Learning Toolbox)を参照してください。

TD3 エージェント

TD3 エージェントは、観測値とアクションが与えられると、2 つのクリティック値の関数表現を使用して長期報酬を近似します。TD3 エージェントは、観測値が与えられると、どのアクションを実行するかをアクター表現を使用して決定します。このエージェントで使用されるアクター ネットワークとクリティック ネットワークの構造は、DDPG エージェントで使用されるものと同じです。

DDPG エージェントは、Q 値を過大に推定する場合があります。エージェントは Q 値を使用して方策 (アクター) を更新するため、結果として得られる方策は準最適となる可能性があり、学習誤差が累積して動作の逸脱につながることがあります。TD3 アルゴリズムは DDPG を拡張したもので、Q 値の過大推定を防いでロバスト性を向上させます [3]。

  • 2 つのクリティック ネットワーク — TD3 エージェントは、2 つのクリティック ネットワークをそれぞれ独立して学習し、関数の最小推定値を使用してアクター (方策) を更新します。これにより、後続のステップで誤差が累積され、Q 値が過大に推定されるのを防ぎます。

  • ターゲット方策ノイズの追加 — クリップされたノイズを価値関数に追加して、同様のアクションについて Q 関数の値を平滑化します。これにより、ノイズを含む推定値のシャープなピークを間違って学習するのを防ぎます。

  • 方策とターゲットの遅延付き更新 — TD3 エージェントで、アクター ネットワークの更新を遅らせて、方策を更新する前に Q 関数が誤差を減らす (必要なターゲットにさらに近づく) ための時間が得られるようにします。これにより、推定値の分散が抑制され、より高品質の方策更新が可能になります。

TD3 エージェントの作成の詳細については、補助関数 createTD3Agent を参照してください。TD3 エージェントのオプション設定の詳細については、rlTD3AgentOptions (Reinforcement Learning Toolbox)を参照してください。

学習オプションの指定とエージェントの学習

この例の場合、DDPG エージェントと TD3 エージェントの学習オプションは同じです。

  • 各学習セッションを 2000 個のエピソードに対して実行 (各エピソードの持続時間は最大 maxSteps タイム ステップ)。

  • Episode Manager のダイアログ ボックスに学習の進行状況を表示し (Plots オプションを設定)、コマンド ラインの表示を無効化 (Verbose オプションを設定)。

  • エピソードが最大数 (maxEpisodes) に達したときにのみ学習を終了。これにより、複数のエージェントについて学習セッション全体の学習曲線を比較することが可能。

詳細とその他のオプションについては、rlTrainingOptions (Reinforcement Learning Toolbox) を参照してください。

maxEpisodes = 2000;
maxSteps = floor(Tf/Ts);
trainOpts = rlTrainingOptions(...
    'MaxEpisodes',maxEpisodes,...
    'MaxStepsPerEpisode',maxSteps,...
    'ScoreAveragingWindowLength',250,...
    'Verbose',false,...
    'Plots','training-progress',...
    'StopTrainingCriteria','EpisodeCount',...
    'StopTrainingValue',maxEpisodes,...
    'SaveAgentCriteria','EpisodeCount',...
    'SaveAgentValue',maxEpisodes);

並列でエージェントに学習させるには、次の学習オプションを指定します。並列で学習させるには、Parallel Computing Toolbox™ が必要です。Parallel Computing Toolbox ソフトウェアがインストールされていない場合は、UseParallelfalse に設定します。

  • UseParallel オプションを true に設定。

  • エージェントの学習を並列かつ非同期に実行。

  • 32 ステップごとに、各ワーカーから並列プール クライアント (学習を開始する MATLAB® プロセス) に経験を送信。DDPG エージェントと TD3 エージェントは、経験をクライアントに送信するのにワーカーを必要とします。

trainOpts.UseParallel = true;
trainOpts.ParallelizationOptions.Mode = 'async';
trainOpts.ParallelizationOptions.StepsUntilDataIsSent = 32;
trainOpts.ParallelizationOptions.DataToSendFromWorkers = 'Experiences';

関数 train (Reinforcement Learning Toolbox) を使用して、エージェントに学習させます。このプロセスは計算量が多いので、各エージェントが処理を完了するのに数時間かかります。この例の実行時間を節約するために、doTrainingfalse に設定して事前学習済みのエージェントを読み込みます。自分でエージェントに学習させるには、doTraining true に設定します。並列学習にはランダム性が存在するため、以下のプロットとは異なる学習結果が期待できます。この事前学習済みのエージェントは、4 つのワーカーを使用して並列学習が行われています。

doTraining = false;
if doTraining    
    % Train the agent.
    trainingStats = train(agent,env,trainOpts);
else
    % Load a pretrained agent for the selected agent type.
    if strcmp(AgentSelection,'DDPG')
       load('rlWalkingBipedRobotDDPG.mat','agent')
    else
       load('rlWalkingBipedRobotTD3.mat','agent')
    end  
end

上記の学習曲線の例では、DDPG エージェントと TD3 エージェントの学習ステップあたりの平均時間がそれぞれ 0.11 秒と 0.12 秒です。DDPG では 1 つのクリティックが使用されるのに対し、TD3 は 2 つのクリティック ネットワークを更新するため、ステップあたりの学習時間が長くなります。

学習済みエージェントのシミュレーション

再現性をもたせるために、乱数発生器のシードを固定します。

rng(0)

学習済みエージェントのパフォーマンスを検証するには、二足歩行ロボット環境内でこのエージェントをシミュレートします。エージェントのシミュレーションの詳細については、rlSimulationOptions (Reinforcement Learning Toolbox) および sim (Reinforcement Learning Toolbox) を参照してください。

simOptions = rlSimulationOptions('MaxSteps',maxSteps);
experience = sim(env,agent,simOptions);

エージェントのパフォーマンスの比較

次に示すエージェントの比較では、毎回異なる乱数シードを使用して、各エージェントに 5 回学習させました。探査ノイズがランダムであり、並列学習にランダム性が存在するため、実行のたびに異なる学習曲線が得られます。エージェントの学習を複数回実行すると完了するまでに数日かかるため、この比較では事前学習済みのエージェントを使用します。

DDPG エージェントと TD3 エージェントについて、エピソードの報酬の平均と標準偏差 (上部プロット)、およびエピソードの Q0 値 (下部プロット) をプロットします。エピソードの Q0 値は、環境の初期観測値が与えられた場合の、各エピソード開始時における割引長期報酬のクリティック推定値です。適切に設計されたクリティックでは、エピソードの Q0 値が真の割引長期報酬に近づきます。

comparePerformance('DDPGAgent','TD3Agent')

学習曲線の比較プロットから、次がわかります。

  • DDPG エージェントは、より高速に (平均してエピソード番号 600 付近で) 学習を行いますが、局所的最小値にヒットします。TD3 は、最初は進行が遅いものの、Q 値の過大推定を回避するため、最終的には DDPG より高い報酬が得られます。

  • TD3 エージェントは、学習曲線の定常的な改善を示しており、これは DDPG エージェントと比べて安定性が高いことを示唆しています。

エピソードの Q0 の比較プロットから、次がわかります。

  • TD3 エージェントでは、(2000 個のエピソードに対する) 割引長期報酬のクリティック推定値が DDPG エージェントより低くなっています。この差が生じるのは、TD3 のアルゴリズムでは、2 つの Q 関数の最小値を使用してターゲットを更新するという保守的な手法を採用しているためです。ターゲットの更新が遅延されるため、この動作はさらに顕著になります。

  • これらの 2000 個のエピソードに対する TD3 の推定値は低いものの、DDPG エージェントとは異なり、TD3 エージェントではエピソードの Q0 値が定常的に増加することを示しています。

この例では、学習は 2000 エピソードで停止しています。学習期間をさらに長くすると、推定値が定常的に増加する TD3 エージェントは真の割引長期報酬に収束する可能性があります。

DDPG エージェントを使用してヒューマノイド ロボットに歩行を学習させる方法の別の例については、ヒューマノイド ウォーカーの学習 (Simscape Multibody)を参照してください。DDPG エージェントを使用して四足歩行ロボットに歩行を学習させる方法の例については、Quadruped Robot Locomotion Using DDPG Agent (Reinforcement Learning Toolbox)を参照してください。

参考文献

[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." Preprint, submitted July 5, 2019. https://arxiv.org/abs/1509.02971.

[2] Heess, Nicolas, Dhruva TB, Srinivasan Sriram, Jay Lemmon, Josh Merel, Greg Wayne, Yuval Tassa, et al. "Emergence of Locomotion Behaviours in Rich Environments." Preprint, submitted July 10, 2017. https://arxiv.org/abs/1707.02286.

[3] Fujimoto, Scott, Herke van Hoof, and David Meger. "Addressing Function Approximation Error in Actor-Critic Methods." Preprint, submitted October 22, 2018. https://arxiv.org/abs/1802.09477.

参考

(Reinforcement Learning Toolbox)

関連するトピック