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éseaux de neurones à convolution (CNN) : rétropropagation du gradient


Sujet :

Méthodes prédictives

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Réseaux de neurones à convolution (CNN) : rétropropagation du gradient
    Bonjour !

    Je me suis récemment intéressé aux réseaux de neurones. En commençant par les réseaux dits "Feed-Forward". J'ai obtenu de bons résultats dans la reconnaissance de chiffres (MNIST). Cependant, ces simples réseaux de neurones ne permettent pas l'invariance des données. Càd qu'il faudra passer par une segmentation/ normalisation de l'image pour que le réseau puisse détecter avec un bon taux de réussite les chiffres.

    Je me suis donc intéressé aux réseaux de neurones à convolutions, qui ont pour avantage l'invariance des données. Je me suis documenté sur le net, j'ai trouvé toute la théorie nécessaire à la compréhension du réseau. Excepté un point, la rétro-propagation du gradient utilisé pour ces réseaux (Càd, la manière de propager l'erreur de sortie en fonction des paramètres, les poids, du réseau).

    Je me suis dis que si certains francophones pouvaient m'aider, ce serait surement ici .

    Je ne rentrerai pas dans la théorie complète des rdn et je ne vous cache pas que de toute manière, seule une personne connaissant plus ou moins le sujet pourra m'éclairer .
    Donc, voici une image qui illustre les questions restant floues dans mon esprit :

    Nom : Image2.png
Affichages : 3270
Taille : 34,0 Ko

    Point par point :
    1. Je calcule les gradients de mes couches de neurones entièrement connectées (les deux à droites, en commençant par la plus à droite)
    2. Je dois ensuite faire passer ces 144 x 30 (chaque neurones de l'avant dernière couche est connecté à chaque neurone de chaque max pool map). Ma question est la suivante, dois-je additionner les 30 gradients connecté à un "neurone" de la max pool map pour obtenir le gradient de ce "neurone" ? Si non, comment faire ?
    3. Imaginons que nous ayons choisi la solution de l'addition des gradients pour la couche précédente, on a donc 144 gradient qui arrivent à la feature map. Celle ci contient 576 neurones. Ici l'inégalité du nombre de gradient s'explique par le fait qu'un Max pooling redirige son gradient vers son entrée la plus grande. Cependant, pour calculer le gradient d'un neurone d'une feature map, il faut convoler sa matrice de poids (inversée) avec sa matrice de gradient, or, dans notre cas, UN seul gradient est associé à UN neurone dans la feature map.. Je ne comprends pas.

    Désolé si je ne suis pas clair, mais à force d'essayer de faire interagir entre eux des neurones artificiels ce sont mes propres neurones qui finissent par ne plus interagir entre eux

  2. #2
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Citation Envoyé par Nerisma Voir le message
    2. Je dois ensuite faire passer ces 144 x 30 (chaque neurones de l'avant dernière couche est connecté à chaque neurone de chaque max pool map). Ma question est la suivante, dois-je additionner les 30 gradients connecté à un "neurone" de la max pool map pour obtenir le gradient de ce "neurone" ? Si non, comment faire ?
    Oui.


    Citation Envoyé par Nerisma Voir le message
    3. Imaginons que nous ayons choisi la solution de l'addition des gradients pour la couche précédente, on a donc 144 gradient qui arrivent à la feature map. Celle ci contient 576 neurones. Ici l'inégalité du nombre de gradient s'explique par le fait qu'un Max pooling redirige son gradient vers son entrée la plus grande. Cependant, pour calculer le gradient d'un neurone d'une feature map, il faut convoler sa matrice de poids (inversée) avec sa matrice de gradient, or, dans notre cas, UN seul gradient est associé à UN neurone dans la feature map.. Je ne comprends pas.
    La maxpool va pointer vers un seul neurone, mais ce neurone peut être pointé par différent neurones de la maxpool, donc là encore il faut additionner.
    Et fais bien attention que pour chaque feature map, les poids sont partagés !
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Merci à toi pour ta réponse, je vois dans quel sens je dois me diriger ! .

    D'accord, je me disais bien qu'il fallait les additionner ! Subsiste deux questions :

    La première :
    La maxpool va pointer vers un seul neurone, mais ce neurone peut être pointé par différent neurones de la maxpool, donc là encore il faut additionner.
    Et fais bien attention que pour chaque feature map, les poids sont partagés !
    Je ne comprends pas comment un neurone peut être pointé par différent neurones de la maxpool, ma maxpool a un pas de deux. Ce qui donne la distribution suivante, les neurones bleus clairs de la feature map vont être les entrées du neurone bleu clair de la maxpool, même principe pour les bleus foncés.

    Nom : Image3.png
Affichages : 2605
Taille : 6,6 Ko

    De cette manière, chaque neurone de la feature map pointe vers un seul neurone de ma maxpool non ?

    La deuxième :
    A quoi correspond la matrice de gradient à convoler avec les poids de chaque neurone de ma feature map ? La seule hypothèse qui me vient à l'esprit : la maxpool renvoi son gradient au neurone avec la valeur maximale (vers lequel elle pointe donc) et 0 aux trois autres neurones. Dans ce cas, chaque neurone de ma feature map aura un gradient associé, celui ci vaudra : 0 si il n'était pas la valeur maximale des neurones pointés, le gradient du neurone de la max pool si celui ci était la valeur maximale des neurones pointés. Cette hypothèse est juste ?
    Même ci celle ci était vraie, je n'aurai qu'un gradient et non une matrice à convoler avec les poids partagés de ma feature map.. Je ne comprends pas !

    Dans tous les cas, merci encore de ta réponse, elle m'aide beaucoup !!

  4. #4
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Citation Envoyé par Nerisma Voir le message
    Je ne comprends pas comment un neurone peut être pointé par différent neurones de la maxpool, ma maxpool a un pas de deux. Ce qui donne la distribution suivante, les neurones bleus clairs de la feature map vont être les entrées du neurone bleu clair de la maxpool, même principe pour les bleus foncés.
    Non, un neurone de la maxpool pointe que sur un seul neurone de la feature map précédente. En revanche, il peut être pointé par plusieurs neurones de la couche suivante, donc il peut recevoir plusieurs erreurs.



    Citation Envoyé par Nerisma Voir le message
    La deuxième :
    A quoi correspond la matrice de gradient à convoler avec les poids de chaque neurone de ma feature map ? La seule hypothèse qui me vient à l'esprit : la maxpool renvoi son gradient au neurone avec la valeur maximale (vers lequel elle pointe donc) et 0 aux trois autres neurones. Dans ce cas, chaque neurone de ma feature map aura un gradient associé, celui ci vaudra : 0 si il n'était pas la valeur maximale des neurones pointés, le gradient du neurone de la max pool si celui ci était la valeur maximale des neurones pointés. Cette hypothèse est juste ?
    Même ci celle ci était vraie, je n'aurai qu'un gradient et non une matrice à convoler avec les poids partagés de ma feature map.. Je ne comprends pas !

    Ne confonds pas convolution et maxpool.
    La maxpool ne fait que renvoyer le maximum d'une région, c'est tout. Et lors de la rétropropagation, elle ne fait que faire passer l'erreur. Il n'y a rien d'entrainable/ajustable sur la maxpool.
    En revanche, beaucoup de choses se passent sur la couche de convolution. Ce que tu entraines dans une couche de convolution, ce sont les poids du masque de convolution de chaque feature map. Chaque feature map a son propre masque de convolution qu'il faut entrainer. Mais les erreurs sont rétro-propagées au niveau des neurones de la feature map, et comme le masque de la feature map est plus petit que la feature map elle-même, les poids sont partagés. Donc lors de l'apprentissage, chaque neurone accumule l'erreur et dit à chaque poids du masque, comment il souhaiterait que ce dernier soit modifié.
    Je sais... le fait que les poids soit partagés rend l'apprentissage d'une couche de convolution beaucoup plus confus et long qu'une couche totalement connectée.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  5. #5
    Nouveau Candidat au Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2016
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2016
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Je suis en train de coder un réseau convolutional. Lors de la rétro-propagation, la couche pooling renvoyait 1 si l'entrée est maximale et 0 sinon.
    Si le gradient vaut 1, l'erreur est propagée si c'est 0 l'erreur est stoppée.
    S'il ne fait que propager l'erreur alors le gradient vaut toujours 1?

    Citation Envoyé par ToTo13 Voir le message

    Ne confonds pas convolution et maxpool.
    La maxpool ne fait que renvoyer le maximum d'une région, c'est tout. Et lors de la rétropropagation, elle ne fait que faire passer l'erreur. Il n'y a rien d'entrainable/ajustable sur la maxpool.
    En revanche, beaucoup de choses se passent sur la couche de convolution. Ce que tu entraines dans une couche de convolution, ce sont les poids du masque de convolution de chaque feature map. Chaque feature map a son propre masque de convolution qu'il faut entrainer. Mais les erreurs sont rétro-propagées au niveau des neurones de la feature map, et comme le masque de la feature map est plus petit que la feature map elle-même, les poids sont partagés. Donc lors de l'apprentissage, chaque neurone accumule l'erreur et dit à chaque poids du masque, comment il souhaiterait que ce dernier soit modifié.
    Je sais... le fait que les poids soit partagés rend l'apprentissage d'une couche de convolution beaucoup plus confus et long qu'une couche totalement connectée.[/QUOTE]

Discussions similaires

  1. [Réseau neuronal] Rétropropagation du gradient de l'erreur
    Par stalacta dans le forum Intelligence artificielle
    Réponses: 4
    Dernier message: 17/03/2018, 20h26
  2. [Réseaux de neurones] Algorithme de rétropropagation
    Par Naluh dans le forum Méthodes prédictives
    Réponses: 5
    Dernier message: 05/08/2015, 14h49
  3. Réponses: 1
    Dernier message: 20/06/2011, 11h08
  4. Réseaux de neurones : Coefficient d'apprentissage dans la rétropropagation
    Par epsilon09 dans le forum Méthodes prédictives
    Réponses: 9
    Dernier message: 16/12/2009, 19h50
  5. Réseaux de neurones et rétropropagation
    Par faroukus dans le forum OpenCV
    Réponses: 1
    Dernier message: 06/08/2008, 22h28

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