Discusión sobre el artículo "Redes neuronales: así de sencillo (Parte 57): Stochastic Marginal Actor-Critic (SMAC)" - página 2

 
JimReaper #:
//--- capa 5
if (!(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.optimización = ADAM;
if(!actor.Add(descr))
{
borrar descr;
return false;
}

Para insertar el código que necesita para aplicar el botón correspondiente

Saludos, Vladimir.

 
Si sigue el esquema propuesto por JimReaper o simplemente añade más indicadores o aumenta la profundidad de HistoryBars 50 o 100, entonces al crear una base de datos de ejemplos en el probador por el Asesor Experto de Investigación, se guardan menos ejemplos para una pasada de optimización. El parámetro MinProfit se establece en -10000 y no tiene ningún efecto. Por ejemplo, establezco 50 pases, pero sólo 41 pases entran en la base de datos. Además, cuanto más intento capturar la profundidad de la historia de HistoryBars, menos pasadas se guardan en la base de datos. Y cuando recojo pases adicionales durante las iteraciones de entrenamiento, con cada pase se guardan cada vez menos pases en la base de datos. También me he dado cuenta de que el tamaño del archivo *.bd no puede superar los 3 GB. Como si algo bloqueara el tamaño. ¿Pueden decirme cómo superar esto?
 
¿Puede alguien ayudarme a entender cómo utilizar el código del artículo para pruebas y operaciones demo? ¡Agradezco la ayuda de todos!
 

Cada pasada del EA Test genera resultados drásticamente diferentes como si el modelo fuera diferente a todos los anteriores. Es obvio que el modelo evoluciona en cada pasada de Test pero el comportamiento de este EA no es una evolución, ¿qué hay detrás?

He aquí algunas imágenes:

gráfico1

gráfico2

gráfico3

 

Las transacciones de compra y venta parecen estar insuficientemente controladas en los scripts de Prueba y posiblemente de Investigación. He aquí algunos mensajes:

2024.04.27 13:40:29.423 Core 01 2024.04.22 18:30:00 estado de la cuenta corriente: Saldo: 9892.14, Crédito: 0.00, Comisión: 0.00, Acumulado: 0.00, Activo: 0.00, Pasivo: 0.00, Patrimonio 9892.14, Margen: 0.00, MargenLibre: 9892.14

2024.04.27 13:40:29.423 Core 01 2024.04.22 18:30:00 estado de cuenta calculado: Activo: 0.00, Pasivo: 0.00, Patrimonio 9892.14, Margen: 11359.47, MargenLibre: -1467.33
2024.04.27 13:40:29.423 Core 01 2024.04.22 18:30:00 no hay suficiente dinero [mercado comprar 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 fallida compra de mercado 0.96 EURUSD.pro sl: 1.06306 tp: 1.08465 [No hay dinero]

A menos que se pretenda sobrepasar el margen, unos simples límites puestos en buy_lot después de la línea 275 y después de la línea 296 puestos en sell_lot eliminarían este comportamiento del script de prueba.

 
Chris #:

Cada pasada del EA Test genera resultados drásticamente diferentes como si el modelo fuera diferente a todos los anteriores. Es obvio que el modelo evoluciona en cada pasada de Test pero el comportamiento de este EA no es una evolución, ¿qué hay detrás?

He aquí algunas imágenes:


Este modelo utiliza la política estocástica del Actor. Así que al principio del estudio podemos ver tratos aleatorios en cada pase. Recogemos estos pases y reiniciamos el estudio del modelo. Y repetimos este proceso algunas veces. Mientras el Actor encuentra una buena politica de acciones.

 

Planteemos la pregunta de otro modo. Una vez recogidas las muestras (Investigación) y procesadas (Estudio), ejecutamos el script de prueba. En varias ejecuciones conscutivas, sin ninguna Investigación o Estudio, los resultados obtenidos son completamente diferentes.

El script de prueba carga un modelo entrenado en la subrutina OnInit (línea 99). Aquí alimentamos el EA con un modelo que no debe cambiar durante el procesamiento de la Prueba. Debería ser estable, según tengo entendido. Entonces, los resultados finales no deberían cambiar.

Mientras tanto, no realizamos ningún entrenamiento del modelo. La prueba se limita a recoger más muestras.

La aleatoriedad se observa más bien en el módulo Investigación y posiblemente en el Estudio mientras se optimiza una política.

El Actor es invocado en la línea 240 para calcular los resultados feedforward. Si no se inicializa aleatoriamente en el momento de la creación, creo que este es el caso, no debería comportarse aleatoriamente.

¿Encuentras algún error en el razonamiento anterior?

 
Chris #:

Planteemos la pregunta de otro modo. Una vez recogidas las muestras (Investigación) y procesadas (Estudio), ejecutamos el script de prueba. En varias ejecuciones conscutivas, sin Investigación ni Estudio, los resultados obtenidos son completamente diferentes.

El script de prueba carga un modelo entrenado en la subrutina OnInit (línea 99). Aquí alimentamos el EA con un modelo que no debe cambiar durante el procesamiento de la Prueba. Debería ser estable, según tengo entendido. Entonces, los resultados finales no deberían cambiar.

Mientras tanto, no realizamos ningún entrenamiento del modelo. La Prueba sólo recoge más muestras.

La aleatoriedad se observa más bien en el módulo Investigación y posiblemente en el Estudio mientras se optimiza una política.

El Actor es invocado en la línea 240 para calcular los resultados feedforward. Si no se inicializa aleatoriamente en el momento de la creación, creo que este es el caso, no debería comportarse aleatoriamente.

¿Encuentras algún error en el razonamiento anterior?

El Actor utiliza una política estocástica. La implementamos mediante VAE.

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

La capa CNeuronVAEOCL utiliza los datos de la capa anterior como media y STD de la distribución Gaussiana y muestrea la misma acción de esta distribución. Al principio ponemos en el modelo pesos aleatorios. Así se generan medias y STD aleatorias. Al final tenemos acciones aleatorias en cada paso de la prueba del modelo. En el momento del estudio el modelo encontrará algunas medias para cada estado y STD tiende a cero.

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.
 
Más bien, la secuencia de comandos de prueba proporciona una visión de las capacidades del resto del algoritmo. Dado que todavía existe un grado de libertad en forma de valores de peso iniciales variables y no registrados en la fase de creación de VAE, no es posible establecer y recrear el modelo completo y óptimo. ¿Se supone que ese era el propósito de este script?
 
Es un gran look.