Article : Prévision des prix avec des réseaux neuronaux - page 14

 
Neutron, l'effet de lissage de l'augmentation du nombre d'entrées est légitime. Mais le retard peut être déterminé par de nombreux facteurs, aussi bien le manque de ces entrées que les éventuelles imperfections du réseau, peut-être le sous-entraînement. Il s'agit d'une autre question si cela, avec tous les "+" aux critères ci-dessus, donne un décalage.
 
Neutron:

Ceci montre les résultats du test de la capacité prédictive des deux NS.


La figure montre en rouge la série temporelle originale (RT), en bleu la prédiction avec une barre d'avance du réseau linéaire à couche unique, et en vert le réseau non linéaire à double couche. La profondeur d'immersion est la même dans les deux cas. On peut voir que pour ce cas artificiel, il y a un résidu marqué des données prédites sur le graphique de tendance BP. Je me demande si mes collègues expérimentés observent cet effet, et si oui, à quoi cela pourrait-il être lié ?

Votre réseau se comporte bizarrement : il reçoit le même ensemble de données d'entrée dans la section des tendances et obtient des prévisions différentes (il obtient une ligne brisée sur le graphique alors qu'elle devrait être droite). À cet égard, les questions sont les suivantes :

1) combien de neurones y a-t-il dans les couches intermédiaires du réseau ?

2) combien d'entrées ?

3) Qu'est-ce qui est alimenté aux entrées ?


En ce qui concerne le décalage des prédictions sur la tendance. C'est comme ça que c'est censé fonctionner. Vous avez introduit environ 30 vecteurs d'apprentissage dans le réseau, où des valeurs croissantes consécutives de 0,1 ont généré une hausse de 0,1, et introduit un vecteur où les mêmes valeurs croissantes consécutives ont généré une baisse de 3. Vous avez entraîné le réseau sur des données incohérentes. Il a donc fait la moyenne de vos 31 prédictions contradictoires...


J'ai aussi construit un NS à 2 couches. Avec 3 entrées et 3 neurones intermédiaires. Les entrées étaient des valeurs incrémentales. Pour comparer, j'ai entraîné ce réseau une fois sur toutes les données, et la deuxième fois, j'ai exclu les valeurs aberrantes de l'entraînement - c'est-à-dire tous les vecteurs d'entraînement qui contenaient des valeurs trop grandes dans les entrées, c'est-à-dire qui s'effondraient très brusquement par 3. La différence est évidente :

 
rip:
slava1:
Eh bien, on peut discuter longtemps de la question de savoir qui comprend ce qu'ils comprennent, ou ne comprennent pas. La conversation portait sur la préparation des données. Je comprends que personne ne veuille discuter de cette question ici. Pitié

Si vous voulez donner une conférence sur la façon de préparer des données pour la formation NS, je ne pense pas qu'il faille le faire sur ce forum, peu de gens seraient intéressés ici.

Vous avez tort ! Je pense qu'il serait intéressant de lire l'expérience des praticiens, comment ils s'y prennent.

 
ds2:

Votre réseau se comporte étrangement - il reçoit les mêmes ensembles de données d'entrée sur la section de tendance, mais donne des prévisions différentes (il apparaît comme une ligne brisée sur le graphique, alors qu'elle devrait être droite). À cet égard, les questions sont les suivantes :

1) combien de neurones y a-t-il dans les couches intermédiaires du réseau ?

2) combien d'entrées ?

3) Qu'est-ce qui est alimenté aux entrées ?


En ce qui concerne le décalage des prédictions sur la tendance. C'est comme ça que c'est censé fonctionner. Vous avez introduit environ 30 vecteurs d'apprentissage dans le réseau, où des valeurs croissantes consécutives de 0,1 ont généré une hausse de 0,1, et introduit un vecteur où les mêmes valeurs croissantes consécutives ont généré une baisse de 3. Vous avez entraîné le réseau sur des données incohérentes. Il a donc fait la moyenne de vos 31 prédictions contradictoires...


J'ai aussi construit un NS à 2 couches. Avec 3 entrées et 3 neurones intermédiaires. L'entrée a été alimentée par des valeurs incrémentales. Pour comparer, j'ai entraîné ce réseau une fois sur toutes les données, et la deuxième fois j'ai exclu les valeurs aberrantes de l'entraînement - c'est-à-dire tous les vecteurs d'entraînement qui contenaient des valeurs trop grandes dans les entrées, c'est-à-dire qui s'effondraient très brusquement par 3. La différence est évidente :

ds2, et tous ceux qui ont répondu, merci beaucoup pour votre attention et vos conseils avisés - cela m'a vraiment aidé. Le fait est que j'ai limité le nombre de cycles d'entraînement (je crois que cela s'appelle Epochs) à 100 fois pour accélérer la prévision dans mon réseau. Bien sûr, ce n'était pas suffisant, et le réseau n'apprenait pas correctement. Après avoir augmenté le nombre d'époques à 1000, tout a fonctionné correctement - tic à tic (enfin, presque).

J'ai un réseau à deux couches avec une non-linéarité sous forme de tangente hyperbolique, avec le nombre de neurones dans une couche cachée 2 et le nombre de synapses d*2+2, où d est une dimension de l'entrée NS. J'ai d=2, pour le cas présenté en fig. et le nombre de vecteurs d'apprentissage est de 6. Le nombre de vecteurs dans l'échantillon d'entraînement est égal au nombre de synapses, je vois donc que le réseau ne se réentraîne pas et n'essaie pas de lisser la prévision, ce qui permet de suivre les sauts de prix plus efficacement. Pour l'entraînement, j'ai également introduit une séquence de valeurs incrémentielles en entrée. Je ne suis pas encore familiarisé avec l'art de la préparation des données d'entrée (je veux dire votre "exclusion des pics de la formation pour la deuxième fois") mais j'espère maîtriser cet art très bientôt.

Voici un résultat pré-intéressant :


Il s'agit d'une prédiction en une étape avec ré-entraînement à chaque étape d'un SN non linéaire à une couche avec UNE entrée ! et un échantillon d'entraînement = 2 vecteurs avec un élément dans chacun.

Je suis époustouflé....

Il s'avère que les réseaux Neron et l'intelligence artificielle ne sont pas simples, mais très simples !

 
Neutron:
ds2:

Votre réseau se comporte étrangement - il reçoit les mêmes ensembles de données d'entrée sur la section de tendance, mais donne des prévisions différentes (il apparaît comme une ligne brisée sur le graphique, alors qu'elle devrait être droite). À cet égard, les questions sont les suivantes :

1) combien de neurones y a-t-il dans les couches intermédiaires du réseau ?

2) combien d'entrées ?

3) Qu'est-ce qui est alimenté aux entrées ?


En ce qui concerne le décalage des prédictions sur la tendance. C'est comme ça que c'est censé fonctionner. Vous avez introduit environ 30 vecteurs d'apprentissage dans le réseau, où des valeurs croissantes consécutives de 0,1 ont généré une hausse de 0,1, et introduit un vecteur où les mêmes valeurs croissantes consécutives ont généré une baisse de 3. Vous avez entraîné le réseau sur des données incohérentes. Il a donc fait la moyenne de vos 31 prédictions contradictoires...


J'ai aussi construit un NS à 2 couches. Avec 3 entrées et 3 neurones intermédiaires. L'entrée a été alimentée par des valeurs incrémentales. Pour comparer, j'ai entraîné ce réseau une fois sur toutes les données, et la deuxième fois j'ai exclu les valeurs aberrantes de l'entraînement - c'est-à-dire tous les vecteurs d'entraînement qui contiennent des valeurs trop grandes dans les entrées, c'est-à-dire qui s'effondrent très fortement par 3. La différence est évidente :

ds2, et tous ceux qui ont répondu, merci beaucoup pour votre attention et vos conseils avisés - cela m'a vraiment aidé. Le fait est que j'ai limité le nombre de cycles d'entraînement (je crois que cela s'appelle Epochs) à 100 fois pour accélérer la prévision dans mon réseau. Bien sûr, ce n'était pas suffisant, et le réseau n'apprenait pas correctement. Après avoir augmenté le nombre d'époques à 1000, tout a fonctionné correctement - tic à tic (enfin, presque).

J'ai un réseau à deux couches avec une non-linéarité sous forme de tangente hyperbolique, avec le nombre de neurones dans une couche cachée 2 et le nombre de synapses d*2+2, où d est une dimension de l'entrée NS. J'ai d=2, pour le cas présenté en fig. et le nombre de vecteurs d'apprentissage est de 6. Le nombre de vecteurs dans l'échantillon d'entraînement est égal au nombre de synapses, je vois donc que le réseau ne se réentraîne pas et n'essaie pas de lisser la prévision, ce qui permet de suivre les sauts de prix plus efficacement. Pour l'entraînement, j'ai également introduit une séquence de valeurs incrémentielles en entrée. Je suis encore loin d'avoir maîtrisé l'art de la préparation des données d'entrée (je veux parler de votre "exclusion des pics de l'entraînement pour la deuxième fois"), mais j'espère que je vais bientôt apprendre le truc.

Pour améliorer l'échantillon, essayez d'élargir la série d'entraînement, disons, selon ce principe :

il existe deux valeurs adjacentes de la série - x1,x2 dans l'intervalle qu'elles additionnent x1,2 = (x1+x2)/2


Cette méthode fonctionne bien pour les séries temporelles avec une forte corrélation des valeurs voisines.

C'est le cas d'un flux de citations.

 
Neutron:


Voici un résultat pré-intéressant :


Il s'agit d'une prédiction à un pas en avant avec ré-entraînement à chaque pas d'une NS non linéaire à une couche avec UNE entrée ! et un échantillon d'entraînement = 2 vecteurs avec un élément dans chacun.

Je suis époustouflé...


Puis-je vous demander de poster le fichier de données brutes à partir duquel les vecteurs d'entraînement ont été générés ?

 

À quoi doit ressembler le format du fichier pour que vous puissiez le lire. Le fait est que j'écris mes propres NS à partir de rien et que j'utilise les données dans un format qui me convient.


Для улучшения выборки попробуйте расширить обучающий ряд, скажем по такому принципу:

Il y a deux valeurs adjacentes d'une série - x1,x2 entre elles ajouter x1,2 = (x1+x2)/2

Cette méthode fonctionne bien sur les séries temporelles, avec une forte corrélation des valeurs adjacentes.

C'est le cas des citations en streaming.

Ce cas convient aux séries positivement corrélées. Le prix VR a une corrélation négative significative entre les échantillons voisins, donc cette méthode ne sera pas correcte.

Une dernière chose. Il serait bon que les estimés utilisateurs du forum postent des arguments étayés en faveur d'une plus grande capacité de prédiction de la NS à deux couches par rapport à la NS à une seule couche, toutes autres conditions étant égales.

En option. Vous trouverez ci-dessous une archive zip contenant un vecteur de test, qui est illustré à la Fig. Découpez-le vous-même comme bon vous semble.

Dossiers :
rnd.zip  1 kb
 
Neutron:

Je suis époustouflé...

Il s'avère que les réseaux Nero et l'intelligence artificielle ne sont pas seulement, mais très simples !


Je n'ai pas encore essayé d'appliquer concrètement la NS (bien que je semble y être porté dans le contexte de la dernière idée), mais d'un point de vue humain, le vecteur de test est constitué de dépendances très simples (environ deux ou trois paramètres) et devrait être très facilement approximé par morceaux. Je soupçonne que c'est exactement ce que fait NS. Le réarrangement rapide peut être une conséquence de la simple simplicité de NS, c'est-à-dire que dans ce cas, la mémoire courte est un bonheur.

 

En général, Candid, je suis d'accord avec vous, mais je veux creuser davantage... Par exemple, dans quelle mesure la complication des NS (couches cachées) est-elle justifiée.

En fait, je suis fou ! Le fait est que si vous représentez la non-linéarité de NS sous une certaine forme, vous pouvez obtenir la solution analytique exacte pour les poids. Ceci, à son tour, signifie qu'il sera possible de refuser la méthode de la Propagation Inverse des Erreurs pour l'entraînement du réseau et d'obtenir le résultat le plus précis possible en une seule action, sans qu'il y ait 1000 Epoques d'entraînement ! !!


P.S. J'ai oublié de vous prévenir que j'utilise une synapse avec un niveau d'excitation constant dans chaque neurone.


Addendum.

Je l'ai apporté, je l'ai apporté et je l'ai porté ;-)

Il s'agit de la solution analytique "FINE" pour les échelles d'une NS non linéaire à une seule couche :

Ça m'a fait sourire.

Mais l'ensemble du calcul prend une milliseconde.
 

Expliquez-moi cela en tant que novice en "neurosciences"... Je comprends que le réseau en question est un perceptron multicouche.

Quelle est la raison du choix de ce type de réseau, pourquoi pas Hopfield ou Kohonen ou autre chose ?