web-dev-qa-db-fra.com

Comment mettre à jour le biais dans la rétropropagation du réseau neuronal?

Quelqu'un pourrait-il m'expliquer comment mettre à jour le biais tout au long de la rétropropagation?

J'ai lu pas mal de livres, mais je ne trouve pas de mise à jour des biais!

Je comprends que le biais est une entrée supplémentaire de 1 avec un poids attaché (pour chaque neurone). Il doit y avoir une formule.

Je vous remercie,

@msw

Plus intéressant. Merci, je pense que deux bons points sont: 1. "La propriété" d'approximation universelle "des perceptrons multicouches avec les fonctions d'activation de couche cachée les plus couramment utilisées ne tient pas si vous omettez les termes de biais. Mais Hornik (1993) montre qu'un Une condition suffisante pour que la propriété d'approximation universelle sans biais soit qu'aucun dérivé de la fonction d'activation ne disparaisse à l'origine, ce qui implique qu'avec les fonctions d'activation sigmoïdes habituelles, un terme de biais fixe non nul peut être utilisé au lieu d'un biais entraînable. " 2. Les termes de biais peuvent être appris comme les autres poids. "Je vais donc soit ajouter un" poids constant ", soit entraîner ce poids comme tous les autres en utilisant la descente en gradient.

Suis-je en train de comprendre?

67
Katya

Suivant la notation de Rojas 1996, chapitre 7 , la rétropropagation calcule les dérivées partielles de la fonction d'erreur E (alias coût, alias perte)

∂E/∂w[i,j] = delta[j] * o[i]

w[i,j] est le poids de la connexion entre les neurones i et j, j étant une couche plus élevée dans le réseau que i et o[i] est la sortie (activation) de i (dans le cas de la "couche d'entrée", c'est juste la valeur de la fonction i dans l'exemple d'apprentissage considéré). Comment déterminer delta est donné dans n'importe quel manuel et dépend de la fonction d'activation, donc je ne le répéterai pas ici.

Ces valeurs peuvent ensuite être utilisées dans les mises à jour de poids, par ex.

// update rule for Vanilla online gradient descent
w[i,j] -= gamma * o[i] * delta[j]

gamma est le taux d'apprentissage.

La règle pour les poids de biais est très similaire, sauf qu'il n'y a pas d'entrée d'une couche précédente. Au lieu de cela, le biais est (conceptuellement) provoqué par l'entrée d'un neurone avec une activation fixe de 1. Ainsi, la règle de mise à jour pour les poids de biais est

bias[j] -= gamma_bias * 1 * delta[j]

bias[j] est le poids du biais sur le neurone j, la multiplication par 1 peut évidemment être omise, et gamma_bias peut être défini sur gamma ou sur une valeur différente. Si je me souviens bien, des valeurs inférieures sont préférées, bien que je ne sois pas sûr de la justification théorique de cela.

64
Fred Foo

Le montant que vous modifiez pour chaque poids et biais individuels sera la dérivée partielle de votre fonction de coût par rapport à chaque poids individuel et chaque biais individuel.

∂C/∂(index of bias in network)

Étant donné que votre fonction de coût ne dépend probablement pas explicitement des poids et valeurs individuels (le coût peut être égal (sortie réseau - sortie attendue) ^ 2, par exemple), vous devrez relier les dérivées partielles de chaque poids et biais à quelque chose que vous savoir, c.-à-d. les valeurs d'activation (sorties) des neurones. Voici un excellent guide pour ce faire:

https://medium.com/@erikhallstrm/backpropagation-from-the-beginning-77356edf427d

Ce guide explique comment faire ces choses clairement, mais peut parfois manquer d'explication. J'ai trouvé très utile de lire les chapitres 1 et 2 de ce livre en lisant le guide lié ci-dessus:

http://neuralnetworksanddeeplearning.com/chap1.html (fournit le contexte essentiel pour la réponse à votre question)

http://neuralnetworksanddeeplearning.com/chap2.html (répond à votre question)

Fondamentalement, les biais sont mis à jour de la même manière que les poids sont mis à jour: un changement est déterminé en fonction du gradient de la fonction de coût à un point multidimensionnel.

Considérez le problème que votre réseau essaie de résoudre comme un paysage de collines et de vallées multidimensionnelles (gradients). Ce paysage est une représentation graphique de l'évolution de vos coûts avec l'évolution des pondérations et des biais. Le but d'un réseau neuronal est d'atteindre le point le plus bas de ce paysage, trouvant ainsi le moindre coût et minimisant l'erreur. Si vous imaginez votre réseau comme un voyageur essayant d'atteindre le bas de ces gradients (c.-à-d. Descente de gradient), alors la quantité par laquelle vous modifierez chaque poids (et biais) est liée à la pente de l'inclinaison (gradient de la fonction) que le voyageur descend actuellement. L'emplacement exact du voyageur est donné par un point de coordonnées multidimensionnel (poids1, poids2, poids3, ... poids_n), où le biais peut être considéré comme un autre type de poids. En considérant les poids/biais d'un réseau comme les variables de la fonction de coût du réseau, il est clair que ∂C/∂ (indice de biais dans le réseau) doit être utilisé.

5
H Froedge