Rôle du biais dans les réseaux neuronaux
Je suis conscient de la descente de Gradient et du théorème de rétroproduction. Ce que je ne comprends pas, C'est: quand l'utilisation d'un biais est-elle importante et comment l'utilisez-vous?
Par exemple, lors du mappage de la fonction AND
, lorsque j'utilise 2 entrées et 1 sortie, elle ne donne pas les poids corrects, cependant, lorsque j'utilise 3 entrées (dont 1 est un biais), elle donne les poids corrects.
16 réponses
Je pense que les biais sont presque toujours utiles. En effet, une valeur de biais vous permet de déplacer la fonction d'activation vers la gauche ou la droite, ce qui peut être essentiel pour un apprentissage réussi.
Cela pourrait aider à regarder un exemple simple. Considérez ce réseau 1-entrée, 1-sortie qui n'a pas de biais:
La sortie du réseau est calculée en multipliant l'entrée (x) par le poids (w0) et le résultat le passage à travers une sorte d'activation fonction (par exemple, une fonction sigmoïde.)
Ici est la fonction de ce réseau calcule, pour différentes valeurs de w0:
Modification du poids w0 change essentiellement la "raideur" du sigmoïde. C'est utile, mais que faire si vous vouliez que le réseau produise 0 lorsque x est 2? Juste changer la pente du sigmoïde ne fonctionnera pas vraiment - vous voulez être capable de déplacer toute la courbe vers la droite .
, ce Qui est exactement ce que l' biais vous permet de le faire. Si nous ajoutons un biais à ce réseau, comme ceci:
...alors que 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:
Ayant un poids de -5 pour w1 déplace la courbe vers la droite, ce qui nous permet d'avoir un réseau sorties 0 lorsque x est 2.
Juste pour ajouter mes deux cents.
Un moyen plus simple de comprendre ce que le biais est: 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 vers le haut et vers le bas pour mieux adapter la prédiction aux données. Sans b la ligne passe toujours par l'origine (0, 0) et vous pouvez obtenir un ajustement plus pauvre.
Deux différents types de paramètres peut être ajustée pendant la formation d'un ANN, les poids et la valeur dans le fonctions d'activation. C'est peu pratique et il serait plus facile si un seul des paramètres devrait être ajuster. Pour faire face à ce problème un biais du neurone est inventé. 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 il émet toujours 1. Depuis le biais neurone émet 1 Le poids, connecté à l' biais neurone, 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 ce n'est pas pratique est que vous ajustez simultanément le poids et la valeur, de sorte que toute modification du poids peut neutraliser la modification de la valeur qui était utile pour une instance de données précédente... l'ajout d'un neurone de biais sans valeur changeante vous permet de contrôler le comportement de couche.
En outre, le biais vous permet d'utiliser un seul réseau neuronal pour représenter des cas similaires. Considérons la fonction booléenne et représentée par le réseau neuronal suivant:
ANN http://www.aihorizon.com/images/essays/perceptron.gif
- w0 correspond b.
- w1 correspond x1.
- l2 correspond x2.
Un seul perceptron peut être utilisé pour représenter 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 pour implémenter la fonction et est de définir le poids w0 = -3, et w1 = w2 = .5. Ce perceptron peut être fait pour représenter la fonction ou à la place par modification du seuil à w0 = -.3. Dans fait, et et ou peut être considéré comme cas spéciaux de m de n fonctions: autrement dit, les fonctions où au moins m de les N entrées du perceptron doivent être vrai. La fonction OR correspond à m = 1 et la fonction et à m = n. N'importe quelle fonction m-of-n est facilement représenté à l'aide d'un perceptron par réglage de tous les poids d'entrée sur le même valeur (par exemple, 0,5), puis seuil W0 en conséquence.
Les Perceptrons peuvent représenter tous les fonctions booléennes primitives et, ou, NAND (1 et), et NOR (1 ou). L'Apprentissage Automatique-Tom Mitchell)
Le seuil est le le biais et w0 est le poids associé au neurone de biais / seuil.
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é par une fonction sigmoïde pour la normalisation et pour une utilisation dans ANN multicouche 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 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 une, de sorte que vous évitez un vecteur d'entrée de tous les zéros. Vous ne perdez aucune généralité car votre matrice de poids entraînée n'a pas besoin d'être surjective, donc elle peut toujours correspondre à toutes les valeurs précédemment possibles.
2d ANN:
Pour un ANN mappant deux dimensions à une dimension, comme dans la reproduction des fonctions et ou ou (ou XOR) , vous pouvez pensez à un réseau neuronal comme faisant ce qui suit:
Sur le plan 2d marquez toutes les positions des vecteurs d'entrée. Ainsi, pour des valeurs booléennes, vous souhaitez marquer (-1,-1), (1,1), (-1,1), (1,-1). Ce que votre ANN fait maintenant est de tracer une ligne droite sur le plan 2d, séparant la sortie positive des valeurs de sortie négatives.
Sans biais, cette ligne droite doit passer par zéro, alors qu'avec biais, vous êtes libre de la mettre n'importe où. Donc, vous verrez que sans parti pris, vous êtes confronté à un problème avec la fonction et, puisque vous ne pouvez pas mettre les deux (1,-1) et (-1,1) du 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.
Lorsque vous utilisez ANNs, vous connaissez rarement les internes des systèmes que vous voulez apprendre. Certaines choses ne peuvent pas être apprises sans biais. Par exemple, jetez un oeil aux données suivantes: (0, 1), (1, 1), (2, 1), fondamentalement, 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 biais, c'est trivial!
Dans un cadre idéal, un biais pourrait également mapper tous les points à la moyenne des points cibles et laisser le les neurones cachés modélisent les différences à partir de ce point.
Le biais n'est pas un terme NN
, c'est un terme d'algèbre générique à considérer.
Y = M*X + C
(équation en ligne droite)
Maintenant si C(Bias) = 0
alors,
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.
C
, ce qui est le biais prend n'importe quel nombre et a l'activité de 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 liaison pour limiter sa valeur à l'intervalle unitaire. De cette façon, les prédictions du modèle peuvent être considérées comme des probabilités de résultats primaires comme indiqué: fonction sigmoïde sur Wikipedia
C'est la dernière couche d'activation de la carte NN qui active et éteint le neurone. Ici aussi, le biais a un rôle à Jouer et il déplace la courbe de manière flexible pour nous aider à cartographier le modèle.
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, de cette façon, votre réseau sera plus indépendant des données de l'ampleur, comme si l'image est sombre, ou vives et éclatantes. Et le net va apprendre à faire son travail en étudiant la relativité dans 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 invariante - - - si l'entrée [1,0,0. 1] devrait conduire au même résultat que si l'entrée [100,0,10], vous pourriez être mieux sans biais.
Dans quelques expériences dans Ma thèse de maîtrise (par exemple page 59), j'ai trouvé que le biais pouvait être important pour la(les) Première (S) couche (s), mais surtout pour les couches entièrement connectées à la fin, il ne semble pas jouer un grand rôle.
Cela peut dépendre fortement de l'architecture réseau / de l'ensemble de données.
La Modification des poids des neurones ne sert qu'à manipuler la forme/courbure de votre fonction de transfert, et non son équilibre/zéro point de passage.
L'introduction des neurones bias permet de décaler 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éplacer le mappage d'entrée à sortie pour répondre à vos besoins particuliers.
Voir ici pour une explication graphique: http://www.heatonresearch.com/wiki/Bias
Développer l'explication @zfy... L'équation pour une entrée, un neurone, une sortie devrait regarder:
y = a * x + b * 1 and out = f(y)
Où x est la valeur du nœud d'entrée et 1 est la valeur de la polarisation nœud; y peut être directement votre sortie ou être passés dans une fonction, souvent une fonction sigmoïde. Notez également que le biais pourrait être n'importe quelle constante, mais pour simplifier tout, nous choisissons toujours 1 (et probablement c'est si commun que @zfy l'a fait sans le montrer et l'expliquer).
Votre réseau essaie 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
lui permet de mieux s'adapter à plus de données: vous pouvez maintenant changer à la fois la pente et l'interception.
Si vous avez plus d'une entrée, votre équation ressemblera à:
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 nœud contribution.
Que vous pouvez écrire au 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 de points des deux vecteurs (vous devez transposer X pour que la forme soit correcte, j'ai écrit XT A 'X transposé')
Donc, à la fin, vous pouvez également voir votre biais comme est juste une entrée de plus pour représenter la partie de la sortie qui est réellement indépendante de votre entrée.
En particulier, la réponse de Nate , la réponse de zfy et la réponse de Pradi sont excellentes.
En termes plus simples, les biais permettent d'apprendre/de stocker de plus en plus de variations de poids... ( side-note : parfois donné un certain seuil). Quoi qu'il en soit, plus de variations signifient que les biais ajoutent une représentation plus riche de l'espace d'entrée aux poids appris/stockés du modèle. (où de meilleurs poids peuvent améliorer les devinettes du réseau neuronal puissance)
Par exemple, dans les modèles d'apprentissage, l'hypothèse/supposition est de préférence limitée par y=0 ou y=1 étant donné une entrée, peut-être dans une tâche de classification... c'est-à-dire certains y = 0 pour certains x=(1,1) et certains y = 1 pour certains x=(0,1). (La condition sur l'hypothèse / le résultat est le seuil dont j'ai parlé ci-dessus. Notez que mes exemples configurent les entrées X pour être Chaque X=un double ou 2 vectoriels, au lieu des entrées x à valeur unique de Nate d'une collection X).
Si nous ignorer le biais, de nombreuses entrées peuvent finir par être représentées par un grand nombre des mêmes Poids (c'est-à-dire que les poids appris se trouvent principalement près de l'origine (0,0). Le modèle serait alors limité à des quantités plus faibles de bons poids, au lieu des nombreux autres bons poids qu'il pourrait mieux apprendre avec un biais. (où les poids mal appris conduisent à des suppositions moins bonnes ou à une diminution du pouvoir de deviner du réseau neuronal)
Donc, il est optimal que le modèle apprenne à la fois proche de l'origine, mais en outre, dans autant d'endroits que possible à l'intérieur de la limite de seuil/décision. avec le biais, nous pouvons permettre des degrés de liberté proches de l'origine, mais pas limités à la région immédiate de l'origine.
Pour penser de manière simple, si vous avez y = w1 * x Où y {[4] } est votre sortie et w1 {[4] } est le poids imaginez une condition où x = 0 alors y = w1 * x est égal à 0 , Si vous voulez mettre à jour votre poids, vous devez calculer combien de changement par delw=target-y où target est votre sortie cible, dans ce cas 'delw' ne changera pas puisque y {[4] } est calculé comme 0.So, supposons que si vous pouvez ajouter une valeur supplémentaire, cela aidera y = w1 * x + w0 * 1 , où le biais = 1 et le poids peuvent être ajustés pour obtenir un biais correct.Prenons l'exemple ci-dessous.
En termes de pente droite-l'ordonnée à l'origine est une forme spécifique d'équations linéaires.
y=mx+b
Vérifiez l'image
ici, b est (0,2)
Si vous voulez l'augmenter à (0,3) comment allez-vous le faire en changeant la valeur de b qui sera votre biais
Pour tous les livres ML que j'ai étudiés, le W est toujours défini comme l'indice de connectivité entre deux neurones, ce qui signifie que plus la connectivité entre deux neurones est élevée, plus les signaux seront transmis du neurone de tir au neurone cible ou Y = w * X pour maintenir le caractère biologique des neurones, nous devons garder le 1 > = W > = -1, mais dans la régression réelle, le W finira avec |W / > = 1 qui contredit le fonctionnement des neurones, par conséquent je propose W= cos(theta) , tandis que 1 >=| cos( theta)| , et Y= a * X = W * X + b alors que a = b + W = b + cos (thêta), b est un entier
Autres que les réponses mentionnées..Je voudrais ajouter quelques autres points.
Bias agit comme notre ancre. C'est un moyen pour nous d'avoir une sorte de ligne de base où nous ne descendons pas en dessous de cela. En termes de graphe, pensez à y=mx + b c'est comme une ordonnée à l'origine de cette fonction.
Sortie = entrée de fois la valeur de poids et a ajouté valeur de bias puis appliquer une fonction d'activation.
Le biais détermine l'angle de rotation de votre poids.
Dans le graphique à 2 dimensions, le poids et le biais nous aident à trouver la limite de décision des sorties. Disons que nous devons construire et fonctionner, la paire entrée(p)-sortie(t) devrait être
{p=[0,0], t=0},{p=[1,0], t=0},{p=[0,1], t=0},{p=[1,1], t=1}
Maintenant, nous devons trouver la limite de décision, la limite d'idée devrait être:
Tu vois? W est perpendiculaire à notre frontière. Ainsi, nous disons que W a décidé de la direction de la frontière.
Cependant, il est difficile de trouver le bon W à la première fois. Surtout, nous choisir d'origine W valeur au hasard. Ainsi, la première limite peut être la suivante:
Maintenant, la limite est pareller à l'axe Y.
Nous voulons faire pivoter la limite, comment?
En changeant le W.
Donc, nous utilisons la fonction de règle d'apprentissage: W' = W + P:
W ' = W + P est équivalent à W' = w + bP, tandis que b = 1.
Par conséquent, en changeant la valeur de b(biais), vous pouvez décider de l'angle entre W' et W. c'est "la règle d'apprentissage D'ANN".
Vous pouvez également lire Neural Network Design {[11] } par Martin T. Hagan / Howard B. Demuth / Mark H. Beale, chapitre 4 "Perceptron Learning Rule"
En général, dans l'apprentissage automatique, nous avons cette formule de basecompromis de biais-Variance Parce que dans NN nous avons un problème de sur-Ajustement (problème de généralisation du modèle où de petits changements dans les données entraînent de grands changements dans le résultat du modèle) et à cause de cela, nous avons une grande variance, l'introduction d'un petit biais pourrait aider beaucoup. Considérant la formule ci-dessus compromis entre le biais et la Variance , lorsque le biais est carré, l'introduction d'un petit biais pourrait entraîner une réduction importante de la variance. Si, introduire le biais, lorsque vous avez une grande variance et un danger de suréquipement.