2 points par GN⁺ 2025-05-17 | 1 commentaires | Partager sur WhatsApp
  • 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
    1. Phase positive : échantillonner la couche cachée h(0) à partir de P(h | v(0)=données)
    2. 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

 
GN⁺ 2025-05-17
Commentaires sur Hacker News
  • Ça me rappelle l’époque où, en 1990, on fabriquait des « neurones » avec des tableaux de pointeurs void en C pur pour créer des machines de Boltzmann et des perceptrons.
    À l’époque, ce qu’on faisait avec l’« IA » se résumait à prédire la note suivante d’une mélodie MIDI, ou à reconnaître des formes de rondes, blanches, noires et croches sur une grille de points 5×9 ; 85 % de précision était jugé « assez bon ».

    • Lire des notes sur une partition avec des portées semble être un projet amusant. Encore plus si on le construit de zéro, comme dans l’exemple de réseau neuronal pour les chiffres de 3Blue1Brown[1].
      En le combinant avec quelque chose comme Chuck[2], on pourrait même, avec les technologies actuelles, créer une application qui tourne entièrement côté client.

      [1] - https://www.3blue1brown.com/lessons/neural-networks

      [2] - https://chuck.stanford.edu/

    • Je me demande si la sortie ressemblait à de la musique.

  • Si j’ai bien compris, Harmonium (Smolensky) a été la première machine de Boltzmann restreinte, mais au lieu de minimiser l’« énergie », elle maximisait l’« harmonie ».
    Quand Smolensky, Hinton et Rummelhart ont collaboré, il me semble qu’ils appelaient cela l’« adéquation ». L’article sur Harmonium[1] est vraiment agréable à lire ; Hinton est évidemment devenu une superstar, tandis que Smolensky a écrit de gros livres sur la linguistique. Je me demande si quelqu’un en sait davantage sur cette histoire.

    [1] https://stanford.edu/~jlmcc/papers/PDP/Volume%201/Chap6_PDP8...

  • Un article intéressant sur David Ackley : https://news.unm.edu/news/24-nobel-prize-in-physics-cited-gr...
    Le T2 Tile Project vaut aussi absolument le détour.

    • Le point essentiel, c’est que beaucoup de personnes participent à ce genre de percées.
      La valeur des doctorants est souvent sous-estimée, alors qu’en réalité ils apportent énormément et font ensuite progresser la recherche. La recherche a fait avancer tant de choses ; je ne comprends pas pourquoi les États-Unis la considèrent comme du gaspillage.
  • J’ai mal lu le titre comme « A Tiny Boltzmann Brain »[0].
    Mon esprit naturel a immédiatement résolu l’énigme. J’ai pensé qu’il s’agissait d’un très petit modèle auquel on aurait donné des poids générés aléatoirement, puis qu’on aurait testé pour voir s’il accomplissait réellement quelque chose d’utile. Après tout, plus un modèle est petit, plus une simple génération aléatoire a des chances de produire quelque chose d’intéressant relativement à sa taille.
    J’accepte la correction, mais je ne suis pas découragé. Je propose une nouvelle classe de modèles : Unbiased-Architecture Instant Boltzmann Model (UA-IBM). Un jour, quand nous disposerons d’un ordinateur quantique suffisamment grand, on pourra définir tout le jeu de données comme des contraintes classiques d’un modèle défini par N valeurs sérialisées représentant tous les paramètres et réglages de structure. Ensuite, un système quantique à N qubits placera tous les paramètres et structures possibles en superposition quantique, effectuera une étape d’inférence sur l’ensemble des échantillons classiques, puis fera s’effondrer le résultat pour récupérer sous forme classique les paramètres et la structure du meilleur modèle, ou presque.
    Je me demande si quelqu’un a quelques qubits en rab pour essayer ça. Il y a une certaine ironie à ce que tout soit quantique, mais que ce soit encore trop glissant pour qu’on arrive vraiment à l’exploiter.
    Comme cadre de science-fiction, on peut imaginer une espèce extraterrestre qui aurait fait évoluer des capteurs quantiques à usage unique, lesquels auraient mené à tout un système sensoriel et nerveux quantique, puis à une intelligence quantique complète dès le départ. À quoi ressembleraient une telle société et sa trajectoire technologique ? Espérons qu’ils soient en orbite près d’un trou noir, afin que leurs progrès explosifs ne nous menacent pas encore. Puis, un jour, ils s’échapperont du puits gravitationnel…

    [0] https://en.wikipedia.org/wiki/Boltzmann_brain

    • Les ordinateurs quantiques ne fonctionnent pas comme ça.
    • Pauvres êtres quantiques. Condamnés à attendre une éternité que leurs calculs se terminent, faute d’accès à un modèle de calcul plus rapide que leurs propres pensées.
  • Bonne explication. Pour info, pour une raison quelconque, le défilement à la souris est beaucoup trop sensible.
    Je suppose que le swipe fonctionne correctement sur mobile, mais je n’ai pas vérifié. Chaque fois que j’essayais de faire défiler, je passais de la première « page » à la dernière « page », puis l’inverse. Heureusement, les entrées clavier fonctionnaient, donc j’ai pu lire l’article en entier.

  • Si j’ai bien compris, au lieu d’utiliser une propagation avant et arrière fondée sur le gradient comme dans les réseaux neuronaux auxquels on est habitué aujourd’hui, il faut recourir à l’échantillonnage de Gibbs pour calculer les mises à jour des poids.
    Je me demande si quelqu’un comprend pourquoi.

    • L’échantillonnage de Gibbs semble servir à approximer l’espérance sous la distribution du modèle.
      Cette valeur est nécessaire pour calculer le gradient de la log-vraisemblance, mais intégrer la distribution est difficile à traiter. C’est un peu similaire à l’usage de MCMC dans les VAE pour obtenir des échantillons représentatifs. Dans les réseaux neuronaux de type deep learning, on estime le gradient sur des batchs du jeu de données, plutôt que sur une distribution de probabilité explicitement modélisée.
    • Je ne suis pas expert, mais j’ai reçu un peu de formation formelle en bayésien sur des problèmes similaires.
      En général, Gibbs est utilisé quand le gradient direct n’est pas simple, ou quand on veut reproduire la distribution elle-même plutôt qu’une estimation ponctuelle. C’est utile lorsqu’on dispose de vraisemblances marginales ou conditionnelles faciles à échantillonner. Comme chaque nœud visible dépend de chaque nœud caché, et que chaque nœud caché influence tous les nœuds visibles, le gradient devient très brouillon ; l’échantillonnage de Gibbs, qui ajuste à partir de la vraisemblance marginale, est donc beaucoup plus simple.
    • Je me trompe peut-être, mais je pense que c’est en partie dû à la structure non orientée des RBM.
      On ne peut donc pas construire le graphe de calcul de la même manière que pour un réseau neuronal feed-forward.
  • Explication propre et agréable. Ça me rappelle beaucoup de vieux souvenirs.
    Petite autopromo un peu honteuse : il y a quelques années, j’ai créé une visualisation de l’apprentissage des RBM : https://www.youtube.com/watch?v=lKAy_NONg3g

  • La démo est chouette. Il y a 15 ans, à l’université, j’ai suivi le cours de Geoff Hinton sur les réseaux neuronaux, et il a expliqué les machines de Boltzmann pendant plusieurs séances.
    La phrase « une machine de Boltzmann restreinte est un cas particulier où les neurones visibles et les neurones cachés ne sont pas connectés entre eux » est fausse. Cette formulation donne l’impression que les neurones visibles ne sont pas connectés aux neurones cachés.
    La formulation correcte serait : « les neurones visibles ne sont pas connectés entre eux, et les neurones cachés ne sont pas connectés entre eux ». Ou encore : « les neurones visibles et les neurones cachés n’ont pas de connexions à l’intérieur de leur propre type ».

    • Vu comme ça, je ne vois pas bien en quoi c’est différent d’un simple perceptron multicouche. Qu’est-ce qui distingue une machine de Boltzmann ?
      Modification : c’est bon. Je n’avais pas compris qu’il fallait faire défiler vers le haut pour voir l’introduction.
      Comme le commentaire [flagged][dead] de 0xTJ, l’idée qu’il ne faut pas intercepter ou réinventer le défilement est très juste.