
Illustration par ChatGPT
Dans GENESIS – Petit intermède pour seuls geeks – où était présenté un programme générant la suite de Fibonacci en tant que lignée reproductive, sans boucle « FOR… NEXT », remplacée par un « cycle de libido », la reproduction se poursuivant jusqu’à ce que la lignée ait atteint une profondeur cible – j’introduisais « C1 », une compression de premier type, pouvant être opérée lors d’un couplage.
J’explique : si lors du couplage de deux instances de même nature a et b, elles possèdent des éléments en commun (en termes ensemblistes : si leur intersection n’est pas vide) la description la plus courte (MDL = minimal description length) de la paire en tant qu’unité peut se contenter de mentionner une seule fois ce qu’elles ont en commun (en termes ensemblistes : la description la plus courte de la paire a et b est plus courte que l’union des descriptions de a et b envisagés séparément).
Dans le petit programme Python ci-dessous la compression de premier type « C1 » intervient à nouveau :
c1 = compress_overlap(e1, e2) :
= « C1 comprime le recouvrement des deux éléments a et b de la paire ».
Mais j’introduis dans ce petit programme, « C2 » : la compression du second type, celle que l’on peut opérer en raccourcissant la description conjointe de deux mécanismes A et B parce qu’on a découvert qu’ils sont analogues : qu’ils fonctionnent sous un certain rapport de la même manière. On peut du coup décrire dans une perspective « trans-substrat » la paire qu’ils constituent à deux en décrivant ce qu’ils ont en commun et en précisant ensuite en quoi chacun des deux mécanismes, A et B, se distingue de l’autre (en termes ensemblistes : l’intersection de A et B sert de point de départ de la description de la paire, à quoi on ajoute la description de A moins ce qu’il a en commun avec B, soit A \ B, et la description de B moins ce qu’il a en commun avec A, soit B \ A).
c2 = description_length_saved(rule, network)
= « C2 exprime l’économie réalisée dans la description des deux mécanismes (règle symbolique vs réseau neuronal) du fait de leur analogie ».
Donc « C1 » comme compression de deux instances de même nature, du fait de leur couplage, par élimination de la redondance entre les deux, compression habituellement qualifiée d’« optimisation », et « C2 » comme compression de deux mécanismes observés dans des substrats différents par découverte d’une « analogie » dans leur mode de fonctionnement, comme aboutissement d’une validation trans-substrat.
Le système génère des règles-rejetons qui généralisent l’analogie découverte entre les deux substrats (ici : symbolique ↔ neuronal). C2 mesure la quantité de description que nous économisons grâce à une seule règle-rejeton rendant compte de plusieurs mécanismes.
schema Rule { features: [lhs:pattern, rhs:pattern] }
# Graines : exemples observés
population D = [
Example(x: 0, y: 0),
Example(x: 1, y: 2),
Example(x: 2, y: 4),
Example(x: 3, y: 6),
…
]
# Accouplement de symbolique à symbolique : rassemblement des exemples sous une règle provisoire
rule unify_examples(e1:Example, e2:Example) -> child_rule:Rule, c1
where pattern = induce_pattern([e1, e2]) # par exemple, y = 2*x
child_rule = synthesize(e1, e2) with [lhs: « x », rhs: « 2*x »]
c1 = compress_overlap(e1, e2) # nombre moindre de paires si la règle est d’application
end
# Analogie trans-substrat (C2) : alignement de la règle symbolique avec un petit predicteur neuronal
rule cross_substrate(rule:Rule, net:NeuralModel) -> unified:Rule, c2
where agree = correlation( rule.predict(D.x), net.predict(D.x) )
if agree > 0.95:
unified = install(rule) # acceptation de l’explication symbolique
c2 = description_length_saved(rule, D)
else:
unified = reject(rule); c2 = 0
end
# Pulsion : la curiosité déclenche des tentatives de généralisation
drive curiosity(threshold = 0.5)
on cycle curiosity:
e1, e2 = sample(D, 2)
r, c1 = unify_examples(e1, e2)
if c1 > 0:
unified, c2 = cross_substrate(r, current_net)
if c2 > curiosity.threshold:
record(unified, origin= »C2″)
# Validation (condition pour qu’elle soit retenue)
validate(unified across D_test) >= 0.95
Lecture : la « boucle d’apprentissage » est le cycle de la curiosité ; la généralisation est une règle-rejeton acceptée uniquement si l’analogie entre les deux mécanismes dans des substrats distincts est élevée. Il s’agit ici de C2 en tant qu’abstraction : une seule règle explique de nombreux exemples (gain significatif en MDL = longueur minimale de la description).
Laisser un commentaire