Je suis conscient de la descente du gradient et du théorème de la propagation arrière. 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, il ne donne pas les poids corrects, mais lorsque j'utilise 3 entrées (dont 1 est un biais), il donne les poids corrects.
Je pense que les préjugés sont presque toujours utiles. En effet, une valeur de biais vous permet de décaler la fonction d'activation à gauche ou à droite , ce qui peut être essentiel pour un apprentissage réussi.
Il peut être utile de regarder un exemple simple. Considérez ce réseau à 1 entrée, 1 sortie sans biais:
La sortie du réseau est calculée en multipliant l'entrée (x) par le poids (w) et en transmettant le résultat à travers 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 w:
Changer le poids w change essentiellement la "pente" du sigmoïde. C'est utile, mais que se passe-t-il si vous voulez que le réseau produise 0 lorsque x vaut 2? Changer simplement l'inclinaison du sigmoïde ne fonctionnera pas vraiment - vous voulez pouvoir décaler toute la courbe vers la droite .
C'est exactement ce que le parti pris vous permet de faire. Si nous ajoutons un biais à ce réseau, comme ceci:
... alors la sortie du réseau devient sig (w* 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écale la courbe vers la droite, ce qui nous permet d’avoir un réseau qui sort 0 quand x est 2.
Juste pour ajouter mes deux cents.
Un moyen plus simple de comprendre le biais: il 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évision aux données ..__ Sans b la ligne passe toujours par l’origine (0, 0) et vous risquez d’être moins bien ajusté.
Deux types de paramètres différents peuvent être ajusté pendant la formation d'un ANN, les poids et la valeur dans le fonctions d'activation. C'est peu pratique et ce serait plus facile si un seul des paramètres doit être ajusté. Pour faire face à ce problème a neurone de polarisation est inventé. Le parti pris 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 neurone de polarisation émet 1 les poids reliés au neurone de polarisation, 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 cela n'est pas pratique est que vous ajustez simultanément le poids et la valeur. Ainsi, tout changement de poids peut neutraliser le changement de valeur utile pour une instance de données précédente. vous contrôlez 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érons la fonction booléenne AND représentée par le réseau de neurones suivant:
ANN http://www.aihorizon.com/images/essays/perceptron.gif
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 à implémenter la fonction AND est de définir les poids w0 = -3 et w1 = w2 = .5 . Ce perceptron peut être fait pour représente la fonction OR à la place par modification du seuil à w0 = -.3. Dans fait, AND et OR peuvent être considérés comme cas particuliers des fonctions m-of-n: c'est-à-dire, fonctions où au moins m de les n entrées au perceptron doivent être vrai. La fonction OR correspond à m = 1 et la fonction AND sur m = n . Toute fonction m-of-n est facilement représenté à l'aide d'un perceptron par régler tous les poids d’entrée au même valeur (par exemple, 0,5), puis définissez le paramètre 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 neurone biais/seuil.
Une couche dans un réseau de neurones 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 être utilisé par la suite dans un réseau ANN multicouche, mais cela n’a aucune importance.)
Cela signifie que vous utilisez une fonction linéaire et qu’une entrée de tous les zéros sera toujours mappée à une sortie de tous les zéros. Cela peut constituer une solution raisonnable pour certains systèmes, mais en général, il est trop restrictif.
En utilisant un biais, vous ajoutez effectivement une autre dimension à votre espace de saisie, qui prend toujours la valeur un, vous évitez ainsi un vecteur de saisie de tous les zéros. Vous ne perdrez donc pas de généralité car votre matrice de poids entraînée n’a pas besoin d’être surjective, elle peut donc toujours mapper sur toutes les valeurs possibles auparavant.
2d ANN:
Pour un ANN mappant deux dimensions en une dimension, comme pour la reproduction des fonctions AND ou OR (ou XOR), vous pouvez imaginer un réseau neuronal comme suit:
Sur le plan 2D, marquez toutes les positions des vecteurs d’entrée. Ainsi, pour les valeurs booléennes, vous voulez marquer (-1, -1), (1,1), (-1,1), (1, -1). Ce que votre ANN fait maintenant, c'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 un biais, vous êtes libre de la placer n'importe où ... Donc, vous verrez que sans biais, vous faites face à un problème avec la fonction AND ne peut 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 OR. 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 les ANN, vous connaissez rarement les composants internes des systèmes que vous souhaitez apprendre. Certaines choses ne peuvent être apprises sans parti pris. Par exemple, examinez les données suivantes: (0, 1), (1, 1), (2, 1), une fonction qui mappe n'importe quel x à 1.
Si vous avez un réseau monocouche (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 mapper tous les points sur la moyenne des points cibles et laisser les neurones cachés modéliser les différences à partir de ce point.
Le biais n'est pas un terme NN
, 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
alors, La ligne passera toujours par l’origine, c’est-à-dire (0,0)
, et ne dépend que d’un paramètre, c’est-à-dire M
, qui est la pente, de sorte que nous avons moins de choses à jouer.
C
, 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 afin de limiter sa valeur à l'intervalle unitaire. De cette manière, les prédictions du modèle peuvent être considérées comme des probabilités de résultat principales, comme indiqué: Fonction sigmoïde sur Wikipedia
C'est la dernière couche d'activation de la carte NN qui active et désactive le neurone. Ici aussi, les biais ont un rôle à jouer et modifient la courbe de manière flexible pour nous aider à tracer le modèle.
La modification des poids de neurones ne sert qu'à manipuler la forme/courbure de votre fonction de transfert, et non son équilibre/zéro point de croisement.
L’introduction de neurones biais vous 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/la courbure inchangée . Par défaut, vous pouvez personnaliser/décaler le mappage entrée/sortie en fonction de vos besoins.
Voir ici pour une explication graphique: http://www.heatonresearch.com/wiki/Bias
Ce fil m'a vraiment aidé à développer mon propre projet. Voici d'autres illustrations montrant le résultat d'un simple réseau de neurones à feed-back à deux couches avec et sans unités de biais sur un problème de régression à deux variables. Les poids sont initialisés de manière aléatoire et l'activation standard ReLU est utilisée. Comme l’ont conclu les réponses qui me sont données, sans le biais, le réseau ReLU ne peut pas s'écarter de zéro à (0,0).
Juste pour ajouter à tout cela quelque chose qui manque vraiment et que le reste, 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 la magnitude des données, par exemple si la photo est sombre ou brillante et vive. Et le réseau va apprendre à faire son travail en étudiant la relativité dans vos données. Beaucoup de réseaux de neurones modernes l'utilisent.
Pour d'autres données présentant des biais pourraient être critiques. Cela dépend du type de données avec lequel vous traitez. Si votre information est invariante de magnitude --- si la saisie de [1,0,0.1] aboutit au même résultat que si vous saisissiez de [100,0,10], il serait peut-être préférable de ne pas biaiser.
Dans quelques expériences de ma thèse de maîtrise (p. Ex. Page 59), j'ai constaté que le biais pouvait être important pour la ou les premières couches, mais surtout pour les couches entièrement connectées à la fin, il semble que cela ne se produise un grand rôle.
Cela peut fortement dépendre de l’architecture/du jeu de données réseau.
Le biais détermine l’angle que vous souhaitez faire pivoter.
Dans un graphique à 2 dimensions, le poids et le biais nous aident à trouver la limite de décision des sorties ..__ Dites que nous avons besoin de construire une fonction AND, la paire input (p) -output (t) doit ê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 une limite de décision, la limite d’idée devrait être:
Voir? W est perpendiculaire à notre limite. Ainsi, nous disons que W a décidé la direction de la frontière.
Cependant, il est difficile de trouver le bon W à la première fois. La plupart du temps, nous choisissons la valeur W d'origine de manière aléatoire. Ainsi, la première limite peut être la suivante:
Maintenant, la limite est pareller à l'axe des y.
Nous voulons faire pivoter les limites, 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, alors que b = 1.
Par conséquent, en modifiant la valeur de b (biais), vous pouvez décider de l'angle entre W 'et W. C'est "la règle d'apprentissage de ANN".
Vous pouvez également lire Conception de réseaux de neurones de Martin T. Hagan/Howard B. Demuth/Mark H. Beale, chapitre 4 "Règle d'apprentissage de Perceptron"
En développant l'explication @zfy ... L'équation pour une entrée, un neurone, une sortie devrait ressembler à ceci:
y = a * x + b * 1 and out = f(y)
où x est la valeur du nœud d'entrée et 1 la valeur du nœud de polarisation; y peut être directement votre sortie ou être passé à une fonction, souvent une fonction sigmoïde. Notez également que le biais peut être constant, mais pour simplifier les choses, nous choisissons toujours 1 (et c'est probablement si courant que @zfy l'a fait sans le montrer et l'expliquer).
Votre réseau tente d’apprendre les coefficients a et b pour s’adapter à vos données . Vous pouvez donc comprendre pourquoi l’ajout de l’élément b * 1
lui permet de s’adapter mieux à davantage de données: vous pouvez désormais modifier la pente et l’interception.
Si vous avez plusieurs entrées, votre équation ressemblera à ceci:
y = a0 * x0 + a1 * x1 + ... + aN * 1
Notez que l'équation décrit toujours un réseau de neurone, un réseau de sortie; si vous avez plus de neurones, ajoutez simplement une dimension à la matrice de coefficients, pour multiplexer les entrées de tous les nœuds et faire la somme de chaque contribution de nœud.
Que vous pouvez écrire au format vectorisé en tant que
A = [a0, a1, .., aN] , X = [x0, x1, ..., 1]
Y = A . XT
c'est-à-dire en mettant des coefficients dans un tableau et (entrées + polarisation) dans un autre, vous avez la solution désirée comme produit scalaire des deux vecteurs (vous devez transposer X pour que la forme soit correcte, j'ai écrit XT a 'X transposé ')
En fin de compte, vous pouvez également voir votre parti pris comme un simple élément supplémentaire pour représenter la partie du résultat qui est en réalité indépendante de votre contribution.
En particulier, la réponse de Nate, la réponse de zfy et la réponse de Pradi sont excellents.
En termes plus simples, les biais permettent de mémoriser/stocker de plus en plus de variations de poids ... (note de côté: parfois un certain seuil). Quoi qu'il en soit, plus de variations signifie que les biais ajoutent 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 le pouvoir de devinette du réseau neuronal)}
Par exemple, dans les modèles d’apprentissage, l’hypothèse/conjecture est liée de manière souhaitable par y = 0 ou y = 1 en fonction de certaines entrées, dans éventuellement une tâche de classification ... y = 1 pour certains x = (0,1). (La condition sur l'hypothèse/résultat est le seuil dont j'ai parlé plus haut. Notez que mes exemples configurent les entrées X de manière à ce que chaque x soit un double ou 2 vecteurs-valeur, au lieu des x entrées uniques de Nate d'une collection X).
Si nous ignorons le biais, de nombreuses entrées peuvent finir par être représentées par beaucoup des mêmes poids (c'est-à-dire les poids appris surviennent généralement près de l'origine} _ ( 0,0) Le modèle serait alors limité aux quantités les plus pauvres de poids bons, au lieu des nombreux poids plus bons, il pourrait mieux apprendre avec des biais. (Lorsque des poids mal appris conduisent à des suppositions plus mauvaises ou à un diminution du pouvoir de devinette du réseau neuronal)
Il est donc optimal que le modèle apprenne à la fois près de l’Origine, mais aussi, dans autant de lieux que possible à l’intérieur du seuil/limite de décision. Avec le biais, nous pouvons activer des degrés de liberté proches de l'origine, mais non limités à la région immédiate de l'origine.
Pour penser de manière simple, si vous avez y = w1 * x où y est votre sortie et w1 est le poids imaginer une condition où x = 0 puis y = w1 * x égal à 0, Si vous souhaitez mettre à jour votre poids, vous devez calculer le changement par delw = cible-y où cible est votre sortie cible, dans ce cas 'delw' ne changera pas depuis y est calculé comme 0. Alors, supposons que si vous pouvez ajouter une valeur supplémentaire cela aidera y = w1 * x + w0 * 1, où biais = 1 et le poids peuvent être ajustés pour obtenir un biais correct.Considérez l'exemple au dessous de.
En termes de ligne, l'inclinaison est une forme spécifique d'équations linéaires.
y = mx + b
vérifier 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 la connectivité supérieure entre deux neurones est élevée, plus les signaux seront transmis du neurone de déclenchement au neurone cible ou Y = w *. En conséquence, X doit conserver le caractère biologique des neurones. Il faut conserver le 1> = W> = -1, mais dans la régression réelle, le W se retrouvera avec | W | > = 1 qui contredit le fonctionnement des neurones, je propose donc W = cos (thêta), tandis que 1> = | cos (thêta) | et Y = a * X = W * X + b tandis que a = b + W = b + cos (thêta), b est un entier
Le terme biais est utilisé pour ajuster la matrice de sortie finale comme le fait l'ordonnée à l'origine. Par exemple, dans l'équation classique, y = mx + c, si c = 0, la ligne passera toujours par 0. L'ajout du terme de biais donne plus de souplesse et une meilleure généralisation à notre modèle de réseau de neurones.
Autres que les réponses mentionnées..j’aimerais ajouter quelques points.
Le biais agit comme notre ancre. C'est une façon pour nous d'avoir une sorte de base où nous ne descendons pas en dessous de cela. En termes de graphique, imaginez que y = mx + b, c'est comme une ordonnée à l'origine de cette fonction.
output = input multiplié par la valeur de poids et ajouté une valeur de biais, puis appliquer une fonction d'activation.
En général, dans l'apprentissage machine, nous avons cette formule de base Compromis 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 les résultats 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 Compensation de la variance , où le biais est carré, donc introduire un faible biais pourrait conduire à une réduction considérable de la variance . Donc, introduisez un biais lorsque vous avez une grande variance et un danger excessif.
Dans les réseaux de neurones:
En l'absence de biais, le neurone ne peut pas être activé en considérant uniquement la somme pondérée de la couche d'entrée. Si le neurone n'est pas activé, les informations de ce neurone ne sont pas transmises via le reste du réseau neuronal.
La valeur du parti pris est apprenable.
Suivez cette vidéo pour plus détails