Réseaux bayésiens et inférence probabiliste
Comment un graphe et quelques petites tables tiennent lieu d’une loi jointe à des milliers d’entrées, comment y répondre exactement à une requête par énumération et élimination de variables, et que faire quand l’inférence exacte est hors de portée : échantillonnage par rejet, pondération par vraisemblance et échantillonnage de Gibbs, chacun travaillé sur les deux mêmes réseaux.
Prérequis : Le théorème de Bayes et la mise à jour des croyances
Le théorème de Bayes vous dit comment mettre à jour une croyance sur une observation. Un agent réel entretient des croyances sur des dizaines de variables à la fois, et la loi jointe sur celles-ci - l’objet qui répond à toute question - compte entrées pour variables booléennes. Personne ne peut l’écrire. Cet article porte sur la représentation qui rend la loi jointe utilisable, et sur les algorithmes qui l’interrogent.
A. Le réseau est la loi jointe
Un réseau bayésien est un graphe orienté acyclique. Chaque nœud est une variable aléatoire ; une flèche de vers fait de un parent de ; et chaque nœud porte une table de probabilités conditionnelles donnant , une ligne par combinaison de valeurs des parents. Un nœud booléen à parents booléens demande nombres.
L’exemple de Russell et Norvig est une alarme. Elle réagit aux cambriolages et, moins fidèlement, aux séismes ; deux voisins, John et Mary, appellent quand ils l’entendent, John confondant parfois le téléphone avec l’alarme et Mary la ratant parfois derrière sa musique forte. Les flèches , , , , et dix nombres :
Le sens du dessin tient en une équation. Pour toute affectation complète,
La probabilité que l’alarme sonne sans cambriolage ni séisme, et que les deux voisins appellent, est donc
Chacune des 32 entrées de la loi jointe est accessible ainsi, à partir de dix nombres plutôt que 31. L’économie n’est pas une astuce : c’est l’affirmation, faite par les flèches absentes, que chaque variable est conditionnellement indépendante de ses non-descendants étant donné ses parents. Plus fort encore, chaque nœud est indépendant de tous les autres étant donné sa couverture de Markov - parents, enfants, et autres parents des enfants. Étant donné l’alarme et le séisme, les appels téléphoniques ne disent plus rien d’un cambriolage.
B. Inférence exacte
Une requête demande . Comme chaque entrée de la loi jointe est un produit d’entrées de TPC, la requête est une somme normalisée de produits sur les variables cachées. Les deux voisins ont appelé ; est-ce un cambriolage ?
Quatre termes pour , quatre pour , chacun un produit de cinq nombres :
Deux signalements indépendants font monter un a priori de un sur mille à 28 %, et pas davantage, parce que la masse sans cambriolage arrive par trois voies comparables : une alarme sans cause puis les deux appels, ; aucune alarme mais les deux appels quand même, ; et une alarme due à un séisme puis les deux appels, . Ensemble elles pèsent 2,5 fois la voie du cambriolage, .
L’énumération évalue ceci comme un arbre en profondeur, et l’arbre se répète : le produit est calculé une fois sous et de nouveau sous . Sur variables booléennes le coût est - mieux que le de la construction séparée de chaque entrée jointe, mais pour l’essentiel du recalcul. L’élimination de variables stocke chaque morceau comme un facteur - une table sur les variables dont il dépend encore - et combine les facteurs par produit point à point et par sommation. Sommer sur donne un facteur sur :
Sommer sur contre laisse , et multiplier par puis normaliser rend , chaque produit de feuille n’ayant été fait qu’une fois.
Que ce soit rapide dépend de la forme du graphe. Sur un polyarbre - au plus un chemin non orienté entre deux nœuds quelconques, comme ici - l’élimination de variables est linéaire en la taille du réseau. Ajoutez un second chemin et les facteurs intermédiaires peuvent croître exponentiellement dans le pire cas. Le problème général est #P-difficile : aussi difficile que compter les affectations qui satisfont une formule propositionnelle. C’est la raison d’être du reste de cet article.
Le réseau ci-dessous est celui-là, et chacun de ses nombres est exact : les probabilités a posteriori viennent de la somme des 32 affectations, non d’un échantillonnage. Cliquez un nœud pour dire ce que vous savez. Commencez par les deux voisins qui appellent : le cambriolage monte à 28,4 %, ce qui mérite déjà qu’on s’y arrête, car les appels renseignent excellemment sur l’alarme et l’alarme témoigne mal du cambriolage. Ajoutez ensuite le séisme. Il rend les appels plus probables, et il renvoie le cambriolage vers rien.
Interactif : dites ce que vous savez, observez la suite
Cliquez un nœud pour le faire tourner : inconnu, survenu, écarté.
- P(cambriolage)
- 0.1%
- P(séisme)
- 0.2%
- P(alarme)
- 0.3%
- P(observations)
- 1.000000
Rien n’est encore connu : chaque nœud est à son a priori, un cambriolage à 0,1 %, un séisme à 0,2 %. Cliquez un voisin et regardez l’influence remonter les flèches jusqu’à l’alarme puis redescendre vers l’autre voisin, alors qu’aucune flèche ne relie les deux voisins.
C. Échantillonner quand l’exact est impossible
Le réseau de l’arroseur a quatre variables booléennes et deux chemins de à , l’un par l’arroseur et l’autre par la pluie :
L’échantillonnage a priori tire chaque variable dans sa TPC, parents d’abord. La probabilité de produire un événement est le produit des entrées consultées, c’est-à-dire la loi jointe elle-même : sort avec probabilité . Les fréquences convergent donc vers les probabilités, et l’estimation est consistante.
L’échantillonnage par rejet répond à une requête conditionnelle en écartant tout échantillon qui contredit l’évidence. Pour , de valeur exacte , une exécution à graine fixée de 1 000 échantillons a priori en a rejeté 703 et gardé 79 avec pluie contre 218 sans, pour une estimation de . Soixante-dix pour cent de l’effort n’ont servi à rien, et c’est le cas bénin : le taux de survie est , qui décroît exponentiellement avec le nombre de variables d’évidence. Demandez au réseau du cambriolage et environ 21 échantillons sur 10 000 survivent.
S'exécute dans votre navigateur. La première exécution télécharge l'environnement Python (~10 Mo), puis il est mis en cache.
La pondération par vraisemblance fixe les variables d’évidence au lieu de les tirer, si bien que chaque événement est compatible, et pondère chaque événement par la probabilité de l’évidence étant donné les parents que l’échantillonneur a choisis. Pour dans l’ordre : le poids part de , est une évidence donc ; est tiré selon , disons faux ; selon , disons vrai ; est une évidence donc . L’événement est compté sous pluie avec le poids . Rien n’est écarté et, parce que la probabilité d’échantillonnage multipliée par le poids égale la loi jointe, le décompte pondéré est consistant : mille échantillons avec la même graine donnent contre une valeur exacte de . La méthode se dégrade quand l’évidence est improbable sous les valeurs tirées, parce que quelques poids lourds dominent alors tout.
L’échantillonnage de Gibbs est une méthode de Monte-Carlo par chaînes de Markov. Fixez l’évidence, partez d’un état quelconque, et rééchantillonnez de façon répétée une variable hors évidence conditionnellement à sa couverture de Markov. Cette loi conditionnelle est un produit d’une poignée d’entrées de TPC :
Pour depuis l’état , rééchantillonner utilise , ce qui donne ; disons que le tirage donne faux. Rééchantillonner utilise ensuite , ce qui donne . Chaque état visité est un échantillon. Mille pas avec une graine fixée estiment contre la valeur exacte .
Cela fonctionne parce que la chaîne possède une distribution stationnaire et que le pas de Gibbs satisfait le bilan détaillé par rapport à la loi a posteriori, ce qui force les deux à coïncider : la fraction du temps passée à la longue dans chaque état est . Aucun échantillon n’est rejeté et aucun poids ne s’effondre. Le coût est la corrélation entre états consécutifs, si bien que la chaîne a besoin de temps pour oublier d’où elle est partie.
La convergence est une affirmation sur une limite : la figure ci-dessous met donc la limite à l'écran. La ligne pointillée est la loi a posteriori exacte, obtenue en énumérant la loi jointe, sans partager une ligne de code avec les échantillonneurs. Faites glisser la taille du tirage et regardez les deux estimations marcher vers elle. Passez ensuite à la requête du cambriolage, où le rejet conserve 21 tirages sur 10 000 et où la pondération les garde tous et peine encore, parce que fixer les observations supprime le gaspillage et non la variance.
Interactif : deux échantillonneurs face à la valeur exacte
La valeur exacte vient de l’énumération de la loi jointe, non des échantillonneurs.
- Exact
- 0.3000
- Rejet
- 0.3045
- Pondération
- 0.3029
- Gardés par le rejet
- 289
Le rejet lit 0.3045 sur les 289 échantillons conservés parmi 1 000 ; la pondération lit 0.3029 sur la totalité ; la valeur exacte est 0.3000. Les deux estimateurs sont convergents, ce qui est une affirmation sur une limite : faites donc glisser la taille du tirage et regardez les deux nombres marcher vers le troisième. La part rejetée n’est pas du bruit, c’est 70.00% du travail.
Où cela vous mène
Un réseau bayésien est une loi jointe que l’on peut réellement écrire. L’inférence exacte est une somme de produits que l’élimination de variables effectue sans répétition, bon marché sur les polyarbres et intraitable en général. Quand le graphe est trop enchevêtré, l’échantillonnage donne des estimations consistantes à un coût qui dépend de la façon dont l’évidence est traitée : le rejet gaspille, la pondération concentre, et Gibbs vagabonde - chacun étant le bon choix quelque part. Le parcours de formation Raisonnement probabiliste avec les réseaux bayésiens travaille chacun de ces calculs à la main et en code.
Références et lectures complémentaires
- Stuart Russell, Peter Norvig, Artificial Intelligence: A Modern Approach, Pearson (3rd edition), 2010· Bibliothèque de référence Kudos AI
Les œuvres protégées par le droit d’auteur sont citées à titre de référence uniquement et ne sont pas hébergées ici ; veuillez consulter l’éditeur pour y accéder.