2011-08-24 1 views
0

Je bouge mes premiers pas dans les réseaux de neurones et pour ce faire j'expérimente avec un simple perceptron mono-couche, à sortie unique qui utilise une fonction d'activation sigmoïdale. Je mets à jour mes poids en ligne à chaque fois un exemple de formation est présentée à l'aide:Cela a-t-il un sens que les poids et les seuils augmentent proportionnellement à l'entraînement de mon perceptron?

weights += learningRate * (correct - result) * {input,1} 

Ici weights est un vecteur de longueur n qui contient également le poids du neurone de polarisation (- seuil), result est le résultat comme calculé par le perceptron (et traité en utilisant le sigmoïde) quand donné le input, correct est le résultat correct et {input,1} est l'entrée augmentée de 1 (l'entrée fixe du neurone de polarisation). Maintenant, quand j'essaie d'entraîner le perceptron à effectuer la logique ET, les poids ne convergent pas pendant longtemps, mais ils continuent à croître de la même façon et ils maintiennent un ratio de -1,5 avec le seuil, par exemple les trois poids sont en séquence:

5.067160008240718 5.105631826680446 -7.945513136885797 
... 
8.40390853077094 8.43890306970281 -12.889540730182592 

Je m'attendrais à ce que le perceptron s'arrête à 1, 1, -1,5.

En dehors de ce problème, qui ressemble connecté à certaines fonctionnalités manquantes arrêter condition dans l'apprentissage, si je tente d'utiliser la fonction d'identité en fonction d'activation, je reçois des valeurs de poids oscillant autour de:

0.43601272528257057 0.49092558197172703 -0.23106430854347537 

et je obtenir des résultats similaires avec tanh. Je ne peux pas donner une explication à cela.

Merci
Tunnuz

Répondre

2

Il est parce que la fonction d'activation sigmoïde ne parvient pas à un (ou zéro), même avec des entrées très très positifs (ou négatifs). Donc, (correct - result) sera toujours non nul, et vos poids seront toujours mis à jour. Essayez-le avec la fonction Step comme fonction d'activation (par exemple, f(x) = 1 for x > 0, f(x) = 0 otherwise).

Vos valeurs de poids moyennes ne semblent pas correctes pour la fonction d'activation d'identité. Il se peut que votre taux d'apprentissage soit un peu élevé - essayez de le réduire et voyez si cela réduit la taille des oscillations. En outre, lorsque vous effectuez un apprentissage en ligne (alias descente de gradient stochastique), il est de pratique courante de réduire le taux d'apprentissage au fil du temps afin de converger vers une solution. Sinon, vos poids continueront à osciller.

Lorsque vous essayez d'analyser le comportement de la perception, il est également utile de regarder correct et result.

+0

Ok, la fonction d'étape a fait l'affaire. J'ai alors réalisé, en regardant 'correct' et' result' qu'une fonction d'étape est nécessaire pour les fonctions booléennes. – tunnuz

Questions connexes