Bonjour,
J'ai des difficultés à implémenter le perceptron multicouches.
J'essaye d'apprendre la fonction xor.
J'ai donc 2 neurones d'entrée, 2 neurones cachés et 1 neurone de sortie.
j'ai pris ε = 1, la fonction sigmoide comme fonction de transfert et j'itère 100 fois.

ma base est la suivante:
0 0 -> 0
1 0 -> 1
0 1 -> 1
1 1 -> 0

j'ai implémenté l'algorithme en c++ à partir du pseudo code suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
 
Algorithme de rétropropagation du gradient :
• Initialiser aléatoirement les coefficients wij dans [-0.5 ; 0.5]
• Répéter
    • Prendre un exemple (x, c) de S
    • Calculer la sortie o
    • Pour toute cellule de sortie i
        • δi = σ‘(yi)(ci − oi) = oi ∗ (1 − oi)(ci − oi)
    • Fin Pour
    • Pour chaque couche de q − 1 à 1
        • Pour chaque cellule i de la couche courante
                 • δi = σ’(yi)[Σ(k ∈ Succ(i)) (δk ∗ wki)]
                      = oi ∗ (1 − oi)[Σ(k ∈ Succ(i)) (δk ∗ wki)]
        • Fin Pour
    •Fin Pour
    • Pour tout poids wij
        • wij = wij + ε ∗ δi ∗ xij
    • Fin Pour
• Fin Répéter



avec la légende suivante:

Notations :
• n cellules
• Cellules désignées par un indice i, 0 ≤ i < n
• p cellules de sortie
• k indice d ’une cellule de sortie
• ck : sortie attendue pour la cellule de sortie k avec l ’entrée x
• ok : sortie calculée pour la cellule de sortie k avec l ’entrée x
• xij : entrée associée au lien entre cellule I vers cellule j
• wij : coefficient synaptique associé au lien entre cellule i vers cellule j
• Succ(i) : ensemble des cellules qui prennent comme entrée la sortie de la
cellule i.
• Pred(i) : ensemble des cellules dont la sortie est une entrée de la cellule i.
• yi : entrée totale de la cellule i : yi = Σ(j ∈ Pred(i)) (wij ∗ xij)
• oi : sortie de la cellule I : oi = σ(yi)
Lorsque je passe des entrées à mon réseau (après apprentissage), j'obtiens des valeurs de sorties qui convergent vers 0.5, au lieu de 1 ou 0.
Est-ce que le problème viendrait de mes paramètres ou est-ce que l'algorithme sur lequel je me suis basé est incorrect?
Merci d'avance.