Mes premier pas avec l’IA

Depuis quelques mois on entend beaucoup parler d’intelligence artificielle avec l’avènement de Chat GPT (entre autres). Les médias généralistes nous inonde de titres accrocheurs en nous disant que tout va changer, qu’on va tous être au chômage, que l’IA consciente n’est plus très loin, et autres joyeusetés du genre. Mais qu’en est-il vraiment ?

En réalité le terme d’intelligence artificielle est très mal choisi car on est très loin d’un outil intelligent. En effet ChatGPT n’est qu’un logiciel qui transforme nos mots en probabilité mathématiques et affiche d’autres mots en réponse sur la base de l’apprentissage qu’il a effectué sur des textes existants. Il ne « pense » pas, il se contente d’afficher des mots les uns à la suite des autres car il est « probable » que ces mots se suivent.

Toutefois cet outil s’avère extrêmement puissant pour générer des textes et comprendre le sens de nos demandes.

Et surtout, la question qui me travaille jour et nuit : comment ça fonctionne ? (et oui, geek un jour = geek toujours).

En effet depuis que je « joue » avec Chat GPT je reste bluffé par la pertinence de ses réponses et je trouve cela fascinant. Donc pour en savoir je lui pose la question de savoir comment il fonctionne :

Intéressant, il me parle de « réseau de neurones ». Je lui demande donc d’en savoir plus sur cette technologie :

Enfin des infos techniques ! Un peu trop technique même car je comprend pas la moitié des termes qu’il vient de me donner mais c’est ça qui est génial car je suis dans une démarche d’apprentissage et j’ai VRAIMENT envie de savoir comment ça fonctionne.

C’est parti pour une grosse session Wikipédia afin de comprendre tous ces nouveaux termes techniques ensemble je vous les résume ici :

Réseau de neurone feedforward : Le réseau de neurones à propagation avant est le premier type de réseau neuronal artificiel conçu. C’est aussi le plus simple. Dans ce réseau, l’information ne se déplace que dans une seule direction, vers l’avant, à partir des nœuds d’entrée

Réseau de neurones récurrents (RNN) : réseau de neurones artificiels présentant des connexions récurrentes. Un réseau de neurones récurrents est constitué d’unités (neurones) interconnectées interagissant non-linéairement et pour lequel il existe au moins un cycle dans la structure. Les unités sont reliées par des arcs (synapses) qui possèdent un poids. La sortie d’un neurone est une combinaison non linéaire de ses entrées.

Réseau de neurones convolutifs (CNN) : En apprentissage automatique, un réseau de neurones convolutifs ou réseau de neurones à convolution (en anglais CNN ou ConvNet pour convolutional neural networks) est un type de réseau de neurones artificiels acycliques (feed-forward), dans lequel le motif de connexion entre les neurones est inspiré par le cortex visuel des animaux. Les neurones de cette région du cerveau sont arrangés de sorte qu’ils correspondent à des régions qui se chevauchent lors du pavage du champ visuel. Leur fonctionnement est inspiré par les processus biologiques, ils consistent en un empilage multicouche de perceptrons, dont le but est de prétraiter de petites quantités d’informations. Les réseaux neuronaux convolutifs ont de larges applications dans la reconnaissance d’image et vidéo, les systèmes de recommandation et le traitement du langage naturel.

Je vous épargne la partie mathématique sur les fonctions de coût et de perte pour l’instant, nous aborderons ce sujet plus tard. Nous allons d’abord nous concentrer la première étape : créer un réseau de neurone.

Voici juste un avant-gout :

Dans la réponse de Chat GPT, à la fin, il mentionne quelques noms de technologies qui permettent la création de réseau de neurones : TensorFlow et PyTorch notamment. Pour information TensorFlow est l’outil développé par Google et PyTorch est celui développé par Facebook, les deux sont Open Source.

J’ai choisi d’explorer PyTorch car il a été en parti réalisé par le plus grand génie de l’IA à ce jour : Yann Le Cun, un français ! (cocorico)

Bon alors j’ai envie de créer moi-même un réseau de neurone artificiel et j’ai le nom de la technologie pour le faire alors c’est parti pour aller voir la documentation : https://pytorch.org

Déjà sur la page d’accueil je vois que pour installer PyTorch il faut choisir un certains nombre de paramètres lié à notre configuration :

Pour la première ligne « PyTorch Build » je vais rester sur l’option sélectionné par défaut car j’ai aucune idée de ce qu’est la version « Preview » mais ça ressemble à une version avancée ou beta avec des nouvelles fonctionnalités et comme je suis un débutant je m’en tenir à une version « Stable ».

Pour la deuxième ligne « Your OS » je vois qu’il m’a sélectionné mon OS par défaut (je suis sur Linux Ubuntu 20.04) donc c’est parfait.

Pour la troisième ligne ça se complique déjà un peu car autant je connais « Pip », le gestionnaire de paquets Python mais « Conda » et « LibTorch » ça me parle pas du tout. Et me renseignant un peu je vois que « Conda » est recommandé pour utiliser « PyTorch » donc je l’installe et je vais essayer.

Pour installer « Conda » sur Linux il faut choisir soit « Minicaonda » ou « Anaconda » depuis la page officielle. Il semblerait que « Miniconda » soit moins gourmand en ressource et comme j’ai pas une machine de compétition je vais plutôt partir là-dessus.

Pour installer « Miniconda » il faut choisir la version à installé en fonction de notre version de Python. Comme j’ai un doute je fais une petite commande :

$ > python3 -V
Python 3.8.10

OK parfait maintenant je peux télécharger la bonne version : https://docs.conda.io/en/latest/miniconda.html#linux-installers

Pour la quatrième ligne « Language » je vais rester sur l’option « Python » car je ne connais pas assez C++ et Java.

Pour la dernière ligne « Compute Platform » ça se complique là aussi car j’ai aucune idée de ce que « CUDA » et « ROCm » sont…
Encore une fois en cherchant sur internet je comprend que « CUDA » est un logiciel propriétaire développé par Nvidia permettant d’utiliser la puissance de calcul de la carte graphique.

PyTorch recommande son utilisation alors c’est parti pour de nouvelle recherche sur comment l’installer : https://developer.nvidia.com/cuda-downloads

Bon ben voilà j’ai tout ce qu’il me faut pour créer mon premier réseau de neurone en local sur ma machine !

Allons voir la fameuse page « Get started » de PyTorch pour se lancer dans le grand bain !

Direction l’éditeur de code, enfin ! Je créé un nouveau fichier « torch.py » et je tente l’exemple donné dans la documentation :

import torch
x = torch.rand(5, 3)
print(x)

Et voilà ce que ça me sort :

tensor([[0.3380, 0.3845, 0.3217],
        [0.8337, 0.9050, 0.2650],
        [0.2979, 0.7141, 0.9069],
        [0.1449, 0.1132, 0.1375],
        [0.4675, 0.3947, 0.1426]])

Ce résultat est un « Tenseur », à la base c’est un objet mathématique qui permet de manipuler des ensemble de nombres mais ici c’est un objet abstrait qui contient une matrice de tableau rempli de nombre. C’est grâce aux tenseurs qu’on va pouvoir utiliser les réseaux de neurones.

La suite au prochain épisode 😉


Publié

dans

par