記事「ニューラルネットワークが簡単に(第49回):Soft Actor-Critic」についてのディスカッション

 

新しい記事「ニューラルネットワークが簡単に(第49回):Soft Actor-Critic」はパブリッシュされました:

連続行動空間の問題を解決するための強化学習アルゴリズムについての議論を続けます。この記事では、Soft Actor-Critic (SAC)アルゴリズムについて説明します。SACの主な利点は、期待される報酬を最大化するだけでなく、行動のエントロピー(多様性)を最大化する最適な方策を見つけられることです。

この記事では、別のアルゴリズムであるSoft Actor-Critic (SAC)に焦点を当てます。このアルゴリズムは最初に「Soft Actor-Critic:Off-Policy Maximum Entropy Deep Reinforcement Learning with a Stochastic Actor」(2018年1月)稿で紹介されました。この手法はTD3とほぼ同時に発表されました。いくつかの類似点がありますが、アルゴリズムに違いもあります。SACの主な目標は、方策の最大エントロピーを考慮して期待される報酬を最大化することであり、これにより確率的環境でさまざまな最適な解を見つけることができます。

Soft Actor-Criticは、確率的方策を持つActorを使用します。これは、S状態のActorが特定のPa'確率で行動空間全体からA'行動を選択できることを意味します。言い換えれば、各特定の状態におけるActorの方策により、特定の最適な行動を1つ選択するのではなく、可能な行動のいずれかを(ただし、ある程度の確率で)選択することができます。訓練中に、Actorは最大の報酬を得る確率分布を学習します。

確率的Actor方策のこの特性により、さまざまな戦略を探索し、決定論的方策の使用時に隠れている可能性がある最適な解を発見することができます。さらに、確率的Actor方策では、環境の不確実性が考慮されます。ノイズやランダムな要因が発生した場合、そのような方策は環境と効果的に相互作用するさまざまな行動を生成できるため、より回復力と適応性が高くなります。

作者: Dmitriy Gizlyk

 
やあ、ディミトリー。

新しいNNシーケンスを発見したよ。<3

bool CreateDescriptions(CArrayObj*actor, CArrayObj *critic)
{
//---
CLayerDescription *descr;
//---
if(!actor)
{
actor = new CArrayObj();
if(!actor)
false を返します;
}
if(!critic)
{
critic = new CArrayObj();
if(!critic)
falseを返す;
}
//--- 俳優
アクター.Clear();
//--- 入力レイヤー
if(!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronBaseOCL;
int prev_count = descr.count = (HistoryBars * BarDescr);
descr.window = 0;
descr.activation=なし;
descr.optimisation = ADAM;
if(!actor.Add(descr))
{
descrを削除します;
false を返す;
}
//--- レイヤー1
if(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronBatchNormOCL;
descr.count = prev_count;
descr.batch = 1000;
descr.activation = なし;
descr.optimisation = ADAM;
if(!actor.Add(descr))
{
descrを削除します;
false を返す;
}
//--- レイヤー2
if(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronConvOCL;
prev_count = descr.count = BarDescr;
descr.window = HistoryBars;
descr.step = HistoryBars;
descr.window_out = 8;
descr.activation = LReLU;
descr.optimisation=ADAM;
if(!actor.Add(descr))
{
descrを削除します;
false を返す;
}
//--- レイヤー3
if(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronConvOCL;
prev_count = descr.count = prev_count;
descr.window = 8;
descr.step = 8;
descr.window_out = 4;
descr.activation = LReLU;
descr.optimisation=ADAM;
if(!actor.Add(descr))
{
descrを削除します;
false を返す;
}
//--- レイヤー4
if(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronBaseOCL;
prev_count = descr.count = 1024;
descr.optimise = ADAM;
descr.activation = LReLU;
if(!actor.Add(descr))
{
descrを削除します;
false を返す;
}
//--- レイヤー5
if(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronBaseOCL;
prev_count = descr.count = 1024;
descr.optimise = ADAM;
descr.activation = LReLU;
if(!actor.Add(descr))
{
descrを削除します;
false を返す;
}
// ソフトマックス・レイヤー
if(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronSoftMaxOCL;
descr.count = 1024;
descr.optimise = ADAM;
descr.activation = LReLU;
if(!actor.Add(descr))
{
descrを削除します;
false を返す;
}
// マルチレイヤー・マルチヘッド・アテンション・レイヤー
if(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronMLMHAttentionOCL;
descr.count = 1024;
descr.optimisation = ADAM;
descr.activation = LReLU;
if(!actor.Add(descr))
{
descrを削除します;
false を返す;
}
//--- レイヤー6
if(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronConcatenate;
descr.count = LatentCount;
descr.window = prev_count;
descr.step = AccountDescr + 6;
descr.optimise = ADAM;
descr.activation = SIGMOID;
if(!actor.Add(descr))
{
descrを削除します;
false を返す;
}
//--- レイヤー7
if(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronBaseOCL;
descr.count = 1024;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!actor.Add(descr))
{
descrを削除します;
false を返す;
}
//--- レイヤー8
if(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronBaseOCL;
descr.count = 1024;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!actor.Add(descr))
{
descrを削除します;
false を返す;
}
//--- レイヤー9
if(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronBaseOCL;
descr.count = 6;
descr.optimisation = ADAM;
descr.activation = SIGMOID;
if(!actor.Add(descr))
{
descrを削除します;
false を返す;
}
//--- 評論家
critic.Clear();
//--- 入力レイヤー
if(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronBaseOCL;
prev_count = descr.count = LatentCount;
descr.window = 0;
descr.activation = なし;
descr.optimisation = ADAM;
if(!critic.Add(descr))
{
descrを削除する;
false を返す;
}
//--- レイヤー1
if(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronConcatenate;
descr.count = 512;
descr.window = prev_count;
descr.step = 6;
descr.optimise = ADAM;
descr.activation = LReLU;
if(!critic.Add(descr))
{
descrを削除する;
false を返す;
}
//--- レイヤー2
if(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronBaseOCL;
descr.count = 512;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!critic.Add(descr))
{
descrを削除する;
false を返す;
}
//--- レイヤー3
if(!(descr = new CLayerDescription())))
return false;
descr.type = defNeuronBaseOCL;
descr.count = 512;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!critic.Add(descr))
{
descrを削除する;
false を返す;
}
--- レイヤー4
if(!( descr = new CLayerDescription())))
false を返します;
descr.type = defNeuronBaseOCL;
descr.count = 1;
descr.optimise = ADAM;
descr.activation=なし;
if(!critic.Add(descr))
{
descrを削除する;
false を返す;
}
//---
trueを返す;
}

画像をテキストにドラッグしたり、Ctrl+Vで 貼り付けることもできます。
 
取引ソフトウェアのmt4アカウントに接続できず、注文を出すための取引ができません。何が問題なのでしょうか?