Discusión sobre el artículo "Redes neuronales: así de sencillo (Parte 50): Soft Actor-Critic (optimización de modelos)" - página 2

 
Viktor Kudriavtsev #:

etc. ¿Estoy entendiendo? Lo que me confunde es que el test suele dar pases negativos muy grandes con -7000 o incluso -9000. Y habrá muchos en la base. ¿No estará la red entrenada para operar en negativo a propósito?

Veamos el proceso de aprendizaje sin profundizar demasiado en las matemáticas, por decirlo con los dedos. En el aprendizaje por refuerzo clásico, cada acción es evaluada por el entorno cuando nos da una recompensa. Damos esta recompensa al modelo como resultado objetivo. Así, entrenamos al modelo no para que elija una acción, sino para que prediga la recompensa esperada de la acción (función Q) y luego, a partir de las recompensas predichas, elegimos la recompensa máxima por realizar la acción. Permítanme decir de entrada que la opción de no hacer nada si todas las acciones no son rentables no pasa, porque evaluamos "no hacer nada" como una acción independiente y también tiene su propio nivel de recompensa.

En un espacio de acción continuo, no podemos especificar directamente una recompensa para una acción. Al fin y al cabo, el modelo tiene que devolver el nivel de impacto (volumen de transacciones, nivel de SL, etc.), no la recompensa. Por lo tanto, utilizamos un Critic para evaluar las acciones. Introducimos el estado y la acción de la base de datos de ejemplo en la entrada del Critic, que devuelve una recompensa prevista. La comparamos con la recompensa del modelo y entrenamos al Crítico para que evalúe las acciones correctamente. Como resultado, el Critic se forma una idea abstracta sobre la influencia del estado y la acción en la recompensa esperada. Por ejemplo, en una tendencia alcista, un aumento del volumen de compras aumentará los ingresos, mientras que una disminución del volumen de ventas reducirá las pérdidas.

A continuación, entrenamos al Actor. Tomamos un estado independiente y lo introducimos en la entrada del Actor. El Actor genera una acción. Alimentamos esta acción y el estado inicial del entorno y evalúa la acción del Actor. Entonces le decimos al Crítico que necesitamos mejorar el resultado (especificamos un resultado objetivo superior al resultado recibido). En respuesta, el Crítico le dice al Actor cómo tiene que cambiar su acción (transmite un gradiente de error).

Así que teóricamente también podemos obtener un resultado positivo en pases negativos. Pero el problema es que la función de dependencia de los ingresos respecto a la acción no es lineal. Y para una evaluación más correcta de las acciones que mejor pases.

Ahora, en cuanto al trabajo directo y entrenamiento del Actor. En la etapa inicial inicializamos el modelo con parámetros aleatorios. Y las acciones del Actor son igual de aleatorias. En el proceso de entrenamiento, por ejemplo, el Crítico, por ejemplo, dice que tenemos que abrir una posición por 1 lote. Pero entrenamos el modelo con una tasa de aprendizaje baja. Y en la siguiente iteración el Actor abre una posición por 0,01 lote. Obviamente, necesitamos hacer 100 iteraciones de entrenamiento de este tipo para conseguir el resultado deseado.

Parecería, ¿por qué darnos cabezazos contra la pared? Aumentemos el coeficiente de aprendizaje a 1 y memoricemos de una vez la experiencia adquirida. Pero hay otra cara de la moneda. En este caso, el modelo olvidará inmediatamente toda la experiencia acumulada y la generalización queda descartada.

Por eso seguimos dándonos cabezazos contra la pared hasta que aprendemos una verdad sencilla. Y todo el proceso de entrenamiento del modelo es una selección dirigida de parámetros por el método de ensayo y error.

 
Dmitriy Gizlyk #:

Veamos el proceso de aprendizaje sin profundizar demasiado en las matemáticas, por así decirlo, con los dedos. En el aprendizaje por refuerzo clásico, cada acción es evaluada por el entorno cuando nos da una recompensa. Damos esta recompensa al modelo como resultado objetivo. Así, entrenamos al modelo no para que elija una acción, sino para que prediga la recompensa esperada de la acción (función Q) y, a continuación, de entre las recompensas predichas, elegimos la recompensa máxima por realizar la acción. Permítanme decir de entrada que la opción de no hacer nada si todas las acciones no son rentables no funciona, porque evaluamos "no hacer nada" como una acción independiente y también tiene su propio nivel de recompensa.

En un espacio de acción continuo, no podemos especificar directamente una recompensa para una acción. Al fin y al cabo, el modelo tiene que devolver el nivel de impacto (volumen de transacciones, nivel de SL, etc.), no la recompensa. Por lo tanto, utilizamos un Critic para evaluar las acciones. Introducimos el estado y la acción de la base de datos de ejemplo en la entrada del Critic, que devuelve una recompensa prevista. La comparamos con la recompensa del modelo y entrenamos al Crítico para que evalúe las acciones correctamente. Como resultado, el Critic se forma una idea abstracta sobre la influencia del estado y la acción en la recompensa esperada. Por ejemplo, en una tendencia alcista, un aumento del volumen de compra aumentará la recompensa, mientras que una disminución del volumen de venta reducirá la pérdida.

A continuación, entrenamos al Actor. Tomamos un estado separado y lo introducimos en la entrada del Actor. El Actor genera una acción. Alimentamos esta acción y el estado inicial del entorno y evalúa la acción del Actor. Entonces le decimos al Crítico que necesitamos mejorar el resultado (especificamos un resultado objetivo superior al resultado recibido). En respuesta, el Crítico le dice al Actor cómo cambiar su acción (transmite un gradiente de error).

Así que teóricamente también podemos obtener un resultado positivo en pases negativos. Pero el problema es que la función de dependencia de los ingresos de la acción no es lineal. Y para una evaluación más correcta de las acciones mejor pases.

Ahora, en cuanto al trabajo directo y entrenamiento del Actor. En la etapa inicial inicializamos el modelo con parámetros aleatorios. Y las acciones del Actor son igual de aleatorias. En el proceso de entrenamiento, por ejemplo, el Crítico, por ejemplo, dice que tenemos que abrir una posición para 1 lote. Pero entrenamos el modelo con una tasa de aprendizaje baja. Y en la siguiente iteración el Actor abre una posición por 0,01 lote. Obviamente, para conseguir el resultado deseado, necesitamos hacer 100 iteraciones de entrenamiento de este tipo.

Parecería, ¿por qué darnos cabezazos contra la pared? Aumentemos el coeficiente de aprendizaje a 1 y memoricemos de una vez la experiencia adquirida. Pero hay otra cara de la moneda. En este caso, el modelo olvidará inmediatamente toda la experiencia acumulada y la generalización queda descartada.

Por eso seguimos dándonos cabezazos contra la pared hasta que aprendemos una verdad sencilla. Y todo el proceso de entrenamiento del modelo es una selección dirigida de parámetros por el método de ensayo y error.

Ya veo. Muchas gracias por una explicación tan clara.

Entonces surge la pregunta: ¿por qué entrenar el modelo mediante 100 000 iteraciones y tener una base de 200 trayectorias y repetir constantemente el proceso de recopilación de nuevos ejemplos? ¿Por qué no puede un Asesor Experto crear una base de 1000 trayectorias, por ejemplo, y poner 10 000 000 iteraciones en el entrenamiento y dejar que aprenda allí durante la noche, día, semana? ¿Por qué es necesario reponer constantemente la base y enseñar un pequeño número de iteraciones?

 
Viktor Kudriavtsev #:

Ya veo. Muchas gracias por una explicación tan clara.

Entonces surge la pregunta - ¿por qué debemos entrenar el modelo durante 100 000 iteraciones y tener una base de 200 trayectorias y repetir constantemente el proceso de recopilación de nuevos ejemplos? ¿Por qué no puede un Asesor Experto crear una base de 1000 trayectorias por ejemplo y poner 10 000 000 iteraciones en el entrenamiento y dejar que aprenda allí durante la noche, el día, la semana? ¿Por qué es necesario reponer constantemente la base y enseñar un pequeño número de iteraciones?

Teóricamente se puede, pero todo se reduce a los recursos. Por ejemplo, estamos hablando de un tamaño de AT de 1000 puntos. En el concepto de un espacio de acción continuo, esto son 1000 opciones. Incluso si lo tomamos en incrementos de 10, son 100 variantes. Dejemos el mismo número de SLs o incluso la mitad de ellos (50 variantes). Añadir al menos 5 variantes del volumen de operaciones y obtenemos 100 * 50 * 5 = 25000 variantes. Multiplique por 2 (compra / venta) - 50 000 variantes para una vela. Multiplique por la longitud de la trayectoria y obtendrá el número de trayectorias para cubrir completamente todo el espacio posible.

En el aprendizaje paso a paso, tomamos muestras de trayectorias en la vecindad inmediata de las acciones del Actor actual. Así reducimos el área de estudio. Y no estudiamos todas las variantes posibles, sino sólo un área pequeña con búsqueda de variantes para mejorar la estrategia actual. Después de un pequeño "ajuste" de la estrategia actual, recogemos nuevos datos en la zona a la que nos han llevado estas mejoras y determinamos el vector de movimiento posterior.

Esto puede recordar a la búsqueda de una salida en un laberinto desconocido. O el camino de un turista que camina por la calle y pregunta a los transeúntes por una dirección.

 
Dmitriy Gizlyk #:

Teóricamente es posible, pero todo depende de los recursos. Por ejemplo, estamos hablando del tamaño TP de 1000 puntos. En el concepto de un espacio de acción continuo, esto son 1000 variantes. Incluso si tomamos en incrementos de 10, eso es 100 variantes. Que el mismo número de SL o incluso la mitad de ellos (50 variantes). Añadir al menos 5 variantes del volumen de comercio y obtenemos 100 * 50 * 5 = 25000 variantes. Multiplique por 2 (compra / venta) - 50 000 variantes para una vela. Multiplique por la longitud de la trayectoria y se obtiene el número de trayectorias para cubrir completamente todo el espacio posible.

En el aprendizaje paso a paso, tomamos muestras de trayectorias en las inmediaciones de las acciones del Actor actual. Así reducimos el área de estudio. Y no estudiamos todas las variantes posibles, sino sólo un área pequeña con búsqueda de variantes para mejorar la estrategia actual. Tras un pequeño "ajuste" de la estrategia actual, recogemos nuevos datos en la zona a la que nos han conducido estas mejoras y determinamos el vector de movimiento posterior.

Esto puede recordar a la búsqueda de una salida en un laberinto desconocido. O el camino de un turista que camina por la calle y pregunta a los transeúntes por una dirección.

Ya veo. Gracias.

Me he dado cuenta ahora de que cuando haces la recopilación Research.mqh, los resultados se forman de alguna manera en grupos con un balance final muy ajustado en el grupo. Y parece como si hubiera algún progreso en Research.mqh (los grupos positivos de resultados empezaron a aparecer más a menudo o algo así). Pero con Test.mqh no parece haber ningún progreso. Da algo de aleatoriedad y en general termina más a menudo una pasada con un menos. A veces sube y luego baja, y a veces baja directamente y luego se para. También parece aumentar el volumen de entrada al final. A veces no comercia en el menos, pero justo alrededor de cero. También me di cuenta de que cambia el número de operaciones - durante 5 meses se abre 150 operaciones, y alguien se abre 500 (aproximadamente). ¿Es todo esto normal, lo que estoy observando?

 
Viktor Kudriavtsev #:

Ya veo. Gracias, señor.

He notado que cuando hago la colección Research.mqh, los resultados se forman de alguna manera en grupos con un balance final muy cercano en el grupo. Y parece como si hubiera algún progreso en Research.mqh (los grupos positivos de resultados empezaron a aparecer más a menudo o algo así). Pero con Test.mqh no parece haber ningún progreso. Da algo de aleatoriedad y en general termina más a menudo una pasada con un menos. A veces sube y luego baja, y a veces baja directamente y luego se para. También parece aumentar el volumen de entrada al final. A veces no comercia en el menos, pero justo alrededor de cero. También me di cuenta de que cambia el número de operaciones - durante 5 meses se abre 150 operaciones, y alguien se abre 500 (aproximadamente). ¿Es todo esto normal, lo que estoy observando?

La aleatoriedad es el resultado de la estocasticidad del Actor. A medida que aprendas, será menor. Puede que no desaparezca por completo, pero los resultados se aproximarán.

 
Dmitriy Ahora tengo algo cambió con neuronka - Comenzó a abrir operaciones extrañamente (se abre en una vela y se cierra en la siguiente) y por alguna razón el equilibrio y la equidad no cambian. Sólo dibuja una línea recta en el gráfico. Y el cambio de saldo en el resultado de pases 0. Además, esto ocurre tanto en Test.mqh como en Research.mqh. Y ahora toda la base está llena de esos pases. ¿Es esto normal? ¿Qué hacer - para seguir enseñando o tengo una idea para derribar la base y los modelos entrenados para pasar de una carpeta a otra temporalmente y crear una nueva base con modelos aleatorios, y luego traer de vuelta los modelos y seguir enseñándoles. Para sacarlos de alguna manera de la línea recta.
 
Viktor Kudriavtsev dibuja una línea recta en el gráfico. Y el cambio de saldo en el resultado de pases 0. Además, esto ocurre tanto en Test.mqh como en Research.mqh. Y ahora toda la base está llena de esos pases. ¿Es esto normal? ¿Qué hacer - para seguir enseñando o tengo una idea para derribar la base y los modelos entrenados para pasar de una carpeta a otra temporalmente y crear una nueva base con modelos aleatorios, y luego traer de vuelta los modelos y seguir enseñándoles. Para sacarlos de alguna manera de la línea recta.

La base de datos de ejemplos no se "atascará" con pases sin tratos. Research.mq5 tiene una comprobación y no guarda tales pases. Pero es bueno que tal pase se guardará de Test.mq5. Hay una penalización por la ausencia de tratos al generar la recompensa. Y debería ayudar al modelo a salir de tal situación.

 

Dmitriy he hecho más de 90 ciclos (entrenamiento-prueba-colección de base de datos) y todavía tengo el modelo da al azar. Puedo decir que de 10 ejecuciones de Test.mqh 7 drena 2-3 a 0 y 1-2 veces durante unos 4-5 ciclos hay una ejecución en el plus. Usted ha indicado en el artículo que obtuvo un resultado positivo para 15 ciclos. Entiendo que hay mucha aleatoriedad en el sistema, pero no entiendo por qué tal diferencia? Bueno, entiendo que si mi modelo dio un resultado positivo después de 30 ciclos, digamos 50, bueno, ya es 90 y no se puede ver mucho progreso.....

¿Estás seguro de que has publicado el mismo código que tú mismo entrenaste? ¿Quizás corregiste algo para las pruebas y accidentalmente te olvidaste y publicaste la versión equivocada.....?

Y si, por ejemplo, se aumenta un grado el coeficiente de entrenamiento, ¿no aprenderá más rápido?

No entiendo algo......