"New Neural" est un projet de moteur de réseau neuronal Open Source pour la plateforme MetaTrader 5. - page 71

 
joo:

Si nous considérons l'entraînement des neurones comme un micro-niveau (cycles de traitement des tableaux indépendants dans l'AG, calcul des neurones individuels du réseau, etc.) et un macro-niveau (ensemble du PF), alors il n'y a pas de questions ni de problèmes avec le premier - tout est parfaitement parallèle et fonctionnera bien sur GPU.

Mais il y a un problème au niveau macro. Tout d'abord, je soupçonne que ce n'est pas possible en raison des limitations de la quantité d'informations traitées par le GPU. Nous pourrions contourner ce problème en utilisant un testeur régulier et un nuage (chaque niveau macro sera transféré vers des agents séparés, et là, il sera traité au niveau micro - si l'hôte le permet bien sûr). Mais nous n'avons pas les outils pour contrôler le testeur de manière externe afin d'utiliser des GA externes.

Nous devrons donc nous limiter à l'accélération au niveau micro. L'accélération sera également très convenable, puisque les maillages et les AG eux-mêmes abondent en calculs indépendants les uns des autres.

Quant à l'UGA lui-même, si vous ne l'adaptez pas à OpenCL, vous n'avez pratiquement rien à améliorer (peut-être juste quelques fragments de code, mais ils ne seront d'aucune utilité grâce à ceux qui ont participé au fil de discussion sur les algorithmes dans l'article). Vous pouvez seulement essayer de sélectionner les paramètres de l'UGA spécifiquement pour les réseaux d'entraînement.


Les GPU modernes disposent de 1 Go de RAM ou plus.

Je peux difficilement imaginer un échantillon de formation de plus grande taille.

Je suis d'accord avec le niveau macro - testé )

Il serait raisonnable d'utiliser l'architecture suivante pour GA : GA lui-même sur le CPU, tandis que les calculs lourds de FF sur le GPU.

 
son.humain :

Puis-je avoir un petit exemple à utiliser pour MT5 ?


Un exemple de quoi ? Un indicateur de réseau neuronal, une stratégie de réseau neuronal, ... ? ?
 
yu-sha:

Les GPU modernes ont 1 Go de RAM ou plus.

Je peux difficilement imaginer un échantillon de formation d'une plus grande taille

Si je ne me trompe pas, les cartes graphiques modernes disposent de deux types de RAM : celle qui est partagée, qui peut atteindre plusieurs Go et qui est assez lente, et celle dont dispose chaque processeur GPU individuel - rapide, mais d'une petite quantité de quelques centaines de Ko. Mon raisonnement était que c'est là que le problème pourrait se poser.

yu-sha:

Il n'y a pas de problème au niveau macro - testé )

Mais, si tu le dis, alors je te crois sur parole et maintenant je suis tranquille. :)

yu-sha:

Pour GA, il est raisonnable d'utiliser l'architecture suivante : GA lui-même sur le CPU, et les calculs FF lourds sur le GPU.

Eh bien, c'est une question de technique, comme on dit. Tu pourrais le faire de cette façon. Pour autant que je sache, OpenCL vous permet de sélectionner dans le code les cœurs à utiliser pour effectuer les calculs - sur le CPU ou le GPU.

 
yu-sha:
Un exemple de quoi ? Un indicateur de réseau neuronal, une stratégie de réseau neuronal, ... ? ?
Comment mettre en place une architecture réseau lâche (non entièrement connectée), où alimenter, où retirer, où sont les poids ?
 
joo:

Si je ne me trompe pas, les cartes graphiques modernes disposent de deux types de mémoire d'exploitation : la mémoire partagée, qui peut atteindre plusieurs gigaoctets et qui est assez lente, et celle dont dispose chaque processeur GPU individuel - rapide, mais d'une petite quantité de quelques centaines de Ko. Je me suis dit que c'était là que le problème pouvait se poser.

Le "lent" commun est l'analogue complet du DDR pour le CPU (~0.75 - 1.00GHz - pas très lent)

Fast est l'équivalent du cache du CPU.

Les GPU permettent de gérer cette mémoire sur la puce (cache), contrairement aux CPU (je peux me tromper, mais je n'ai jamais rencontré une telle question).

Mais tous ces éléments sont des problèmes d'optimisation supplémentaires, vous pouvez vivre sans eux.

 

son.humain :

yu-sha:
Un exemple de quoi ? Indicateur de réseau neuronal, stratégie de réseau neuronal, ... ?
Comment mettre en place une architecture de réseau lâche (pas entièrement connectée), où alimenter, où retirer, où sont les poids ?

Oui oui, nous avons besoin d'un exemple de poussée et ensuite nous trouverons une solution.

Un GA standard et un nuage permettraient de mettre en parallèle le calcul du FF. Surtout que Renat a promis :

En aucun cas, l'AG du testeur est limité à 64 bits de recherche, et pour l'apprentissage des poids, vous avez besoin de 16 à 64 bits pour chaque poids (cela dépend de la précision de la recherche), et les poids peuvent être jusqu'à ..... quelques milliers, et peuvent être des dizaines et des centaines de milliers. L'UGA peut gérer cela très bien, alors que le testeur ne le peut pas.

Donc, soit il faut demander à MQ de mettre à niveau GA (ce que je fais sans succès depuis deux ans), soit UGA sera beaucoup plus lent que dans le cluster.

 
yu-sha:

Commun "lent" - il s'agit de l'analogue de la DDR pour l'ensemble du processeur (~0,75 - 1,00 GHz - pas très lent).

Rapide - c'est la contrepartie de la mémoire cache du CPU.

Les GPU permettent de gérer cette mémoire sur la puce (cache), contrairement aux CPU (je peux me tromper, mais je n'ai jamais rencontré une telle question).

Mais tout cela est une question d'optimisation supplémentaire et nous pouvons nous en passer.

Pas le point, la mémoire, et sur le GPU sera difficile de mettre en œuvre les torsions de la logique de l'objet, j'ai une assez bonne idée de la façon de mettre en œuvre le NS comme une interaction complexe d'objets au sein de laquelle il ya des fonctions de calcul GPU (il s'agit de la micro-niveau), mais je ne peux pas imaginer comment cet objet complexe code ceux NS ensemble de glisser le GPU comme plusieurs FF avec différents ensembles de poids (macro-niveau) ? ???

La question est rhétorique, mais si quelqu'un l'imagine, il n'a pas envie d'écouter.

 

J'ai une idée amusante :

Peut-être faut-il demander à l' APIMQ de définir des tâches pour le cluster?

pour distribuer la tâche directement depuis MQL5, en contournant le testeur. Bien sûr, c'est une tâche compliquée, de nombreux contrôles doivent être effectués, mais c'est gérable.

Je l'ai déjà maîtrisé, mais je dois travailler un peu.

 
Urain:

Oui oui, nous aimerions un exemple de poussée et ensuite nous trouverons une solution.

Exemple 1 :

Déclaration de mission :

- nous devons restaurer l'algorithme de l'indicateur, dont les sources ne sont pas disponibles (ou alors il s'agit d'un indicateur de "re-dessin" - d'ailleurs, ce n'est pas un mauvais professeur pour NS), mais nous connaissons les valeurs sur chaque barre

- les valeurs des indicateurs sont comprises dans la plage (-1;+1)

Entrées :

- nous savons (soupçonnons ?) que cet indicateur utilise les 10 derniers prix de clôture


Exemple n° 2 :

Énoncé du problème :

- Nous devons trouver la stratégie de négociation par réseau neuronal qui donne les meilleurs résultats (maximisation du profit/maxid) sur une période donnée de l'histoire.

Données d'entrée :

- MACD normalisé (13,35), MACD (50,100), RSI(8), RSI(13)

Exemple n° 3 :

Déclaration de mission :

- Apprendre à un réseau neuronal une table de multiplication

Données d'entrée :

- multiplicateurs x,y dans l'intervalle (-1;+1)

Vous pouvez proposer votre propre exemple et, si cela est possible, je vous montrerai l'architecture du réseau en XML.

 
yu-sha:

Vous pouvez proposer votre propre exemple et, si possible, je peux vous montrer l'architecture du réseau en XML.

et surtout, le code source pour savoir comment cette architecture est créée, comment le fichier XML est généré.