Mise à jour du biais avec les RBM (machines Boltzmann restreintes)

8

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.

Adam P
la source
Regardez ici: image.diku.dk/igel/paper/AItRBM-proof.pdf dans la section 4.1 (pour la dérivée de la probabilité par rapport aux termes de biais) et 5 (pour les algorithmes d'ajustement approximatifs).
shadowtalker
Merci beaucoup! Eh bien, la plupart du temps, les maths sont bien au-dessus de ma tête, mais je comprends la ligne sur la façon de mettre à jour le biais sur p28 :-) et ce sera génial d'avoir quand je veux approfondir la théorie. ps Je l'ai bien fonctionné aujourd'hui sans aucune unité de biais ou poids du tout. (Smolenksy qui les a inventés les a appelés Harmoniums, un nom beaucoup plus agréable, je pense que je vais les appeler ainsi.)
Adam P
ravi de l'entendre! Je suggère d'écrire ce que vous avez trouvé et de répondre à votre propre question ici. De cette façon, les autres peuvent rechercher ici et le trouver facilement (les commentaires ne sont pas recherchés, seulement les questions et réponses)
shadowtalker
Je parie également que si vous lisez vraiment attentivement les mathématiques, vous constaterez que ce n'est pas si compliqué. C'est vraiment juste un tas de dérivés. La plupart du temps, ils jettent beaucoup sur la page à la fois et sautent des étapes, mais ces articles ne sont généralement pas aussi ésotériques, sauf lorsqu'ils prouvent des choses comme l'existence et les théorèmes de convergence
shadowtalker

Réponses:

5

TLDR

Pour n-Divergence contrastée pas à pas, mise à jour du biais visible bj, basé sur un vecteur de données d en utilisant:

bj(t)bj(t1)+η(djv^j(n))

Mettre à jour le biais caché hi en utilisant:

ci(t)ci(t1)+η(h^i(0)h^i(n))

bj(t) et ci(t) 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^j(n) et v^j(n) 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:

Wi,j(t)Wi,j(t1)+η(h^i(0)djh^i(n)vj(n))
où:
  • Wi,j(t) 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^i(n) 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^i(0) 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
  • vj(n) 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 hi(n) ou vj(n), et l '"activation" d'une unité, notée h^i(n) ou v^i(n). 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.

Edward Newell
la source
Edward Newell Merci beaucoup pour l'explication claire! Par hasard, vous avez un code MATLAB pour cet exemple (comme décrit dans le blog d'Edwin Chan) et pourriez-vous partager?
Bill Ancalagon le
Heureux que cela ait aidé. Malheureusement, je n'ai qu'une implémentation python. Et, pour le moment, mon implémentation diffère de la précédente (j'expérimentais avec différentes règles de mise à jour ...). Bonne chance!
Edward Newell du