Réseau neuronal

DATE: Février 2025
CATÉGORIE: Intelligence artificielle

Résumé : L'article ci-dessous parlera des concepts de l'intelligence artificielle : ce qu'est un réseau neuronal, comment il est construit, comment on crée et gère l'apprentissage.

01.0 L'intelligence artificielle ?

Si vous ne connaissez pas Alan Turing, je vous invite vivement à découvrir son histoire à travers le film Imitation Game . Considéré comme le père de l'informatique moderne, Turing a conçu durant la Seconde Guerre mondiale les bases logiques de nos machines actuelles. Quelques années plus tard, il posait cette question fondamentale : « Une machine est-elle capable de réfléchir ?»

Dès 1951, les premières réponses concrètes apparaissent : Christopher Strachey développe un programme permettant de faire jouer un ordinateur aux dames, tandis que Dietrich Prinz conçoit un algorithme capable de résoudre des problèmes d'échecs. Mais qu'en est-il aujourd'hui ? Nos ordinateurs nous répondent, génèrent des images, des vidéos et exécutent des tâches d'une complexité fascinante.

C’est ce que nous allons explorer ensemble. Je m'appelle Geoffrey FRANZ, et j'étudie l'intelligence artificielle au moment même où j'écris ces lignes. Mon objectif est de vulgariser ces concepts pour vous aider à comprendre comment, derrière le code, un programme parvient aujourd'hui à prendre des décisions et à répondre à des besoins de plus en plus exigeants.

02.0 Le réseau neuronal

Le réseau neuronal est la représentation schématique et mathématique d'un cerveau humain. Bien que le cerveau biologique soit d'une complexité infinie et que nous ne sachions probablement pas encore exactement comment il fonctionne dans sa totalité, les chercheurs en intelligence artificielle s'en inspirent pour bâtir leurs modèles. Le but est de reproduire, via un programme informatique, le mécanisme de raisonnement et de réflexion qu'un humain pourrait avoir après avoir acquis de la connaissance et du savoir. Contrairement à un programme classique qui suit des ordres fixes, le réseau neuronal "apprend" à partir d'exemples pour devenir capable de prendre des décisions de manière autonome face à de nouvelles situations. Ci-dessous, vous pourrez voir la représentation d'un réseau neuronal :

Vous verrez souvent, dans différents tutoriels ou supports, que le réseau neuronal est toujours présenté de cette manière. Parfois avec plus de cercles ou plus de colonnes, ou à l'inverse, avec moins de neurones. En réalité, chaque colonne représente une couche de neurones.

02.1 Les couches de neurones

Avant de continuer, j'ai mentionné les couches, mais concrètement, c'est quoi ? Imaginez que le réseau neuronal est une usine et que chaque neurone est un ouvrier. Chaque colonne (voir le schéma ci-dessus) représente un atelier :

La 1ère colonne est la couche d'entrée : elle prend la matière brute et fait une première transformation. La seconde couche, qui est une couche interne, prend la pièce transformée pour la retravailler ou l'assembler avec d'autres matières brutes. La 3ème couche sur le schéma est aussi une couche interne, mais au lieu de prendre la matière première de notre couche d'entrée, elle prend la sortie de la seconde couche. Autrement dit, elle travaille les pièces créées par cette dernière pour les transformer encore une fois. Après que la 3ème couche a terminé son travail, on arrive sur la dernière couche, la couche de sortie, qui délivre le produit fini.

03.0 La création du réseau neuronal

03.1 À noter

Avant de continuer, sachez que le code utilisé ici provient du tutoriel NNFS. Si vous souhaitez consulter le livre et le tutoriel complet en anglais, vous pouvez les retrouver sur nnfs.io.

Si le code est libre de droit, le contenu pédagogique original appartient à l'auteur. L'article que j'écris ici s'inspire uniquement de ce que j'ai appris et compris de ces concepts ; il est donc normal d'y trouver des similitudes. Le livre sera bien évidemment plus complet : de mon côté, je ne traiterai pas des formules mathématiques complexes. Pour ceux qui recherchent une plus grande profondeur théorique, je vous invite vivement à vous procurer son ouvrage.

03.2 L'entrée, le biais et le poids

Comme dans une usine, il y a la matière première qui doit entrer : chez nous, c'est la donnée ou l'information. Comme toute information, elle possède une importance plus ou moins grande, que l'on appelle ici un poids.

Il y a aussi le biais. En programmation, si une variable ne contient aucune valeur (zéro ou nulle), la fonction peut tout simplement ne pas s'activer. Dans notre réseau neuronal, cela poserait un problème : nous avons besoin que le neurone puisse transmettre quelque chose malgré tout. Si un neurone ne produit rien en sortie, il faut que le suivant puisse quand même s'activer pour éviter tout blocage de notre chaîne de production. Le biais sert donc de "valeur de base" pour garantir ce flux.

Je m'explique : imaginez une usine qui fabrique des voitures. Un client veut l'option climatisation, mais un autre ne la souhaite pas. Il ne faut pas que la construction de la voiture de ce second client soit bloquée chez l'ouvrier chargé d'installer la climatisation. Il doit pouvoir passer la main au suivant (souvenez-vous de mon explication précédente : un neurone est un ouvrier). Le biais permet de s'assurer que le travail continue, même en l'absence de certaines données d'entrée.

Le poids c'est quoi ? C'est en réalité l'importance que l'intelligence artificielle va donner à l'information entrée. Pour continuer avec la production de voiture, vous imaginez bien que toutes les pièces qui sont données n'ont pas la même importance pour le fonctionnement de la voiture. Le moteur c'est l'une des pièces les plus importantes pour son fonctionnement et le logo par exemple, qui est mis à l'avant ou à l'arrière, n'a pas du tout d'importance pour le bon fonctionnement de la voiture.

LOGIQUE DU BIAIS : Le point de départ BIAIS le biais déplace le point de départ.
LOGIQUE DU POIDS : L'angle d'influence RÉSULTAT le poids définis l'angle de la pente, plus le poids est grand plus l'angle le seras

03.3 Un peu de pratique ?

Bien que ce soit des vulgarisations théoriques, voici la pratique. Il faudra donc les bases de la programmation en Python.

dense_layer.py
                            
                                import numpy as np

                                class Layer_Dense:
                                    def __init__(self, n_inputs, n_neurons):
                                        # Initialisation des poids (W) et des biais (b)
                                        self.weights = 0.10 * np.random.randn(n_inputs, n_neurons)
                                        self.biases = np.zeros((1, n_neurons))
                                    def forward(self, inputs):
                                        # Stockage des entrées pour la suite
                                        self.inputs = inputs
                                        # Calcul de la sortie : Y = (X . W) + b
                                        self.output = np.dot(inputs,
                                        self.weights) + self.biases

Concrètement, on fait quoi là-dedans ?

Ici, nous avons créé une classe Layer_Dense. Pour faire court : à chaque fois que nous allons créer une couche (que ce soit notre couche d'entrée, nos couches internes ou notre couche de sortie), nous allons l'appeler.

Dans cette classe, on initie deux paramètres essentiels : n_inputs et n_neurons.

  • n_inputs : C'est le nombre d'entrées que l'on va recevoir. Pour reprendre le fonctionnement de l'usine, c'est le nombre de matières premières qui entrent pour être transformées.
  • n_neurons : C'est le nombre d'ouvriers qui vont travailler ensemble dans l'atelier.

Si vous voulez aller plus loin, il faudra vous pencher sur ce que sont les matrices et les vecteurs. Personnellement, comme je veux m'adresser à un public large, je ne vais pas rentrer dans le détail mathématique pur.

Dans ce code, le poids possède déjà une valeur de base (0,1) qui est multipliée par un chiffre pris au hasard. Cela permet de créer une distinction entre chaque ouvrier dès le départ. Le biais, quant à lui, génère un tableau de zéros. Selon la configuration, il contiendra au minimum un seul zéro et au maximum autant de zéros qu'il y a d'ouvriers (n_neurons).