Question Rôle des biais dans les réseaux neuronaux


Je suis au courant de la descente en gradient et du théorème de rétropropagation. Ce que je ne comprends pas est: Quand est-ce que l'utilisation d'un biais important et comment l'utilisez-vous?

Par exemple, lors de la cartographie AND Fonction, quand j'utilise 2 entrées et 1 sortie, elle ne donne pas les poids corrects, cependant, quand j'utilise 3 entrées (dont 1 est un biais), elle donne les poids corrects.


553
2018-03-19 21:18


origine


Réponses:


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 la droite, ce qui peut être critique pour un apprentissage réussi.

Cela pourrait aider à regarder un exemple simple. Considérons ce réseau à 1 entrée et 1 sortie qui n'a pas de biais:

simple network

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

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

network output, given different w0 weights

Changer le poids w0 modifie essentiellement la "raideur" du sigmoïde. C'est utile, mais que se passe-t-il si vous voulez que le réseau affiche 0 lorsque x vaut 2? Juste changer la pente du sigmoïde ne fonctionnera pas vraiment - vous voulez être en mesure de déplacer toute la courbe vers la droite.

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

simple network with a bias

... 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:

network output, given different w1 weights

Avoir un poids de -5 pour w1 déplace la courbe vers la droite, ce qui nous permet d'avoir un réseau qui renvoie 0 lorsque x vaut 2.


987
2018-03-23 12:50



Juste pour ajouter mes deux cents.

Une façon plus simple de comprendre le biais: c'est en quelque sorte similaire à la constante b d'une fonction linéaire

y = ax + b

Il vous permet de déplacer la ligne de haut en bas pour mieux adapter la prédiction aux données. Sans pour autant b la ligne passe toujours par l'origine (0, 0) et vous pouvez obtenir un meilleur ajustement.


225
2017-11-04 00:32



Deux types différents de paramètres peuvent   être ajusté lors de la formation d'un   ANN, les poids et la valeur dans le   fonctions d'activation. C'est   impraticable et ce serait plus facile si   un seul des paramètres devrait être   ajusté. Pour faire face à ce problème, un   neurone de polarisation est inventé. Le biais   neurone se trouve dans une couche, est connecté   à tous les neurones de la couche suivante,   mais aucun dans la couche précédente et   émet toujours 1. Depuis le neurone de polarisation   émet 1 les poids, connectés à la   neurones de polarisation, sont directement ajoutés au   somme combinée des autres poids   (équation 2.1), tout comme la valeur de 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, donc toute modification du poids peut neutraliser le changement de la valeur qui était utile pour une instance de données précédente ... l'ajout d'un neurone de biais sans changement de valeur permet vous de contrôler le comportement de la couche.

En outre, le biais vous permet d'utiliser un réseau neuronal unique pour représenter des cas similaires. Considérons la fonction AND booléenne représentée par le réseau de neurones suivant:

ANN http://www.aihorizon.com/images/essays/perceptron.gif

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

Un seul perceptron peut être utilisé pour   représentent de nombreuses fonctions booléennes.

Par exemple, si nous supposons des valeurs booléennes   de 1 (vrai) et -1 (faux), puis un   façon d'utiliser un perceptron à deux entrées   mettre en œuvre la fonction ET est de définir   les poids w0 = -3, et w1 = w2 = 0,5.   Ce perceptron peut être fait pour   représenter la fonction OU à la place par   modifier le seuil à w0 = -3. Dans   fait, ET et OU peuvent être considérés comme   cas particuliers de fonctions m-of-n:   c'est-à-dire des fonctions où au moins m   les n entrées du perceptron doivent être   vrai. La fonction OU correspond à   m = 1 et la fonction ET à m = n.   Toute fonction m-of-n est facilement   représenté en utilisant un perceptron par   mettre tous les poids d'entrée à la même   valeur (par exemple, 0,5), puis définissant   seuil w0 en conséquence.

Les perceptrons peuvent représenter tous les   fonctions booléennes primitives ET, OU,   NAND (1 AND) et NOR (1 OR). Apprentissage automatique - Tom Mitchell)

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


30
2018-03-19 21:38



Une couche dans un réseau neuronal sans biais n'est rien de plus que la multiplication d'un vecteur d'entrée avec une matrice. (Le vecteur de sortie peut être passé à travers une fonction sigmoïde pour la normalisation et pour une utilisation dans ANN après plusieurs couches, mais ce n'est pas important.)

Cela signifie que vous utilisez une fonction linéaire et donc une entrée de tous les zéros sera toujours mappée à une sortie de tous les 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, de sorte que vous évitez un vecteur d'entrée de tous les zéros. Vous ne perdez pas de généralité parce que votre matrice de poids entraînée n'a pas besoin d'être surjective, elle peut donc correspondre à toutes les valeurs précédemment possibles.

2d ANN:

Pour un ANN mappant deux dimensions à une dimension, comme dans la reproduction des fonctions AND ou OR (ou XOR), vous pouvez considérer un réseau neuronal comme suit:

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

Sans biais, cette ligne droite doit passer par zéro, alors qu'avec le biais, vous êtes libre de le mettre n'importe où. Donc, vous verrez que sans biais vous êtes confronté à un problème avec la fonction AND, puisque vous ne pouvez pas mettre les deux (1, -1) et (-1,1) au côté négatif. (Ils ne sont pas autorisés à être sur la ligne.) Le problème est égal 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.


14
2018-03-19 22:24



Lorsque vous utilisez des ANNs, vous connaissez rarement les composants internes des systèmes que vous souhaitez apprendre. Certaines choses ne peuvent être apprises sans biais. Par exemple, jetez un oeil aux données suivantes: (0, 1), (1, 1), (2, 1), essentiellement une fonction qui mappe tout x à 1.

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

Dans un cadre idéal, un biais pourrait également faire correspondre tous les points à la moyenne des points cibles et laisser les neurones cachés modéliser les différences à partir de ce point.


13
2018-03-21 21:40



Le biais n'est pas un NN terme, c'est un terme générique d'algèbre à considérer.

Y = M*X + C (équation en ligne droite)

Maintenant si C(Bias) = 0 puis, la ligne passera toujours par l'origine, c'est-à-dire (0,0)et dépend d'un seul paramètre, c'est-à-dire M, qui est la pente, donc nous avons moins de choses à jouer avec.

C, qui est le biais prend n'importe quel nombre et a l'activité pour déplacer le graphique, et donc capable de représenter des situations plus complexes.

Dans une régression logistique, la valeur attendue de la cible est transformée par une fonction de lien pour restreindre sa valeur à l'intervalle d'unité. De cette manière, les prédictions du modèle peuvent être considérées comme des probabilités de résultat primaires, comme indiqué: Fonction sigmoïde sur Wikipedia

C'est la couche d'activation finale dans la carte NN qui active et désactive le neurone. Ici aussi, le biais a un rôle à jouer et il déplace la courbe de manière flexible pour nous aider à mapper le modèle.


8
2018-03-13 01:08



Juste pour ajouter à tout cela quelque chose qui manque beaucoup et que le reste, très probablement, ne savait pas.

Si vous travaillez avec des images, vous préférerez peut-être ne pas utiliser de biais du tout. En théorie, votre réseau sera ainsi plus indépendant de l'ampleur des données, par exemple si l'image est sombre ou claire et vive. Et le net va apprendre à faire son travail en étudiant la relativité à l'intérieur de vos données. Beaucoup de réseaux de neurones modernes utilisent cela.

Pour d'autres données ayant des biais peuvent être critiques. Cela dépend du type de données que vous traitez. Si votre information est invariable en magnitude --- si entrer [1,0,0.1] devrait aboutir au même résultat que si vous entrez [100,0,10], vous serez peut-être mieux sans biais.


7
2017-09-20 19:55



Dans quelques expériences en ma thèse de maîtrise (par exemple, page 59), j'ai trouvé que le biais pouvait être important pour la ou les première (s) couche (s), mais surtout au niveau des couches entièrement connectées à la fin il ne semble pas jouer un grand rôle.

Cela peut être fortement dépendant de l'architecture / de l'ensemble de données du réseau.


6
2017-08-01 17:09



La modification du poids des neurones seul ne sert qu'à manipuler le forme / courbure de votre fonction de transfert, et non son équilibre / zéro point de passage.

L'introduction des neurones BIAS vous permet de déplacer la courbe de 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 le mappage entrée-sortie pour répondre à vos besoins particuliers.

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


5
2018-01-23 22:56



Expansion sur l'explication @zfy ... L'équation pour une entrée, un neurone, une sortie devrait ressembler à:

y = a * x + b * 1    and out = f(y)

où x est la valeur du noeud d'entrée et 1 est la valeur du noeud de polarisation; y peut être directement votre sortie ou être passé dans une fonction, souvent une fonction sigmoïde. Notez également que le biais peut être constant, mais pour simplifier, nous choisissons toujours 1 (et c'est probablement si commun que @zfy l'a fait sans le montrer et l'expliquer).

Votre réseau essaie d'apprendre les coefficients a et b pour s'adapter à vos données. Vous pouvez donc voir pourquoi l'ajout de l'élément b * 1 permet de mieux s'adapter à plus de données: vous pouvez maintenant modifier à la fois la pente et l'interception.

Si vous avez plus d'une entrée, votre équation ressemblera à ceci:

y = a0 * x0 + a1 * x1 + ... + aN * 1

Notez que l'équation décrit toujours un neurone, un réseau de sortie; Si vous avez plus de neurones, vous ajoutez simplement une dimension à la matrice de coefficients, pour multiplexer les entrées à tous les nœuds et additionner chaque contribution de nœud.

Que vous pouvez écrire en format vectorisé comme

A = [a0, a1, .., aN] , X = [x0, x1, ..., 1]
Y = A . XT

c'est-à-dire mettre des coefficients dans un tableau et (entrées + biais) dans un autre vous avez votre solution désirée comme produit scalaire des deux vecteurs (vous devez transposer X pour que la forme soit correcte, j'ai écrit XT un 'X transposé')

Donc, à la fin, vous pouvez également voir votre biais comme étant juste une entrée de plus pour représenter la partie de la sortie qui est réellement indépendante de votre entrée.


3
2017-09-10 06:39