Aller au contenu principal

Réseaux de neurones

#Réseaux de neurones artificiels

Les réseaux de neurones artificiels sont des modèles computationnels inspirés du fonctionnement du cerveau humain. Ils sont capables d'apprendre des représentations complexes à partir de données et constituent la base de l'apprentissage profond (deep learning).

#Principe

Un réseau de neurones est composé de neurones artificiels (unités de calcul) organisés en couches :

  • Couche d'entrée : Reçoit les données
  • Couches cachées : Transforment les données de manière non linéaire
  • Couche de sortie : Produit le résultat

Chaque connexion entre neurones a un poids qui détermine l'importance du signal transmis.

#Animation interactive

Voici une animation qui illustre le fonctionnement d'un réseau de neurones :

Chargement...

#Concepts fondamentaux

#Neurone artificiel

Un neurone artificiel reçoit des entrées, les combine linéairement, ajoute un biais, puis applique une fonction d'activation non linéaire :

bg-[rgba(var(--code-inline-bg),0.5)] text-[rgb(var(--fg))] px-1 roundedbg-[rgba(var(--code-inline-bg),0.5)] text-[rgb(var(--fg))] px-1 rounded
1Sortie = f(Σ(poids_i × entrée_i) + biais)

#Fonctions d'activation courantes

  1. Sigmoïde : σ(x) = 1 / (1 + e^(-x))

    • Sortie dans [0, 1]
    • Historiquement utilisée, mais cause des problèmes de gradient
  2. ReLU : ReLU(x) = max(0, x)

    • Simple et efficace
    • Évite le problème du gradient qui s'annule
  3. Tangente hyperbolique : tanh(x) = (e^x - e^(-x)) / (e^x + e^(-x))

    • Sortie dans [-1, 1]
    • Zéro-centrée

#Implémentation en Python

pythonpython
1import numpy as np2 3class Neurone:4    def __init__(self, nb_entrees):5        """Initialiser un neurone avec des poids aléatoires"""6        self.poids = np.random.randn(nb_entrees)7        self.biais = np.random.randn()8    9    def sigmoid(self, x):10        """Fonction d'activation sigmoïde"""11        return 1 / (1 + np.exp(-np.clip(x, -500, 500)))  # Clipping pour éviter overflow12    13    def forward(self, entrees):14        """Propagation avant"""

#Entraînement

L'entraînement d'un réseau de neurones consiste à ajuster les poids pour minimiser une fonction de perte.

#Rétropropagation du gradient

  1. Propagation avant : Calculer la sortie pour une entrée donnée
  2. Calcul de la perte : Comparer la sortie avec la cible
  3. Rétropropagation : Calculer les gradients de la perte par rapport à chaque poids
  4. Mise à jour : Ajuster les poids dans la direction opposée au gradient

#Algorithme de rétropropagation

pythonpython
1class NeuroneEntrainable:2    def __init__(self, nb_entrees):3        self.poids = np.random.randn(nb_entrees) * 0.14        self.biais = 0.05        self.derivee_perte_poids = np.zeros(nb_entrees)6        self.derivee_perte_biais = 0.07    8    def sigmoid(self, x):9        return 1 / (1 + np.exp(-np.clip(x, -500, 500)))10    11    def derivee_sigmoid(self, x):12        s = self.sigmoid(x)13        return s * (1 - s)14    

#Exercice : Réseau pour la fonction XOR

Implémentez un réseau de neurones capable d'apprendre la fonction XOR, qui ne peut pas être résolue par un seul neurone.

#Instructions

  1. Créez un réseau avec une couche cachée
  2. Implémentez la rétropropagation pour tout le réseau
  3. Entraînez-le sur les données XOR

#Exemple de code

pythonpython
1class CoucheEntrainable:2    def __init__(self, nb_entrees, nb_neurones):3        self.neurones = [NeuroneEntrainable(nb_entrees) for _ in range(nb_neurones)]4    5    def forward(self, entrees):6        return np.array([neurone.forward(entrees) for neurone in self.neurones])7    8    def backward(self, derivees_perte_sorties):9        derivees_perte_entrees = np.zeros(len(self.neurones[0].entrees))10        11        for i, neurone in enumerate(self.neurones):12            derivee_perte_entree = neurone.backward(derivees_perte_sorties[i])13            derivees_perte_entrees += derivee_perte_entree14        

#Applications

  1. Reconnaissance d'images : Classification, détection d'objets
  2. Traitement du langage naturel : Traduction, génération de texte
  3. Reconnaissance vocale : Conversion parole-texte
  4. Jeux : AlphaGo, échecs
  5. Médecine : Diagnostic, découverte de médicaments
  6. Finance : Détection de fraudes, algorithmes de trading

Les réseaux de neurones sont devenus omniprésents dans l'intelligence artificielle moderne, permettant des avancées spectaculaires dans de nombreux domaines.