Lisez l'exemple d'utilisation du document officiel de PyPhi, une bibliothèque traitant de la théorie de l'information intégrée (IIT), et déplacez-le réellement pour approfondir votre compréhension.
Dans l'article précédent (https://qiita.com/NNNiNiNNN/items/7074d7773b44f33d9b13), nous avons couvert l'introduction de la bibliothèque et un exemple de calcul simple.
Cette fois, jetons un œil à un exemple d'utilisation du réseau XOR à partir du document officiel.
J'écris juste avec une traduction japonaise approximative avec des connaissances vraiment insuffisantes, donc je serais très reconnaissant si un expert le faisait remarquer.
L'article original est ici
Considérons un graphe complet dans lequel A, B et C sont connectés. A, B et C n'ont chacun aucun lien avec eux-mêmes.
Supposons que chaque élément agit comme un circuit XOR et que son état (1 ou 0) est déterminé par l'entrée de deux sommets connectés.
Créez ce réseau. Ce réseau semble être fourni à titre d'exemple dans la bibliothèque (y compris la connexion, le TPM et le nom d'étiquette ABC).
import pyphi
network = pyphi.examples.xor_network()
L'état initial est (0, 0, 0).
state = (0, 0, 0)
Dans cet article, nous examinerons une structure appelée le complexe majeur.
major_complex = pyphi.compute.major_complex(network, state)
Est-il correct de comprendre qu'il s'agit d'une extraction de la partie principale du réseau, ... dans ce cas, cela semble être cohérent avec la création d'un sous-système composé de (A, B, C).
Le gars qui a suivi l'exemple dans la documentation.py
print(major_complex.phi) # 1.874999
print(major_complex.subsystem) # Subsystem(A, B, C)
'''
Voici la méthode calculée la dernière fois. La correspondance phi calculée.
subsystem = pyphi.Subsystem(network, state)
print(pyphi.compute.phi(subsystem)) # 1.874999
'''
Nous allons procéder au calcul autour de ce complexe majeur.
À partir du complexe majeur, regardons l'élément appelé structure de cause à effet (CES).
ces = major_complex.ces
Que se passe-t-il à l'intérieur?
print(len(ces)) # 3
Cela ressemble à un tableau de longueur 3. Jetons un œil à l'étiquette attachée à chaque élément.
print(ces.labeled_mechanisms)
# (['A', 'B'], ['A', 'C'], ['B', 'C'])
Il semble que A et B, A et C, et B et C soient les éléments appelés «concept» de ce réseau.
Je vais regarder un peu en arrière et expliquer.
Premièrement, la structure de cause à effet est une structure qui s’affecte entre les réseaux lorsque l’état passe de $ t -1 $ à $ t $ ou de $ t $ à $ t + 1 $. C'est.
Les composants qui composent le réseau sont subdivisés et les informations sont réduites au point où elles ne peuvent pas être réduites.
Dans le cas de ce réseau, il semble que A-B, A-C et B-C soient chacun «concept».
Concentrons-nous maintenant sur le premier concept.
concept = ces[0]
print(concept.mechanism) # (0, 1)
Jetons un coup d'œil au concept du réseau constitué de nœuds 0, 1 (impossible d'afficher l'étiquette dans cet état?).
Calculons Φ uniquement avec ce réseau.
print(concept.phi) # 0.5
Il semble que $ φ = 0,5 $ pour ce réseau seul.
Jetons un coup d'œil à la portée (portée?) De la cause (cause, facteur?) De ce réseau. En d'autres termes, quel réseau détermine l'état actuel du réseau?
print(concept.cause.purview)
# (0, 1, 2)
Il semble que le réseau de nœuds (0, 1, 2) (enfin, tout en bref) influence.
Jetons maintenant un œil au répertoire des causes de ce réseau.
print(concept.cause.repertoire)
'''
[[[0.5 0. ]
[0. 0. ]]
[[0. 0. ]
[0. 0.5]]]
'''
J'ai reçu cette sortie. Cette forme est un peu difficile à comprendre, je vais donc écrire un tableau avec les parties omises soigneusement écrites ci-dessous.
t-État à 1 | État à t(0, 0, 0)Probabilité de contribuer à | |||
---|---|---|---|---|
A | B | C | ||
0 | 0 | 0 | → | 0.5 |
1 | 0 | 0 | → | 0 |
0 | 1 | 0 | → | 0 |
1 | 1 | 0 | → | 0 |
0 | 0 | 1 | → | 0 |
1 | 0 | 1 | → | 0 |
0 | 1 | 1 | → | 0 |
1 | 1 | 1 | → | 0.5 |
Voilà ce que cela signifie.
Si vous y réfléchissez, pour devenir (0,0,0) dans un réseau entièrement constitué de xor, l'étape précédente est soit (0, 0, 0) ou (1, 1, 1). Il ne peut y en avoir. Ce tableau le montre.
Jetons un coup d'œil à la compétence et au répertoire de l'effet de ce réseau.
print(concept.effect.purview)
# (2,)
print(concept.effect.repertoire)
# [[[1. 0.]]]
Cette fois, il semble que cela n'affecte que le nœud 2. Cela ressemble à ceci sur la table.
t+État à 1 | État à t(0, 0, 0)Probabilité de passer de | |
---|---|---|
C | ||
0 | ← | 1 |
1 | ← | 0 |
À partir de (0, 0, 0), le nœud 2 ne peut passer qu'à 0.
cause est la «cause» et nous examinons l'effet du changement de $ t-1 $ à $ t $.
L'effet est le "résultat", qui examine l'effet du changement de $ t $ à $ t + 1 $.
Dans le calcul de l'IIT (théorie de l'information intégrée), ces deux sont divisés et calculés. En général, utilisez l'une des deux valeurs, «score faible», comme valeur finale.
Le tableau ci-dessous résume l'impact de l'ensemble du réseau et du concept.
Construction | φ | cause purview(Cause gamme) | effect purview(Gamme d'effet) |
---|---|---|---|
En regardant cela, les points sont que "l'ABC entier qui est un composant est inclus dans le complexe majeur", "la combinaison de AB, AC et BC est un facteur", "A, Vous pouvez voir que B et C seuls ne deviennent pas un «concept» qui détermine la structure du réseau, et que le triple réseau ABC ne devient pas un «concept».
A seul est-il vraiment sans valeur? Calculons.
Créons un système autonome et un sous-système dans son ensemble.
subsystem = pyphi.examples.xor_subsystem()
A = (0,)
ABC = (0, 1, 2)
Y a-t-il une influence de A sur chacune des causes et des effets?
print(subsystem.cause_info(A, ABC))
# 0.5
print(subsystem.effect_info(A, ABC))
# 0
Vous pouvez voir que A seul n'a aucune valeur en termes d'effet.
Cela signifie que dans un circuit xor composé de A, B et C, il n'est pas possible de déterminer la valeur de B ou la valeur de C lorsque A est déterminé comme étant "1". Il n'est pas utile en tant qu'information à moins qu'il ne soit composé de deux ensembles.
Ensuite, voyons si les trois nœuds de "ABC" deviennent un concept. Faisons le même calcul.
subsystem.cause_info(ABC, ABC)
# 0.749999
Je vois, il y a certainement des informations sur la cause. Mais que faire si c'est "le plus petit composant"?
Calculons ce que l'on appelle la partition minimale d'informations (MIP).
mip = subsystem.cause_mip(ABC, ABC)
print(mip.phi)
# 0.0
Le fait que φ = 0 apparaisse ici signifie qu'il n'y a pas de "déviation" dans les valeurs entre "lors du calcul en divisant ABC" et "lors du calcul avec ABC entier" (probablement. Je ne suis pas confiant ici)
Comment sont-ils séparés? Nous allons jeter un coup d'oeil.
print(mip.partition)
'''
A B,C
─── ✕ ─────
∅ A,B,C
'''
Quelque chose comme AA est sorti. La formule est réécrite comme suit.
Cette formule exprime que "si l'information de BC est connue, l'information de A peut être complètement tronquée".
Par exemple, si le (0, 0) de B et C est connu dans l'état précédent, A est toujours 0.
La même chose peut être dite pour les deux suivantes.
Nous savons maintenant que AB, AC et BC sont les «concepts» qui composent ce réseau.
Ceci est la fin de cet article. Jusqu'à présent, presque tous les contenus sont des traductions en japonais des articles suivants.
Réseau officiel PyPhi Document-XOR https://pyphi.readthedocs.io/en/latest/examples/xor.html
Aussi, je l'ai écrit en supposant que j'ai lu Article précédent.