Back to Top

Python et intelligence artificielle

Python pour l’IA, vraiment?

Quand on s’intéresse à l’intelligence artificielle, on en vient très vite au Python. Au moins pour la mise en œuvre. Mais quand on continue nos recherches, on voit que l’IA demande des technologies efficaces, permettant de traiter des calculs très lourds et ce, très rapidement. Si vous me lisez, vous avez compris que moi, le Python, j’aime. Mais par contre c’est pas le langage le plus puissant de la terre, niveau rapidité de calcul, loin de là. Donc pourquoi cette dissonance ? C’est ce qu’on va expliquer dans cet article. Spoiler: les apparences sont parfois trompeuses.

Python et intelligence artificielle

Mais pourtant, c’est du Python non ?

Alors oui, on ne va pas faire durer le suspense plus longtemps. Si vous voulez faire des modèles d’IA, des forêts d’arbres décisionnels (random forest classifier), tout ça vous pouvez le faire en Python. Il y a des librairies de très bonne qualité, comme scikit-learn et TensorFlow. Vous pouvez donc écrire vos programmes, monter vos modèles et faire des prévisions en Python. D’ailleurs, le langage le plus connu dans la Data Science c’est Python. Oui mais voila, comme je l’ai dit en introduction, les apparences sont trompeuse.

En effet, dans ces bibliothèques, nous faisons un usage massif de calculs et manipulations d’objets mathématiques. Notamment de tout ce qui touche à l’algèbre linéaire. Très souvent, en intelligence artificielle, il arrive un moment ou notre problème est représenté sous forme de matrices ou de vecteurs. On sait les manipuler, mais quand les dimensions des données deviennent grandes, les problèmes commencent.

Il est très courant d’inverser une matrice par exemple, et c’est quelque chose que l’on maîtrise. Pour ceux ayant fait un peu de mathématiques, ils connaîtront la méthode du pivot de Gauss qui a pour intérêt d’être algorithmiquement faisable. Je veux dire, dans le sens ou il n’y a pas vraiment de choix a faire, c’est relativement mécanique. En oubliant les problèmes purement mathématiques de l’implémentation de cet algorithme, l’étude de sa complexité nous met face a un problème. En effet, la complexité est en O(n^3), en d’autre termes plus simple, une matrice par exemple 10×10 va demander 1000 calculs. Mais dans nos modèles d’IA, la norme est plutôt d’avoir des structures de très grande dimensions, par exemple en 1000×1000. 1 milliard d’opérations pour inverser une seule matrice, ça commence a faire un peu trop pour notre pauvre Python.

Ainsi, nous sommes contraints de chercher de meilleurs algorithmes. Par exemple dans notre cas, l’algorithme de Strassens existe pour limiter la complexité en O(n^2.8) et des brouettes. Certains doivent se dire « mais il se moque de nous, on passe de 3 a 2.8, tout ça pour ça! ». Il ne faut cependant pas oublier que l’on est en très grande dimension, donc ce « petit » gain nous fait passer de 1 milliard d’opérations à 250 millions, ce qui est loin d’être négligeable.

On peut encore faire mieux

Voilà donc la question, comment faire pour programmer en Python avec des algorithmes trop lourds pour être calculés via les moyens connus? Deux solutions s’offrent à nous : on améliore notre technique de calcul, ou on se débrouille pour calculer plus vite. Alors vous pouvez chercher dans la littérature, mais je vous le dit : réduire drastiquement la complexité n’est pas pour tout de suite! On a déjà bataillé ferme pour passer de O(n^3) a O(n^2.8). Vous imaginez bien que c’est improbable que demain quelqu’un montre qu’en faite nous sommes tous des idiots et qu’on peut le faire en O(n). Reste donc à changer le moteur, à le surbooster pour calculer plus vite.

Et c’est la qu’apparaît ce qui était jusqu’alors caché : Python nous ment ! Nous avons été trompés ! A chaque fois que vous faites de l’IA, ou même du calcul avec numpy, vous ne faites pas de Python ! Oui, je suis d’accord, c’est très triste d’être ainsi trompé, mais c’est pour votre bien. Il se trouve qu’en faite, juste une partie des bibliothèques sont écrites en Python. On nous permet simplement de « taper » dans ces bibliothèques en utilisant Python (ou en Rust/Julia/Scala/Whatever). On utilise donc une API, dans le langage de notre choix, pour utiliser « le backend » (par analogie avec les technos webs) de la bibliothèque. Et ce backend, il est développé, très souvent, en C ou C++. Scikit-Learn utilise aussi Cython, technologie qui mérite un article, qui arrivera peut-être un jour.

L’idée centrale dans cette construction, que l’on retrouve aussi dans l’industrie du génie logiciel est simple : on va développer notre outil dans un langage qui permet de prototyper rapidement et efficacement, ici le Python. Il ne faut pas oublier qu’au départ, les gens qui produisent ces librairies sont plus mathématiciens-informaticiens que développeurs.

Une fois que « ça fonctionne », si on voit que c’est encore trop lent, on va devoir optimiser. On peut par exemple typer nos variable et fonction python avec Cython (entre autre chose). Ceci va permettre un gain dans les calculs et au niveau mémoire. Et si cela ne suffit toujours pas, on se retrousse les manches, et on recode les fonctions « sensibles ». Le tout dans un langage très rapide, en appelant un barbu qui maîtrise C++ tel un dieu vivant. On a donc du python, pour tout ce qui est relativement léger comme les routines de base ne nécessitant pas de calcul lourds. Ce même Python appellera ensuite du code C ou C++ quand il va falloir faire quelque chose de plus complexe. Et ça nous permet de faire de l’intelligence artificielle en Python, sans faire mouliner notre programme pendant des millions d’années. C’est quand même bien mieux.

Pour conclure

Donc la prochaine fois qu’on vous parle de Python comme un langage peu efficace, vous pourrez fièrement jouer la carte de l’optimisation au fil de l’eau. On ne le répétera jamais assez : Python peut tout faire, même si parfois, comme ici, il triche et appelle des copains pour l’aider.
Comme toujours, nous sommes sur Foutu Code, je vous laisse donc vous délecter de ce meme sur l’IA!

Par Clément Caffin


Random_meme()

Rechercher:





Suis-nous sur les réseaux sociaux!

Instagram

S'abonner