909 votes

Quel est le rôle du biais dans les réseaux neuronaux ?

Je suis conscient de la descente de gradient et de l'algorithme de rétropropagation. Ce que je ne comprends pas, c'est : quand est-il important d'utiliser un biais et comment l'utilise-t-on ?

Par exemple, lors du mapping de la fonction AND, lorsque j'utilise deux entrées et une sortie, cela ne donne pas les bons poids. Cependant, lorsque j'utilise trois entrées (dont l'une est un biais), cela donne les bons poids.

19 votes

Consultez cette question : stackoverflow.com/questions/1697243/help-with-perceptron pour un exemple d'un problème réel où l'OP n'utilisait pas un terme de biais.

7 votes

Et voici un bel exemple en Python de pourquoi le biais est important :) stackoverflow.com/questions/38248657/…

3 votes

Voici un excellent article rempli de mathématiques sur la rétropropagation, incluant également les mises à jour de biais : theclevermachine.wordpress.com/2014/09/06/…

1503voto

Nate Kohl Points 11240

Je pense que les biais sont presque toujours utiles. En effet, une valeur de biais vous permet de décaler la fonction d'activation vers la gauche ou vers la droite, ce qui peut être crucial pour un apprentissage réussi.

Il pourrait être utile de regarder un exemple simple. Considérez ce réseau à 1 entrée et 1 sortie qui n'a pas de biais :

réseau simple

La sortie du réseau est calculée en multipliant l'entrée (x) par le poids (w0) et en passant le résultat à travers un type de fonction d'activation (par exemple une fonction sigmoïde).

Voici la fonction que ce réseau calcule, pour différentes valeurs de w0 :

sortie du réseau, donnée différentes pondérations w0

Changer le poids w0 change essentiellement « l'inclinaison » de la sigmoïde. C'est utile, mais que se passe-t-il si vous voulez que le réseau produise une sortie de 0 lorsque x est égal à 2 ? Changer simplement l'inclinaison de la sigmoïde ne fonctionnera pas vraiment - vous voulez pouvoir décaler toute la courbe vers la droite.

C'est exactement ce que permet le biais. Si nous ajoutons un biais à ce réseau, comme ceci :

réseau simple avec un biais

... alors la sortie du réseau devient sig(w0*x + w1*1.0). Voici à quoi ressemble la sortie du réseau pour différentes valeurs de w1 :

sortie du réseau, donnée différentes pondérations w1

Avoir un poids de -5 pour w1 décale la courbe vers la droite, ce qui nous permet d'avoir un réseau qui produit une sortie de 0 lorsque x est égal à 2.

6 votes

@user1621769: La méthode la plus simple consiste en un réseau avec un seul nœud de biais qui se connecte à tous les nœuds non d'entrée dans le réseau.

1 votes

Serait-ce le plus efficace cependant? il me semble qu'une unité de biais à la couche de sortie, ou 1 par couche rendrait la prédiction meilleure.

78 votes

@user1621769: La fonction principale d'un biais est de fournir à chaque nœud une valeur constante entraînable (en plus des entrées normales que le nœud reçoit). Vous pouvez y parvenir avec un seul nœud de biais avec des connexions à N nœuds, ou avec N nœuds de biais, chacun avec une seule connexion; le résultat devrait être le même.

54voto

Lirik Points 17868

Deux types différents de paramètres peuvent être ajustés pendant l'entraînement d'un RN, les poids et la valeur dans les fonctions d'activation. C'est impraticable et ce serait plus facile si seulement l'un des paramètres devait être ajusté. Pour faire face à ce problème, un neurone de biais est inventé. Le neurone de biais se trouve dans une couche, est connecté à tous les neurones de la couche suivante, mais aucun de la couche précédente et il émet toujours 1. Puisque le neurone de biais émet 1, les poids, connectés au neurone de biais, sont ajoutés directement à la somme combinée des autres poids (équation 2.1), tout comme la valeur t dans les fonctions d'activation. 1

La raison pour laquelle c'est impraticable est que vous ajustez simultanément le poids et la valeur, de sorte que tout changement du poids peut neutraliser le changement de la valeur qui était utile pour une instance de données précédente... ajouter un neurone de biais sans valeur changeante vous permet de contrôler le comportement de la couche.

De plus, le biais vous permet d'utiliser un seul réseau neuronal pour représenter des cas similaires. Considérez la fonction booléenne AND représentée par le réseau neuronal suivant:

ANN
(source: <a href="http://www.aihorizon.com/images/essays/perceptron.gif" rel="noreferrer">aihorizon.com</a>)

  • w0 correspond à b.
  • w1 correspond à x1.
  • w2 correspond à x2.

Un simple perceptron peut être utilisé pour représenter de nombreuses fonctions booléennes.

Par exemple, si l'on suppose des valeurs booléennes de 1 (vrai) et -1 (faux), alors une façon d'utiliser un perceptron à deux entrées pour implémenter la fonction AND est de définir les poids w0 = -3, et w1 = w2 = 0,5. Ce perceptron peut être utilisé pour représenter la fonction OU en modifiant le seuil à w0 = -0,3. En fait, AND et OR peuvent être vus comme des cas spéciaux de fonctions m-par-n: c'est-à-dire, des fonctions où au moins m des n entrées du perceptron doivent être vraies. La fonction OR correspond à m = 1 et la fonction AND à m = n. Toute fonction m-par-n est facilement représentée à l'aide d'un perceptron en définissant tous les poids d'entrée à la même valeur (par exemple, 0,5) puis en définissant le seuil w0 en conséquence.

Les perceptrons peuvent représenter toutes les fonctions booléennes primitives AND, OR, NON-ET (1 AND) et NON-OU (1 OR). Machine Learning - Tom Mitchell

Le seuil est le biais et w0 est le poids associé au neurone de biais/seuil.

8 votes

Pensez-y comme une règle générale : ajoutez un biais ! Les réseaux neuronaux sont "imprévisibles" dans une certaine mesure, donc si vous ajoutez un neurone de biais, vous avez plus de chances de trouver des solutions plus rapidement que si vous n'utilisiez pas de biais. Bien sûr, cela n'est pas mathématiquement prouvé, mais c'est ce que j'ai observé dans la littérature et dans l'utilisation générale.

29voto

Debilski Points 28586

Une couche dans un réseau de neurones sans un biais n'est rien de plus que la multiplication d'un vecteur d'entrée par une matrice. (Le vecteur de sortie pourrait être passé à travers une fonction sigmoïde pour normalisation et pour une utilisation dans un ANN multi-couches par la suite, mais ce n'est pas important.)

Cela signifie que vous utilisez une fonction linéaire et donc une entrée de tous zéros sera toujours mappée vers une sortie de tous zéros. Cela pourrait être une solution raisonnable pour certains systèmes mais en général c'est trop restrictif.

En utilisant un biais, vous ajoutez effectivement une autre dimension à votre espace d'entrée, qui prend toujours la valeur un, donc vous évitez un vecteur d'entrée de tous zéros. Vous ne perdez pas en généralité par cela car votre matrice de poids entraînée n'a pas besoin d'être surjective, donc elle peut toujours mapper à toutes les valeurs précédemment possibles.

RNA 2D :

Pour un RNA qui mappe deux dimensions à une dimension, comme dans la reproduction des fonctions ET ou OU (ou XOR), vous pouvez penser à un réseau neuronal comme faisant ce qui suit :

Sur le plan 2D, marquez toutes les positions des vecteurs d'entrée. Ainsi, pour les valeurs booléennes, vous voudriez marquer (-1,-1), (1,1), (-1,1), (1,-1). Ce que votre RNA fait maintenant est de tracer une ligne droite sur le plan 2D, séparant les valeurs de sortie positives des valeurs de sortie négatives.

Sans biais, cette ligne droite doit passer par zéro, tandis qu'avec un biais, vous êtes libre de la placer n'importe où. Ainsi, vous verrez que sans biais, vous rencontrez un problème avec la fonction ET, puisque vous ne pouvez pas mettre à la fois (1,-1) et (-1,1) du côté négatif. (Ils ne sont pas autorisés à être sur la ligne.) Le problème est le même pour la fonction OU. Avec un biais, cependant, il est facile de tracer la ligne.

Notez que la fonction XOR dans cette situation ne peut pas être résolue même avec un biais.

4 votes

Si vous utilisez une fonction de transfert sigmoïde, vous introduisez de la non-linéarité. Affirmer que c'est une fonction linéaire est faux et aussi quelque peu dangereux, car la non-linéarité du sigmoïde est essentielle pour la résolution de plusieurs problèmes. De plus, sigmoïde(0) = 0.5, et il n'existe pas de valeur x pour laquelle sigmoïde(x) = 0.

2 votes

Oui, mais c'est 0.5 pour toute entrée de 0 sans biais, quel que soit l'aspect de la fonction linéaire précédente. Et c'est là le point. Vous n'entraînez généralement pas votre fonction sigmoïde, vous vivez simplement avec. Le problème de linéarité se produit bien avant la fonction sigmoïde.

0 votes

Je comprends votre point de vue : la couche n'est pas capable d'apprendre une sortie différente pour 0 que celle avec laquelle elle a commencé. C'est correct et important. Cependant, l'argument de la "fonction linéaire" ne s'applique tout simplement pas à mon avis. Même avec un biais, la fonction reste linéaire. La propriété de linéarité est trompeuse ici. (Oui, je pourrais chipoter.)

24voto

bayer Points 4202

Lorsque vous utilisez des RDN, vous connaissez rarement les détails des systèmes que vous souhaitez apprendre. Certaines choses ne peuvent pas être apprises sans un biais. Par exemple, jetez un œil aux données suivantes : (0, 1), (1, 1), (2, 1), essentiellement une fonction qui mappe n'importe quel x à 1.

Si vous avez un réseau à une couche (ou un mapping linéaire), vous ne pouvez pas trouver de solution. Cependant, si vous avez un biais, c'est trivial !

Dans un cadre idéal, un biais pourrait également mapper tous les points vers la moyenne des points cibles et laisser aux neurones cachés le soin de modéliser les différences par rapport à ce point.

23voto

Oke Uwechue Points 31

La modification des poids des neurones seuls sert uniquement à manipuler la forme/ courbure de votre fonction de transfert, et non pas son point de croisement d'équilibre/zéro.

L'introduction des neurones bias vous permet de déplacer la courbe de la fonction de transfert horizontalement (gauche/droite) le long de l'axe d'entrée tout en laissant la forme/courbure inchangée. Cela permettra au réseau de produire des sorties arbitraires différentes des valeurs par défaut et donc vous pouvez personnaliser/décaler la correspondance entre l'entrée et la sortie pour répondre à vos besoins spécifiques.

Voir ici pour une explication graphique : http://www.heatonresearch.com/wiki/Bias

0 votes

Le lien est mort.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X