IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Méthodes prédictives Discussion :

rétro-propagation du gradient


Sujet :

Méthodes prédictives

  1. #1
    Membre chevronné
    Avatar de vincent.mbg
    Homme Profil pro
    Développeur Python
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Par défaut rétro-propagation du gradient
    Bonjour à tous.

    Je n'ai pas bien compris une partie de l'algorithme de rétro-propagation du gradient.
    "la parti où l'on doit calculer la correction des poids pour la couche caché"

    Imaginons n1cc le neurone 1 de la couche cachée et n2cs le neurone 2 de la couche de sortie sur un petit reseau :

    n1cc n1cs
    n2cc n2cs

    pouvez vous me dire comment calculer la mise à jour des poids pour la couche cachée.

    merci à tous!
    Mon guide pour apprendre Tkinter - N'oubliez pas de consulter les FAQ Python ou de visiter mon blog

  2. #2
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Tu as consulté le tuto que l'on a sur les réseaux de neurones : http://alp.developpez.com/tutoriels/...x-de-neurones/ ?

    Tout y est expliqué et il y a même la démonstration de la modification à apporter sur les poids

  3. #3
    Membre chevronné
    Avatar de vincent.mbg
    Homme Profil pro
    Développeur Python
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Par défaut
    Bonsoir,

    j'ai lu le tutoriel et je ne comprend pas la partie di=oi(1-oi)*somme de dk*w_ki

    Malgré l'explication je n'est pas compris ce que représentait dk*w_ki

    merci de vos réponse
    Mon guide pour apprendre Tkinter - N'oubliez pas de consulter les FAQ Python ou de visiter mon blog

  4. #4
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Même pas avec le paragraphe d'explication + la démonstration ?

  5. #5
    Membre chevronné
    Avatar de vincent.mbg
    Homme Profil pro
    Développeur Python
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Par défaut
    Bonjour
    Désolé pour ce long mois d'absense mais j'etais en stage.
    je profite de ces vacance pour me remettre sur le sujet.
    J'ai tous repris à zerro J'ai creer un premier perceptron
    qui reconnait les chiffres de 0 à 5 inscrit sur une grille de 5 * 6 cellules.
    apprentissage par windrow_Hoff, tous marche bien !!!

    Ensuite j'ai voulu faire un percepton multicouche mais je rencontre encore des difficultés pour laprentisage.

    si = sorti du neurone i de la couche de sortie
    yi = sorti attendue pour ce même neurone

    Pour calculer di pour toute les cellule i de la couche de sorti.
    (di <- si(1-si) * (yi-si)

    mes cellule de sortie ayant une fonction de transfer de Heaviside elle me renvoye soie 1 soie 0
    pour si = 0 : di = 0*(1-0) * (...) donc di = 0
    pour si = 1 : di = 1*(1-1) * (...) donc di = 0
    de se fait les poids de ma couche de sortie ne seront jamais modifiés.

    De plus comme les valeurs de d seront utilisés comme facteur pour calculer di pour toute
    les cellules i des couches cachées

    les poids des couches cachées ne seront également pas modifiés.

    Que dois je faire pour que mon réseau fonctionne ?
    Merci d'avance
    Mon guide pour apprendre Tkinter - N'oubliez pas de consulter les FAQ Python ou de visiter mon blog

  6. #6
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Utiliser une fonction sigmoïde pour les neurones cachés ça pourrait arranger les choses peut-être.

    En effet, si tu regardes ceci , tu verras que la modification des pods se fait en utilisant la dérivée de la fonction d'activation, ce qui n'est pas possible avec Heavyside.

    cf : http://alp.developpez.com/tutoriels/...-neurones/#LXI

  7. #7
    Membre chevronné
    Avatar de vincent.mbg
    Homme Profil pro
    Développeur Python
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Par défaut
    bonsoir,
    Merci pour les liens mais malheureusement il ne m'aide guère je les avais d"jà étudier avant de poster ce message.

    oui j'ai vu qu'il fallait une fonction infiniment dérivable. J'utilisais justement la fonction sigmoide pour les couches cachés. Pour la couche de sortie, j'utilise la fonction de heavyside avec autant de neurone que j'ai de classes.
    Cela ne change rien au problème de la couche de sortie. Sachant que di est réutilisé pour le calcul des couches cachés (indicé par k) : di=oi(1-oi)*somme de dk*wki
    Vu que somme de dk sera forcément égale à O, di sera donc nul. Donc pas d'apprentissage non plus pour les neurones de mes couches cachés.

    Merci de vos réponses.
    Mon guide pour apprendre Tkinter - N'oubliez pas de consulter les FAQ Python ou de visiter mon blog

  8. #8
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Fais attention au fait que la delta rule dépend de la fonction que tu dérives...
    C'est avec la sigmoïde que l'on obtient g' = g(1-g) !

  9. #9
    Membre chevronné
    Avatar de vincent.mbg
    Homme Profil pro
    Développeur Python
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Par défaut
    C'est bon j'ai enfin resolue le probleme...
    j'ai utilisé une fonction sigmoide pour toute les couches

    pourtant paragraphe
    VII. Perceptron multicouche.

    le Théorème de Cybenko parle d'utiliser une fonction linaire.
    "chaque neurone de la couche de sortie a comme fonction d'activation une fonction linéaire".

    Peu importe, un autre probléme est survenue. Le perceptron n'apprenait toujours pas.

    Aprés quelque recherche j'ai trouvé un document parlant des "Minimas Locaux".
    Lorsque la sortie d'un neuronne est égale à l'une des valeurs extremes de la fonction sigmoide, le gradien devient null. De ce fait, la correction des poids n'est plus effectuée.
    pour empecher la saturation lors de l'apprentisage, j'ai pris en sortie voulue pour chaque neuronne soie 0,8 soie 0,2.


    merci pour votre aide
    Mon guide pour apprendre Tkinter - N'oubliez pas de consulter les FAQ Python ou de visiter mon blog

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 11
    Dernier message: 03/03/2010, 23h19
  2. Réponses: 1
    Dernier message: 09/02/2010, 09h13
  3. Réponses: 2
    Dernier message: 05/07/2005, 17h12
  4. Propagation d'un motif sur une texture . ?
    Par Clad3 dans le forum OpenGL
    Réponses: 8
    Dernier message: 03/06/2005, 16h53
  5. Propager un querystring
    Par Giill dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 04/01/2005, 14h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo