このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
accelerate
accelerate
は推奨されません。代わりに、損失関数で dlaccelerate
を使用してください。詳細については、accelerate は非推奨を参照してください。
説明
は、元のオブジェクト newAppx
= accelerate(oldAppx
,useAcceleration
)oldAppx
と同じ構成をもち、勾配計算を高速化するオプションが logical 値 useAcceleration
に設定された、新しいニューラルネットワークベースの関数近似器オブジェクト newAppx
を返します。
例
観測仕様およびアクション仕様オブジェクトを作成します (または、getObservationInfo
および getActionInfo
を使用して、環境から仕様オブジェクトを抽出します)。この例では、2 つのチャネルをもつ観測空間を定義します。最初のチャネルは、連続した 4 次元空間からの観測値を搬送します。2 番目は、0 または 1 のいずれかになる離散スカラー観測値を搬送します。最後に、行動空間は連続行動空間内の 3 次元ベクトルです。
obsInfo = [rlNumericSpec([4 1]) rlFiniteSetSpec([0 1])]; actInfo = rlNumericSpec([3 1]);
クリティック内で Q 値関数を近似するには、再帰型深層ニューラル ネットワークを作成します。出力層は、観測値に基づいてアクションを実行する値を表すスカラーでなければなりません。
各ネットワーク パスを layer オブジェクトの配列として定義します。環境仕様オブジェクトから観測空間と行動空間の次元を取得し、入力層の名前を指定して、後で適切な環境チャネルに明示的に関連付けることができるようにします。ネットワークは再帰型であるため、入力層として sequenceInputLayer
を使用し、他のネットワーク層の 1 つとして lstmLayer
を含めます。
% Define paths inPath1 = [ sequenceInputLayer( ... prod(obsInfo(1).Dimension), ... Name="netObsIn1") fullyConnectedLayer(5,Name="infc1") ]; inPath2 = [ sequenceInputLayer( ... prod(obsInfo(2).Dimension), ... Name="netObsIn2") fullyConnectedLayer(5,Name="infc2") ]; inPath3 = [ sequenceInputLayer( ... prod(actInfo(1).Dimension), ... Name="netActIn") fullyConnectedLayer(5,Name="infc3") ]; % Concatenate 3 previous layer outputs along dim 1 jointPath = [ concatenationLayer(1,3,Name="cct") tanhLayer lstmLayer(8,"OutputMode","sequence") fullyConnectedLayer(1,Name="jntfc") ];
dlnetwork
オブジェクトを組み立てます。
net = dlnetwork; net = addLayers(net,inPath1); net = addLayers(net,inPath2); net = addLayers(net,inPath3); net = addLayers(net,jointPath);
層を接続します。
net = connectLayers(net,"infc1","cct/in1"); net = connectLayers(net,"infc2","cct/in2"); net = connectLayers(net,"infc3","cct/in3");
ネットワークをプロットします。
plot(net)
ネットワークを初期化し、重みの数を表示します。
net = initialize(net); summary(net)
Initialized: true Number of learnables: 832 Inputs: 1 'netObsIn1' Sequence input with 4 dimensions 2 'netObsIn2' Sequence input with 1 dimensions 3 'netActIn' Sequence input with 3 dimensions
ネットワーク、観測仕様オブジェクト、およびアクション仕様オブジェクトを使用して、rlQValueFunction
でクリティックを作成します。
critic = rlQValueFunction(net, ... obsInfo, ... actInfo, ... ObservationInputNames=["netObsIn1","netObsIn2"], ... ActionInputNames="netActIn");
現在の観測値の関数としてアクションの値を返すには、getValue
または evaluate
を使用します。
val = evaluate(critic, ... { rand(obsInfo(1).Dimension), ... rand(obsInfo(2).Dimension), ... rand(actInfo(1).Dimension) })
val = 1×1 cell array
{[0.0089]}
evaluate
を使用すると、結果は、観測値に基づいて入力内のアクションの値が格納された単一要素の cell 配列になります。
val{1}
ans = single
0.0089
ランダムな観測値が与えられた場合、入力に対する 3 つの出力の合計の勾配を計算します。
gro = gradient(critic,"output-input", ... { rand(obsInfo(1).Dimension) , ... rand(obsInfo(2).Dimension) , ... rand(actInfo(1).Dimension) } )
gro=3×1 cell array
{4×1 single}
{[ -0.0945]}
{3×1 single}
結果は、入力チャネルの数と同じ数の要素をもつ cell 配列になります。各要素には、入力チャネルの各コンポーネントに関する出力の合計の微分が格納されます。2 番目のチャネルの要素に対する勾配を表示します。
gro{2}
ans = single
-0.0945
それぞれが 9 つの連続した観測値で構成される 5 つの独立したシーケンスに関する勾配を取得します。
gro_batch = gradient(critic,"output-input", ... { rand([obsInfo(1).Dimension 5 9]) , ... rand([obsInfo(2).Dimension 5 9]) , ... rand([actInfo(1).Dimension 5 9]) } )
gro_batch=3×1 cell array
{4×1×5×9 single}
{1×1×5×9 single}
{3×1×5×9 single}
4 番目の独立したバッチ内の 7 番目の連続観測値の後にある、最初の入力チャネルの 3 番目の観測要素に対する出力の合計の微分を表示します。
gro_batch{1}(3,1,4,7)
ans = single
0.0693
勾配計算を高速化するためのオプションを設定します。
critic = accelerate(critic,true);
ランダムな観測値が与えられた場合、パラメーターに対する出力の合計の勾配を計算します。
grp = gradient(critic,"output-parameters", ... { rand(obsInfo(1).Dimension) , ... rand(obsInfo(2).Dimension) , ... rand(actInfo(1).Dimension) } )
grp=11×1 cell array
{ 5×4 single }
{ 5×1 single }
{ 5×1 single }
{ 5×1 single }
{ 5×3 single }
{ 5×1 single }
{32×15 single }
{32×8 single }
{32×1 single }
{[-0.0140 -0.0424 -0.0676 -0.0266 -0.0166 -0.0915 0.0405 0.0315]}
{[ 1]}
cell 内の各配列には、パラメーターのグループに関する出力の合計の勾配が格納されます。
grp_batch = gradient(critic,"output-parameters", ... { rand([obsInfo(1).Dimension 5 9]) , ... rand([obsInfo(2).Dimension 5 9]) , ... rand([actInfo(1).Dimension 5 9]) } )
grp_batch=11×1 cell array
{ 5×4 single }
{ 5×1 single }
{ 5×1 single }
{ 5×1 single }
{ 5×3 single }
{ 5×1 single }
{32×15 single }
{32×8 single }
{32×1 single }
{[-2.0333 -10.3220 -10.6084 -1.2850 -4.4681 -8.0848 9.0716 3.0989]}
{[ 45]}
入力のバッチを使用する場合、gradient
は入力シーケンス全体 (この場合は 9 つのステップ) を使用し、独立したバッチ次元 (この場合は 5 つ) に関するすべての勾配が合計されます。したがって、返される勾配のサイズは常にgetLearnableParameters
からの出力と同じになります。
観測仕様およびアクション仕様オブジェクトを作成します (または、getObservationInfo
および getActionInfo
を使用して、環境から仕様オブジェクトを抽出します)。この例では、2 つのチャネルをもつ観測空間を定義します。最初のチャネルは、連続した 4 次元空間からの観測値を搬送します。2 番目は、0 または 1 のいずれかになる離散スカラー観測値を搬送します。最後に、行動空間は -1
、0
、または 1
になるスカラーで構成されます。
obsInfo = [rlNumericSpec([4 1]) rlFiniteSetSpec([0 1])]; actInfo = rlFiniteSetSpec([-1 0 1]);
アクター内の近似モデルとして使用する深層ニューラル ネットワークを作成します。出力層には 3 つの要素が必要であり、各要素は観測値に基づいて対応するアクションを実行する値を表します。再帰型ニューラル ネットワークを作成するには、入力層として sequenceInputLayer
を使用し、他のネットワーク層の 1 つとして lstmLayer
を含めます。
% Define paths inPath1 = [ sequenceInputLayer(prod(obsInfo(1).Dimension)) fullyConnectedLayer(prod(actInfo.Dimension),Name="fc1") ]; inPath2 = [ sequenceInputLayer(prod(obsInfo(2).Dimension)) fullyConnectedLayer(prod(actInfo.Dimension),Name="fc2") ]; % Concatenate previous paths outputs along first dimension jointPath = [ concatenationLayer(1,2,Name="cct") tanhLayer lstmLayer(8,OutputMode="sequence") fullyConnectedLayer( ... prod(numel(actInfo.Elements)), ... Name="jntfc") ]; % Assemble dlnetwork object net = dlnetwork; net = addLayers(net,inPath1); net = addLayers(net,inPath2); net = addLayers(net,jointPath); % Connect layers net = connectLayers(net,"fc1","cct/in1"); net = connectLayers(net,"fc2","cct/in2"); % Plot network plot(net)
% initialize network and display the number of weights.
net = initialize(net);
summary(net)
Initialized: true Number of learnables: 386 Inputs: 1 'sequenceinput' Sequence input with 4 dimensions 2 'sequenceinput_1' Sequence input with 1 dimensions
出力層の各要素は、可能なアクションの 1 つを実行する確率を表す必要があるため、明示的に指定しなかった場合、ソフトウェアによって最終出力層として softmaxLayer
が自動的に追加されます。
ネットワーク、観測仕様オブジェクト、およびアクション仕様オブジェクトを使用して、rlDiscreteCategoricalActor
でアクターを作成します。ネットワークに複数の入力層がある場合、それらは obsInfo
の次元仕様に従って環境観測チャネルに自動的に関連付けられます。
actor = rlDiscreteCategoricalActor(net, obsInfo, actInfo);
それぞれの可能なアクションの確率のベクトルを返すには、evaluate
を使用します。
[prob,state] = evaluate(actor, ... { rand(obsInfo(1).Dimension) , ... rand(obsInfo(2).Dimension) }); prob{1}
ans = 3x1 single column vector
0.3403
0.3114
0.3483
分布からサンプリングされたアクションを返すには、getAction
を使用します。
act = getAction(actor, ... { rand(obsInfo(1).Dimension) , ... rand(obsInfo(2).Dimension) }); act{1}
ans = 1
勾配計算を高速化するためのオプションを設定します。
actor = accelerate(actor,true);
cell 内の各配列には、パラメーターのグループに関する出力の合計の勾配が格納されます。
grp_batch = gradient(actor,"output-parameters", ... { rand([obsInfo(1).Dimension 5 9]) , ... rand([obsInfo(2).Dimension 5 9])} )
grp_batch=9×1 cell array
{[-3.1996e-09 -4.5687e-09 -4.4820e-09 -4.6439e-09]}
{[ -1.1544e-08]}
{[ -1.1321e-08]}
{[ -2.8436e-08]}
{32x2 single }
{32x8 single }
{32x1 single }
{ 3x8 single }
{ 3x1 single }
入力のバッチを使用する場合、gradient
は入力シーケンス全体 (この場合は 9 つのステップ) を使用し、独立したバッチ次元 (この場合は 5 つ) に関するすべての勾配が合計されます。したがって、返される勾配のサイズは常にgetLearnableParameters
からの出力と同じになります。
入力引数
関数近似器オブジェクト。次のいずれかとして指定します。
rlValueFunction
オブジェクト — 価値関数クリティックrlQValueFunction
オブジェクト — Q 値関数クリティックrlVectorQValueFunction
オブジェクト — 離散行動空間をもつ多出力 Q 値関数クリティックrlContinuousDeterministicActor
オブジェクト — 連続行動空間をもつ決定論的方策アクターrlDiscreteCategoricalActor
— 離散行動空間をもつ確率的方策アクターrlContinuousGaussianActor
オブジェクト — 連続行動空間をもつ確率的方策アクターrlContinuousDeterministicTransitionFunction
オブジェクト — モデル ベース エージェントの連続決定論的遷移関数rlContinuousGaussianTransitionFunction
オブジェクト — モデル ベース エージェントの連続ガウス遷移関数rlContinuousDeterministicRewardFunction
オブジェクト — モデル ベース エージェントの連続決定論的報酬関数rlContinuousGaussianRewardFunction
オブジェクト — モデル ベース エージェントの連続ガウス報酬関数。rlIsDoneFunction
オブジェクト — モデル ベース エージェントの is-done 関数。
勾配計算に高速化を使用するオプション。logical 値として指定します。useAcceleration
が true
の場合、自動微分計算グラフに必要な一部の入力が最適化され、キャッシュされることにより、勾配計算が高速化されます。詳細については、Deep Learning Function Acceleration for Custom Training Loopsを参照してください。
出力引数
新しいアクターまたはクリティック。近似器オブジェクトとして返されます。oldAppx
と同じ型をもちますが、勾配高速化オプションは useAcceleration
に設定されます。
バージョン履歴
R2022a で導入accelerate
は推奨されなくなりました。
関数近似器オブジェクトの勾配計算を高速化するには、accelerate
を使用する代わりに、損失関数で dlaccelerate
を使用してください。その後、dlaccelerate
によって返された AcceleratedFunction
オブジェクトに対して dlfeval
を使用します。
このワークフローを次の表に示します。
accelerate :非推奨 | dlaccelerate :推奨 |
---|---|
actor = accelerate(actor,true); g = gradient(actor,@customLoss,u); g{1} function loss = customLoss(y,varargin) loss = sum(y{1}.^2); | f = dlaccelerate(@customLoss); g = dlfeval(@customLoss,actor,dlarray(u)); g{1} function g = customLoss(actor,u) y = evaluate(actor,u); loss = sum(y{1}.^2); g = dlgradient(loss,actor.Learnables); |
詳細については、gradient is not recommendedも参照してください。
カスタム深層学習の学習ループに dlarray
オブジェクトを使用する方法の詳細については、dlfeval
、AcceleratedFunction
、dlaccelerate
を参照してください。
例については、Train Reinforcement Learning Policy Using Custom Training LoopおよびCustom Training Loop with Simulink Action Noiseを参照してください。
参考
関数
オブジェクト
AcceleratedFunction
|rlValueFunction
|rlQValueFunction
|rlVectorQValueFunction
|rlContinuousDeterministicActor
|rlDiscreteCategoricalActor
|rlContinuousGaussianActor
|rlContinuousDeterministicTransitionFunction
|rlContinuousGaussianTransitionFunction
|rlContinuousDeterministicRewardFunction
|rlContinuousGaussianRewardFunction
|rlIsDoneFunction
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)