Discussão do artigo "Redes neurais de maneira fácil (Parte 57): Stochastic Marginal Actor-Critic (SMAC)" - página 2

 
JimReaper #:
//--- camada 5
se (!(descr = new CLayerDescription())) return 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;
se(!ator.Add(descr))
{
delete descr;
return false;
}

Para inserir o código, você precisa aplicar o botão correspondente

Saudações, Vladimir.

 
Se você seguir o esquema proposto por JimReaper ou simplesmente adicionar mais indicadores ou aumentar a profundidade do HistoryBars em 50 ou 100, ao criar um banco de dados de exemplos no testador pelo Research Expert Advisor, menos exemplos serão salvos para uma passagem de otimização. O parâmetro MinProfit é definido como -10000 e não tem efeito. Por exemplo, defino 50 passagens, mas apenas 41 passagens entram no banco de dados. Além disso, quanto mais tento capturar a profundidade do histórico do HistoryBars, menos passagens são salvas no banco de dados. E ao coletar passagens adicionais durante as iterações de treinamento, a cada passagem, menos e menos passagens são salvas no banco de dados. Também observei que o tamanho do arquivo *.bd não pode exceder 3 GB. Como se algo atrapalhasse o tamanho. Você pode me dizer como superar isso?
 
Alguém pode me ajudar a entender como usar o código do artigo para testes e negociações de demonstração? Agradeço a ajuda de todos!
 

Cada passagem do EA de teste gera resultados drasticamente diferentes, como se o modelo fosse diferente de todos os anteriores. É óbvio que o modelo evolui a cada passagem do teste, mas o comportamento desse EA dificilmente é uma evolução, então o que está por trás disso?

Aqui estão algumas imagens:

gráfico1

gráfico2

gráfico3

 

As transações de compra e venda parecem não ser suficientemente controladas nos scripts de teste e, possivelmente, de pesquisa. Aqui estão algumas mensagens:

2024.04.27 13:40:29.423 Core 01 2024.04.22 18:30:00 estado da conta corrente: Saldo: 9892.14, Crédito: 0.00, Comissão: 0.00, Acumulado: 0.00, Ativo: 0.00, Passivo: 0,00, Patrimônio líquido 9892,14, Margem: 0,00, Margem livre: 9892,14

2024.04.27 13:40:29.423 Core 01 2024.04.22 18:30:00 estado da conta calculada: Ativos: 0,00, Passivos: 0.00, Patrimônio Líquido 9892.14, Margem: 11359.47, FreeMargin: -1467.33
2024.04.27 13:40:29.423 Core 01 2024.04.22 18:30:00 dinheiro insuficiente [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 falha na compra de mercado 0.96 EURUSD.pro sl: 1.06306 tp: 1.08465 [Sem dinheiro]

A menos que se pretenda ultrapassar a margem, limites simples colocados em buy_lot após a linha 275 e após a linha 296 colocados em sell_lot eliminariam esse comportamento do script de teste.

 
Chris #:

Cada passagem do EA de teste gera resultados drasticamente diferentes, como se o modelo fosse diferente de todos os anteriores. É óbvio que o modelo evolui a cada passagem do teste, mas o comportamento desse EA dificilmente é uma evolução, então o que está por trás disso?

Aqui estão algumas imagens:


Esse modelo usa a política estocástica do Ator. Portanto, no início do estudo, podemos ver acordos aleatórios em cada passagem. Coletamos essas passagens e reiniciamos o estudo do modelo. E repetimos esse processo algumas vezes. Enquanto o Ator encontra uma boa política de ações.

 

Vamos colocar a questão de outra forma. Depois de coletar amostras (pesquisa) e processá-las (estudo), executamos o script de teste. Em várias execuções consecutivas, sem nenhuma pesquisa ou estudo, os resultados obtidos são completamente diferentes.

O script de teste carrega um modelo treinado na sub-rotina OnInit (linha 99). Aqui alimentamos o EA com um modelo que não deve ser alterado durante o processamento do teste. Ele deve ser estável, pelo que entendi. Então, os resultados finais não devem mudar.

Nesse meio tempo, não realizamos nenhum treinamento de modelo. Apenas a coleta de mais amostras é realizada pelo teste.

A aleatoriedade é observada no módulo Research e possivelmente no Study durante a otimização de uma política.

O Actor é chamado na linha 240 para calcular os resultados de feedforward. Se ele não for inicializado aleatoriamente no momento da criação, acredito que esse seja o caso, ele não deve se comportar de forma aleatória.

Você encontrou algum equívoco no raciocínio acima?

 
Chris #:

Vamos colocar a questão de outra forma. Depois de coletar amostras (pesquisa) e processá-las (estudo), executamos o script de teste. Em várias execuções consecutivas, sem nenhuma pesquisa ou estudo, os resultados obtidos são completamente diferentes.

O script de teste carrega um modelo treinado na sub-rotina OnInit (linha 99). Aqui alimentamos o EA com um modelo que não deve ser alterado durante o processamento do teste. Ele deve ser estável, pelo que entendi. Então, os resultados finais não devem mudar.

Nesse meio tempo, não realizamos nenhum treinamento de modelo. Apenas a coleta de mais amostras é realizada pelo teste.

A aleatoriedade é observada no módulo Research (Pesquisa) e possivelmente no Study (Estudo) durante a otimização de uma política.

O Actor é chamado na linha 240 para calcular os resultados de feedforward. Se ele não for inicializado aleatoriamente no momento da criação, acredito que esse seja o caso, ele não deve se comportar de forma aleatória.

Você encontrou algum equívoco no raciocínio acima?

O Actor usa política estocástica. Nós a implementamos pelo VAE.

//--- camada 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;
     }
//--- camada 11
   if(!(descr = new CLayerDescription()))
      return false;
   descr.type = defNeuronVAEOCL;
   descr.count = NActions;
   descr.optimization = ADAM;
   if(!actor.Add(descr))
     {
      delete descr;
      return false;
     }

A camada CNeuronVAEOCL usa os dados da camada anterior como média e STD da distribuição gaussiana e faz uma amostra da mesma ação a partir dessa distribuição. No início, colocamos no modelo pesos aleatórios. Assim, ele gera médias e DSTs aleatórios. No final, temos ações aleatórias em cada passagem do teste do modelo. No momento do estudo, o modelo encontrará algumas médias para cada estado e o STD tende a zero.

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.
 
Em vez disso, o script de teste fornece informações sobre os recursos do restante do algoritmo. Como ainda há um grau de liberdade na forma de valores de peso inicial variáveis e não registrados no estágio de criação do VAE, não é possível estabelecer e recriar o modelo ideal completo. Esse deveria ser o objetivo desse script?
 
É um ótimo visual.