Aller au contenu
Kudos AI

Réseaux bayésiens et loi jointe

Un graphe orienté acyclique avec une table de probabilités conditionnelles à chaque nœud, le produit qui définit ce qu'il signifie, et les indépendances conditionnelles qui le rendent compact.

IntermédiaireModule 125 min · 100 XP
Cinq nœuds et dix nombres qui s’assemblent en un graphe, puis un événement complet suivi de haut en bas tandis que ses cinq facteurs se multiplient jusqu’à 0,000628.

La loi jointe complète répond à toute question probabiliste, et elle est inutilisable en pratique : sur nn variables booléennes elle compte 2n2^n entrées, personne ne peut les fournir et personne ne pourrait les stocker. Un réseau bayésien conserve la puissance de la loi jointe en ne payant que pour les dépendances qui existent réellement.

Ce qu’est un réseau

Un réseau bayésien est un graphe orienté acyclique dans lequel

  • chaque nœud est une variable aléatoire,
  • une flèche de XX vers YY dit que XX est un parent de YY, donc que XX a une influence directe sur YY, et
  • chaque nœud XiX_i porte une table de probabilités conditionnelles (TPC) donnant P(Xi∣Parents(Xi))P(X_i \mid \mathrm{Parents}(X_i)), une ligne par combinaison de valeurs des parents.

Chaque ligne d’une TPC doit sommer à un ; pour une variable booléenne on n’écrit donc que la probabilité de vrai, l’autre s’en déduit. Un nœud booléen à kk parents booléens demande par conséquent 2k2^k nombres, et un nœud racine exactement un.

Le réseau du cambriolage

L’exemple qui porte tout ce parcours est l’alarme antivol de Judea Pearl, celle dont Russell et Norvig se servent pour introduire les réseaux bayésiens. Vous êtes au travail. Une alarme anti-cambriolage installée chez vous réagit assez fidèlement aux cambriolages et, faisant office de détecteur sismique de fortune, parfois aux petits tremblements de terre. Deux voisins, John et Mary, ont promis d’appeler quand ils l’entendent. John appelle presque toujours quand il entend l’alarme, mais la confond parfois avec le téléphone ; Mary aime la musique forte et rate souvent l’alarme tout à fait.

P(b)=0.001P(e)=0.002P(a∣b,e)=0.95P(a∣b,¬e)=0.94P(a∣¬b,e)=0.29P(a∣¬b,¬e)=0.001P(j∣a)=0.90P(j∣¬a)=0.05P(m∣a)=0.70P(m∣¬a)=0.01\begin{array}{ll} P(b) = 0.001 & P(e) = 0.002 \\[4pt] P(a \mid b, e) = 0.95 & P(a \mid b, \lnot e) = 0.94 \\ P(a \mid \lnot b, e) = 0.29 & P(a \mid \lnot b, \lnot e) = 0.001 \\[4pt] P(j \mid a) = 0.90 & P(j \mid \lnot a) = 0.05 \\ P(m \mid a) = 0.70 & P(m \mid \lnot a) = 0.01 \end{array}

Le graphe a pour flèches B→AB \to A, E→AE \to A, A→JA \to J, A→MA \to M, et rien d’autre. C’est un ensemble d’affirmations : John et Mary ne perçoivent pas directement les cambriolages, ils ne remarquent pas les petits séismes, et ils ne se concertent pas avant d’appeler. Tout ce qui pourrait faire échouer l’alarme - une pile à plat, un fil coupé - ou empêcher un voisin de la signaler est absorbé dans les nombres plutôt que modélisé. Ce n’est pas de la négligence ; c’est ainsi qu’un petit agent se débrouille dans un grand monde.

Ce que signifie un réseau

La sémantique tient en une seule équation. Pour toute affectation complète x1,…,xnx_1, \dots, x_n de toutes les variables,

P(x1,…,xn)  =  ∏i=1nP(xi∣parents(Xi)),P(x_1, \dots, x_n) \;=\; \prod_{i=1}^{n} P\big(x_i \mid \mathrm{parents}(X_i)\big),

où parents(Xi)\mathrm{parents}(X_i) désigne les valeurs des parents de XiX_i dans cette affectation. Le réseau est la loi jointe, écrite comme un produit des entrées de ses TPC.

Exemple travaillé : un événement complet

L’alarme a sonné, il n’y a eu ni cambriolage ni séisme, et les deux voisins appellent. En lisant une entrée dans chaque table :

P(j,m,a,¬b,¬e)=P(j∣a) P(m∣a) P(a∣¬b,¬e) P(¬b) P(¬e)=0.90×0.70×0.001×0.999×0.998=0.000628.\begin{aligned} P(j, m, a, \lnot b, \lnot e) &= P(j \mid a)\,P(m \mid a)\,P(a \mid \lnot b, \lnot e)\,P(\lnot b)\,P(\lnot e) \\ &= 0.90 \times 0.70 \times 0.001 \times 0.999 \times 0.998 \\ &= 0.000628 . \end{aligned}
Python

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.

Comme chacune des 32 entrées de la loi jointe peut être produite ainsi, tout ce à quoi la loi jointe complète sait répondre, le réseau sait y répondre aussi - en sommant les entrées pertinentes. La leçon suivante montre comment le faire sans produire les 32.

Pourquoi le réseau est tellement plus petit

Comptons les nombres. Cambriolage et Séisme en demandent un chacun, Alarme a deux parents et en demande quatre, et chaque appel a un parent et en demande deux :

1+1+4+2+2=101 + 1 + 4 + 2 + 2 = 10

contre 25−1=312^5 - 1 = 31 entrées indépendantes dans la table jointe complète. L’écart se creuse de façon explosive : avec 30 variables booléennes ayant chacune au plus cinq parents, le réseau demande au plus 30×25=96030 \times 2^5 = 960 nombres là où la loi jointe en demande plus d’un milliard. L’économie vient de la localité : chaque variable n’est influencée directement que par quelques autres.

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é.

Cambriolage0.1%Séisme0.2%Alarme0.3%John appelle5.2%Mary appelle1.2%
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.

Les indépendances que le graphe affirme

Appliquons la règle de la chaîne à un ordre quelconque des variables :

P(x1,…,xn)=∏i=1nP(xi∣xi−1,…,x1).P(x_1, \dots, x_n) = \prod_{i=1}^{n} P(x_i \mid x_{i-1}, \dots, x_1).

En comparant avec la sémantique ci-dessus, le réseau est une représentation correcte exactement quand, pour chaque variable,

P(Xi∣Xi−1,…,X1)=P(Xi∣Parents(Xi))P(X_i \mid X_{i-1}, \dots, X_1) = P\big(X_i \mid \mathrm{Parents}(X_i)\big)

pour un certain ordre dans lequel chaque nœud vient après ses parents. En mots : chaque variable est conditionnellement indépendante de ses autres prédécesseurs étant donné ses parents. Deux autres conséquences découlent du seul graphe.

  • Un nœud est conditionnellement indépendant de ses non-descendants étant donné ses parents. Dans le réseau du cambriolage, JJ est indépendant de BB, EE et MM dès que AA est connu.
  • Un nœud est conditionnellement indépendant de tout autre nœud étant donné sa couverture de Markov : ses parents, ses enfants, et les autres parents de ses enfants. La couverture de BB est {A,E}\{A, E\} : étant donné l’état de l’alarme et celui du séisme, les deux appels téléphoniques ne vous apprennent plus rien sur un cambriolage.

L’ordre compte quand on en construit un. Ajoutez les nœuds dans l’ordre M,J,A,B,EM, J, A, B, E et vous êtes forcé de tracer M→JM \to J, puis les deux appels vers AA, puis A→BA \to B, puis A→EA \to E et B→EB \to E : deux liens et trois nombres de plus que le réseau causal, dont certains décrivent des relations véritablement difficiles à estimer. Placer les causes avant les effets est ce qui garde le réseau petit.

Avant le quiz

Sachez écrire le produit qui définit la loi jointe, l’évaluer pour un événement complet, compter les nombres qu’un réseau demande contre la table complète, et dire ce qu’est une couverture de Markov et pourquoi conditionner sur elle isole un nœud.

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.

Débloquez tout le parcours

Cette première leçon est gratuite. Inscrivez-vous pour passer le quiz de maîtrise, gagner de l’XP et débloquer tous les modules, avec d’autres exemples interactifs et exécutables.