Suis très nouveau dans les RBM, j'essaye d'écrire un programme RBM maintenant. Désolé si c'est déjà une question idiote et / ou une réponse ici.
J'ai lu quelques articles en ligne et des questions ici, mais je ne trouve rien sur la façon de mettre à jour les biais (ou les biais). J'ai lu comment les définir initialement. Références éphémères sur lesquelles elles doivent être mises à jour. Geoff Hinton mentionne le biais, bien sûr, et cela figure dans ses équations, (j'ai lu quelques-uns de ses articles, vu quelques présentations vidéo), mais je ne trouve aucune mention dans ses articles du biais modifié une fois défini ou comment / quand / pourquoi le faire. J'ai dû louper quelque chose!
L'article d'Edwin Chen est recommandé ici: http://blog.echen.me/2011/07/18/introduction-to-restricted-boltzmann-machines/ Il ne mentionne pas comment mettre à jour / «apprendre» les biais; ils sont modifiés dans son programme mais je ne comprends pas son code. (Il a un tableau donnant les poids mis à jour qui ne semble pas correct - étrangement, il donne un poids de biais, quoi que cela puisse signifier.)
Hum, donc je ne sais pas pourquoi c'est si difficile de trouver du matériel !! Merci pour toute aide.
Réponses:
TLDR
Pourn -Divergence contrastée pas à pas, mise à jour du biais visible bj , basé sur un vecteur de données d en utilisant:
Mettre à jour le biais cachéhi en utilisant:
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 j e 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 n pas. 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'habitueln de 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 k vecteurs. La règle de mise à jour est:
(Certaines personnes utilisenti 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é parh(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.
la source