"New Neural" es un proyecto de motor de red neuronal de código abierto para la plataforma MetaTrader 5. - página 60

 
joo:

Pieza por pieza - entiendo.

No entiendo las otras opciones. ¿Cómo puedo presentar todos los ejemplos a la vez? - ¿O soy estúpido?

Bueno, usted presentó todos los ejemplos a la vez (calculando el valor total de FF en todos los ejemplos), los algoritmos de entrenamiento son diferentes, bekprops por ejemplo presenta un ejemplo a la vez en orden aleatorio, pero se desplaza toda la lista de ejemplos varias veces, así que ¿por qué no dar el algoritmo de todos los ejemplos a la vez, y ya se les dará a la red de acuerdo a su lógica.

HZ no tonto y simplemente no saben lo que estaba pensando allí, voy a arreglar todo con las explicaciones.

ZZZY Ahora mismo no está listo para explicar todo, me gustaría a mí mismo para entender :)

 
gpwr:

Rebyata, ya budu seldom syuda zahodit'. Esli est' voprosi o interes k sovmestnim razrabotkami, pishite na moy yahoo email (ukazan v profile).

¡Buena suerte con el proyecto EngiNeuro!

Gracias Vladimir, mantén las visitas frecuentes :)

Urain:

Todo a la vez

También solía pensar que lo mejor es el trozo a trozo. Pero no. Los algoritmos de gradiente están diseñados exactamente para el error acumulativo, por lo que si se alimenta por piezas, no es exactamente el descenso de gradiente.

Por lo tanto, sólo todos a la vez, al menos para el feed-forward

 
TheXpert:

Gracias, Vladimir! Vuelve más a menudo :)

También solía pensar que lo mejor era el trozo a trozo. Pero no. Los algoritmos de gradiente están diseñados exactamente para el error total, por lo que si se alimenta por piezas, no es exactamente el descenso de gradiente.

Así que sólo todos a la vez, al menos para la alimentación


Sí, depende de la implementación del algoritmo, ahora estoy haciendo una lluvia de ideas por si me he olvidado de algo.
 

Notas sobre la formación NS

1) Función de aptitud (función de aprendizaje)

Cualquier proceso de aprendizaje de NS se reduce a encontrar un máximo (mínimo) funcional en el espacio de argumentos adaptativos (en nuestro caso es el espacio de pesos)

2) MSE

La versión clásica del funcional es el MSE(error cuadrático medio)

Para ello, se pueden encontrar fácilmente las derivadas parciales de cada parámetro adaptativo, lo que permite utilizar el ajuste de gradiente de los pesos.

Para cada ejemplo, que se alimenta a la entrada del NS, obtenemos la respuesta de la red - y, y tenemos una "respuesta correcta" - y'.

En el método de aprendizaje incremental, las ponderaciones se ajustan después de cada ejemplo. En este caso MSE=MODUL(y-y')

En el método por lotes, las ponderaciones se ajustan después de recorrer toda la muestra de entrenamiento. Aquí MSE=ROUND((AMOUNT(y-y'))^2)

La principal desventaja del MSE es que es necesario tener la respuesta "correcta" para cada ejemplo

Esta funcionalidad es útil, por ejemplo, para la reconstrucción de un algoritmo de indicador "desconocido", si se conocen sus valores "correctos" en cada barra

3) Funcionalidad no estándar

Se puede resolver una gama más amplia de tareas utilizando la funcionalidad no estándar

Por ejemplo, para buscar estrategias de trading sintéticas se pueden utilizar redes neuronales entrenadas, por ejemplo, para maximizar el funcional F=Beneficio/MaxDownload

En este caso, la estimación se realiza después de la ejecución completa del entrenamiento, ya que sólo se puede evaluar el rendimiento de la estrategia al final del período

Muy buena nota - no necesitamos tener la respuesta correcta para cada bar

Hay un "pero" desagradable: no hay posibilidad de encontrar la derivada parcial del funcional para cada peso, por lo que los métodos de gradiente de la construcción de pesos son inaceptables - debemos utilizar métodos estocásticos, como GA

Aquí es donde entran en juego las GPU: todavía no hay una alternativa económica a ellas

P.D.

A diferencia del optimizador de parámetros de cada estrategia de negociación en particular, las redes neuronales permiten "hacer crecer" algoritmos totalmente sintéticos de estrategias de negociación )))

Y el potencial de este enfoque es muy grande

 

Estoy preparando una función para guardar la cuadrícula en un archivo bin. Toda la información es fácilmente encriptada en un array de ulongs, pero lo que hay que hacer con los pesos no lo sé.

Me gustaría utilizar la función estándar de guardado de arrays.

¿Alguien tiene un algoritmo para la encriptación doble restaurable en ulong?


Creo que una rejilla debe ser guardada en un formato simple adecuado para MQL5 (lo he tomado como base), y luego tengo que usarla para escribir convertidores para diferentes formatos de diferentes paquetes de redes neuronales.

 
Urain:

Estoy preparando una función para guardar la cuadrícula en un archivo bin. Toda la información es fácilmente encriptada en un array de ulongs, pero lo que hay que hacer con los pesos no lo sé.

Me gustaría utilizar la función estándar de guardado de arrays.

¿Alguien tiene un algoritmo para la encriptación restaurable de doble en ulong?


Creo que la rejilla debería guardarse en un formato sencillo, apto para usar en MQL5 (tomándolo como base), y de ese formato deberían salir los conversores para los distintos formatos de los diferentes paquetes de redes neuronales.


¿Por qué no le conviene FileWriteArray? No entiendo el problema. ¿Puede darnos un ejemplo?

De todos modos, la configuración de la red en un archivo y los pesos en otro.

No veo lo que es más conveniente para MQL, y no veo por qué tenemos querestaurar el cifrado, ya que causará un frenazo innecesario.

 
her.human:

¿Qué pasa con FileWriteArray? No entiendo el problema. ¿Puede darnos un ejemplo?

En cualquier caso, la configuración de la red en un archivo y los pesos en otro.

No veo lo que es más conveniente para MQL, y no veo por qué tengo querestaurar el cifrado, ya que causará un frenado innecesario.

Sí, será lento (según mi estimación tardará 5 segundos en encriptar 1 milla de pesos), sólo quiero almacenar tanto los pesos como la configuración de la rejilla en un solo archivo, y no me importa cuántos archivos se necesiten, lo encontraré práctico.

Para FileWriteArray sólo y quiere afinar, pero en presencia de una matriz ulong formando una descripción de la red (número de capas, número de neuronas, tipos de neuronas, la relación entre ellos) y todavía se adjunta una matriz de pesos, pero en duplicados,

¿cómo meter todo esto en un archivo bin (suponiendo que la partición no es clara, la partición en sí está codificada en los primeros números de la cuadrícula)?

 
Urain:

0. Estoy preparando una función para guardar la cuadrícula en un archivo bin. Toda la información es fácilmente encriptada en una matriz de ulongs, pero lo que hay que hacer con los pesos no lo sé.

Me gustaría utilizar la función estándar de array, pero no sé qué hacer con ellos.

1. ¿alguien tiene un algoritmo de cifrado doble recuperable para ulong?


Creo que se debería guardar una rejilla en un formato sencillo, apto para usar en MQL5 (tomándolo como base) y luego traducirlo a diferentes formatos de varios paquetes de redes neuronales.

0. Es extremadamente prematuro. En primer lugar, hay que aclarar y acordar el conjunto de datos, sin ambigüedades, en la estructura y configuración de la red, en un nivel lógico. El almacenamiento físico no es en absoluto un problema.

1. Es fácil. En mql5 hay un hueco especial para este tipo de conversiones - estructuras de diferentes tipos pueden asignarse entre sí sin limitación, siempre que tengan el mismo tamaño.

// ulong y double son exactamente lo mismo.

Para un ejemplo perverso mire aquí : https://www.mql5.com/ru/forum/3775/75737#comment_75743

2. Mmmm... Por un lado estoy de acuerdo - el formato debe ser conveniente y simple, por otro lado debe ser muy universal, como xml. Tal vez planificar dos opciones (en la medida de lo posible): una de texto, la otra binaria. Y por cierto -- ver #0.

---

He estado caminando por esta rama, aún dudando si interferir o no... Así que no pude resistirme.

Se me ocurre una idea. Uno. // Quiero decir, tengo muchos pensamientos, pero sólo uno. :)

La idea es la siguiente: el código de la rejilla debe generarse tras una configuración previa en el "editor de rejillas" (configurador). // Esta idea se ha sugerido muchas veces antes y no recuerdo que se haya rechazado.

Por lo tanto, el esquema - representación intermedia obligatoria (por ejemplo, en forma de archivo xml) que contiene información completa sobre laestructura de la red neuronal.

Una representación intermedia es cuidadosamente pensada, analizada en cuanto a su integridad y otras complejidades, validada y arreglado por.

Sólo después podemos codificar (por separado): (1) Todo tipo de configuradores de rejilla, (2) Codogeneradores - traduciendo la representación intermedia en código mql5.

Puede haber varias implementaciones de ambos, lo cual es bueno y correcto.

 
Urain:

Sí frenos será (1 mil pesos por mi estimación cifrarán 5 segundos), sólo quieren y el peso y el dispositivo de rejilla en un archivo para almacenar, y luego dispersar un montón de archivos y el diablo mismo se romperá una pierna, en esto veo la conveniencia.

Quiero afinar FileWriteArray, pero tengo un array ulong formando la descripción de la red (número de capas, número de neuronas, tipos de neuronas, conexiones entre ellas) y un array de pesos adjunto, pero por duplicado,

¿cómo meter todo en un solo archivo bin (suponiendo que la partición no es clara, la propia partición está encriptada en los primeros números de la cuadrícula)?

Categóricamente en contra de meter todo en un solo archivo. Descripción de la red por separado - pesos por separado. De lo contrario, surgirán otros problemas innecesarios.

 
¿Por qué una papelera? ¿No sería mejor un archivo de texto plano, para poder mirarlo con los ojos?