文章 "神经网络变得简单(第 57 部分):随机边际扮演者-评论者(SMAC)" - 页 2

 
JimReaper #:
//--- 第 5 层
如果 (!(descr = new CLayerDescription())返回 false;
descr.type = defNeuronConvOCL;
prev_count = descr.count = prev_count - 1;
descr.window = 3;
descr.step = 1;
descr.window_out = 8;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!actor.Add(descr))
{
删除 descr;
return false;
}

要插入代码,您需要应用相应的按钮

问候,弗拉基米尔

 
如果按照JimReaper 提出的方案,或者只是添加更多指标或增加历史记录深度 50 或 100,那么在研究智能交易系统的测试器中创建示例数据库时,一次优化所保存的示例就会减少。最小盈利参数设置为 -10000 没有任何影响。例如,我设置了 50 次优化,但只有 41 次进入数据库。此外,我越想捕捉HistoryBars 历史 的深度,数据库中保存的次数就越少。而在训练迭代过程中收集更多记录时,数据库中保存的记录也会越来越少。我还注意到,*.bd文件的大小 不能超过 3 GB。好像有什么东西影响了文件大小。您能告诉我如何克服这个问题吗?
 
有人能帮助我了解如何使用文章中的代码进行测试和模拟交易吗? 感谢大家的帮助!
 

测试 EA 的每一次通过都会产生截然不同的结果,就好像该模型与之前的所有模型都不同一样。很明显,模型在每次通过测试时都会发生变化,但该 EA 的行为却几乎没有发生变化,那么其背后的原因是什么呢?

下面是一些图片:

图1

图表2

图3

 

在 "测试 "脚本和可能的 "研究 "脚本中,买卖交易似乎没有得到充分控制。下面是一些信息:

2024.04.27 13:40:29.423 Core 01 2024.04.22 18:30:00 当前账户状态:Balance: 9892.14, Credit: 0.00, Commission: 0.00, Accumulated:0.00, Assets: 0.00, Liabilities:0.00, Equity 9892.14, Margin: 0.00, FreeMargin: 9892.14

2024.04.27 13:40:29.423 Core 01 2024.04.22 18:30:00 计算的账户状态:资产: 0.00, 负债:0.00, Equity 9892.14, Margin: 11359.47, FreeMargin: -1467.33
2024.04.27 13:40:29.423 Core 01 2024.04.22 18:30:00资金不足[market buy 0.96 EURUSD.pro sl: 1.06306 tp: 1.08465]

2024.04.27 13:40:29.423 Core 01 2024.04.22 18:30:00 市场买入 0.96 EURUSD.pro sl: 1.06306 tp: 1.08465 失败 [没有钱]

除非有意使保证金超限,否则在第 275 行之后对买入手数设置简单的限制,在第 296 行之后对卖出手数设置简单的限制,就可以消除测试脚本的这种行为。

 
Chris #:

测试 EA 的每一次通过都会产生截然不同的结果,就好像该模型与之前的所有模型都不同一样。很明显,模型在每次通过测试时都会发生变化,但该 EA 的行为几乎没有发生变化,那么其背后的原因是什么呢?

下面是一些图片:


该模型采用随机政治行为。因此,在研究的开始阶段,我们可以看到每一次交易都是随机的。我们收集这些通行证,然后重新开始模型研究。然后重复这个过程若干次。当行动者找到好的行动策略时,我们就可以开始研究了。

 

让我们换一种方式来回答这个问题。在收集(研究)样本并对其进行处理(研究)后,我们运行测试脚本。在没有任何 "研究 "或 "学习 "的情况下,连续运行几次后得到的结果完全不同。

测试脚本在 OnInit 子程序(第 99 行)中加载经过训练的模型。在这里,我们为 EA 提供了一个在测试处理过程中不应发生变化的模型。据我所知,它应该是稳定的。这样,最终结果就不会改变。

在此期间,我们不进行任何模型训练。测试 "只会收集更多样本。

随机性是在研究模块中观察到的,也可能是在优化策略时在研究模块中观察到的。

Actor 在第 240 行被调用,以计算前馈结果。如果它在创建时不是随机初始化的,我相信情况就是这样,它的行为不应该是随机的。

您是否发现上述推理中有任何误解?

 
Chris #:

让我们换一种方式来回答这个问题。在收集(研究)样本并对其进行处理(研究)后,我们运行测试脚本。在没有进行任何研究的情况下,连续运行几次后,得到的结果完全不同。

测试脚本在 OnInit 子程序(第 99 行)中加载经过训练的模型。在这里,我们为 EA 提供了一个在测试处理过程中不应发生变化的模型。据我所知,它应该是稳定的。那么,最终结果也不应该发生变化。

在此期间,我们不进行任何模型训练。测试只会收集更多样本。

随机性在 "研究 "模块中观察到,也可能在 "学习 "模块优化策略时观察到。

Actor 在第 240 行被调用,以计算前馈结果。如果在创建时没有随机初始化(我认为是这样的),那么它的行为就不应该是随机的。

您是否发现上述推理中有任何误解?

Actor 使用随机策略。我们通过VAE 实现了它。

//--- 第 10 层
   if(!(descr = new CLayerDescription()))
      return false;
   descr.type = defNeuronBaseOCL;
   descr.count = 2 * NActions;
   descr.activation = SIGMOID;
   descr.optimization = ADAM;
   if(!actor.Add(descr))
     {
      delete descr;
      return false;
     }
//--- 第 11 层
   if(!(descr = new CLayerDescription()))
      return false;
   descr.type = defNeuronVAEOCL;
   descr.count = NActions;
   descr.optimization = ADAM;
   if(!actor.Add(descr))
     {
      delete descr;
      return false;
     }

层 CNeuronVAEOCL 使用前一层的数据作为高斯分布的均值和 STD,并从该分布中采样相同的动作。一开始,我们在模型中加入随机权重。因此,它会产生随机均值和 STD。最后,我们在模型测试的每一关都有随机动作。在研究时,模型会为每个状态找到一些均值,而 STD 则趋向于零。

Neural networks made easy (Part 21): Variational autoencoders (VAE)
Neural networks made easy (Part 21): Variational autoencoders (VAE)
  • www.mql5.com
In the last article, we got acquainted with the Autoencoder algorithm. Like any other algorithm, it has its advantages and disadvantages. In its original implementation, the autoenctoder is used to separate the objects from the training sample as much as possible. This time we will talk about how to deal with some of its disadvantages.
 
相反,测试脚本提供了对算法其余部分能力的深入了解。由于在创建 VAE 阶段,仍有一定程度的自由度存在于可变的、未注册的初始权重值中,因此不可能建立和重新创建完整的最优模型。这应该是这个脚本的目的吗?
 
看着很高大上呢