Je connais la descente de gradient et l'algorithme de rétropropagation. Ce que je ne comprends pas, c'est: quand est-il important d'utiliser un biais et comment l'utilisez-vous?
Par exemple, lors du mappage de la AND
fonction, 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.
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.
Il pourrait être utile d'examiner un exemple simple. Considérez ce réseau à 1 entrée et 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 (w 0 ) et en passant 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 w 0 :
La modification du poids w 0 modifie essentiellement la "pente" du sigmoïde. C'est utile, mais que se passe-t-il si vous souhaitez que le réseau génère 0 lorsque x est 2? Changer simplement la pente du sigmoïde ne fonctionnera pas vraiment - vous voulez pouvoir déplacer la courbe entière vers la droite .
C'est exactement ce que le biais vous permet de faire. Si nous ajoutons un biais à ce réseau, comme ceci:
... alors la sortie du réseau devient sig (w 0 * x + w 1 * 1.0). Voici à quoi ressemble la sortie du réseau pour différentes valeurs de w 1 :
Avoir un poids de -5 pour w 1 décale la courbe vers la droite, ce qui nous permet d'avoir un réseau qui produit 0 lorsque x est 2.
la source
Juste pour ajouter mes deux cents.
Une façon plus simple de comprendre ce qu'est 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 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 moins bon.
la source
Ce fil m'a vraiment aidé à développer mon propre projet. Voici quelques illustrations supplémentaires montrant le résultat d'un simple réseau neuronal à 2 couches avec et sans unités de biais sur un problème de régression à deux variables. Les poids sont initialisés de façon aléatoire et l'activation standard de ReLU est utilisée. Comme l'ont conclu les réponses avant moi, sans biais, le réseau ReLU n'est pas en mesure de dévier de zéro à (0,0).
la source
La raison pour laquelle cela 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 modification de la valeur permet vous de contrôler le comportement du calque.
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 neuronal suivant:
(source: aihorizon.com )
Le seuil est le biais et w0 est le poids associé au neurone de biais / seuil.
la source
Le biais n'est pas un
NN
terme, 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(0,0)
-à- dire , et ne dépend que d'un paramètre, c'est-à-direM
-à- qui est la pente, nous avons donc moins de choses à jouer.C
, qui est le biais prend n'importe quel nombre et a pour 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
Il s'agit de la dernière couche d'activation de 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 avec souplesse pour nous aider à cartographier le modèle.
la source
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 à plusieurs 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 les zéros sera toujours mappée sur une sortie de tous les zéros. Cela peut être une solution raisonnable pour certains systèmes, mais en général, elle est trop restrictive.
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é par cela car votre matrice de poids entraînée n'a pas besoin d'être surjective, elle peut donc toujours correspondre à toutes les valeurs précédemment possibles.
2d ANN:
Pour un ANN mappant deux dimensions à une dimension, comme lors de la reproduction des fonctions AND ou OR (ou XOR), vous pouvez penser à 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 souhaitez marquer (-1, -1), (1,1), (-1,1), (1, -1). Ce que fait maintenant votre ANN, c'est de tracer 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 la mettre n'importe où. Donc, vous verrez que sans biais, vous rencontrez un problème avec la fonction ET, car 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 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.
la source
Lorsque vous utilisez des ANN, vous connaissez rarement les caractéristiques internes des systèmes que vous souhaitez apprendre. Certaines choses ne peuvent être apprises sans parti pris. 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 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 les neurones cachés modéliser les différences à partir de ce point.
la source
La modification des poids des neurones à elle seule ne sert qu'à manipuler la forme / courbure de votre fonction de transfert, et non son point de croisement équilibre / zéro .
L'introduction de biais neurones 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 / courbure inchangée. Cela permettra au réseau de produire des sorties arbitraires différentes des valeurs par défaut et vous pourrez donc personnaliser / décaler le mappage entrée-sortie pour répondre à vos besoins particuliers.
Voir ici pour l'explication graphique: http://www.heatonresearch.com/wiki/Bias
la source
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 de la magnitude des données, comme si l'image est sombre ou claire et vive. Et le réseau va apprendre à faire son travail en étudiant la relativité à l'intérieur de vos données. Beaucoup de réseaux de neurones modernes l'utilisent.
Pour d'autres données, les biais peuvent être critiques. Cela dépend du type de données que vous traitez. Si vos informations sont invariables en magnitude --- si la saisie de [1,0,0,1] doit conduire au même résultat que si vous saisissez [100,0,10], vous pourriez être mieux sans biais.
la source
Dans quelques expériences de ma thèse de maîtrise (par exemple, page 59), j'ai trouvé que le biais pouvait être important pour la ou les premières couches, mais surtout au niveau des couches entièrement connectées à la fin, il ne semble pas jouer un grand rôle.
Cela peut dépendre fortement de l'architecture / du jeu de données du réseau.
la source
Le biais décide de l'angle selon lequel vous souhaitez que votre poids tourne.
Dans un graphique à deux 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 d'entrée (p) -sortie (t) doit être
Maintenant, nous devons trouver la limite de décision, la limite de l'idée devrait être:
Voir? 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 un W correct au premier essai. Généralement, nous choisissons la valeur W d'origine au hasard. Ainsi, la première frontière peut être la suivante:
Maintenant, la frontière est parallèle à l'axe y.
Nous voulons faire pivoter la frontière, comment?
En changeant le W.
Donc, nous utilisons la fonction de règle d'apprentissage: W '= W + P:
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 de ANN".
Vous pouvez également lire Neural Network Design par Martin T. Hagan / Howard B. Demuth / Mark H. Beale, chapitre 4 "Perceptron Learning Rule"
la source
En particulier, Nate réponse , de ZFY réponse et de Pradi réponse sont grands.
En termes plus simples, les biais permettent d' apprendre / stocker de plus en plus de variations de poids ... ( note latérale : parfois avec 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 le pouvoir de devinette du réseau neuronal)
Par exemple, dans les modèles d'apprentissage, l'hypothèse / supposition est délimitée de manière souhaitable par y = 0 ou y = 1 étant donné une certaine entrée, peut-être une tâche de classification ... c'est-à-dire un 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 qu'elles soient chacune x = un vecteur double ou à 2 valeurs, au lieu des entrées x à valeur unique de Nate d'une collection X).
Si nous ignorons 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 produisent 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, il pourrait mieux apprendre avec biais. (Lorsque les poids mal appris conduisent à de moins bonnes suppositions ou à une diminution du pouvoir de devinette du réseau neuronal)
Ainsi, il est optimal que le modèle apprenne à la fois près de l'origine, mais aussi, dans autant d'endroits que possible à l'intérieur de la frontière seuil / décision. Avec le biais, nous pouvons permettre des degrés de liberté proches de l'origine, mais non limités à la région immédiate de l'origine.
la source
Développer sur l'explication @zfy ... L'équation pour une entrée, un neurone, une sortie devrait ressembler à:
où x est la valeur du nœud d'entrée et 1 est la valeur du nœud 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 n'importe quelle constante, mais pour simplifier tout, nous choisissons toujours 1 (et c'est probablement si courant que @zfy l'a fait sans le montrer ni 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 lui
b * 1
permet de mieux s'adapter à davantage de données: vous pouvez maintenant modifier la pente et l'interception.Si vous avez plus d'une entrée, votre équation ressemblera à:
Notez que l'équation décrit toujours un réseau de neurones, 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 vers tous les nœuds et résumer chaque contribution de nœud.
Que vous pouvez écrire au format vectorisé
c'est-à-dire en mettant des coefficients dans un tableau et (entrées + biais) dans un autre, vous avez la solution souhaité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 une seule entrée de plus pour représenter la partie de la sortie qui est réellement indépendante de votre entrée.
la source
Autre que les réponses mentionnées .. Je voudrais ajouter quelques autres points.
Le biais est notre point d'ancrage. C'est une façon pour nous d'avoir une sorte de référence où nous ne descendons pas en dessous. En termes de graphique, pensez à y = mx + b, c'est comme une ordonnée à l'origine de cette fonction.
sortie = entrée multiplie la valeur de poids et ajoute une valeur de biais , puis applique une fonction d'activation.
la source
Pour penser de manière simple, si vous avez y = w1 * x où y est votre sortie et w1 est le poids imaginez une condition où x = 0 alors y = w1 * x est égal à 0 , si vous voulez mettre à jour votre poids, vous avez pour calculer la quantité de changement par delw = target-y où target est votre sortie cible, dans ce cas, 'delw' ne changera pas puisque y est calculé comme 0. Donc, 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.Considérez l'exemple ci-dessous.
En termes de ligne Slope-intercept est une forme spécifique d'équations linéaires.
y = mx + b
vérifier l'image
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
la source
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é plus élevée entre deux neurones, plus les signaux seront transmis du neurone de tir au neurone cible ou Y = w * Par conséquent, pour maintenir le caractère biologique des neurones, nous devons garder 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
la source
Dans les réseaux de neurones:
En l'absence de biais, le neurone peut ne 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 passent pas par le reste du réseau neuronal.
La valeur du biais peut être apprise.
En effet, biais = - seuil. Vous pouvez penser au biais comme à la facilité avec laquelle le neurone émet un 1 - avec un très grand biais, il est très facile pour le neurone de sortir un 1, mais si le biais est très négatif, alors c'est difficile.
en résumé: le biais aide à contrôler la valeur à laquelle la fonction d'activation se déclenchera.
Suivez cette vidéo pour plus de détails
Quelques liens plus utiles:
geeksforgeeks
vers la datascience
la source
a
entraîner le biais lorsque le gradient àa
est toujours constant?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, alors la ligne passera toujours par 0. L'ajout du terme de biais offre plus de flexibilité et une meilleure généralisation à notre modèle de réseau neuronal.
la source
En général, dans l'apprentissage automatique, nous avons cette formule de base Bias-Variance Tradeoff 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, introduisant un un petit biais pourrait aider beaucoup. Si l'on considère la formule au - dessus du compromis entre les biais et les écarts , où le biais est au carré, l'introduction d'un petit biais pourrait donc réduire considérablement la variance. Donc, introduisez un parti pris lorsque vous avez une grande variance et un danger de surajustement.
la source
Le biais aide à obtenir une meilleure équation
Imaginez l'entrée et la sortie comme une fonction
y = ax + b
et vous devez mettre la bonne ligne entre l'entrée (x) et la sortie (y) pour minimiser l'erreur globale entre chaque point et la ligne, si vous gardez l'équation comme ceciy = ax
, vous aurez un seul paramètre pour l'adaptation, même si vous trouvez le meilleur ena
minimisant l'erreur globale, il sera un peu loin de la valeur souhaitéeVous pouvez dire que le biais rend l'équation plus flexible pour s'adapter aux meilleures valeurs
la source