Cette vidéo est géniale ! Sa synthèse de toutes les maths derrière la méthode d'apprentissage d'un réseau de neurone m'a fait gagné un temps colossal ! Merci beaucoup !
J'ai dû regarder la vidéo peut-être 30 fois... tout en essayant d'implémenter l'algorithme. Finalement, j'ai compris, et j'ai réussi ! L'apprentissage a été rude, mais avec du recul, il n'y a rien de vraiment compliqué. Il faut juste s'habituer à la notation. Je te dis un grand merci, Hugo, c'est grâce à toi que j'ai eu l'immense satisfaction d'y arriver.
Bonjour Hugo. Merci pour la vidéo bien expliquée. Ce pendant j'ai une question concernant le fait que les biais de chaque neurones ne sont pas pris en compte ici. Et ce aussi dans la vidéo suivante de l'exemple (12:13). Qu'en est t-il de l'utilisation des biais de chaque neurones ou alors le rôle exact des biais de chaque neurones ? Bien à toi,
J'y ai passé beaucoup de temps, mais j'ai l'impression qu'il y a une erreur dans le code. Tu affectes (yj - aj) au gradient des neurones de sortie, mais ça devrait être (yj - aj) * logistic(aj) * (1 - logistic(aj)), n'est-ce pas ? A moins que la fonction logistic ne s'applique pas sur les neurones de sortie dans ce réseau-là ?
Très bonne question! En fait, (y_j - in_j) est bel et bien le gradient de la Loss par rapport à in_j, lorsque Loss = - y_j log(logistic(in_j)) - (1-y_j) log(1-logistic(in_j)) qui est la Loss la plus souvent utilisée pour la classification binaire avec des réseaux de neurones. Par contre, si la Loss était Loss = 0.5 (y_j - in_j)^2 Tu aurais alors raison. J'espère que ça aide!
Hugo Larochelle Bonjour à vous, je me demandais: Comment en est-on arriver à ces fonctions et comment savoir laquelle privilégier dans un cas précis? En existe-t-il d'autres?
Hugo Larochelle Excusez-moi si je ne comprends pas, mais je ne vois pas en quoi vous répondez aux questions que j'ai posé plus tôt. Auriez-vous l'amabilité de reformuler?
bonjour, tout d'abord MERCI pour ce tuto. ensuite, j'aurai voulu savoir, dans le cas où on a un biais, est-ce que la rétropropagation l'affecte? si oui comment?
Yasmina Mekki Oui, la rétropropagation peut aussi entraîner des biais. Une façon de voir un biais, c'est comme une connection avec une unité constante, qui vaut toujours 1. Donc on peut dériver la version avec biais simplement en ajoutant à chaque couche un neurone constant valant 1.
Bonjour Hugo, j'aimerai savoir si dans le cadre d'un algorithme de classification avec un PMC, il serai possible de rajouter "dynamiquement" des classes possibles (et donc des neurones de sortie) durant la "durée de vie" de notre réseau sans avoir besoin de soumettre à nouveau la totalité des exemples d'apprentissage, le vecteur de poids va t-il s'adapter sans fausser la classification? Merci de votre aide.
Franck Chaillat Bonne question! Je crois que ça pourrait être une solution raisonnable, oui. En fait, de nos jours, il arrive très souvent que des chercheurs pré-entraînent des réseaux de neurones sur un très grand jeu de données A, pour ensuite raffiner le comportement du réseau de neurones sur leur jeu de données plus petit B, mais correspondant à leur problème. Et ce, même si le jeu de données A ne contient pas les classes couvertes par le jeu de donnée B. On appelle ça du "transfert learning", et lorsque le jeu de données B est très, très grand, ça peut faire une différence bénéfique.
Franck Chaillat Non, pas vraiment. Tout ce qu'il faut faire, c'est ajouter des neurones de sorties (dont les poids et biais peuvent être initialisés à 0) pour chacune des nouvelles classes.
Bonjour, Merci pour vos vidéos de grande qualitées. J'ai 2 questions. Est-il possible d'utiliser l'algorithme de retropropagation pour ajuster les paramètres d'un réseau bayesien ? Pour trouver les valeurs des probabilités conditionnelles ? J'ai travaillé dessus, mais mes résultats expérimentaux ne sont pas très concluant : Pour la fonction de coût, j'ai simplement pris le carré de l'erreur de 'prédiction'. Mon coût diminue à chaque itération mais les valeurs de proba conditionnelle convergent vers des valeurs hors de [0;1].... Je trouve pas beaucoup de littérature dessus... Ma seconde question porte sur la formule de dérivée en chaine, celle avec la somme : df/dx = df/dg1 * dg1/dx + df/dg2 * dg2/dx Comment on choisi les gi ? est-ce que n'importe quelle gi peuvent convenir ? On peut en mettre autant que l'on veut ? et si on en oublie ? Il y a ca en.wikipedia.org/wiki/Chain_rule#Example mais je cherche plus de détails... Merci beaucoup, Bien cordialement, Guillaume
Bonjour! Pour votre première question, il n'est pas vraiment possible d'appliquer l'algorithme de la rétropropagation aux réseaux bayésiens. Pour votre deuxième, il y a effectivement plusieurs façons de choisir les termes intermédiaires gi. Par contre, il ne faut pas en oublier, i.e. il faut que l'ensemble des gi soit tel que vous n'avez plus besoin de x pour calculer f, les gi suffisent.
Salut , je comprend pas pourquoi on a pas de terme en g' => ( g(nj)(1- g(nj) ) dans le delta de la couche de sortie , dans d'autre exemple, ici page 16 www.isir.upmc.fr/UserFiles/File/LPrevost/connex%201%20&%202.pdf Pour le Delta (j) de la derniere couche , on prend D(j)= g' * (y-g) et pas simplement D(j)= (y-g). J'ai loupé quelque chose ? lol
Bonne question! La raison est que, dans ma présentation, j'utilise la perte (Loss) de la cross-entropie, et non celle de la différence au carré. Puisque les Loss sont différentes, les gradients sont différents. J'espère que ça aide!
Cette vidéo est géniale ! Sa synthèse de toutes les maths derrière la méthode d'apprentissage d'un réseau de neurone m'a fait gagné un temps colossal ! Merci beaucoup !
Merci pour tes bons mots!
J'ai dû regarder la vidéo peut-être 30 fois... tout en essayant d'implémenter l'algorithme. Finalement, j'ai compris, et j'ai réussi ! L'apprentissage a été rude, mais avec du recul, il n'y a rien de vraiment compliqué. Il faut juste s'habituer à la notation. Je te dis un grand merci, Hugo, c'est grâce à toi que j'ai eu l'immense satisfaction d'y arriver.
Bravo!!
je suis actuellement dans la phase d'implémentation de l'algorithme ^^. J'espère à ne pas avoir à regarder la vidéo autant de fois que vous ^^
Bonjour Hugo.
Merci pour la vidéo bien expliquée.
Ce pendant j'ai une question concernant le fait que les biais de chaque neurones ne sont pas pris en compte ici. Et ce aussi dans la vidéo suivante de l'exemple (12:13). Qu'en est t-il de l'utilisation des biais de chaque neurones ou alors le rôle exact des biais de chaque neurones ?
Bien à toi,
Bonne question! En pratique, effectivement on utilise des biais pour les neurones. Ils ne le sont pas ici juste pour simplifier la présentation.
svp vous pouvez donner le cours sous forme ppt ou pdf
J'y ai passé beaucoup de temps, mais j'ai l'impression qu'il y a une erreur dans le code. Tu affectes (yj - aj) au gradient des neurones de sortie, mais ça devrait être (yj - aj) * logistic(aj) * (1 - logistic(aj)), n'est-ce pas ?
A moins que la fonction logistic ne s'applique pas sur les neurones de sortie dans ce réseau-là ?
Très bonne question! En fait, (y_j - in_j) est bel et bien le gradient de la Loss par rapport à in_j, lorsque
Loss = - y_j log(logistic(in_j)) - (1-y_j) log(1-logistic(in_j))
qui est la Loss la plus souvent utilisée pour la classification binaire avec des réseaux de neurones. Par contre, si la Loss était
Loss = 0.5 (y_j - in_j)^2
Tu aurais alors raison. J'espère que ça aide!
Merci !
Hugo Larochelle Bonjour à vous, je me demandais:
Comment en est-on arriver à ces fonctions et comment savoir laquelle privilégier dans un cas précis? En existe-t-il d'autres?
Il n'y a pas d'erreur, si on utilise l'entropie croisée pour la "loss". Si on utilise la différence au carré par contre, tu as raison.
Hugo Larochelle Excusez-moi si je ne comprends pas, mais je ne vois pas en quoi vous répondez aux questions que j'ai posé plus tôt. Auriez-vous l'amabilité de reformuler?
bonjour, tout d'abord MERCI pour ce tuto. ensuite, j'aurai voulu savoir, dans le cas où on a un biais, est-ce que la rétropropagation l'affecte? si oui comment?
Yasmina Mekki Oui, la rétropropagation peut aussi entraîner des biais. Une façon de voir un biais, c'est comme une connection avec une unité constante, qui vaut toujours 1. Donc on peut dériver la version avec biais simplement en ajoutant à chaque couche un neurone constant valant 1.
Bonjour Hugo, j'aimerai savoir si dans le cadre d'un algorithme de classification avec un PMC, il serai possible de rajouter "dynamiquement" des classes possibles (et donc des neurones de sortie) durant la "durée de vie" de notre réseau sans avoir besoin de soumettre à nouveau la totalité des exemples d'apprentissage, le vecteur de poids va t-il s'adapter sans fausser la classification?
Merci de votre aide.
Franck Chaillat Bonne question! Je crois que ça pourrait être une solution raisonnable, oui.
En fait, de nos jours, il arrive très souvent que des chercheurs pré-entraînent des réseaux de neurones sur un très grand jeu de données A, pour ensuite raffiner le comportement du réseau de neurones sur leur jeu de données plus petit B, mais correspondant à leur problème. Et ce, même si le jeu de données A ne contient pas les classes couvertes par le jeu de donnée B. On appelle ça du "transfert learning", et lorsque le jeu de données B est très, très grand, ça peut faire une différence bénéfique.
Hugo Larochelle D’accord bonne nouvelle pour moi, merci de votre réponse, mais cela nécessite t-il une "forme" de réseau particulière?
Franck Chaillat Non, pas vraiment. Tout ce qu'il faut faire, c'est ajouter des neurones de sorties (dont les poids et biais peuvent être initialisés à 0) pour chacune des nouvelles classes.
Hugo Larochelle Merci beaucoup pour ces réponses cela m'a bien aidé :)
Bonjour,
Merci pour vos vidéos de grande qualitées.
J'ai 2 questions.
Est-il possible d'utiliser l'algorithme de retropropagation pour ajuster les paramètres d'un réseau bayesien ?
Pour trouver les valeurs des probabilités conditionnelles ?
J'ai travaillé dessus, mais mes résultats expérimentaux ne sont pas très concluant :
Pour la fonction de coût, j'ai simplement pris le carré de l'erreur de 'prédiction'. Mon coût diminue à chaque itération mais les valeurs de proba conditionnelle convergent vers des valeurs hors de [0;1]....
Je trouve pas beaucoup de littérature dessus...
Ma seconde question porte sur la formule de dérivée en chaine, celle avec la somme :
df/dx = df/dg1 * dg1/dx + df/dg2 * dg2/dx
Comment on choisi les gi ? est-ce que n'importe quelle gi peuvent convenir ? On peut en mettre autant que l'on veut ? et si on en oublie ?
Il y a ca en.wikipedia.org/wiki/Chain_rule#Example mais je cherche plus de détails...
Merci beaucoup,
Bien cordialement,
Guillaume
Bonjour!
Pour votre première question, il n'est pas vraiment possible d'appliquer l'algorithme de la rétropropagation aux réseaux bayésiens.
Pour votre deuxième, il y a effectivement plusieurs façons de choisir les termes intermédiaires gi. Par contre, il ne faut pas en oublier, i.e. il faut que l'ensemble des gi soit tel que vous n'avez plus besoin de x pour calculer f, les gi suffisent.
Avez vous des références à me suggérer expliquant pourquoi ce n'est possible d'utiliser l'algorithme de rétropropagation dans les réseaux Bayesien ?
Salut , je comprend pas pourquoi on a pas de terme en g' => ( g(nj)(1- g(nj) ) dans le delta de la couche de sortie , dans d'autre exemple, ici page 16 www.isir.upmc.fr/UserFiles/File/LPrevost/connex%201%20&%202.pdf
Pour le Delta (j) de la derniere couche , on prend D(j)= g' * (y-g) et pas simplement D(j)= (y-g).
J'ai loupé quelque chose ? lol
ha désolé je viens de tomber sur un commentaire plus bas qui en parle !
Bonne question! La raison est que, dans ma présentation, j'utilise la perte (Loss) de la cross-entropie, et non celle de la différence au carré. Puisque les Loss sont différentes, les gradients sont différents.
J'espère que ça aide!
@@hugolarochelle mon cerveau n'avait pas percuté , mais oui merci j'ai compris maintenant !
trop bien :D
Please make is English,Thank you!!