Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Couches de Perceptrons | Réseau de Neurones à Partir de Zéro
Introduction aux Réseaux de Neurones avec Python

bookCouches de Perceptrons

Perceptron est le réseau de neurones le plus simple—il ne comporte qu’un seul neurone. Pour des tâches plus complexes, on utilise un perceptron multicouche (MLP), qui contient une ou plusieurs couches cachées permettant au réseau d’apprendre des motifs plus riches.

Un MLP se compose de :

  1. Couche d’entrée — reçoit les données ;
  2. Couches cachées — extraient les motifs ;
  3. Couche de sortie — produit les prédictions.

Chaque couche contient plusieurs neurones ; la sortie d’une couche devient l’entrée de la suivante.

Poids et biais des couches

Précédemment, un neurone stockait ses poids sous forme de vecteur et son biais sous forme de scalaire. Une couche, cependant, contient plusieurs neurones, donc ses poids deviennent une matrice, où chaque ligne stocke les poids d’un neurone. Les biais de tous les neurones forment un vecteur.

Pour une couche avec 3 entrées et 2 neurones :

W=[W11W12W13W21W22W23],b=[b1b2]W=\begin{bmatrix} W_{11} & W_{12} & W_{13} \\ W_{21} & W_{22} & W_{23} \end{bmatrix}, \qquad b=\begin{bmatrix} b_1 \\ b_2 \end{bmatrix}

Ici, WijW_{ij} est le poids de la jj-ième entrée vers le ii-ième neurone ; bib_i est le biais du neurone ii.

Propagation avant

La propagation avant active chaque neurone en calculant une somme pondérée, en ajoutant le biais, puis en appliquant la fonction d’activation.

Précédemment, un seul neurone utilisait :

[ z = W \cdot x + b ]

Désormais, puisque chaque ligne de (W) est le vecteur de poids d’un neurone, effectuer une multiplication matricielle entre la matrice de poids et le vecteur d’entrée permet de calculer automatiquement les sommes pondérées de tous les neurones en une seule opération.

Pour ajouter les biais aux sorties des neurones respectifs, il convient également d'ajouter un vecteur de biais :

Enfin, la fonction d'activation est appliquée au résultat — sigmoïde ou ReLU, dans notre cas. La formule résultante pour la propagation avant dans la couche est la suivante :

a=activation(Wx+b)a = activation(Wx + b)

aa est le vecteur des activations (sorties) des neurones.

Classe Layer

Puisque les MLP sont constitués de couches, nous définissons une classe dédiée Layer. Ses attributs :

  • inputs : vecteur d'entrée (éléments n_inputs) ;
  • outputs : sorties brutes des neurones (éléments n_neurons) ;
  • weights : matrice des poids ;
  • biases : vecteur des biais ;
  • activation_function : fonction d'activation utilisée dans la couche.

Les poids et les biais sont initialisés avec des valeurs aléatoires issues d'une distribution uniforme dans ([-1, 1]). inputs et outputs sont initialisés comme des tableaux NumPy remplis de zéros afin de garantir des formes cohérentes pour la rétropropagation ultérieure.

class Layer:
    def __init__(self, n_inputs, n_neurons, activation_function):
        self.inputs = np.zeros((n_inputs, 1))
        self.outputs = np.zeros((n_neurons, 1))
        self.weights = ...
        self.biases = ...
        self.activation = activation_function
Note
Remarque

Initialiser inputs et outputs avec des zéros prévient les erreurs de forme et garantit la cohérence des couches lors des passes avant et arrière.

Méthode Forward

La propagation avant pour une couche calcule les sorties brutes et applique l'activation :

def forward(self, inputs):
    self.inputs = np.array(inputs).reshape(-1, 1)
    # Raw outputs: weighted sum + bias
    self.outputs = ...
    # Apply activation
    return ...

Redimensionner l'entrée en vecteur colonne garantit une multiplication correcte avec la matrice de poids et assure la correspondance des dimensions attendues dans tout le réseau.

Note
Remarque

Si vous le souhaitez, je peux également raccourcir davantage, produire un schéma de la structure de la couche ou générer le code complet fonctionnel pour la classe Layer.

1. Qu'est-ce qui rend un perceptron multicouche (MLP) plus puissant qu'un perceptron simple ?

2. Pourquoi est-il nécessaire d'appliquer ce code avant de multiplier inputs par la matrice de poids ?

question mark

Qu'est-ce qui rend un perceptron multicouche (MLP) plus puissant qu'un perceptron simple ?

Select the correct answer

question mark

Pourquoi est-il nécessaire d'appliquer ce code avant de multiplier inputs par la matrice de poids ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 2. Chapitre 3

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Suggested prompts:

Can you explain how the weights and biases are initialized in the Layer class?

What activation functions can I use in the Layer class?

Can you walk me through how forward propagation works step by step?

Awesome!

Completion rate improved to 4

bookCouches de Perceptrons

Glissez pour afficher le menu

Perceptron est le réseau de neurones le plus simple—il ne comporte qu’un seul neurone. Pour des tâches plus complexes, on utilise un perceptron multicouche (MLP), qui contient une ou plusieurs couches cachées permettant au réseau d’apprendre des motifs plus riches.

Un MLP se compose de :

  1. Couche d’entrée — reçoit les données ;
  2. Couches cachées — extraient les motifs ;
  3. Couche de sortie — produit les prédictions.

Chaque couche contient plusieurs neurones ; la sortie d’une couche devient l’entrée de la suivante.

Poids et biais des couches

Précédemment, un neurone stockait ses poids sous forme de vecteur et son biais sous forme de scalaire. Une couche, cependant, contient plusieurs neurones, donc ses poids deviennent une matrice, où chaque ligne stocke les poids d’un neurone. Les biais de tous les neurones forment un vecteur.

Pour une couche avec 3 entrées et 2 neurones :

W=[W11W12W13W21W22W23],b=[b1b2]W=\begin{bmatrix} W_{11} & W_{12} & W_{13} \\ W_{21} & W_{22} & W_{23} \end{bmatrix}, \qquad b=\begin{bmatrix} b_1 \\ b_2 \end{bmatrix}

Ici, WijW_{ij} est le poids de la jj-ième entrée vers le ii-ième neurone ; bib_i est le biais du neurone ii.

Propagation avant

La propagation avant active chaque neurone en calculant une somme pondérée, en ajoutant le biais, puis en appliquant la fonction d’activation.

Précédemment, un seul neurone utilisait :

[ z = W \cdot x + b ]

Désormais, puisque chaque ligne de (W) est le vecteur de poids d’un neurone, effectuer une multiplication matricielle entre la matrice de poids et le vecteur d’entrée permet de calculer automatiquement les sommes pondérées de tous les neurones en une seule opération.

Pour ajouter les biais aux sorties des neurones respectifs, il convient également d'ajouter un vecteur de biais :

Enfin, la fonction d'activation est appliquée au résultat — sigmoïde ou ReLU, dans notre cas. La formule résultante pour la propagation avant dans la couche est la suivante :

a=activation(Wx+b)a = activation(Wx + b)

aa est le vecteur des activations (sorties) des neurones.

Classe Layer

Puisque les MLP sont constitués de couches, nous définissons une classe dédiée Layer. Ses attributs :

  • inputs : vecteur d'entrée (éléments n_inputs) ;
  • outputs : sorties brutes des neurones (éléments n_neurons) ;
  • weights : matrice des poids ;
  • biases : vecteur des biais ;
  • activation_function : fonction d'activation utilisée dans la couche.

Les poids et les biais sont initialisés avec des valeurs aléatoires issues d'une distribution uniforme dans ([-1, 1]). inputs et outputs sont initialisés comme des tableaux NumPy remplis de zéros afin de garantir des formes cohérentes pour la rétropropagation ultérieure.

class Layer:
    def __init__(self, n_inputs, n_neurons, activation_function):
        self.inputs = np.zeros((n_inputs, 1))
        self.outputs = np.zeros((n_neurons, 1))
        self.weights = ...
        self.biases = ...
        self.activation = activation_function
Note
Remarque

Initialiser inputs et outputs avec des zéros prévient les erreurs de forme et garantit la cohérence des couches lors des passes avant et arrière.

Méthode Forward

La propagation avant pour une couche calcule les sorties brutes et applique l'activation :

def forward(self, inputs):
    self.inputs = np.array(inputs).reshape(-1, 1)
    # Raw outputs: weighted sum + bias
    self.outputs = ...
    # Apply activation
    return ...

Redimensionner l'entrée en vecteur colonne garantit une multiplication correcte avec la matrice de poids et assure la correspondance des dimensions attendues dans tout le réseau.

Note
Remarque

Si vous le souhaitez, je peux également raccourcir davantage, produire un schéma de la structure de la couche ou générer le code complet fonctionnel pour la classe Layer.

1. Qu'est-ce qui rend un perceptron multicouche (MLP) plus puissant qu'un perceptron simple ?

2. Pourquoi est-il nécessaire d'appliquer ce code avant de multiplier inputs par la matrice de poids ?

question mark

Qu'est-ce qui rend un perceptron multicouche (MLP) plus puissant qu'un perceptron simple ?

Select the correct answer

question mark

Pourquoi est-il nécessaire d'appliquer ce code avant de multiplier inputs par la matrice de poids ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 2. Chapitre 3
some-alt