Essais · 2025.02
L'Abstraction, c'est la Cognition
À mon doctorat qui commence
Texte achevé début février 2025
Cela fait longtemps que je voulais coucher sur le papier quelques réflexions nées de ces années d’études ; j’en ai enfin trouvé le temps. Commençons par les premières pensées, encore vaporeuses, qui me sont venues après mon entrée à l’université. Au premier semestre de ma première année, comme le prof d’électronique numérique de mon université était franchement nul, je suis allé chercher sur Bilibili un cours de circuits numériques donné par la professeure Wang Hong, de l’université Tsinghua. Aujourd’hui encore, je le tiens pour l’enseignement le plus logique que j’aie jamais suivi, celui qui sait le mieux tenir son fil conducteur. L’idée maîtresse du cours est la suivante : le processeur d’un ordinateur est un système extrêmement complexe, et pour comprendre un système aussi complexe, il faut maîtriser l’art de l’« abstraction ». Comme le dit un autre excellent manuel, que j’ai ensuite lu à peu près d’un bout à l’autre :
The critical technique for managing complexity is abstraction: hiding details when they are not important.
— Chapter 1, Digital Design and Computer Architecture
L’abstraction en informatique
Ce cours explique que l’architecture d’un ordinateur peut se découper en de nombreux niveaux d’abstraction. Le plus bas est la couche physique : les électrons et tout le tralala. Les propriétés physiques de ces particules microscopiques nous donnent des transistors, puis des circuits analogiques et numériques, comme les diverses portes ET, OU et NON. Et nous voilà déjà à un autre niveau d’abstraction. Quand nous dessinons ces portes logiques sur le papier, la question que nous nous posons est toujours « Comment faut-il utiliser ces portes ? » et non « Pourquoi ces portes marchent-elles ? ». C’est qu’au niveau d’abstraction supérieur, une chose complexe du niveau inférieur est vue comme un tout et « encapsulée », après quoi on ne se soucie plus d’aucun de ses détails. De proche en proche, les portes logiques servent à construire des circuits combinatoires et séquentiels (comme la bascule D) capables d’exprimer des notions logiques plus abstraites, puis ces circuits servent à réaliser des unités de calcul qui savent additionner, soustraire, multiplier et diviser, et ainsi de suite. Au bout du compte, au niveau logique le plus élevé, on obtient un processeur capable d’exécuter tout un jeu d’instructions abstraites. Ce qui fait la valeur du cours de la professeure Wang Hong, c’est qu’elle énonce cette manière de penser dès le début, puis y revient sans cesse en présentant chaque niveau d’abstraction : « Chaque fois que nous obtenons quelque chose de complexe, la première chose à laquelle nous pensons, c’est de l’encapsuler et de l’utiliser comme un tout. »
Par une heureuse coïncidence, je suivais ce même semestre un autre cours : la programmation procédurale (en Python). J’ai eu la chance que Marc Feeley, professeur chevronné dont le domaine de recherche est celui des langages de programmation, ne fasse pas comme ces cours de Python qu’on trouve à tous les coins de rue et qui égrènent à toute vitesse les fonctionnalités du langage. Il a au contraire mis l’accent sur les fonctions et sur les notions de programmation fonctionnelle. Au cœur de ces notions se trouve la décomposition fonctionnelle : quand on veut réaliser une fonctionnalité, il faut décomposer le besoin petit à petit. Cela correspond en fait au découpage en niveaux d’abstraction des circuits numériques. Concrètement, pour reprendre le vocabulaire de l’abstraction, la fonction que nous voulons se situe à un niveau d’abstraction très élevé, et notre travail consiste à concevoir des fonctions de niveau d’abstraction inférieur qui permettent de la réaliser. De même, ces fonctions de bas niveau peuvent à leur tour être réalisées à l’aide de fonctions de niveau encore inférieur. On finit par atteindre le niveau d’abstraction le plus bas, où il suffit d’implémenter des fonctions très simples, comme les quatre opérations de base, qu’on peut appeler des fonctions auxiliaires. (Bien entendu, les fonctions de chaque niveau peuvent servir de fonctions auxiliaires à celles du niveau supérieur.) Les fonctions de chaque niveau forment une boîte à outils bien encapsulée, exactement comme les circuits logiques de chaque niveau. Quand je m’en sers depuis le niveau supérieur, seules m’importent les entrées et les sorties de ce que réalise le niveau inférieur ; son implémentation interne n’a aucune importance. De même, le programmeur qui se contente d’assembler des bibliothèques ne regarde le plus souvent, en lisant la documentation, que les entrées et les sorties, en faisant confiance à la bibliothèque pour ne pas avoir de bugs.
Abstraction / saisir la contradiction principale vs cognition / apprentissage
On le voit, que ce soit en électronique numérique ou en programmation en général, la notion d’abstraction occupe le devant de la scène. Plus encore, ce principe ne se limite ni à l’informatique ni même aux sciences. Nous devrions l’élever au rang d’une pensée qui guide notre apprentissage de toutes les disciplines : une « science des sciences », autrement dit une pensée philosophique. Sur le plan philosophique, cette grande idée n’a rien d’inconnu : la dialectique matérialiste en propose une formulation voisine, à savoir « saisir la contradiction principale ».
[…] dans l’étude de tout processus complexe où il existe deux contradictions ou davantage, nous devons nous efforcer de toutes nos forces d’en découvrir la contradiction principale. Une fois saisie cette contradiction principale, tous les problèmes se résolvent aisément. — Mao Zedong, « De la contradiction »
Dans « De la pratique », le vieux Mao va plus loin : c’est en analysant les contradictions internes aux choses et celles qui les opposent les unes aux autres, et en saisissant la contradiction principale, que les hommes parviennent peu à peu à comprendre et à connaître le monde. C’est en cours de philosophie, au lycée, que j’ai rencontré ces idées pour la première fois, sans trop les comprendre. À l’époque, leur subtilité m’échappait ; je me suis contenté de graver cette phrase dans ma mémoire à force de l’apprendre par cœur. Mais la vérité ne se fane jamais. Dans les années qui ont suivi, le monde que j’ai vu, vécu et ressenti a été comme un maître d’école brandissant sa baguette, tapotant sans relâche sur ces quelques mots, jusqu’à ce que je commence à y réfléchir et à comprendre ce qu’ils signifient dans la vie réelle.
Le premier pas pour connaître et comprendre le monde consiste à en abstraire des concepts. Imaginez un nourrisson dans ses toutes premières années : chaque jour, tous ses sens sont bombardés d’un océan d’informations. Pour un bébé dépourvu de toute capacité de filtrer l’information, ou, si l’on veut, de toute capacité cognitive, une telle saturation est à coup sûr une surcharge. Car le cerveau a beau être une machine formidable, il ne peut pas enregistrer tel quel chaque détail de la vie : les détails sont infinis, de même qu’une photo pourrait compter un nombre arbitrairement grand de pixels. Si le bébé n’arrivait pas à résumer et à simplifier ces détails avant de les ranger dans sa mémoire, il se retrouverait forcément aussi perdu que l’élève pour qui le cours de maths, c’est du chinois. Je me souviens de certaines hypothèses selon lesquelles, si nous n’avons aucun souvenir des tout débuts de notre vie, c’est justement parce que le langage nous fait encore défaut. Le langage est en effet lui-même une abstraction de la réalité, et la capacité d’abstraction, c’est précisément la capacité cognitive. C’est une capacité que nous, humains, devons nous donner beaucoup de mal pour acquérir quand nous sommes petits. Par exemple, en grandissant, l’enfant comprend peu à peu que le concept de « chaise » englobe tout ce qui a un dossier et sert à s’asseoir, quels qu’en soient la forme, le matériau ou la couleur, tandis que le « tabouret » désigne les chaises sans dossier. Une fois ces concepts maîtrisés, ses souvenirs ne sont plus une animation faite d’une suite touffue d’images en pixels, mais de petites histoires concises où s’enchaînent des concepts, bien plus faciles à retenir. C’est comme pour une image : stockée en bitmap, elle prend beaucoup de mémoire ; en vectoriel, beaucoup moins. Prenons un autre exemple où des concepts permettent de retenir une foule de détails. Depuis deux ans que je consigne mes rêves, j’ai remarqué que, même si les rêves de la nuit s’oublient facilement dans la journée, il suffit d’en noter quelques mots-clés : même si j’ai tout oublié au cours de la journée, relire ces mots-clés me permet de retrouver toute la richesse de leur intrigue. Les exemples ci-dessus recourent tous à la même méthode, dégager ce que les choses ont en commun, saisir la contradiction principale, pour réduire la quantité d’information que le cerveau doit traiter et renforcer ainsi ses capacités cognitives. Ces réflexions sur l’abstraction et la cognition humaine offrent aussi un autre angle pour comprendre certaines méthodes de l’apprentissage profond. En apprentissage profond, par exemple, le mécanisme d’attention peut aider un modèle à apprendre à « saisir la contradiction principale » (merci à ke chen), c’est-à-dire à se concentrer davantage sur les parties de l’entrée pertinentes pour la tâche et à ignorer celles qui ne comptent pas. Dans un réseau convolutif (CNN), plus la couche de convolution est profonde, plus les parties de l’image sur lesquelles ses cartes de caractéristiques montrent le modèle se concentrer passent des détails à des concepts sémantiques abstraits. L’apprentissage de représentations vise lui aussi à construire des représentations vectorielles concises d’entrées complexes. (Ce point reste discutable, car les plongements, ou embeddings, ne semblent pas plus concis que l’entrée brute. Il faut que j’y réfléchisse encore. Vu sous cet angle, les modèles de plongement actuels ont sans doute encore de la marge de progression.) Si les tâches de classification peuvent servir à entraîner des extracteurs de caractéristiques, c’est justement parce que la classification exige du modèle qu’il sache saisir la contradiction principale.
Encore un cran d’abstraction
Au second semestre de ma première année, j’ai suivi le cours de « programmation orientée objet » et découvert la notion de « classe ». Je me suis alors rendu compte que les classes correspondent en fait aux divers concepts de la vie courante. Je peux par exemple créer une classe appelée « bird ». Ses attributs représentent alors la ou les contradictions principales qui nous intéressent. Si, par exemple, le contexte dans lequel on utilise la classe « bird » exige de connaître la couleur du plumage de l’oiseau, on peut définir un attribut nommé « feather_color ». Tout l’intérêt de la programmation orientée objet est de modéliser, en définissant différents attributs et différentes méthodes, la façon dont la contradiction principale change d’un contexte à l’autre. Plus encore, grâce à des mécanismes comme les superclasses, les interfaces ou la prise en charge de la généricité, la programmation orientée objet offre aussi différents niveaux d’abstraction, ce qui en fait un puissant outil pour « modéliser » le monde.
À l’image de la philosophie de la programmation orientée objet, la deuxième étape pour « modéliser » le monde consiste à abstraire, à partir des concepts de base acquis au tout début de la vie, des concepts de plus haut niveau, pour finir par bâtir une hiérarchie d’abstraction. Cela suppose d’analyser plus avant les contradictions que recèlent ces concepts. Mettons qu’un petit enfant qui commence à babiller aperçoive au bord du chemin une « jolie aînée aux longs cheveux noirs et lisses », et que sa maman lui dise que c’est une « pie ». Le lendemain, le petit bout est captivé par un corbeau qui croasse sur une branche de pin. Le troisième jour, il fait la connaissance du merle ; le quatrième, de la pie bleue ; le cinquième, du moineau, et ainsi de suite. Alors sa maman lui dira que ce sont tous des « petits oiseaux ». Peut-être que, dans leurs conversations suivantes, elle lui dira : « Regarde, il y a un petit oiseau sur la branche, là-bas ! » Une abstraction vient ainsi de s’accomplir : on est passé des concepts d’espèces d’oiseaux particulières au concept général d’oiseau. Un jour enfin, devant un documentaire, l’enfant verra un albatros, qu’il n’a jamais vu, et s’exclamera spontanément : « Waouh, qu’il est grand, cet oiseau ! » À ce moment-là, il est déjà capable de se servir du concept abstrait d’« oiseau » pour analyser l’inconnu.
Une abstraction plus poussée peut passer par l’étude. La biologie du collège nous apprend par exemple que la classification du vivant comporte « règne, embranchement, classe, ordre, famille, genre, espèce », et les oiseaux ne sont que quelques feuilles de ce grand arbre logique. J’ai un ami (olgd) passionné de classification biologique qui, après s’être approprié ce système, est capable de situer précisément chaque plante qu’il croise. Je comprends très bien sa passion aujourd’hui : c’est la jouissance d’un processus cognitif de haut niveau. Autre exemple : l’histoire. Une fois le langage acquis, on peut écrire l’histoire de la Chine dans un livre. Mais peut-on, au-dessus de cela, abstraire encore des lois ? C’est sans doute là la mission de la science historique. L’essor et le déclin des dynasties chinoises successives montrent par exemple que la plupart d’entre elles ont péri parce que la concentration des terres a tari les recettes du trésor central, parce que les pouvoirs locaux étaient devenus impossibles à maîtriser, ou parce que la classe des lettrés-fonctionnaires a vendu le pays pour son propre profit, etc. Les lois de la physique en sont un autre exemple (merci au plus bel homme de mtl pour celui-ci). Si Newton a pu abstraire F=ma des lois du mouvement des choses, c’est bien que la mécanique est, elle aussi, une forme d’abstraction. Quant aux mathématiques, elles sont l’abstraction de l’abstraction ; tout le monde en conviendra. À l’université, le professeur d’algèbre linéaire de mon établissement n’était pas fameux non plus, et j’ai suivi sur Bilibili le cours d’algèbre supérieure du professeur Qiu Weisheng. Ce qui m’a marqué, c’est sa méthode pour comprendre l’algèbre linéaire, qu’il appelait « disséquer le moineau ». Le principe en est de partir de l’espace euclidien ou d’exemples simples tirés de la vie courante pour amener les étudiants à abstraire eux-mêmes les diverses notions des espaces vectoriels plus généraux. Comme dit le proverbe, « le moineau a beau être petit, il a tous ses organes » : l’analyse d’une instance d’une classe peut, elle aussi, nous faire comprendre les caractéristiques de cette classe. En apprentissage profond, si la vision par ordinateur passe moins bien à l’échelle que le TAL, c’est qu’un modèle de vision doit d’abord abstraire l’information sémantique du monde complexe des images ; ensuite, si l’on veut qu’il comprenne des concepts sémantiques plus complexes, il faut sans doute davantage de données pour l’entraîner à abstraire encore à partir (des concepts sémantiques extraits des images). C’est un apprentissage en deux temps, évidemment plus difficile à entraîner.
D’un autre côté, connaître et comprendre le monde demande tout de même d’autres activités de pensée que l’abstraction, comme le raisonnement logique, l’association d’idées, etc. Ces activités ne se laissent pas entièrement ranger sous la bannière de l’« abstraction ». L’association, peut-être : si deux choses sont liées, c’est sans doute parce qu’elles sont proches dans la hiérarchie d’abstraction à laquelle elles appartiennent. Le lien entre la pie et la pie bleue, par exemple, tient à ce que ce sont toutes deux des oiseaux. (J’ai la flemme d’aller vérifier leur règne-embranchement-classe-ordre-famille-genre-espèce, haha.) Le raisonnement logique semble être une capacité tout à fait distincte de l’abstraction, mais il faut reconnaître que, pour l’acquérir, il faut d’abord savoir abstraire des concepts, afin de pouvoir chercher davantage de relations entre eux. Plus encore, le raisonnement entre concepts plus abstraits tend à être plus concis (à vérifier ?).
Ces contradictions secondaires qu’on ne peut ignorer
Voilà ce que ces dernières années m’ont appris sur l’art de « saisir la contradiction principale ». Le lecteur qui se souvient encore de son manuel de philosophie n’aura sûrement pas oublié l’indissociable compagnon de ce précepte : « ne pas négliger les contradictions secondaires ». L’exemple le plus typique est en fait celui de la modélisation en recherche. Nous voulons abstraire un problème réel en un modèle mathématique, puis résoudre le problème à l’aide des résultats relatifs à ce modèle. Mais en cours d’abstraction, nous faisons souvent des « hypothèses ». En TAL, par exemple, le modèle de langue le plus classique, le sac de mots, suppose que $p (w_{1},w_{2},w_{3}) = p(w_{1})p(w_{2})p(w_{3})$, c’est-à-dire que chaque mot apparaît indépendamment des autres. Une telle hypothèse simplifie le modèle, mais ne reflète pas la réalité. Autrement dit, elle néglige une contradiction secondaire qui n’aurait pas dû l’être. En réalité, la modélisation du langage devrait aussi tenir compte du contexte à gauche et à droite de chaque mot, ainsi que de l’ordre de la séquence entière. Les modèles de langue masqués ou autorégressifs, nés de la prise en compte de ces questions, sont bien plus raisonnables. Pour autant, GPT, entraîné comme modèle de langue autorégressif, n’est pas parfait non plus, car le langage est lui-même une abstraction obtenue en négligeant quantité de détails du monde réel (des contradictions secondaires). Peut-être des modèles de langue multimodaux dotés d’un ancrage visuel (visual grounding) sauraient-ils mieux combler ces contradictions secondaires et modéliser le monde. Je crois qu’en recherche, il est utile de se demander sans cesse : « Quelles hypothèses cette méthode fait-elle ? Pourrait-on l’améliorer en relâchant ces hypothèses ? » Autres exemples : quand on utilise un développement de Taylor, on choisit l’ordre du développement selon la précision voulue, et le reste qu’on néglige est alors la contradiction secondaire. Quand l’exigence de précision augmente, ce reste ne peut plus être négligé. Quand un programmeur appelle une fonction et tombe sur un bug à l’intérieur, il ne peut plus se contenter des informations d’entrée et de sortie fournies par la documentation : il doit plonger dans la fonction pour la déboguer. L’implémentation de la fonction devient alors une contradiction secondaire impossible à ignorer.
Un autre exemple de contradictions secondaires impossibles à ignorer est celui des relations entre les différents échelons du gouvernement. L’échelon supérieur confie des tâches à l’échelon inférieur, qui se réunit, en discute, les exécute concrètement, puis fait remonter les résultats. L’échelon supérieur ne peut pas tout prendre en charge lui-même ; il consacre donc son énergie aux décisions et doit alors supposer que les rapports de l’échelon inférieur sont fiables : les détails de l’exécution deviennent, à ce moment-là, une contradiction secondaire à ses yeux. (Je repense soudain au mème : « Ces affaires-là, occupez-vous-en ; moi, j’ai trop à faire, je dois consacrer mon énergie aux questions militaires. » XP) Si l’échelon inférieur trompe l’échelon supérieur, celui-ci aura bien du mal à s’en apercevoir. Il peut créer des organes de contrôle pour s’assurer que les contradictions secondaires sont, elles aussi, traitées aussi parfaitement qu’il l’imagine ; mais ces organes de contrôle forment eux-mêmes une hiérarchie, où l’on peut tout aussi bien tromper ses supérieurs et duper ses subordonnés. Un peu comme les fonctions d’une montagne de code pourri, auxquelles il est bien difficile de se fier. On le voit, l’abstraction est véritablement un art, car, faute de ressources, il est souvent impossible de tenir compte à la fois de la contradiction principale et des contradictions secondaires : comme dit le proverbe, on ne peut avoir à la fois le poisson et la patte d’ours. Dans ces conditions, savoir mettre en jeu notre initiative subjective pour faire l’analyse concrète de chaque situation concrète, et dégager avec justesse et courage la contradiction principale et les contradictions secondaires des choses selon les conditions, est une capacité précieuse, ou plutôt une force de caractère.
La justice de l’abstraction au quotidien
La vie elle-même est aussi un système complexe. À l’ère de l’information, où la frontière technologique se renouvelle de jour en jour, il semble y avoir chaque jour des nouvelles à n’en plus finir, des occasions sans nombre, des tâches dont on ne verra jamais le bout. Personne ne peut être parfait sur tous les plans ; à vouloir tout à la fois, on finit souvent par ne plus savoir où donner de la tête. Peut-être devrions-nous rester à tout moment à l’écoute de notre voix intérieure : « Qu’est-ce qui compte le plus pour moi en ce moment ? » Si, après mûre analyse, on parvient à une réponse dont on est sûr au fond de soi, alors il n’y a plus qu’à se lancer, sans retenue !
Je dédie ce texte à ma vie de doctorant, qui est sur le point de commencer.

