Réseau neuronal sous forme de script - page 9

 
Andy_Kon писал (а) >>

Quelle est l'importance de la précision pour le sigmoïde ?

Après 20, la précision est dans le 9ème chiffre...


Dans la formation, cela a un effet. Parfois, cela peut avoir un effet très grave sur la convergence, pouvant aller jusqu'au désapprentissage.

Cela ne devrait pas poser de problème si vous utilisez GA pour la formation.

 
YuraZ писал (а) >>

3- ce qu'il faut saisir (le nombre de saisies est clair)

4- quand se recycler

5- quel algorithme d'apprentissage choisir

GA - génétique

BP -


3. Vraiment un problème, tout dépend de l'imagination :) .

4. C'est ici que vous pouvez tricher. Créez un réseau avec la possibilité d'oublier. Ce n'est pas si difficile.

Supposons que vous puissiez faire ce qui suit (excellent pour apprendre avec BP) :

Limitez le nombre de motifs - disons 1000.

Lorsque le motif suivant apparaît (nouvelle TF, disons)

- supprimer le motif le plus ancien

- Faites un cycle d'apprentissage

- Pour un nouveau modèle, nous devons l'enseigner 5 fois.



Qu'est-ce que vous obtenez ?

+ Le cycle de formation ne dure pas longtemps.

+ L'ancien schéma n'est pas oublié tout de suite.

- le nouveau modèle n'est pas non plus appris tout de suite, mais

+ mais plus vite que l'ancien modèle est oublié à cause de l'apprentissage agressif (5 fois UNE FOIS).

- uniquement adapté à l'apprentissage de la BP



5. C'est un dilemme,

GA - il descend régulièrement vers l'optimum, il est protégé des minima locaux grâce à ses propriétés, mais il consomme beaucoup de mémoire et est extrêmement lent.

BP ne garantit aucun résultat, bien que la probabilité soit très élevée (c'est-à-dire que si GA est capable d'enseigner, BP le fera aussi), il est plus rapide, ne consomme pas de mémoire, mais a besoin de fonctionnalités comme Momentum (se débarrasser des minima locaux) et adaptive step (les minima sont aussi sautés, et la vitesse d'apprentissage augmente plusieurs fois).



Je suis pour BP.

 
TheXpert писал (а) >>

3. Vraiment un problème, tout dépend de l'imagination :) .

4. C'est là que vous pouvez tricher. Créez un réseau avec la possibilité d'oublier. Ce n'est pas si difficile.

Supposons que vous puissiez faire ce qui suit (excellent pour apprendre avec BP) :

Limitez le nombre de motifs - disons 1000.

Lorsque le motif suivant apparaît (nouvelle TF, disons)

- supprimer le motif le plus ancien

- Faites un cycle d'apprentissage

- Pour un nouveau modèle, nous devons l'enseigner 5 fois.



Qu'est-ce que vous obtenez ?

+ Le cycle de formation ne dure pas longtemps.

+ L'ancien schéma n'est pas oublié tout de suite.

- le nouveau modèle n'est pas non plus appris tout de suite, mais

+ mais plus vite que l'ancien modèle est oublié à cause de l'apprentissage agressif (5 fois UNE FOIS).

- uniquement adapté à l'apprentissage de la BP



5. C'est un dilemme,

GA - il descend régulièrement vers l'optimum, il est protégé des minima locaux grâce à ses propriétés, mais il consomme beaucoup de mémoire et est extrêmement lent.

BP ne garantit aucun résultat, bien que la probabilité soit très élevée (c'est-à-dire que si GA est capable d'enseigner, 95% de BP le fera aussi), il est plus rapide, ne consomme pas de mémoire, mais a besoin de fonctionnalités comme Momentum (se débarrasser des minima locaux) et adaptive step (les minima sont également sautés, et la vitesse d'apprentissage augmente plusieurs fois).



Je suis pour BP.


Voici un exemple de travail de GA

source dans SI...


GA est loué pour sa rapidité

Il y a aussi MGA, qui est encore plus courageux.


---

En fait, GA ou MGA est une recherche rapide du maximum ou du minimum.

au moins METAQUOTES a utilisé GA pour la vitesse, pas autre chose ...

Dossiers :
dio.zip  4 kb
 
YuraZ писал (а) >>


En termes de vitesse, GA est réputé pour sa rapidité.

Il y a aussi MGA, qui est encore plus animé.


---

En fait, GA ou MGA est une recherche rapide du maximum ou du minimum.

au moins les experts METAQUOTES ont utilisé GA pour la vitesse dans leur test et pas autre chose ...


GA est définitivement plus lent que BP.

Metaquotes l'a appliqué de manière tout à fait correcte, car GA est une chose très polyvalente. Et bien sûr, il sera plus rapide qu'une simple surenchère.

La question est la même qu'en neuronique : ce n'est pas la neuronique qui reconnaît les lettres, mais des algorithmes spécialisés, que les réseaux FR n'utilisent pas.

De même, il est préférable d'utiliser des algorithmes spécialisés pour la formation, ils sont a priori meilleurs.

 
TheXpert писал (а) >>

GA est clairement plus lent que BP.

Metaquotes l'a appliqué de manière tout à fait correcte car GA est très polyvalent. Et bien sûr, ce sera plus rapide que la simple force brute.

La question est différente, tout comme pour les neurones : les lettres ne sont pas reconnues par les neurones, mais par des algorithmes spécialisés, que les réseaux FR n'utilisent pas.

De même, il est préférable d'utiliser des algorithmes spécialisés pour la formation, ils sont a priori meilleurs.

Et d'où vient cette information, si ce n'est pas un secret ? Qu'en est-il de la formation de FR avec des exemples ?

Et quelle est la différence (en principe) entre un algorithme spécialisé et un réseau neuronal entraîné ?

 
Sergey_Murzinov писал (а) >>

D'où vient cette information, si ce n'est pas un secret ? Qu'en est-il de la formation FR avec des exemples ?

Et quelle est la différence (en principe) entre un algorithme spécialisé et un réseau neuronal entraîné (formé) ?

Tout d'abord, les réseaux neuronaux ne sont pas la meilleure solution pour la reconnaissance des caractères. Bien que le néocognitron ait atteint 99,7% avec le dictionnaire, sur les caractères avec des tours, vraiment pas le point.

Allez sur RSDN.ru et lisez les fils de discussion relatifs aux réseaux neuronaux. Il y a des gars très intelligents là-bas, d'ailleurs, je pense que vous pouvez trouver certains d'entre eux ici aussi :) .


Sur l'apprentissage par l'exemple, comme ceci :

- vectoriser (faire un squelette)

- compter les intersections et leurs positions relatives

- prendre, par exemple, un couple de premiers coefficients de transformée de Fourier, en normalisant au préalable pour les insensibles à la taille. À propos, avec FT, on peut obtenir une insensibilité aux rotations, EMMNIP.

- moyenne pour les exemples

- le mettre dans la base comme référence


En quoi est-ce différent ?

Lorsque vous utilisez un algorithme spécial, vous savez comment il fonctionne.

Vous ne savez pas comment un réseau neuronal le fait. Vous savez simplement que cette fonction particulière définie par un réseau neuronal est capable d'interpoler les entrées en sorties avec un haut degré de précision.

 

Yaaaaaaaaa !!!!!!!

À propos, RSDN.RU est un forum destiné aux programmeurs, et non aux développeurs d'algorithmes de réseaux neuronaux et de leurs applications.

Je vous informe que FineReader utilise des blocs de technologie de réseaux neuronaux (dernières versions). Et je conseille également de lire des ouvrages spécialisés (pas de vulgarisation scientifique) et de lire les branches des forums spécialisés pour se faire une idée des réseaux neuronaux.

Un réseau entraîné est également un algorithme spécial. L'exemple le plus simple peut être vu en générant du code C dans le programme NeuroShell2. Le code du réseau est parfaitement visible.

 
Sergey_Murzinov писал (а) >>

Pour votre information, FineReader utilise des blocs de technologie de réseau neuronal (dernières versions). Et pour se faire une idée des réseaux neuronaux, je conseille de lire des ouvrages spécialisés (pas de vulgarisation scientifique) et de lire les branches des forums spécialisés.

OK, puis-je avoir quelques liens sur le sujet ?
 

2 YuraZ

Tout d'abord, je tiens à vous remercier pour votre code de réseau neuronal.

Après une analyse détaillée, j'ai compris que vous utilisez la méthode de décalage neuronal (tableaux _threshold et _t_change) et aussi la méthode d'impulsion (paramètre Momentum) pour accélérer les calculs.

J'ai quelques questions sur sa mise en œuvre.
1) Vous modifiez _t_change dans la fonction de correction des poids, mais n'utilisez ensuite cette correction nulle part pour calculer le nouveau tableau de poids _threshold.

2) Lorsque vous passez la sortie à la fonction sigmoïde, vous soustrayez le paramètre _threshold de la somme, bien que, comme écrit dans la littérature, ce poids de seuil ne soit pas -1 mais +1. Vous devez donc ajouter, et non soustraire. D'autant plus qu'en ajustant les poids, on alimente exactement +1 et non -1.
En fait, je me suis amusé avec ce seuil et cette impulsion, et il s'avère que cela améliore vraiment la vitesse des calculs. Le temps est réduit de plusieurs fois.

3) Je me suis également intéressé à la fonction sigmoïde. Si je comprends bien, de tels paramètres sont dus à votre expérience pratique dans ce domaine, mais je pense que vous avez lu les livres d'Usserman, où il écrit que la plage {0,1} n'est pas optimale. La valeur de la correction du poids est proportionnelle au niveau de sortie, et un niveau de sortie nul entraîne la non modification du poids. Et comme avec des vecteurs d'entrée binaires, la moitié des valeurs seront nulles en moyenne, les poids qui leur sont associés n'apprendront pas non plus !
La solution consiste à amener les entrées dans la plage {-0.5,0.5} et à ajouter un décalage à la sigmoïde également de 0.5. Une telle sigmoïde [1/(1+Exp(-x))-0.5], avec une plage {-0.5,0.5} réduit le temps de convergence de 30-50%.
Le seul problème dans ce cas est de réduire le vecteur d'entrée à une plage de {-0,5,0,5}. Je vais probablement devoir le normaliser. J'ai essayé de le faire, mais pour une raison quelconque, le résultat sigmoïde était toujours positif. J'aimerais connaître votre opinion à ce sujet.

4) Maintenant, qu'en est-il de la façon dont les entrées sont définies. Nous devrions peut-être automatiser ce processus. Que pensez-vous de cette approche : à la sortie, nous attendrons les valeurs 100, 010, 001, comme d'habitude.
Pour définir automatiquement un ensemble de sorties, je suggère de définir le rapport entre le prix maximum et minimum à l'intervalle suivant pour chaque barre (par exemple, 5000 barres sur des barres d'une minute). La valeur de ce ratio sera une indication de la direction dans laquelle le prix a évolué. S'il se situe autour de 1, il est plat. S'il est supérieur à 1, il est en hausse. S'il est compris entre 0 et 1, il est en baisse. Mais je pense que la plage optimale pour l'analyse n'est pas [0, +Є], mais [-EЄ, -A ; -A, A ; A, +Є], ce qui correspondrait incidemment à nos vecteurs de sortie
. L'entrée du réseau sera les K dernières valeurs des N moyennes mobiles (ou la différence entre la MA et le prix moyen de la barre). Les entrées seront donc N*K au total.

Je colle un code de base un peu plus léger et plus clair (bibliothèque de vos fonctions). D'une manière générale, à un stade aussi précoce de développement, il n'est probablement pas nécessaire de créer un produit complet de conseiller expert. Commençons par mettre en place une logique de calcul claire dans le script. Testons tout et écrivons ensuite un indicateur standard sur cette base. Et ensuite, sur cette base, nous irons plus loin - backlinks et comités de réseaux, et probablement beaucoup d'autres choses intéressantes.

P.S.
J'espère que vous continuerez à partager vos développements, j'ai donc une petite requête. Si cela ne vous dérange pas, veuillez supprimer "Insérer des espaces" dans les options de l'éditeur, c'est un peu difficile de lire le code. J'attends avec impatience la nouvelle version. Des suggestions d'essais communs sont possibles.

Dossiers :
 
sergeev писал (а) >>

2 YuraZ


2) Lorsque vous envoyez la sortie à la fonction sigmoïde, vous soustrayez le paramètre _threshold de la somme, bien que, comme écrit dans la littérature, ce poids de seuil n'est pas -1, mais +1. Vous devez donc ajouter, et non soustraire. D'autant plus qu'en ajustant les poids, on alimente exactement +1 et non -1.
En fait, je me suis amusé avec ce seuil et cette impulsion, et il s'avère que cela améliore vraiment la vitesse des calculs. Le temps est réduit de plusieurs fois.

3) Je me suis également intéressé à la fonction sigmoïde. Si je comprends bien, de tels paramètres sont dus à votre expérience pratique dans ce domaine, mais je pense que vous avez lu les livres d'Usserman, où il écrit que la plage {0,1} n'est pas optimale. La valeur de la correction du poids est proportionnelle au niveau de sortie, et un niveau de sortie nul entraîne la non modification du poids. Et comme avec des vecteurs d'entrée binaires, la moitié des valeurs seront nulles en moyenne, les poids qui leur sont associés n'apprendront pas non plus !
La solution consiste à réduire les entrées à la plage {-0.5,0.5} et à ajouter un décalage à la sigmoïde également de 0.5. Une telle sigmoïde [1/(1+Exp(-x))-0.5], avec une plage {-0.5,0.5} réduit le temps de convergence de 30-50%.
Le seul problème dans ce cas est de réduire le vecteur d'entrée à une plage de {-0,5,0,5}. Je vais peut-être devoir le normaliser. J'ai essayé de le faire, mais pour une raison quelconque, le résultat sigmoïde était toujours positif. J'aimerais connaître votre opinion à ce sujet.

2) La formule originale ressemble à ceci : S[j] = Sum(i)(y[i]*w[i,j] - t[j]). C'est-à-dire que le seuil est supprimé, c'est pourquoi on l'a appelé le seuil. Et deux moins dans la formule de recalcul donnent un plus, c'est-à-dire qu'il n'y a pas d'erreur dans l'utilisation du seuil et le recalcul des paramètres.

Si je me trompe, l'auteur peut me corriger.

3. Ce n'est pas un sigmoïde - c'est un demi-sigmoïde. Le temps de convergence de ces fonctions dépend des données d'entrée du réseau. Il se peut que la bisigmoïde converge plusieurs fois plus vite, mais avec des données différentes, on peut obtenir une image complètement différente.