Déterminer les poids des entrées

a marqué ce sujet comme résolu.

Bonjour à tous,

Je m'intéresse de plus en plus aux RNA, j'ai lu plusieurs tutos introductifs et celui de Développez.com tente d'apporter des explications plus ou moins rigoureuses (= mathématiques).

Il y a un passage que je n'ai pas trop bien compris (le deuxième paragraphe de la citation qui va suivre).

Dans ce cas, nous allons décrire une entrée par 2 informations. En effet, la fonction booléenne OU prend 2 informations en entrée (deux nombres qui peuvent valoir 0 ou 1 chacun) et retourne 1 si l'un des deux au moins vaut 1. Ici, nous allons grâce à un neurone simuler cette fonction, en rajoutant de la souplesse (en entrée nous accepterons des nombres réels compris entre 0 et 1).

Tout d'abord, il faut que nous-même sachions décrire le fonctionnement. Nous pouvons dire que le neurone pourra être actif lorsque w1x1 + w2x2 >= 0.5, ce qui représente la partie des réels entre 0 et 1 qui est la plus proche de 1. Nous avons donc déjà le seuil du neurone, qui sera ici 0,5. De plus, on peut considérer que si x1 = x2 = 0.25, le neurone renverra 1. On va donc finalement choisir comme poids w1 = w2 = 1 et comme nous l'avons dit, le coefficient de biais, aussi appelé seuil, w0 = 0.5.

Ma question est : comment détermine-t-on $w_a = w_2 = 1$ et, par ailleurs, pourquoi a-t-on l'affirmation suivante : "$x_1 + x_2 = 0.25$ implique que le neurone renvoie 1" ?

Sinon je pense avoir bien compris la notion de coefficient de biais (au final le neurone est activé quand la fonction d'activation renvoie un nombre supérieur ou égal à son seuil, et ce seuil est atteint lorsque la somme pondérée contenant le coefficient de biais vaut 0, c'est-à-dire lorsque la somme pondérée ne contenant pas le coefficient de biais est égal à ce dernier).

Lien vers le tuto en question : http://alp.developpez.com/tutoriels/intelligence-artificielle/reseaux-de-neurones/

Merci d'avance :) .

+0 -0

Salut ! :)

Tes questions sont posées à l'envers donc je vais répondre à la deuxième avant la première

Pourquoi :

$$ w_1x_1 + w_2x_2 \geq 0.5 $$

En fait, pour un neurone formel (ce que tu es en train de voir dans cette partie du tuto) on utilise un système de seuil pour "activer" le neurone. Si on définit de manière générale un neurone, le seuil peut être n'importe quel réel, en pratique, le seuil est zéro et on utilise un biais. Je sais pas si tu sais mais les neurones sont représentés sous forme de matrices (tableau de nombre), ajouter un biais revient à ajouter un colonne dans la matrice, ce qui se traduit par une entrée supplémentaire à ton neurone. Je te parle de tout ça pour être sûr qu'on soit sur la même longueur d'onde ^^

L'opération à gauche de l'inégalité est le calcul fait à l'entrée du neurone. L'auteur du tuto veut que ce neurone s'active si l'opération "OU" renvoie vrai (ou 1), sachant que "OU" renvoie 1 si au moins l'une des deux valeurs est supérieure à 0.5. Ce que l'auteur dit, c'est qu'il choisit que ce soit 0.5, mais il pourrait choisir 42 ou 0.1337, ça n'aurait aucune importance (en fait si mais tu vas comprendre après si ce n'est pas déjà le cas).

Pour ta première question, les valeurs de $w_1$ et $w_2$ sont liées à la valeur du seuil (0.5 en l’occurrence). Si tu veux que ton neurone s'active en ayant la valeur 0.5 après l'opération de gauche en suivant les règle du "OU", il te faut forcément des poids à 1 (ça se vérifie en 3 calculs). Si tu avais choisit une autre valeur que 0.5, mettons 1, tes poids ne serait pas les mêmes, en l'occurrence ce serait 2.

J'espère t'avoir aidé :)

Si tu veux j'ai fait un dossier pour les cours où j'essaie d'expliquer les NN, les maths sont abordés de manière à ce qu'un terminal S spé maths comprenne (si tu es en BAC +1 tu comprendras). Dis moi je te l'enverrai par MP

[HS] Je suis en train de faire un cours sur les réseaux de neurones, je suis en train d'écrire les parties de présentation, mais le gros du travail est déjà fait. Je l'avais un peu oublié en partant en vacance mais je m'y remet ;) [HS]

Excellent cours Grimur, en anglais il y en a un encore meilleur (mais en vidéo) qui est celui d'Andrew Ng, disponible sur Coursera.com :)

[HS] Y’a une traduction en français qui a été entreprise ? Parce que les chapitres sont longs, mais il n’y en a que 6, et le cours est sous CC BY-SA-NC, alors c’est typiquement le genre de contenu que ça pourrait valoir la peine de traduire ici… [/HS]

L'ayant lu en entier je pourrais. J'avais même contribué en envoyant une illustration, mais l'auteur m'avait expliqué ne plus mettre le cours à jour.

D'autres cours :

Je suis en train de faire un cours sur les réseaux de neurones

Besoin d'un coup de main ?

+0 -0

Besoin d'un coup de main ?

Pour l'instant non, mais j'aurais besoin de relecture ;)

  • des tutos mais je sais pas encore ce que ça vaut

Algue-Rythme

Vraiment pas les bons tutos pour commencer. Ces tutos s'adressent à des gens qui maîtrisent déjà les réseaux de neurones et qui sont très à l'aise avec la programmation scientifique (à moins d'être très à l'aise en MathLab ou équivalent c'est trop difficile) ou la programmation symbolique.

Wikipedia français est la meilleure ressource pour comprendre les algo d'apprentissage, une chance ^^

EDIT IMPORTANT :

Je me suis aperçu que j'ai fait une très grosse erreur dans mon OP. En effet, ce n'est pas l'inéquation $w_1x_1 + w_2x_2 >= 0.5$ qui me pose problème, mais cette égalité : $x_1 = x_2 = 0.25$. En effet, pourquoi cela implique que le neurone renvoie $1$ ? $0.25$ est plus proche de $0$ (faux) que de $1$ (vrai). Je m'excuse vraiment de mon manque d'attention (par ailleurs je n'ai pas touché au reste de ce message, qui reste OK).


en pratique, le seuil est zéro et on utilise un biais

On n'est pas censés utiliser une fonction (de transfert/d'activation - c'est la même chose apparemment) dont les images sont comprises entre $0$ et $1$ ? Et du coup ce qui est appelé "seuil" est en fait le seuil de cette fonction. Pour la sigmoïde, le seuil est $0.5$, en $0$.

Du coup c'est ton "en pratique" qui m'étonne un peu ; l'auteur de ce tuto a l'air de dire qu'en pratique, on utilise une fonction de transfert, donc un seuil souvent différent de $0$. D'autant plus que dans plusieurs tutos, j'ai constaté que la sigmoïde était très utilisée (donc un seuil de $0.5$).

Par ailleurs, je dois sûrement mal comprendre :p , mais tu sembles dire qu'un seuil de $0$ implique la notion de biais (biais = coefficient de biais ?). Pourtant là dans son tuto, le seuil est donc de $0.5$ et il utilise aussi un coefficient de biais. Enfin je sais bien qu'il n'y a aucune contradiction dans ce que je viens de d'écrire mais voilà… =/

Par ailleurs, d'après le tuto, la notion de coefficient de biais et de seuil de la fonction de transfert sont liés par ce que j'ai écrit plus haut, à savoir :

Si l'on prend la sigmoïde comme fonction de transfert, le seuil est atteint pour $x = 0$. Or le seul élément de son domaine de définition est la somme pondérée (contenant $-w_0$, le poids associée à la donnée égale à $-1$). Du coup la seule solution possible, c'est que le reste de cette somme pondérée soit égale à $+w_0$. Et $w_0$ est le coefficient de biais. Ainsi sont liés coefficient de biais et seuil. Après je t'avouerais que je n'ai pas compris à quoi ça sert de savoir ça :o

Je sais pas si tu sais mais les neurones sont représentés sous forme de matrices (tableau de nombre), ajouter un biais revient à ajouter un colonne dans la matrice, ce qui se traduit par une entrée supplémentaire à ton neurone.

Donc un neurone = une matrice de données ? Et on trouve alors en effet le coefficient de biais (je suppose toujours que "biais" = "coefficient de biais") parmi ces données, c'est-à-dire dans ta matrice. Oui on est donc sur la même longueur d'onde :) . A ceci près que pour toi, "biais/coefficient de biais" = le poids associé à la donnée $-1$, alors que moi je pensais que : "biais/coefficient de biais" = {ce poids ET cette donnée}.

L'opération à gauche de l'inégalité est le calcul fait à l'entrée du neurone. L'auteur du tuto veut que ce neurone s'active si l'opération "OU" renvoie vrai (ou 1), sachant que "OU" renvoie 1 si au moins l'une des deux valeurs est supérieure à 0.5. Ce que l'auteur dit, c'est qu'il choisit que ce soit 0.5, mais il pourrait choisir 42 ou 0.1337, ça n'aurait aucune importance (en fait si mais tu vas comprendre après si ce n'est pas déjà le cas).

heum là j'avoue ne pas trop comprendre. Tu es sûr et certain que le $0.5$ à droite de l'inégalité n'est tout simplement pas le seuil de la fonction sigmoïde ? Car pour re-citer l'auteur :

Nous pouvons dire que le neurone pourra être actif lorsque w1x1 + w2x2 >= 0.5,

C'est la définition-même d'un neurone actif. Un neurone est actif quand on se situe dans la partie supérieure au seuil de la fonction de transfert de la courbe de la fonction de transfert. Si tu valides, eh bien ça veut dire que je me suis enlevé une épine du pied tout seul :p !

Pour ta première question, les valeurs de w1 et w2 sont liées à la valeur du seuil (0.5 en l’occurrence). Si tu veux que ton neurone s'active en ayant la valeur 0.5 après l'opération de gauche en suivant les règle du "OU", il te faut forcément des poids à 1 (ça se vérifie en 3 calculs). Si tu avais choisit une autre valeur que 0.5, mettons 1, tes poids ne serait pas les mêmes, en l'occurrence ce serait 2.

Mmmh ces calculs qui permettent de déterminer ces 2 poids, ils se font directement sur l'inégalité non ? Il suffit de bidouiller l'inégalité $x_1w_1 + x_2w_2 >= 0.5$ : en prenant $x_1 = x_2 = 0.25$, on tombe sur $w_1 + w_2 >= 2$ or la valeur de tout poids $w_i$ est comprise entre $0$ et $1$. Donc on a : $w_1 = w_2 = 1$. C'est ça ? :)

Mais du coup je ne comprends toujours pas pourquoi on a : $x_1 = x_2 = 0.25$.

Si tu veux j'ai fait un dossier pour les cours où j'essaie d'expliquer les NN, les maths sont abordés de manière à ce qu'un terminal S spé maths comprenne (si tu es en BAC +1 tu comprendras). Dis moi je te l'enverrai par MP

Je te MP, ce serait avec plaisir ! merci ! :)

Je pose ça là, le cours est bien fait je trouve. C'est en anglais mais on n'y échappe pas et le cours en vaut largement la peine.

Grimur

Merci beaucoup ! Je trouve l'intro un tout petit peu longue mais ça a l'air d'être un cours très sérieux ça c'est sûr. :)

[HS] Y’a une traduction en français qui a été entreprise ? Parce que les chapitres sont longs, mais il n’y en a que 6, et le cours est sous CC BY-SA-NC, alors c’est typiquement le genre de contenu que ça pourrait valoir la peine de traduire ici… [/HS]

L'ayant lu en entier je pourrais. J'avais même contribué en envoyant une illustration, mais l'auteur m'avait expliqué ne plus mettre le cours à jour.

D'autres cours :

Je suis en train de faire un cours sur les réseaux de neurones

Besoin d'un coup de main ?

Algue-Rythme

Idem, merci ! :)

+0 -0

Je vais te répondre rapidement par manque de temps, d'autres complèteront sûrement dans la journée :)

Pour la notion de biais et compagnie, désolé de ne pas avoir été plus précis, c'est l'habitude de faire des maths en licence ^^. Si le seuil d'activation de ta fonction (sigmoid par exemple) est différent de 0 (0.5 pour Sigmoid, ce qui est arbitraire mais j'explique après) il te suffit de faire une soustraction. Si ta fonction c'est : $f(x) = \frac{1}{1+e^{-x}}$ (sigmoid) avec un seuil de 0.5, il te suffit de prendre une autre fonction tel que : $g(x) = f(x) - 0.5$ et c'est plié :)

En réalité il y a toujours un seuil et un biais, mais utiliser un seuil de 0 est bien plus naturel et une habitude de mathématicien puisque ça simplifie beaucoup de chose. De plus, on utilise de plus en plus une fonction qui s'appelle ReLU entre deux couches de neurones, et cette fonction met à 0 tout ce qui est négatif et laisse le reste tel quel. C'est une fonction d'activation un peu différente mais qui fonctionne bien en pratique :)

Alors sinon pour ton autre problème, c'est lié à ton réseau qui ne possède qu'un seul neurone. Désolé je n'avais pas forcément fait attention. Représente toi sur un papier la zone d'activation souhaitée de ton neurone (tu fais un ptit graph comme quand tu trace les fonctions), tu devrais voir que ce n'est pas linéaire[^lineraire]. Un neurone simple ne peut pas faire d'opération linéaire, dans sa forme de base en tout cas. Si tu veux avoir quelque chose de parfait il faudrait utiliser deux couches de neurone (je suppose en tout cas), mais franchement, l'intérêt est assez limité ^^


  1. Je sais pas si tu sais ce que ça veut dire donc je réexplique au cas où. Si ta zone d'activation est linéaire, ça veut dire que tu peux délimiter les deux zones (activation et non activation) par une fonction affine, $f(x) = ax + b$$a$ et $b$ sont deux réels. 

Ah je pensais que le terme "seuil" était vraiment utilisé en maths pour toute fonction, mais apparemment c'est un mot uniquement employé dans les RNA.

Heum après je n'ai toujours pas compris si la valeur $0.25$ est choisie arbitrairement ou quoi par contre =/

Sinon, tu aurais moyen de changer le tag en "réseaux de neurones" ? "rna" ça peut vouloir dire RiboNucleic Acid en anglais oar exemple, c'est bien trop vague. Ça évitera à ceux qui vont corriger les tags quand le staff aura pris sa décision de se coltiner du travail supplémentaire.

Sinon, tu aurais moyen de changer le tag en "réseaux de neurones" ? "rna" ça peut vouloir dire RiboNucleic Acid en anglais oar exemple, c'est bien trop vague. Ça évitera à ceux qui vont corriger les tags quand le staff aura pris sa décision de se coltiner du travail supplémentaire.

Grimur

J'ai essayé mais je ne vois pas de champ pour renseigner le nouveau tag =/

Ah je pensais que le terme "seuil" était vraiment utilisé en maths pour toute fonction, mais apparemment c'est un mot uniquement employé dans les RNA.

Heum après je n'ai toujours pas compris si la valeur $0.25$ est choisie arbitrairement ou quoi par contre =/

Lern-X

En fait une fonction seuil est une fonction mathématiques qui fait partie de la famille des fonctions non continue. C'est une fonction qui va valoir une certaine valeur sous certaines conditions. Par exemple la fonction "valeur absolue" va valoir $-x$ ou $x$ selon le signe de $x$.

Edit : Puisqu'on en parle ici, j'ai mis en BETA la première partie du tuto que j'écris ici :)

+0 -0

Il y a un bouton Éditer le sujet en haut de la page du topic. Clique dessus.

Grimur

Ahah c'est fait, je ne l'avais pas vu… !

Ah je pensais que le terme "seuil" était vraiment utilisé en maths pour toute fonction, mais apparemment c'est un mot uniquement employé dans les RNA.

Heum après je n'ai toujours pas compris si la valeur $0.25$ est choisie arbitrairement ou quoi par contre =/

Lern-X

En fait une fonction seuil est une fonction mathématiques qui fait partie de la famille des fonctions non continue. C'est une fonction qui va valoir une certaine valeur sous certaines conditions. Par exemple la fonction "valeur absolue" va valoir $-x$ ou $x$ selon le signe de $x$.

Edit : Puisqu'on en parle ici, j'ai mis en BETA la première partie du tuto que j'écris ici :)

Ricocotam

Ok, mais quand l'auteur de Développez.com parle du "seuil" de la fonction, on est d'accord qu'il parle d'autre chose que de la "fonction-seuil" ? Je pense qu'il n'a pas fait attention au vocabulaire, et du coup si l'on ne connaît pas plus que ça les maths, on peut vite se retrouver embrouillé.

Je vais lire ton tuto !

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte