Chapter Content
Bon, alors, on va attaquer... comment dire... le quatrième chapitre, hein ? Euh, ça parle de... l'essence d'un problème difficile. Un truc costaud, quoi !
Voilà, en gros, on va décortiquer un peu tout ça, avec les notions de problème, de processus, de réponse et de solution. C'est un peu le vocabulaire de base pour s'y retrouver quand on parle de... bah, de résolution de problèmes, quoi !
Alors, le problème, c'est... enfin, c'est la tâche sur laquelle on bosse, la situation qu'on veut arranger, tu vois ? Le processus, lui, il peut être double. Soit c'est la méthode qu'on utilise pour trouver la solution, la méthode externe, on va dire. Soit c'est la façon dont la solution elle-même calcule ses résultats, le processus interne, quoi. La réponse, c'est l'état final, le moment où on se dit : "Ah bah, c'est bon, on a résolu le problème !" Et enfin, la solution, c'est... l'objet physique, ou... enfin, le truc qui met en œuvre le processus interne pour résoudre le problème. C'est un peu abstrait dit comme ça, hein ?
Prenons un exemple, hein. Un pont. Le problème, c'est... bah, permettre aux voitures et aux piétons de traverser une rivière en toute sécurité. Le processus externe, c'est les essais-erreurs qu'on fait pour trouver la bonne configuration des pièces du pont. Le processus interne, c'est le lien entre les différentes parties du pont qui font qu'il tient debout et qu'il fonctionne. La réponse, c'est quand on voit les voitures traverser le pont. Et la solution, c'est le pont lui-même, cette configuration de pièces qu'on appelle... un pont, quoi !
Autre exemple... un modèle de deep learning. Le problème, ça pourrait être la reconnaissance faciale. Le processus externe, c'est la phase d'apprentissage qu'on utilise pour arriver à un bon modèle. Le processus interne, c'est le calcul que fait le modèle une fois qu'il est... prêt, quoi. La réponse, c'est le nom correct qu'on donne au visage reconnu. Et la solution, c'est le modèle qu'on déploie, avec ses paramètres bien définis, ses poids et ses biais, tout ça... en production, quoi.
Allez, encore un petit exemple pour la route ! Un Rubik's cube. Le problème, c'est d'aligner toutes les faces pour que chaque face ait une seule couleur. Le processus externe, c'est... les essais-erreurs, ou l'approche méthodique, qu'on utilise pour trouver une suite d'étapes à suivre pour résoudre le cube. Le processus interne, c'est ce qui se passe quand on suit cette suite d'étapes, cet "algorithme", pour résoudre le cube. La réponse, c'est l'état final résolu, chaque face avec une seule couleur. Et la solution, c'est la suite d'étapes qu'on a trouvée et que les autres peuvent utiliser pour résoudre le cube. C'est peut-être écrit sur un papier, quoi !
Donc, en résumé, le problème, c'est la situation à résoudre. Le processus externe, c'est comment on trouve la solution (la déduction, les essais-erreurs...). Le processus interne, c'est comment la solution qu'on a trouvée est mise en œuvre (étape par étape, ou autre chose). La réponse, c'est l'état final qui confirme qu'on a résolu le problème. Et la solution, c'est l'objet physique qu'on déploie pour réaliser le processus qui résout le problème (les règles sur un papier, un modèle déployé en logiciel...). Voilà, maintenant qu'on a le vocabulaire, on peut essayer de comprendre ce qui rend un problème... difficile, quoi !
Qu'est-ce qui rend un problème difficile ?
On dit qu'un problème est "difficile" quand il n'est pas facile à résoudre. Une situation qui n'a pas de solution immédiate est généralement considérée comme difficile. Mais en informatique, le mot "difficile" a un sens plus précis. Un problème est "calculatoirement difficile" s'il est très difficile, voire impossible, à résoudre efficacement avec un ordinateur. Un tel problème demande beaucoup de ressources, beaucoup de temps et/ou de mémoire pour être résolu.
La difficulté des problèmes calculatoirement difficiles augmente très vite quand la taille des données augmente. C'est souvent une augmentation exponentielle. Une petite augmentation de la taille du problème fait exploser le temps nécessaire pour le résoudre. On peut comprendre l'augmentation exponentielle en pliant une feuille de papier plusieurs fois. Chaque pli n'ajoute pas quelques couches, mais multiplie le nombre de couches. Si on pliait une feuille de papier 42 fois, elle atteindrait la distance entre la Terre et la Lune ! Dingue, non?
En informatique, l'équivalent du pliage de papier, c'est l'explosion du nombre de chemins possibles qu'un algorithme peut emprunter pour trouver une solution. N'oubliez pas que les problèmes difficiles ont de nombreux facteurs à prendre en compte. Un pont plus long a plus de pièces pour tenir compte des facteurs supplémentaires impliqués dans le défi qu'il résout. La reconnaissance faciale est difficile à calculer parce que le nombre de facteurs qui font qu'un visage est un visage est immense.
Le concept clé qui rend un problème calculatoirement difficile, c'est l'espace des possibles. L'espace des possibles, c'est l'ensemble de toutes les combinaisons, arrangements ou états possibles qui peuvent exister par rapport au problème. C'est l'ensemble de toutes les configurations possibles d'un système. Si on parle d'un échiquier, c'est toutes les façons dont on peut arranger les pièces. Plus l'espace des possibles associé à un problème est grand, plus l'algorithme qui essaie de le résoudre doit explorer cet espace. C'est ce niveau d'exploration accru qui rend un problème difficile.
Parce qu'il est impossible de travailler dans l'univers de toutes les configurations possibles, les modèles et les algorithmes ne travaillent pas dans l'espace des possibles. On doit définir un ensemble réduit de caractéristiques possibles pour un problème difficile, et essayer de travailler dans cet espace réduit. Cet espace réduit s'appelle l'espace des caractéristiques. Il est fait des caractéristiques qu'on juge importantes pour le problème.
Imaginez le problème de garder vos mains au chaud pendant l'hiver. Au lieu de mélanger des objets au hasard et de les enrouler autour de vos mains, on va considérer les attributs qui valent la peine d'être pris en compte. Ce serait des choses comme l'épaisseur, le volume, le niveau d'absorption et la résistance. Si on devait créer un graphique de ces caractéristiques, on aurait 4 axes. La solution à notre problème se trouverait quelque part dans l'espace délimité par ces 4 axes. C'est parce que la bonne combinaison de matériaux pour faire fonctionner les gants correctement aurait le bon mélange d'épaisseur, de volume, de niveau d'absorption et de résistance. Chaque caractéristique contribue une dimension à l'espace des caractéristiques, et la combinaison de toutes les caractéristiques crée un espace à plusieurs dimensions où se trouve la solution. Quand on dit qu'un problème est "à plusieurs dimensions", c'est ça que ça veut dire : un problème dont l'espace des caractéristiques contient beaucoup de dimensions, et dont la solution se trouve quelque part dans cet espace.
Ce qui rend un problème difficile, c'est la difficulté de trouver où se trouve la solution dans l'espace des caractéristiques du problème. L'espace des caractéristiques d'un problème difficile est un vaste territoire, fait d'un patchwork emmêlé de chemins sinueux et d'obstacles. Avec les problèmes difficiles, il n'y a pas de marqueurs évidents qui nous disent où on peut trouver la solution.
Il y a trois grandes sources de difficultés qui rendent les espaces de caractéristiques des problèmes difficiles si difficiles à traverser, et leurs solutions si difficiles à localiser. Ce sont : 1) la complexité inhérente de l'espace des caractéristiques lui-même, 2) le manque de liens de causalité visibles entre les différentes caractéristiques et 3) le petit nombre de combinaisons viables de caractéristiques (solutions fonctionnelles) par rapport à toutes les combinaisons possibles qu'on pourrait faire.
La complexité inhérente d'un espace de caractéristiques vient des interactions et des dépendances entre ses caractéristiques. Dans notre problème de garder les mains au chaud, un matériau plus épais peut fournir plus d'isolation, mais peut aussi réduire la dextérité. Un matériau très absorbant peut être bon pour évacuer l'humidité, mais peut aussi devenir froid quand il est mouillé. La complexité de l'espace des caractéristiques n'augmente pas nécessairement la taille de l'espace des caractéristiques, mais elle rend plus difficile de trouver un chemin qui nous mène à une solution. C'est très facile de se tromper de chemin dans un espace de caractéristiques complexe. Considérez les compromis inhérents, où l'augmentation de la valeur d'une caractéristique peut améliorer la performance dans un domaine, mais la dégrader dans un autre. Se déplacer dans un espace de caractéristiques complexe à la recherche d'une réponse, c'est déshabiller Pierre pour habiller Paul, sans arrêt.
En général, plus le nombre de caractéristiques augmente, plus la probabilité que ces caractéristiques soient indépendantes diminue. C'est pourquoi les espaces à plusieurs dimensions sont une caractéristique des systèmes réellement complexes, et des problèmes difficiles qui y sont associés. C'est aussi pourquoi la complexité n'est pas seulement une question de grand nombre de pièces, mais surtout d'interactions entre ces pièces.
La deuxième source de difficulté d'un problème, c'est la perte de causalité visible entre les caractéristiques dans l'espace des caractéristiques. Revenons à notre problème de garder les mains au chaud. Ici, on peut facilement imaginer comment l'épaisseur, le volume, le niveau d'absorption et la résistance travaillent ensemble pour résoudre le problème. On peut utiliser la déduction pour se déplacer dans l'espace des caractéristiques et arriver à une configuration qui fonctionne. On pourrait d'abord prendre une peau d'animal qui bloque naturellement le froid, et la relier à un tendon d'animal pour lier le matériau et conserver la forme souhaitée. On déduirait facilement que remplir deux couches de peau avec de la fibre animale servirait de meilleure isolation que la peau d'animal seule.
Le problème de garder les mains au chaud est relativement simple, malgré une certaine complexité inhérente à son espace des caractéristiques. Cela nous montre que si le nombre de caractéristiques est petit (moins de dimensions), et que les compromis entre les caractéristiques sont minimes, les humains peuvent probablement trouver une solution par simple déduction. La première solution ne sera pas la meilleure, mais elle fonctionnera. La déduction fonctionne ici parce que les liens de causalité entre les éléments de notre solution sont évidents.
Mais maintenant, imaginez un problème plus difficile. Imaginez qu'on doit trouver une solution au problème de garder nos mains au chaud tout en construisant un bonhomme de neige. Maintenant, il y a plus de contraintes au problème. Non seulement on doit garder nos mains au chaud, mais on doit aussi les garder au sec, et avoir assez de dextérité pour manipuler la neige. Ces contraintes supplémentaires sur le problème peuvent ou non augmenter le nombre de caractéristiques à prendre en compte, mais elles introduiront probablement des compromis supplémentaires. Cela commence à dégrader notre capacité à déduire une solution, car le tissu causal entre les caractéristiques n'est plus aussi net.
Il y a une relation étroite entre la complexité inhérente de l'espace des caractéristiques et la perte de causalité visible. Plus nos caractéristiques "se parlent" par des interactions, plus il y aura de compromis, ce qui rendra de plus en plus difficile de trouver une solution. Si on choisit un matériau qui nous garde au chaud et qui a une bonne dextérité, on pourrait trouver qu'il se mouille trop facilement. Dès qu'on trouve un matériau résistant à l'eau, on perd la dextérité. Plus il y a de contraintes, plus il y a de contradictions, de dilemmes, de paradoxes et d'impasses qui rendent difficile de trouver notre chemin vers une solution viable. C'est un vrai casse-tête !
La dernière source de difficulté est liée à un autre espace appelé l'espace des solutions. L'espace des solutions se trouve à l'intérieur de l'espace des caractéristiques (qui lui-même se trouve à l'intérieur de l'espace des possibles), comme un sous-ensemble de configurations possibles qui satisfont les critères ou les contraintes du problème. En termes plus simples, l'espace des solutions est l'espace de toutes les configurations possibles qui produisent une solution viable au problème.
Un grand espace des solutions signifie qu'il y a plus de solutions possibles qui résolvent le problème, tandis qu'un petit espace des solutions signifie qu'il y en a moins. Les problèmes qui ont de grands espaces de solutions par rapport à leurs espaces des possibles prendront moins de temps à être explorés, parce qu'il y a abstraitement moins d'espace à parcourir avant de tomber sur une solution. Les problèmes liés au fait de garder nos mains au chaud ont de grands espaces de solutions, puisqu'il y a beaucoup de combinaisons de matériaux qui résoudront le problème. Considérez que nos ancêtres sont probablement tombés sur une bonne paire de moufles assez tôt.
Comparez ça à quelque chose comme le Rubik's cube. Un point à l'intérieur de cet espace des caractéristiques serait une configuration unique de 26 "cubies", chaque cubie ayant un ensemble de valeurs liées à la position et à l'orientation. Ce mélange de valeurs est la version Rubik's cube du mélange d'épaisseur, de volume, de niveau d'absorption et de résistance de notre problème de garder les mains au chaud. L'espace des solutions du Rubik's cube est l'ensemble de tous les algorithmes possibles qui pourraient produire la même réponse finale.
Il faut beaucoup de temps pour trouver une solution au Rubik's cube à cause de la complexité de son espace des caractéristiques. Notez que quand je dis trouver une solution, je ne veux pas dire suivre un algorithme déjà découvert, comme le font les cubeurs. Je parle de découvrir l'ensemble des étapes pour la première fois. Le Rubik's cube a une complexité inhérente à son espace des caractéristiques parce que ses caractéristiques ont des compromis. Quand on place un cubie dans une position donnée, ça peut facilement ruiner un ou plusieurs cubies placés précédemment.
Et pourtant, le Rubik's cube n'est pas un problème difficile. Il vaut mieux considérer le Rubik's cube comme un problème qui commence à montrer quelques signes de difficulté, tout en étant soluble dans un délai raisonnable. Les échecs ont un espace des possibles encore plus grand et plus complexe. Les échecs nous rapprochent d'un problème vraiment difficile. Bien sûr, ni le Rubik's cube ni les échecs ne sont des problèmes difficiles. Comme mentionné dans l'introduction, les problèmes difficiles sont ceux qui se présentent dans les environnements naturels, pas les jeux que nous créons. Les problèmes difficiles ne correspondent pas aux classes de complexité de l'informatique. Les espaces des possibles dans les problèmes difficiles sont effectivement infinis en taille et en complexité. Mais le Rubik's cube et les échecs sont de bons moyens de voir la transition des problèmes plus simples (comme garder les mains au chaud) à ceux qui approchent la vraie difficulté.
Pour résumer, il y a trois aspects principaux des espaces abstraits qu'on utilise pour définir les problèmes qui mènent à la difficulté : 1) la complexité de l'espace lui-même (caractéristiques interdépendantes), 2) la dégradation de la causalité entre les caractéristiques à l'intérieur de l'espace et 3) la petite taille de l'espace des solutions par rapport à l'espace global. Un problème difficile a un degré élevé de ces trois aspects.
Si on regarde combien d'espace il y a à parcourir dans les problèmes difficiles, il semble impossible qu'on trouve un jour la réponse. Le Rubik's cube a plus de 43 quintillions de configurations possibles. Les échecs encore plus. Et pourtant, ce ne sont que des jeux, avec une dimensionnalité réduite par rapport aux situations réelles. Le nombre de configurations possibles dans les environnements naturels, ceux qui ne sont pas limités par l'invention humaine, a des niveaux de complexité à peine imaginables. En tant que tels, les problèmes dans cet espace ne ressemblent à rien de ce qu'on trouve dans les jeux.
Et pourtant, les humains trouvent des solutions à des problèmes difficiles tout le temps. Comment de tels espaces massifs de possibilités peuvent-ils être maîtrisés et rendus gérables ?
Plus le problème est difficile, plus la recherche est douce
Il est important de noter qu'en raison de l'explosion combinatoire qui se produit avec le Rubik's cube, les méthodes de recherche exhaustive, où chaque configuration possible est tentée (jusqu'à ce que la bonne soit trouvée), ne sont pas possibles, même en utilisant nos ordinateurs les plus rapides. Il faudrait des milliards, voire des billions d'années pour calculer toutes les configurations possibles à la recherche d'une solution.
C'est pourquoi les ordinateurs qui résolvent les Rubik's cubes doivent utiliser des heuristiques et la reconnaissance de formes pour rechercher plus efficacement dans l'espace des possibles. Les heuristiques sont des règles générales ou des raccourcis qui permettent aux gens, et aux machines, de résoudre des problèmes difficiles sans avoir besoin d'une analyse explicite. Considérez comment les grands maîtres d'échecs utilisent des schémas reconnaissables sur le plateau, comme les ouvertures courantes, pour jouer à leur meilleur niveau. Ce n'est pas un décompte explicite des pièces d'échecs, c'est la reconnaissance rapide de schémas qui guident les joueurs vers de bons coups.
Encore une fois, le Rubik's cube n'est pas un problème vraiment difficile, mais il nous montre que plus la difficulté d'un problème augmente, plus notre approche de résolution de problèmes doit devenir douce. Ici, douce signifie s'appuyer sur des choses comme les heuristiques et la reconnaissance de formes plutôt que sur une analyse détaillée des éléments qui composent un problème. Plus le problème est difficile, plus son espace des possibles est grand et complexe, et cet espace doit être exploré. Cela signifie que plus le problème est difficile, moins on peut être analytique sur la façon dont on procède à la recherche. Dans le problème de garder les mains au chaud, notre recherche s'est faite facilement avec un peu d'essais-erreurs associés à la déduction. Le problème du bonhomme de neige nécessitait plus d'essais-erreurs, car la déduction devenait moins utile en raison de la dégradation de la causalité. Le Rubik's cube nécessiterait encore plus d'essais-erreurs pour trouver une nouvelle solution. Même si c'est fait systématiquement, l'utilisation d'heuristiques est nécessaire. Encore une fois, l'approche par force brute, où toutes les configurations possibles sont tentées jusqu'à ce qu'une solution soit trouvée, n'est pas faisable.
Il va de soi que les problèmes naturellement difficiles, ceux qu'on trouve dans la vie réelle, ne peuvent être résolus que par les approches les plus douces. Et bien sûr, c'est ce qu'on voit. Les humains ont évolué pour résoudre les problèmes les plus difficiles de tous en utilisant les heuristiques et la reconnaissance de formes, pas l'analyse détaillée. Les signaux émotionnels et les intuitions que les humains utilisent sont nos versions évoluées des heuristiques. Ainsi, ce ne sont pas seulement les ordinateurs fabriqués par l'homme qui calculent, selon la définition originale d'un problème difficile. La nature calcule. Et la nature nous montre ce qu'il faut pour résoudre les problèmes les plus difficiles de tous. On doit sortir du système, être extérieur au domaine de l'analyse délibérée, et explorer de vastes espaces de possibilités en utilisant les essais-erreurs, les heuristiques et la reconnaissance de formes.
C'est pourquoi le deep learning est là. Les approches analytiques et le calcul basé sur des règles ne peuvent pas résoudre les problèmes vraiment difficiles. Le deep learning ne concerne pas l'analyse ou les règles, mais plutôt l'adoption de versions informatiques des essais-erreurs, des heuristiques et de la reconnaissance de formes. Le deep learning peut être appliqué au problème du Rubik's cube, afin de potentiellement trouver de nouvelles solutions. Cela a été fait, motivé par l'espoir qu'une telle application pourrait révéler des idées, des stratégies ou des innovations précieuses liées à la résolution de problèmes en général. Le deep learning explore l'espace des possibles un peu comme un humain le ferait : doucement, extérieurement.
Mais si le processus de recherche utilisé par le deep learning est conceptuellement similaire à celui utilisé par les humains, on ne peut pas en dire autant des solutions trouvées. Les humains et l'informatique traditionnelle trouvent une solution qui peut être présentée comme un ensemble compréhensible d'instructions à suivre pour les autres (c'est-à-dire l'algorithme d'un cubeur). Mais le deep learning produit quelque chose de très différent. Plutôt qu'un ensemble visible d'étapes, les solutions de deep learning ne peuvent pas être vues de cette façon. Les solutions produites par le deep learning sont opaques sur le plan causal et largement ininterprétables. En bref, on ne sait pas ce que le deep learning fait quand sa solution déployée résout le cube. La question évidente ici est de savoir pourquoi la même approche globale entre deux systèmes différents, les humains et l'IA, produirait des solutions si différentes ? Voilà, voilà... une bonne question, hein ? À méditer !