PERCEPTRON MULTICOUCHE ET MARTINGALE POUR LE LOTO

BlackWizzard - 4 déc. 2001 à 18:29
depelek Messages postés 26 Date d'inscription lundi 3 février 2003 Statut Membre Dernière intervention 4 juin 2008 - 13 déc. 2010 à 01:46
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/2181-perceptron-multicouche-et-martingale-pour-le-loto

depelek Messages postés 26 Date d'inscription lundi 3 février 2003 Statut Membre Dernière intervention 4 juin 2008
13 déc. 2010 à 01:46
Pour ce qui est de ta source pas de craintes et ce n'était qu'à titre de renseignement. Rien ne dit que je vais l'utiliser, tout dépends des résultats et de ce que ça peut apporter de plus à mes recherches.

Merci en tout cas pour l'aide que tu m'as apportée pour modifier sommairement ta source.
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
12 déc. 2010 à 11:38
Cette source est libre, tu peux l'utiliser comme tu veux. Merci de citer l'origine de ta source si tu en redistribues une autre version. Si tu veux vendre un logiciel, précise ma contribution à sa juste valeur (évite par exemple : "logiciel prouvé par untel" :-)
Pour le n° complémentaire, je ne sais plus, ça fait longtemps...
depelek Messages postés 26 Date d'inscription lundi 3 février 2003 Statut Membre Dernière intervention 4 juin 2008
12 déc. 2010 à 11:22
Ok merci

Pour les chiffres entre parenthèses je me doutais un peu mais je voulais avoir confirmation.
Pour iNbSortiesSignif j'ai bien mis 5 mais lors d'un pas à pas je m'appercois que iNumeroComplementaire se retrouve avec le dernier des 5 chiffres de la sélection, je trouvais ça surprenant.

Dernière chose, peut on utiliser cette source librement car je désirerais ne garder que la partie apprentissage pour le loto et en faire un tout autre programme.

Merci pour toutes ces infos qui m'ont fait avancer
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
12 déc. 2010 à 10:11
Si tu as mis iNbSortiesSignif = 5, alors il n'y a plus que 5 boules prises en compte, et donc il n'y a plus de n° complémentaire (il suffit de ne pas utiliser les variables avec C pour Complémentaire). Les 3 n° entre parenthèses indiquent les 3 plus probables suivantes (hors tirage donc, mais qui ne sont pas passés loin de sortir effectivement). Si tu gagnes au loto, je ne demande que 5% des gains :-)
depelek Messages postés 26 Date d'inscription lundi 3 février 2003 Statut Membre Dernière intervention 4 juin 2008
11 déc. 2010 à 18:45
Il semblerait que ça fonctionne, par contre je n'ai pas supprimé la partie numéro complémentaire et
je suppose que le dernier des 5 chiffres soit considéré comme le complémentaire.

Peut il y avoir une incidence que ce 5ème chiffre soit prit en compte en tant que complémentaire?

Autre question :

lors de la fin d'apprentissage il est noté :
Prévision finale du prochain tirage :
Sortie : 42 41 25 22 01 (04 18 37)
que veulent dire les numéros entre parenthèses?

merci
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
11 déc. 2010 à 11:11
A ma connaissance il n'y a pas de théorie sur comment configurer un RN : il faut essayer différentes combinaisons. Depuis cette source, j'ai fait un RN auto-configurant qui montre que l'on peut obtenir de bien meilleur résultat... La seule théorie qui existe je crois c'est que 2 couches intermédiaires suffisent à faire du RN un apprentisseur universel (inutile donc d'avoir plus de 2 couches intermédiaires), et pour le reste : faut tester encore et encore... L'idée générale est qu'il est possible de mesurer de taux d'apprentissage, et SURTOUT LE TAUX DE PREDICTION SUR UN HISTORIQUE : voilà la clé d'un projet fructueux... Comme je n'ai pas touché ce code depuis des années, je ne peux pas t'aider directement sur la source (il faut d'abord fusionner plusieurs sources distinctes).
depelek Messages postés 26 Date d'inscription lundi 3 février 2003 Statut Membre Dernière intervention 4 juin 2008
11 déc. 2010 à 10:50
Je reviens sur les couches, à l'origine c'était :

rn.iNbNeuronesCouche(1) = 14 (14 pour les 2 tirages + complémentaire)
rn.iNbNeuronesCouche(2) = 14 ici de nouveau 14
rn.iNbNeuronesCouche(3) = 49 enfin 49

vu que nous n'avons plus qu'un seul tirage et 5 numéros j'ai marqué 5 au lieu de 14

rn.iNbNeuronesCouche(1) = 5
rn.iNbNeuronesCouche(2) = 5
rn.iNbNeuronesCouche(3) = 49

pourquoi mettre donc en couche 2 49 voir plus alors que à l'origine il n'y a que 14?
Enfin : la couche 3 devrait être à combien dans ces cas la?

merci
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
11 déc. 2010 à 09:52
Pour l'échec de l'apprentissage, il faut voir avec le code très simple la différence entre le xor et le sinus : le xor est assez facile à apprendre (grâce à l'algo. général du Perceptron mis au point il y a 2 ou 3 décennies), alors que le sinus est plus difficile à apprendre : il faut bien le configurer pour y arriver (sinon on obtient donc un échec semblable au tien).
Pour la couche intermédiaire, mieux vaut mettre une valeur plus proche du nombre de neurones en sortie, donc 49, voir même plus : c'est tout l'intérêt de mon RN-auto-configurant : on peut lui faire tester plusieurs combinaisons pour trouver la meilleure (note : une bonne combinaison en VB6 fonctionnera aussi en VB .Net avec le code minimal, même les poids sont compatibles entre les 2 versions, si la structure est la même).
depelek Messages postés 26 Date d'inscription lundi 3 février 2003 Statut Membre Dernière intervention 4 juin 2008
11 déc. 2010 à 09:21
merci pour l'info, c'est ce que j'ai fais et en fin d'apprentissage il me dit "echec à l'apprentissage" du coup le fichier n'est pas modifié. pourquoi echec, je ne comprends pas trop!!!

Autre question :
voici les valeurs que j'ai modifié pour un seul tirage et à 5 numéros

est ce que ça correspond, car je ne savais pas trop pour la couche 2

rn.iNbNeuronesCouche(1) = 5
rn.iNbNeuronesCouche(2) = 5
rn.iNbNeuronesCouche(3) = 49


merci
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
11 déc. 2010 à 09:06
Le fichier .pds est le fichier des poids des neurones : il est entièrement refait si tu relances l'apprentissage. Bien sûr, si tu changes la structure du RN (par exemple pour ajouter ou enlever une sortie = une boule), alors il faut refaire l'apprentissage.
Voir aussi :
VBPerceptron : le code le + simple possible en VB6 & VB .Net
www.vbfrance.com/code.aspx?ID=5612
depelek Messages postés 26 Date d'inscription lundi 3 février 2003 Statut Membre Dernière intervention 4 juin 2008
10 déc. 2010 à 20:05
Effectivement.... bon courage

j'ai commencé à regarder pour faire des modifications mais car il y a toujours un mais!!!

il se base sur 14 tirages et je me suis apperçu qu'il va lire un fichier appelé loto.pds illisible.

Que fait ce fichier, comment l'éditer ou le modifier???? car c'est de la que vient mon fameux 14 tirages que je voudrais modifier

merci
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
10 déc. 2010 à 15:52
Disons que je voulais justement le reprendre en VB .Net pour qu'il soit plus facile à modifier : là, ce ne sera pas évident, il faut peut être commencer par regarder les démos les + simples pour voir le principe, bon courage !
depelek Messages postés 26 Date d'inscription lundi 3 février 2003 Statut Membre Dernière intervention 4 juin 2008
10 déc. 2010 à 14:59
Merci pour cette reponse rapide,

sinon y a t'il possibilité de le modifier sois même sans trop de contrainte?

J'ai regardé rapidement et la partie pour le loto n'est pas très grande

Seul problème, je n'ai pas tout compris le principe des differentes couches, de plus le complémentaire sera à supprimer.

Au pire y a t'il moyen d'avoir simplement une explication des differentes étapes pour pouvoir correctement et sans erreur modifier cette partie qui m'interresse

merci
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
10 déc. 2010 à 13:47
Bonjour, j'y pense chaque semaine, de même pour le RN auto-configurant : c'est sûr que ça va arriver un jour... mais il faut être patient !
depelek Messages postés 26 Date d'inscription lundi 3 février 2003 Statut Membre Dernière intervention 4 juin 2008
10 déc. 2010 à 13:25
Bonjour,

dommage que cette source ne soit pas actualisée pour le loto 5/49 actuel

Y a t'il une chance de le voir un jour?

merci
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
15 févr. 2009 à 14:11
Moi je n'ai plus trop le temps, mais cela fait partie de ma ToDo liste, il faudra cependant être patient (voir très patient...)
cs_gg6259 Messages postés 1 Date d'inscription mercredi 11 février 2009 Statut Membre Dernière intervention 15 février 2009
15 févr. 2009 à 13:17
Bonjour

je ne suis pas informaticien. Qui peut modifier ce programme pour l'adapter au nouveau loto français depuis le 6 octobre. C'est à dire uniquement, 5 numeros sur 49 au lieu de 6/49 et numero complementaire. Je n'attache pas d'importance au numero chance.

merci beaucoup

cdt
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
3 août 2007 à 16:07
Salut, première question : en fait il faut que le jeu d'apprentissage soit représentatif, et dans le cas général, il n'est pas prudent de chercher à obtenir un jeu minimal (car on risque de s'éloigner de la représentativité). Dans ton cas, tu sembles ne pas avoir assez de données, mais essaies quand même de faire en sorte qu'il soit représentatif (dupliquer certains échantillons ne sert à rien, sauf si c'est pour rétablir une statistique de représentation). Ensuite, une fois que tu es certain d'avoir un jeu d'apprentissage représentatif, alors tu peux te préoccuper de l'optimisation de l'apprentissage, notamment la vitesse d'apprentissage : il faut rechercher l'optimum entre le taux d'apprentissage et la vitesse d'apprentissage (plus tard il faudra vérifier aussi le risque de sur-apprentissage et le taux de prédiction). Mais ne mélange pas le problème de la vitesse et celui de la représentativité ! Pour calculer un taux d'apprentissage, il faut 2 paramètres : la précision et le taux : par exemple, je veux que mon RN apprenne 95% des échantillons avec une précision de 80% : un niveau de 0.2 max. pour 0 et 0.8 min. pour 1.

Seconde question : en fait, je n'ai pas encore testé le système permettant d'éviter le sur-apprentissage, j'ai surtout testé l'évolution du taux de prédiction, ce qui est encore mieux (le sur-apprentissage peut toujours être détecté dans le cas ou le taux de prédiction serait trop faible par rapport au tau d'apprentissage). Si j'ai bien compris la question, oui, la fenêtre glissante permet de fixer les limites entre l'apprentissage et la prédiction au sein d'une liste commune au départ (les échantillons suivant le rang n ne sont pas appris, ils servent juste à calculer le taux de prédiction : jeu de test).

3ème question : Non, le fait de passer les données dans un ordre aléatoire ne devrait rien changer au résultat, puisque l'algo s'arrête en fonction du calcul de l'erreur globale. Il suffit de passer une trentaine de couples donnée/valeur (avec plus d'échantillons là où ça bouge plus : c'est cela la représentativité), de normaliser entre 0 (pour -10) et 1 (pour +10), et c'est tout. Mais cet exemple ne sert à rien d'autre qu'à vérifier que le RN est capable d'apprendre, puisque la prédiction, par définition, d'une fonction y=f(x), c'est l'apprentissage même de la fonction ! Le RN est surtout utile là ou les maths sont impuissantes : prédire même lorsque les données sont incomplètes (dans le cas avec plusieurs entrées). Voir la démo www.vbfrance.com/code.aspx?ID=5612 pour l'apprentissage assez difficile mais réussi d'une sinusoïde. Pour revenir à l'exemple que tu donnes, je crois que le sur-apprentissage ne se pose pas ici, car il n'y a rien à prédire, il faut juste apprendre, donc apprendre autant qu'on peut, il n'y a pas de limite ici. Je te rappelle que l'apprentissage ne s'arrête qu'en fonction du taux d'erreur global sur tous les échantillons, donc de toute la plage -10 à +10. Le sur-apprentissage ne peut se manifester uniquement lorsqu'un jeu d'apprentissage à un trop bon taux par rapport à un taux de prédiction, donc pas dans ce cas.
cs_Nono38000 Messages postés 3 Date d'inscription mardi 24 juillet 2007 Statut Membre Dernière intervention 3 août 2007
3 août 2007 à 13:08
Bonjour,

j'ai une autre question sur le mlp: je pensais qu'on ne donnait qu'une seule fois une même donnée à apprendre au réseau neuronal, mais à y réflechir, si on fixe un taux d'apprentissage trop bas, la variation des poids sera trop lente pour que ceux ci atteigne leur valeur finale avec un nombre limité de données. Il faudrait donc alors redonner les mêmes données (si on n'en n'a pas d'autres) pour que les poids continuent à varier. Qu'en penses tu???? (je ne sais pas si tu fais ainsi dans ton programme)

D'autre part, j'ai réfléchit à 2 autres idées, que je t'invite à commenter:
_ pour éviter le sur apprentissage, on a un jeu de données destinées a être apprises et un jeu de données destinées à être utilisées pour vérifier que l'erreur sur elles n'augmente pas (il y aurait alors sur apprentissage. D'ailleurs, c'est bien ce que tu fais dans ton programme, non?). L'idée est qu'on pourrait utiliser les données du jeu d'apprentissage non encore apprises comme si elles faisaient partie du jeu de test.

_problème avec le sur-apprentissage:
si on fait apprendre à un réseau neuronal les valeurs de la fonction sigmoïde ( sur, par exemple, l'intervalle [-10;10]). On va, par habitude, donner les données par ordre croissant, en commençant par -10. Or, Pour les données entre -10 et -1, cela sera équivalent à faire apprendre au réseau la fonction nulle partout. Le réseau va donc tendre vers cette fonction et l'erreur sur les données de l'intervalle [1;10], dont la sortie attendue est 1, va augmenter (puisque leur sortie tend vers zéro). L'algorithme croira donc qu'il y a sur-apprentissage et arretera alors qu'il ne devrait pas. Une solution à ce problème serait de donner les données dans un ordre aléatoire.
cs_Nono38000 Messages postés 3 Date d'inscription mardi 24 juillet 2007 Statut Membre Dernière intervention 3 août 2007
27 juil. 2007 à 18:09
Merci beaucoup Parice!!!
Vive l'open source!!!

D'autre part, si quelqu'un a des docs sur le choix des fonctions d'activations et de la structure d'un réseau neuronal, sur le filtrage des échantillons à donner au réseau neuronal, sur l'élagage d'un réseau neuronal et sur les cas où le réseau neuronal est plus efficace qu'une autre méthode, je suis toujours interessé!!!
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
26 juil. 2007 à 08:39
Salut, pour la normalisation voir plutôt ici www.vbfrance.com/code.aspx?ID=5612, car les entrées et les sorties y sont bien normalisées (simple min et max) : mais attention, il n'est bien sur pas possible d'apprendre un x2 : dans ce cas de figure, il faudrait effectuer si possible un changement de représentation des données pour qu'elles soient normalisables (log, 1/x, ...).

Ce que j'appelle une fenêtre glissante consiste à faire glisser une fenêtre sur une série temporelle de données : les données au temps t-n, ... t-1 servent à prédire la sortie au temps t. Cette fenêtre ne sert qu'à réduire la quantité de donnée en entrée du RN : si tu le fait toi-même sous Excel (en dupliquant et en décalant les données), plus besoin de fenêtre glissante.

Jeu de validation : il participe un peu à l'apprentissage (non appris mais intervient dans le calcul du taux d'erreur) alors que le jeu de test ne participe pas à l'apprentissage.

Choix de paramétrage d'un RN : je n'ai pas cherché de doc depuis ma source, mais pour le moment, j'estime que seuls les taux d'apprentissage et de prédiction font loi : essaie différent RN, et celui qui a les meilleurs taux est le bon ! (pour une application précise donnée).
cs_Nono38000 Messages postés 3 Date d'inscription mardi 24 juillet 2007 Statut Membre Dernière intervention 3 août 2007
25 juil. 2007 à 22:53
Bonjour,
je dois utiliser les réseaux neuronaux et je compte utiliser le code C++ de Sylvain Barthelemy ou le votre.

J'ai lu votre page et votre code et il y a quelques points que je n'ai pas très bien saisi. Pourriez vous m'éclairer ou me donner des références sur ceux ci:
_Qu'est ce qu'une fenêtre glissante dans le cas des réseaux neuronaux ( d'autres pages web parlent de fenêtre glissante mais n'expliquent pas ce que c'est.)
_Si la fonction d'application a une sortie comprise entre zéro et un, il faut diviser les sorties de façon à ce qu'elles soient elles aussi comprises entre zéro et un ( exemple: la plus grande sortie est égale à 10, donc on divise toutes les sorties par 10. Dans votre exemple avec le CAC40, j'ai l'impression que les sorties ne sont pas normées, mais je n'ai pas bien compris, je ne maitrise pas le VB)? Si les sorties ne sont pas bornées ( exemple: la fonction x²), il faut introduire une fonction d'activation non bornée?
_Pour éviter le sur apprentissage, il faut deux jeux de données: un jeu de données pour apprendre et un jeu de données pour vérifier que le réseau neuronal ne s'est pas trop spécialisé. cependant, vous parlez de 3 jeux de données ( jeu d'apprentissage, jeu de validation et jeu de test ). Il y a donc un jeu de données que je n'arrive pas à identifier.

merci de vos réponses.

D'autre part, si quelqu'un peut m'indiquer où trouver des documents sur le choix des fonctions d'activations et de la structure d'un réseau neuronal, sur le filtrage des échantillons à donner au réseau neuronal, sur l'élagage d'un réseau neuronal et sur les cas où le réseau neuronal est plus efficace qu'une autre méthode, cela m'aiderait beaucoup.
Merci à tous.
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
6 juil. 2005 à 15:47
> Pour le test que tu as fais avec la fonction xor, quel type de fonctions d'activation as tu utilisés?

Sigmoïde : J'ai simplement modifié le fichier xor.dat de la démo ici :
www.vbfrance.com/article.aspx?Val=7015

Bon, pour ton problème, je comprend mieux maintenant : en fait tu veux apprendre 2 paliers plats avec des données pourtant variables en entrées, un peu comme une fonction seuil. Cela devrait être possible, mais ce n'est pas forcément évident d'obtenir des paliers bien plat tandis que l'entrée varie un peu, car cela remet un peu en cause le principe des RN : tenir compte des variations d'entrées non apprises, pour en déduire une sortie adaptée, ce que tu veux justement éviter. Cependant, une chose est sûre : c'est quasiment impossible d'y arriver avec seulement un seul neurone en entrée : le but du RN est de "simuler" un cerveau biologique, donc justement d'apprendre une sortie à partir d'une MULTITUDE d'entrées, au moins DEUX entrées, d'accord ? Si tu n'as qu'une seule entrée, alors ce n'est pas un RN qu'il te faux, c'est juste une formule de seuil sous Excel !

Sinon, à propos de formule justement, tu peux très bien envisager de pré-calculer par un seuil tes données avant de les mettre en entrée du RN, mais il reste toujours la question des entrées multiples. Une des solutions peut être de considérer un signal temporel, c'est-à-dire que tu mets en entrée les 2 dernières valeurs de la demande en Mw (et non seulement la dernière valeur).
maalls Messages postés 6 Date d'inscription lundi 27 juin 2005 Statut Membre Dernière intervention 5 juillet 2005
5 juil. 2005 à 23:34
ok ok...tout d'abord merci pour l'interet que tu portes à mon probleme.

Pour le test que tu as fais avec la fonction xor, quel type de fonctions d'activation as tu utilisés?
Pour les données en entrées, tu parles de 4 combinaisons, j'en deduit que c'est des valeurs discretes (logique pour une porte...logique). Qu'en est il dans un cas ou les données sont continues?
Bon par exemple voici une fonction tres simple representative de mon probleme :
un reseau de neurone, avec une entrée, une sortie.
en entrée des valeurs comprise entre 0 et 1.
Je veux que le reseau apprenne cela :
En entrée, pour toute valeur comprise entre 0 et 0.5, en sortie je veux 0.2.
En entrée, Pour toute valeur comprise entre 0.5 et 1, en sortie je veux 0.7.
Est ce possible?

Je ne veux pas que le reseau cesse d'apprendre pour que les données soit constante, je veux simplement que le reseau comprenne que pour un intervalle de valeur en entrée, la sortie est constante.
L'idée, c'est que le prix varie en escalier en fonction de la demande qui elle est continue, par ex, pour une demande comprise entre 1000 et 5000Mw, le prix est de 14euros pour chaque Mw, si le la demande est comprise entre 5001 et 6000 le prix devient alors 18 euros pour chaque Mw etc. Bien sur chaque jour, le prix peut varier, mais je considere ici que ce n'est pas le cas (pour l'instant).
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
2 juil. 2005 à 09:37
C'est bien d'une fonction constante que je parle. J'ai testé en modifiant mes données du xor.dat en mettant toujours 1 en sortie pour les 4 combinaisons en entrée, et évidement cela fonctionne parfaitement du premier coup.
Dans ton cas, le problème va consister à filtrer les données d'apprentissage hebdomadaire pour éviter que la sortie apprise soit toujours constante, par exemple en éliminant les couples redondants, et en faisant divers calculs statistiques de manière à filtrer les échantillons pour améliorer leur représentativité : la logique est que si, pour une semaine donnée, la fonction de transfert apprise est constante, alors cette semaine ne constitue pas une semaine représentative, donc on doit la compléter avec les données des semaines précédentes, d'accord ? on peut ajuster l'apprentissage de façon hebdomadaire, mais ce n'est pas parce que pour une semaine la sortie est constante qu'il faut apprendre au RN que la sortie doit être constante.

> il peut arriver que la variation du prix de l'electricité pendant la journée, ou pendant quelques heures soit la meme, c'est a dire constante, meme si la demande n'est pas constante

La vocation d'un RN est d'apprendre une fonction de transfert entre une entrée et la sortie correspondante. Or si tu veux qu'à certain moment ton RN cesse d'apprendre la sortie en fonction de l'entrée et reste donc constant, il faut donc lui fournir une donnée complémentaire en entrée pour que la sortie reste constante dans ce cas. Si tu n'es pas capable de trouver une telle donnée, alors un RN n'est probablement pas adapté à ton cas.
maalls Messages postés 6 Date d'inscription lundi 27 juin 2005 Statut Membre Dernière intervention 5 juillet 2005
1 juil. 2005 à 16:07
Pardonne moi mais je ne suis pas sur que l'on se comprenne.
Moi je te parle d'apprendre une fonction constante, et toi tu me parles d'apprendre a partir d'echantillons qui sont constants (toujours les memes), hors ce n'est pas vraiment la meme chose.

Une fonction constante, c'est par exemple :
f(0)=1, f(1/2)=1, f(1/3)=1, bref tu peux mettre n'importe quel valeur en entrée, en sortie t'auras tj 1.
Donc ici par exemple, les echantillons pour l'apprentissage seront les couples (0,1), (1/2,1), (1/3,1) etc...

Des echantillons constants par contre, ca serait d'avoir uniquement par exemple (1/2,1) dans la base d'apprentissage.

Donc ma question demeure, est il possible d'apprendre une fonction constante avec un reseaux de neurones?
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
1 juil. 2005 à 08:32
Imagine un alphabet ne contenant qu'une seule lettre : c'est absurde, non ?
Il faut distinguer la phase d'apprentissage de la phase de prédiction. Pendant la phase d'apprentissage, qui peut être actualisée par exemple une fois par semaine, les échantillons doivent être filtrés pour être représentatifs (d'une manière ou d'une autre), alors que pour la phase de prédiction, cela n'a aucune importance si les échantillons sont constants, d'accord ?
maalls Messages postés 6 Date d'inscription lundi 27 juin 2005 Statut Membre Dernière intervention 5 juillet 2005
30 juin 2005 à 21:31
si il y a plusieurs types de fonction d'activation dans le meme reseau : non.

Sinon je vois ce que tu veux dire, mais si l'on en revient au test que j'ai fait cité plus haut, 100% des echantillions ont la meme valeur en sortie dans la base d'apprentissage, et le resultat n'est pas fameux.
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
30 juin 2005 à 08:42
Y a-t-il plusieurs types de fonction d'activation dans le même réseau ?
http://patrice.dargenton.free.fr/ia/ialab/perceptron.html#_Toc105636607
voir aussi (en anglais) :
ftp://ftp.sas.com/pub/neural/FAQ2.html#A_act

Pour la fonction constante, n'oublie pas que tes échantillons d'apprentissage doivent être représentatifs de ce que tu veux prédire, autrement dit, c'est bien d'apprendre quelques échantillons constants et quelques échantillons variables, mais de toute évidence, si tes échantillons constants représentent plus de 95% de ta base d'apprentissage, alors ton RN en sortie ne produira que des valeurs constantes, et jamais de valeurs variables. Pour savoir comment doser, c'est simple, il suffit de regarder d'abord si ton taux d'apprentissage est bon, avant de faire de la prédiction.
maalls Messages postés 6 Date d'inscription lundi 27 juin 2005 Statut Membre Dernière intervention 5 juillet 2005
29 juin 2005 à 17:13
ok merci.

Pour ce qui est de mélanger différent type de fonctions d'activation, je n'en ai pas l'intention. Ce que je voulais dire était d'utiliser uniquement des fonctions sigmoides, ou uniquement des fonctions tangeantielles (arctangeante en fait), l'un ou l'autre du moment que ca marche.
J'ai cependant remarqué qu'en general, la fonction d'activation pour les neurones de sorties (dernieres couches) sont lineaires, meme si ce n'est pas le cas pour les fonctions d'activation des couches cachées.

Sinon pour la fonction constante, tu me dis que c'est la moindre des choses qu'un RN puisse faire, mais alors pq ca marche pas avec moi? J'ai fais le test suivant :
j'ai entrainé un RN avec en entré une valeur aléatoire, et en valeur de sortie voulu tj la meme valeur a savoir 0.5.
Je l'ai entrainé de cette maniere avec des milliers de patterns, puis j'ai testé. Resultat pas fameux. Enfin bon...

Bon ben sinon bon courage pour ton projet de loto.
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
29 juin 2005 à 08:41
Pour le loto, j'avais comparé avec Rnd, et il m'avait semblé obtenir des résultats, mais bien sûr j'ai pensé qu'il y avait probablement un artefact quelque part (sinon ca serait trop beau pour être vrai). Du coup j'ai voulu optimiser mon RN en faisant des benchmark, mais cela est complexe à faire, c'est un vrai sujet de thèse à part entière, je n'ai plus le temps pour le moment.
Pour ta seconde question, le fait qu'il y ait des niveaux constant ne devrait pas perturber l'apprentissage, après tout c'est le moins qu'un RN puisse faire. Ensuite, pour le mixage des fonctions d'activation, attention, car le RN est bien théorisé pour une seule fonction d'activation. Si tu utilises plusieurs fonctions d'activation, assure-toi que des scientifiques aient bien prouvé le fonctionnement de tels RN.
maalls Messages postés 6 Date d'inscription lundi 27 juin 2005 Statut Membre Dernière intervention 5 juillet 2005
28 juin 2005 à 18:33
Au sujet du loto, as tu des resultats? (pas les numéros de demain pour que je puisse devenir millionnaire, mais des resultats statistiques bien sur :)
Par exemple, le réseau de neurones parvient il statistiquement à prevoir ne serait ce qu'une boule de mieux qu'un simple générateur aléatoire?

Pour ma seconde question, je n'ai pas été clair, je m'en excuse.
Je voudrais simplement savoir si un RN est capable d'apprendre une fonction constante (par exemple f(x)=0.4 quelque soit x appartenant a [0,1]) avec un RN multicouche ayant pour fonction d'activation à chaque neurone par exemple des sigmoides ou des fonctions tangeancielles.

J'ai fait des tests et ca ne marche pas, je voulais savoir si c'était moi ou si c'était normal.

Si je pose la question c'est parceque je travaille actuellement sur un simulateur multi agent du marché electrique (si tu es familier avec les reseaux de neurones tu connais peut etre les systemes multi agents).

Le simulateur modèlise les producteurs d'electricité qui font des offres aux marché,selon leur parc de production et selon les regles du marchés.
les offres se font la veille pour le lendemains, au pas horaires (le producteurs doit donc faire 24 offres pour le lendemain).

Dans le programme, les producteurs sont des agents qui veulent bien entendu optimiser leur profit (au detriment du pov consommateur), en utilisant leur pouvoir de marché (capacité d'augmenter de maniere unilaterale le prix d'equilibre cad le prix retenu par le marché).

Pour cela, il est bon que l' agent/producteur dispose d'une projection du prix du lendemain pour pouvoir ajuster son offre.
La intervient le reseau de neurones, qui prends en entrée la demande pour le lendemain a une heure donnée (que l'on suppose connue) et en sortie le prix a cette meme heure (donc une entrée, une sortie).
Comme il s'agit d'un simulateur, c'est donc une representation simplifier de la realité, il peut arriver que la variation du prix de l'electricité pendant la journée, ou pendant quelques heures soit la meme, c'est a dire constante, meme si la demande n'est pas constante. d'ou ma question. Voila, tu sais tout.
Desolé pour ce long commentaire.
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
28 juin 2005 à 08:23
Justement, l'idée est de prouver que le loto ne serait pas aléatoire ! c'est un peu la même chose que la recherche de signaux ET dans l'espace...
Pour ta seconde question, je ne comprend pas pourquoi tes fonctions d'activation se seraient pas constantes ?
maalls Messages postés 6 Date d'inscription lundi 27 juin 2005 Statut Membre Dernière intervention 5 juillet 2005
27 juin 2005 à 21:50
Je comprends pas bien comment un programme peut prevoir un signal completement aleatoire, telle les numeros du loto. Donc si qqun a des arguments valide pour me le demontrer, je suis tout ouie.
J'ai aussi une autre question qui concerne les reseaux de neurones : est il possible d'apprendre une fonction constante, avec des fonctions d'activation qui ne le sont pas?
merci
gdazouzou Messages postés 1 Date d'inscription mardi 27 avril 2004 Statut Membre Dernière intervention 5 juin 2004
5 juin 2004 à 20:01
J'ai mis au point une méthode de sortie des numéros du loto en entrant les résulatats sur un logiciel de bourse.
J'ai sélectionné 8 indicateurs.
Je voudrais me servir du perceptron pour améliorer mes sélections.
Je suis prêt à envoyer un exemple des valeurs à entrer à celui ou celle qui pourrait m'aider.
Indicateurs X1 à X8 sortie Y = oui ou non ou une valeur résultat d'un calcul.

Je crée la base à travers des valeurs de sorties réelles 500 s'il le faut et pour chaque tirage j'entre les valeurs des 49 N° et je désire obtenir Y

Si quelqu'un veut m'aider, il ou elle aura bien sur les résultats.
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
10 janv. 2003 à 09:51
Voir aussi :
IA : RN : VBPerceptron : le code le + simple possible en VB6 & VB .Net
http://www.vbfrance.com/article.aspx?Val=7015
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
30 mai 2002 à 09:35
Attention au changement de la fonction d'activation : dans les fonctions rCalculerErreurSortie et RetropropagerErreur, on utilise la dérivée de la fonction d'activation sigmoïde :
m_aCouches(m_prm.iNbCouches - 1).aNeurones(i).rErreur = m_prm.rGainSignal * rSignal * (1 - rSignal) * rDelta
et
m_aCouches(i).aNeurones(j).rErreur = m_prm.rGainSignal * rSignal * (1! - rSignal) * rErreur
Il faut dont également modifier ces deux fonctions si on change la fonction d'activation. Le problème, c'est que les fonctions à seuil ne sont pas dérivables, certains proposent des astuces pour palier à cela, mais en tout cas, il faut faire attention à ce point si on veut que l'apprentissage se passe bien (ce qui veut dire que l'on peut faire en sorte que le RN marche mieux). Par ailleurs, d'autres algos utilisent un biais afin d'améliorer l'apprentissage (pour éviter que la sortie des neurones reste bloquée à zéro), cet algo ne tient pas compte du biais pour le moment.
cs_Pekinio Messages postés 161 Date d'inscription mercredi 11 avril 2001 Statut Membre Dernière intervention 10 mars 2002
3 avril 2002 à 15:15
ben moué, j'vais a l'ecole, mais en tout cas 'est pas pour prévoir des dignaux cycliques, ni pour reconnaitre des caractères, en tous cas... ;-P
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
1 avril 2002 à 09:17
mises à jour intermédiaires ici :
Projet IALib du IALab : "IA : le Laboratoire virtuel" :
www.vbfrance.com/projetcommun.asp?ID=20
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
10 févr. 2002 à 12:02
Oops ! petit bug : mettre
rRandomiser = Rnd() * (rMax - rMin) + rMin
au lieu de :
rRandomiser = Rnd() * (rMax - rMin + 1) + rMin

A quoi ca sert ? reconnaissance de caractères, prévision des signaux cycliques, ...
et toi, pourquoi tu va à l'école ?
cs_LoupBlanc Messages postés 52 Date d'inscription lundi 28 janvier 2002 Statut Membre Dernière intervention 8 avril 2009
6 févr. 2002 à 17:05
A quoi ca sert au juste ??
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
1 févr. 2002 à 08:11
Ca y est, j'ai mis à jour le code, j'ai trouvé un lien vers un cours complet sur les RN :
www.cmla.ens-cachan.fr/Utilisateurs/lacaille/papiers.html#Cours
www.cmla.ens-cachan.fr/Utilisateurs/lacaille/papiers/rn.ps.gz
(visualisation sous Windows avec GhoSt view : gsview32.exe)
cs_cocotteman Messages postés 1 Date d'inscription lundi 21 janvier 2002 Statut Membre Dernière intervention 21 janvier 2002
21 janv. 2002 à 14:14
Je suis vraiment très intéressé par ton programme. Cependant, j'ai essayé de le compiler mais il y a des erreurs... Est ce qu'il serait possible d'obtenir les sources?

merci

P.S.: est ce que tu aurais une doc qui explique un petit peu le fonctionnement du logiciel et les sources...?
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
7 janv. 2002 à 10:40
Ce logiciel est tellement intéressant que la maj tarde un peu à venir, mais vous ne le regretterez pas : il y a des graphiques en prime. Patrice.
En normalisant les numéros du loto entre 0 et 1 en entrée (j'avais oublié de le faire :-), on peut parfaitement apprendre 7 tirages successifs de 6 numéros + le complémentaire avec un réseau à 3 couches et seulement 500 itérations, je prépare une nouvelle version avec des tests intéressants aussi sur le CAC40 et les taches solaires, à suivre...
tres interressant!
Rejoignez-nous