Bonjour, débutant actuellement dans les réseaux de neurones, j'essaye de mettre en place un perceptron multicouches basique pour résoudre le problème de la porte XOR, cependant je rencontre un problème pour la mise en place de l'apprentissage par rétropropagation.

Je crée mon perceptron sur Excel afin de bien comprendre et visualiser tout ce que je fais, actuellement j'ai :

Nom : excel1.jpg
Affichages : 399
Taille : 23,7 Ko

Nom : excel2.jpg
Affichages : 363
Taille : 113,2 Ko

Pour faire apprendre mon réseau j'utilise le principe de rétropropagation de l'erreur afin d'adapter les poids Wi et les biais W0.

Les poids et les biais de base sont tous initalisés aléatoirement à la ligne 3, puis les formules de mise à jours des poids via retropagation de l'erreur sont écrites dans les poids et biais suivants.

J'utilise comme formule de l'erreur :

Nom : 1*FawfyTR5ga85aFd8Jhbbjg.png
Affichages : 289
Taille : 1,1 Ko donc pour la cellule AB3 : =(1/2)*(C3-Z3)^2

J'utilise comme fonction d'activation de mes neurones, la fonction sigmoide.

Pour corriger les poids ou les biais j'utilise comme formule :

valeur du poids précedent - alpha * (dErreur/dPoids)

Avec alpha égal à mon taux d'apprentissage.

Dans le cas de la couche de sortie dErreur/dPoids =

Nom : formule1.png
Affichages : 323
Taille : 3,0 Ko

=

Nom : formule2.png
Affichages : 295
Taille : 2,3 Ko

Avec t qui correspond à la valeur de sortie attendue, Yo est la valeur de sortie du neurone de sortie et X0 la valeur passant par ce poids (valeur sortant du neurone que relie le poids en question au neurone de sortie, par exemple la sortie du neurone caché 1 pour le poids W7 reliant le neurone caché 1 au neurone de sortie).

Dans le cas de la couche caché dErreur/dPoids =

Nom : formule3.png
Affichages : 292
Taille : 4,8 Ko

=

Nom : formule4.png
Affichages : 290
Taille : 3,4 Ko

Ou W0 est le poids reliant ce neurone au neurone suivant dans le cas du neurone caché 1 ce sera W7.

X0 est la valeur sortante du neurone de la couche caché en question.

Xh est la valeur d'entrée de ce neurone passant par le poids en question par exemple X1 en A3 pour W1.

Pour corriger le biais de mon neurone de sortie j'ai par exemple :

Nom : excel3.jpg
Affichages : 340
Taille : 48,4 Ko

Pour corriger le poids W4 de mon neurone caché 2 j'ai :

Nom : excel4.jpg
Affichages : 340
Taille : 34,0 Ko

Pour corriger le poids W1 de mon neurone caché 1 j'ai :

Nom : excel5.jpg
Affichages : 302
Taille : 33,8 Ko

Chaque formule prend en compte le résultat de la ligne du dessus (cellules colorées).

Le problème que je rencontre est que mon réseau n'apprend pas et ne se rapproche pas des valeurs qu'il devrait, au contraire dans le cas ou l'exemple est correct (résultat attendu 1 valeur obtenue en sortie 1) l'erreur est faible (logique), si l'exemple est faux (exemple valeur attendue 1 résultat obtenue 0) l'erreur est plus élevé (logique).

Cependant plus l'apprentissage de mon réseau progresse, plus l'erreur dans le cas des exemples valides va diminuer (devenir encore meilleur là ou il est déjà bon), et plus l'erreur dans le cas des exemples non valide va augmenter, donc mon réseau devient encore plus mauvais là ou il est déjà pas bon (pas logique, car elle devrait diminuer au fur et à mesure que le réseau progresse).

Exemple, dans les premières itérations j'ai :

Nom : excel6.jpg
Affichages : 284
Taille : 16,1 Ko

L'erreur (valeur du millieu) est cohérente vis à vis de la validé ou non des résultats.

Puis après un certain temps d'apprentissage :

Nom : excel7.jpg
Affichages : 282
Taille : 15,9 Ko

L'erreur à augmenté pour les deux résultats invalides, au lieu de réduire, et l'erreur à continuer de réduire pour les résultats valides.

Je ne comprend absolument pas ce que je fais mal, j'ai fais beaucoup de recherches et d'études sans succès...

Merci pour votre aide, j'éspère que la présentation de mon excel n'est pas trop compliqué à comprendre