- Brève introduction à la structure et à l’objectif d’une machine de Boltzmann
- Définition de la fonction d’énergie et de la distribution de probabilité à l’aide de formules
- Dérivation par différentiation des règles de mise à jour des poids et des biais
- Explication de la méthode d’approximation de l’espérance du modèle via les phases positive et négative et l’échantillonnage de Gibbs
- Enfin, présentation d’ensemble de l’algorithme de divergence contrastive (Contrastive Divergence)
Concepts de machine de Boltzmann et de Contrastive Divergence
- Dans une machine de Boltzmann, on dispose d’une couche d’entrée (visible layer), d’une couche cachée (hidden layer), ainsi que d’une matrice de poids qui les relie et des vecteurs de biais propres à chacune des deux couches
Fonction d’énergie et distribution de probabilité
-
La fonction d’énergie est définie sous forme matricielle comme suit
E(v, h) = -ΣiΣj wij vi hj - Σi bi vi - Σj cj hj
- v : vecteur de la couche visible, h : vecteur de la couche cachée, w : poids, b/c : biais de chaque couche
-
La distribution jointe d’une machine de Boltzmann est
P(v, h) = (1/Z) * exp(-E(v, h))
- Z (fonction de partition) sert à normaliser la distribution de probabilité
Log-vraisemblance (log-likelihood) et dérivation
-
L’apprentissage progresse en maximisant la vraisemblance des données d’entraînement
log(P(v)) = log(Σh exp(-E(v, h))) - log(Z)
-
La dérivée partielle de la log-vraisemblance par rapport au poids wij est
∂(log P(v))/∂wij = <vi hj>data - <vi hj>modèle
- < · >data : espérance sur les données réelles
- < · >modèle : espérance sur les données générées par le modèle
Règles d’apprentissage des poids et des biais
- Les poids et les biais sont mis à jour comme suit
- Δwij = η(<vi hj>data - <vi hj>modèle)
- Δbi = η(<vi>data - <vi>modèle)
- Δcj = η(<hj>data - <hj>modèle)
- η est le taux d’apprentissage
Algorithme de Contrastive Divergence
- Comme l’espérance du modèle < · >modèle est difficile à calculer directement, on utilise l’échantillonnage de Gibbs
- Contrastive Divergence l’approxime selon la procédure suivante
- Phase positive : échantillonner la couche cachée h(0) à partir de P(h | v(0)=données)
- Phase négative : répéter k fois l’échantillonnage de Gibbs
- En alternance, échantillonner v(t+1) ~ P(v | h(t)), h(t+1) ~ P(h | v(t))
- Au moment de la mise à jour, on utilise la différence entre l’espérance sur les données et l’espérance du modèle
- Δwij = η(<vi hj>data - <vi hj>modèle)
- Δbi = η(<vi>data - <vi>modèle)
- Δcj = η(<hj>data - <hj>modèle)
Résumé
- L’essence de l’apprentissage d’une machine de Boltzmann, en tant que modèle fondé sur l’énergie, consiste à réduire l’écart entre l’espérance des données réelles et celle de la distribution générée par le modèle
- La Contrastive Divergence est la méthode d’entraînement clé qui permet une approximation rapide et efficace de cet écart
- Grâce à l’échantillonnage de Gibbs, elle relie la distribution du modèle aux données réelles et, en répétant ce processus, met à jour les poids et les biais pour que la machine de Boltzmann représente bien les données
1 commentaires
Commentaire Hacker News
Si je comprends bien, le Harmonium (Smolensky) a été la première restricted Boltzmann machine, sauf qu’au lieu de minimiser l’« energy », l’idée était de maximiser la « harmony ». Quand Smolensky, Hinton et Rumelhart collaboraient, ils appelaient cela la « goodness of fit ». L’article sur le Harmonium est vraiment une lecture impressionnante. Hinton est devenu une superstar de l’IA, et Smolensky a écrit un long livre lié à la linguistique. Je me demande si quelqu’un en sait plus sur cette histoire
Présentation d’un article intéressant sur David Ackley. Le T2 Tile Project vaut aussi le détour
C’est l’auteur. Merci pour les nombreux commentaires, je ne m’attendais pas à ce que cela devienne aussi populaire. Je corrige des fautes de frappe, des problèmes d’espacement, de défilement, etc., merci de les avoir signalés
J’ai lu le titre comme « A Tiny Boltzmann Brain ». Mon cerveau naturel a immédiatement résolu la confusion. J’ai supposé qu’il s’agissait d’une expérience visant à voir si l’on pouvait faire quelque chose de significatif en attribuant aléatoirement des poids à un tout petit modèle. Je me disais que plus le modèle est petit, plus la probabilité relative d’obtenir quelque chose d’intéressant par génération aléatoire est élevée. Mon intuition était fausse, mais je ne me décourage pas. Je propose une nouvelle famille de modèles, l’« Unbiased-Architecture Instant Boltzmann Model » (UA-IBM). J’imagine qu’un jour, avec un ordinateur quantique suffisamment grand, on pourra superposer dans un état quantique l’ensemble du dataset ainsi que tous les paramètres et toutes les architectures du modèle, puis faire l’inférence d’un seul coup. Quelqu’un aurait-il des qubits en trop pour tenter cette expérience ? (Il y a d’ailleurs une certaine ironie au fait que tout est quantique, mais qu’il reste encore difficile d’en tirer un usage réellement efficace. Et je m’amuse aussi à imaginer par quels chemins sociaux et technologiques passerait une civilisation extraterrestre qui évoluerait d’un simple capteur quantique unique vers des êtres dotés d’un système nerveux entièrement quantique)
L’explication est excellente. À noter toutefois que le défilement à la souris est beaucoup trop sensible (j’imagine que sur mobile, ça va sans doute). À chaque mouvement de scroll, j’étais propulsé à la première ou à la dernière page, ce qui était gênant. Heureusement, j’ai pu tout lire normalement avec les touches du clavier
Si je comprends bien, contrairement aux réseaux de neurones utilisés aujourd’hui, il faut ici du Gibbs sampling pour mettre à jour les poids, plutôt qu’une passe forward/backward basée sur le gradient. Je me demande si quelqu’un sait pourquoi
Ce texte m’a rappelé de vieux souvenirs. En 1990, j’avais implémenté en C une Boltzmann machine et un perceptron, après avoir créé des nœuds de réseau neuronal en tableau avec des void pointers. À l’époque, les usages de l’« IA » consistaient à prédire la note suivante dans une mélodie MIDI, ou à reconnaître des formes de notes comme des rondes, des noires ou des croches dans une grille de points 5x9. Un taux de reconnaissance de 85 % était alors considéré comme suffisamment « bon »
Le texte était simple et clair. Cela a fait remonter beaucoup de souvenirs. Petite autopromo un peu honteuse : j’avais fait il y a quelque temps une vidéo qui visualise le processus d’apprentissage d’un RBM
Démo vraiment très propre. Cela m’a rappelé avoir suivi plusieurs cours de Geoff Hinton sur les Boltzmann machines dans ses enseignements sur les réseaux de neurones. Un point à signaler toutefois : une formulation du type « une restricted Boltzmann machine n’a pas de connexions entre les neurones visibles et cachés » est trompeuse. Elle peut donner l’impression que les nœuds visibles et cachés ne sont pas reliés entre eux. Plus exactement, il n’y a pas de connexions au sein d’un même type, c’est-à-dire ni entre visibles, ni entre cachés. On peut aussi dire que les nœuds visibles et cachés n’ont pas de connexions internes avec les nœuds de leur propre type