TLDR
Pour n-Divergence contrastée pas à pas, mise à jour du biais visible bj, basé sur un vecteur de données d en utilisant:
b(t)j←b(t−1)j+η(dj−v^(n)j)
Mettre à jour le biais caché hi en utilisant:
c(t)i←c(t−1)i+η(h^(0)i−h^(n)i)
Où b(t)j et c(t)i sont les biais après le numéro de mise à jour t, η est le taux d'apprentissage, dj est le je composant du vecteur de données, et où h^(n)j et v^(n)j sont les probabilités de l'unité cachée i et unité visible j être actif une fois que le RBM a été exposé aux données et exécuté pour npas. Cela suppose une taille de mini-lot de 1; pour une taille de mini-lot pratiquek, moyenne des mises à jour obtenues sur la k vecteurs de données.
Explication complète
J'ai eu le même problème. Une bonne façon d'y penser est que les biais ne sont eux-mêmes que des poids. Souvent dans les modèles de réseaux de neurones, le biais d'une unité est modélisé comme le poids d'un lien reliant l'unité en question à une unité "toujours allumée", c'est-à-dire une unité imaginaire dont l'activation est toujours 1.
Dans le cas de RBM, cela signifierait que vous pensez qu'il y a une unité supplémentaire visible dont la sortie est toujours 1. Cette unité visible s'attache à chacune des unités cachées (comme n'importe quelle autre unité visible), et le poids de ces connexions sont les biais des unités cachées respectives. De même, les biais des unités visibles peuvent être modélisés en imaginant une unité cachée supplémentaire, dont la valeur est toujours une, et qui se connecte à chacune des unités visibles, les poids de ces connexions étant les biais visibles.
Vous pouvez même implémenter votre RBM de cette façon, mais je ne pense pas que les gens le fassent habituellement. Le fait est que, en y réfléchissant de cette façon, vous pouvez utiliser (essentiellement) la même règle de mise à jour pour les biais que pour les poids, car les biais ne sont que des poids se connectant à des unités "toujours actives".
Soyons concrets. J'écrirai l'habituelnde mise à jour de divergence contrastée, en ignorant la régularisation pour plus de simplicité. Par souci de simplicité également, cette règle de mise à jour concerne un "mini-lot" de 1 vecteur de données. La mise à jour d'un mini-lot aveck vecteurs est la mise à jour moyenne sur l'ensemble kvecteurs. La règle de mise à jour est:
W(t)i,j←W(t−1)i,j+η(h^(0)i⋅dj−h^(n)i⋅v(n)j)
où:
- W(t)i,j est le poids reliant l'unité visible vj à l'unité cachée hi après le numéro de mise à jour t
- η est le taux d'apprentissage
- h^(n)i est la probabilité de l'unité cachée i être actif une fois que la machine a été exposée au vecteur de données d et a évolué pour n pas.
- ce qui signifie que h^(0)i est juste l'activation de l'unité cachée i en réponse immédiate au vecteur de données
- dj est le je composant du vecteur de données d
- v(n)j est l'état de l'unité visible j une fois que la machine a été exposée au vecteur de données et a évolué pour n pas.
(Certaines personnes utilisent i pour indexer les unités visibles et j pour indexer les masqués, mais toujours écrire Wi,j --- cela n'a pas d'importance tant que vous multipliez les valeurs correctes ensemble.)
Attention à bien distinguer "l'état" d'une unité, noté par h(n)i ou v(n)j, et l '"activation" d'une unité, notée h^(n)i ou v^(n)i. L' état d'une unité est soit 0 soit 1, alors que l' activation est un nombre réel compris entre 0 et 1. Si l'activation est de 0,8, alors l'état est probablement 1, mais 20% du temps, il sera 0.
En traitant les biais comme des poids pour les unités "toujours actives " , vous constaterez que l'équation ci-dessus se simplifie en celles données pour les mises à jour de biais sous le " TLDR ". Il y a cependant une légère différence dans la mise à jour des biais visibles: ici l' activation visible est utilisée à la place de l' état . L'activation a la même valeur attendue, mais a une variance inférieure à l'état, ce qui réduit donc le bruit dans le signal d'apprentissage. Voir ce guide §3 pour une brève discussion sur l'utilisation des activations au lieu des états est souhaitable.