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

 
joo:

Morceau par morceau - je comprends.

Je ne comprends pas les autres options. Comment puis-je soumettre tous les exemples en même temps ? - Ou suis-je stupide ?

Eh bien vous avez soumis tous les exemples en une fois (en calculant la valeur totale de FF sur tous les exemples), les algorithmes d'entraînement sont différents, bekprops par exemple soumet un exemple à la fois dans un ordre aléatoire, mais fait défiler toute la liste des exemples plusieurs fois, alors pourquoi ne pas donner à l'algorithme tous les exemples en une fois, et déjà il les donnera à la grille selon sa logique.

HZ pas bête et juste ne pas savoir ce que je pensais là, je vais arranger tout ça avec des explications.

ZZZY N'est pas tout à fait prêt à tout expliquer, je voudrais moi-même comprendre :)

 
gpwr:

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

Bonne chance avec le projet EngiNeuro !

Merci Vladimir, continuez à nous rendre visite fréquemment :)

Urain:

Tous en même temps

J'ai aussi l'habitude de penser que le morceau par morceau est le meilleur. Mais non. Les algorithmes de gradient sont conçus exactement pour l'erreur cumulative, donc si vous alimentez à la pièce, ce n'est pas exactement de la descente de gradient.

Par conséquent, uniquement en une seule fois, au moins pour les flux entrants.

 
LeXpert:

Merci, Vladimir ! Revenez plus souvent :)

J'avais aussi l'habitude de penser que le morceau par morceau était le meilleur. Mais non. Les algorithmes de gradient sont conçus exactement pour l'erreur totale, donc si vous alimentez à la pièce, ce n'est pas exactement de la descente de gradient.

Donc seulement en une seule fois, au moins pour le feed-forward.


Oui, cela dépend de l'implémentation de l'algorithme, je suis en train de réfléchir maintenant si j'ai oublié quelque chose ?
 

Notes sur la formation NS

1) Fonction de fitness (fonction d'apprentissage)

Tout processus d'apprentissage de NS revient à trouver un maximum (minimum) fonctionnel dans l'espace des arguments adaptatifs (dans notre cas, il s'agit de l'espace des poids).

2) MSE

La version classique de la fonctionnelle est MSE(mean square error)

Pour cela, les dérivées partielles de chaque paramètre adaptatif peuvent facilement être trouvées, ce qui permet d'utiliser l'ajustement des poids par gradient.

Pour chaque exemple, qui est transmis à l'entrée du SN, nous obtenons la réponse du réseau - y, et nous avons une "réponse correcte" - y'.

Pour la méthode d'apprentissage incrémental, les poids sont ajustés après chaque exemple. Dans ce cas, MSE=MODUL(y-y')

Pour la méthode par lot, les poids sont ajustés après avoir parcouru l'ensemble de l'échantillon d'entraînement. Ici MSE=ROUND((AMOUNT(y-y'))^2)

Le principal inconvénient de MSE est que vous devez avoir la "bonne" réponse pour chaque exemple.

Cette fonctionnalité est utile, par exemple, pour reconstruire l'algorithme d'un indicateur "inconnu", si ses valeurs "correctes" sur chaque barre sont connues.

3) Fonctionnalité non standard

Un plus grand nombre de tâches peuvent être résolues à l'aide de fonctionnalités non standard.

Disons que nous pouvons utiliser les neuronets pour rechercher des stratégies de trading synthétiques dont la formation aboutit à la maximisation de la fonction F=Profit/MaxDownload.

Ici, l'estimation est faite après le cycle d'entraînement complet, car vous ne pouvez évaluer les performances de la stratégie qu'à la fin de la période.

Très bonne remarque - il n'est pas nécessaire d'avoir la bonne réponse pour chaque barreau.

Il y a un "mais" désagréable : il n'y a pas de possibilité de trouver la dérivée partielle de la fonctionnelle pour chaque poids, donc les méthodes de gradient de construction des poids sont inacceptables - nous devrions utiliser des méthodes stochastiques, telles que GA

C'est là que les GPU entrent en jeu - il n'y a pas encore d'alternative budgétaire à ceux-ci.

P.S.

Contrairement à l'optimiseur des paramètres de chaque stratégie de trading particulière, les réseaux neuronaux permettent de "faire croître" des algorithmes entièrement synthétiques de stratégies de trading ;))))

Et le potentiel d'une telle approche est très important.

 

Je prépare une fonction pour sauvegarder la grille dans un fichier bin. Toutes les informations sont facilement cryptées dans un tableau d'ulongs, mais je n'arrive pas à trouver quoi faire avec les poids.

J'aimerais utiliser la fonction standard de sauvegarde des tableaux.

Quelqu'un a-t-il un algorithme pour le double cryptage restaurable en ulong ?


Je pense qu'une grille doit être sauvegardée dans un format simple et utilisable dans MQL5 (en le prenant comme base), et je dois l'utiliser pour écrire des convertisseurs pour différents formats de différents paquets de réseaux neuronaux.

 
Urain:

Je prépare une fonction pour sauvegarder la grille dans un fichier bin. Toutes les informations sont facilement cryptées dans un tableau d'ulongs, mais je n'arrive pas à trouver quoi faire avec les poids.

J'aimerais utiliser la fonction standard de sauvegarde des tableaux.

Est-ce que quelqu'un a un algorithme pour le cryptage restaurable de double en ulong ?


Je pense que la grille devrait être sauvegardée dans un format simple, utilisable dans MQL5 (en le prenant comme base), et les convertisseurs pour les différents formats des différents paquets de réseaux neuronaux devraient être écrits à partir de ce format.


Pourquoi FileWriteArray ne vous convient-il pas ? Je ne comprends pas le problème. Pouvez-vous nous donner un exemple ?

De toute façon, la configuration de la grille dans un fichier et les poids dans un autre.

Je ne vois pas ce qui est plus pratique pour MQL, et je ne vois pas pourquoi nous devonsrétablir le chiffrage, car cela provoquera un freinage inutile.

 
her.human:

Quel est le problème avec FileWriteArray ? Je ne comprends pas le problème. Pouvez-vous nous donner un exemple ?

Dans tous les cas, la configuration de la grille dans un fichier et les poids dans un autre.

Je ne vois pas ce qui est plus pratique pour MQL, et je ne vois pas pourquoi je doisrétablir le cryptage, car cela provoquera un freinage inutile.

Oui, ce sera lent (selon mon estimation, il faudra 5 secondes pour crypter 1 mile de poids), je veux juste stocker à la fois les poids et la configuration de la grille dans un seul fichier, et je me fiche du nombre de fichiers que cela prendra, je le trouverai pratique.

Pour FileWriteArray il suffit de vouloir affiner, mais en présence d'un tableau ulong formant une description du réseau (nombre de couches, nombre de neurones, types de neurones, la relation entre eux) et il est toujours attaché un tableau de poids, mais en double,

comment faire tenir tout cela dans un fichier bin (en supposant que le partitionnement n'est pas clair, le partitionnement lui-même est encodé dans les premiers chiffres de la grille) ?

 
Urain:

0. Je prépare une fonction pour sauvegarder la grille dans un fichier bin. Toutes les informations sont facilement cryptées dans un tableau d'ulongs, mais je n'arrive pas à trouver quoi faire avec les poids.

J'aimerais utiliser la fonction tableau standard, mais je ne sais pas comment faire.

1. quelqu'un a-t-il un algorithme de double cryptage récupérable pour ulong ?


Je pense qu'une grille devrait être sauvegardée dans un format simple, utilisable dans MQL5 (en le prenant comme base) et utiliser ce format pour écrire des convertisseurs pour différents formats de différents paquets de réseaux neuronaux.

0. C'est extrêmement prématuré. Tout d'abord, il est absolument nécessaire de clarifier et d'approuver l'ensemble des données, en les faisant correspondre sans ambiguïté à la structure et à la configuration de la grille, à un niveau logique. Le stockage physique n'est en aucun cas un problème.

1. C'est facile. Dans mql5 il y a un trou spécial pour de telles conversions - des structures de types différents peuvent être assignées les unes aux autres sans limitation, à condition qu'elles aient la même taille.

// ulong et double sont exactement les mêmes.

Pour un exemple pervers, voir ici : https://www.mql5.com/ru/forum/3775/75737#comment_75743

2. Mmmm... D'un côté, je suis d'accord - le format doit être pratique et simple, de l'autre, il doit être très universel, comme le xml. Peut-être prévoir deux options (autant que possible) : l'une textuelle, l'autre binaire. Et entre-temps -- voir #0.

---

Je me suis promené dans cette branche, hésitant encore à intervenir ou non... Je n'ai donc pas pu résister.

Une pensée me vient à l'esprit. Une. // Je veux dire, j'ai beaucoup de pensées, mais une seule. :)

L'idée est la suivante : le code de la grille doit être généré après une configuration préliminaire dans le "grid-editor" (configurateur). // Cette idée a déjà été suggérée à plusieurs reprises et je ne me souviens pas qu'elle ait été rejetée.

D'où le schéma - représentation intermédiaire obligatoire (par exemple, sous forme de fichier xml) contenant des informations complètes sur la structure du neuronet.

Une représentation intermédiaire est soigneusement réfléchie, analysée pour son exhaustivité et d'autres subtilités, validée et fixé par.

Ce n'est qu'après que vous pourrez coder (séparément) : (1) toutes sortes de configurateurs de grilles, (2) des codogénérateurs - traduisant la représentation intermédiaire en code mql5.

Il peut y avoir plusieurs mises en œuvre des deux, ce qui est bon et juste.

 
Urain:

Oui, les freins seront (1 mille poids par mon estimation crypteront 5 secondes), il suffit de vouloir et le poids et le dispositif de grille dans un fichier à stocker, et puis disperser un tas de fichiers et le diable lui-même se cassera une jambe, dans ce que je vois la commodité.

Je veux affiner FileWriteArray, mais j'ai un tableau ulong formant la description du réseau (nombre de couches, nombre de neurones, types de neurones, connexions entre eux) et un tableau de poids qui y est attaché, mais en double,

comment faire tenir tout cela dans un seul fichier bin (en supposant que le partitionnement n'est pas clair, le partitionnement lui-même est crypté dans les premiers chiffres de la grille) ?

Je suis catégoriquement contre le fait de tout mettre dans un seul dossier. Description du réseau séparément - poids séparément. Sinon, d'autres problèmes inutiles surgiront.

 
Pourquoi une poubelle ? Un fichier texte brut ne serait-il pas mieux, pour que vous puissiez le regarder avec vos yeux ?