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

bookCouches de Perceptrons

Perceptron désigne le type le plus simple de réseau de neurones, composé d’un seul neurone. Pour traiter des problèmes plus complexes, un modèle appelé perceptron multicouche (MLP) est utilisé. Un perceptron multicouche contient une ou plusieurs couches cachées qui permettent au réseau d’apprendre des motifs complexes dans les données.

La structure d’un perceptron multicouche comprend :

  1. Couche d’entrée : reçoit les données d’entrée ;
  2. Couches cachées : traitent les données et extraient des motifs significatifs ;
  3. Couche de sortie : produit la prédiction ou la classification finale.

Chaque couche est composée de plusieurs neurones, et la sortie d’une couche sert d’entrée à la couche suivante.

Poids et biais des couches

Avant de mettre en œuvre une couche, il est important de comprendre comment stocker les poids et biais de chaque neurone qui la compose. Dans le chapitre précédent, vous avez appris à stocker les poids d’un seul neurone sous forme de vecteur et son biais sous forme de scalaire (nombre unique).

Puisqu’une couche est constituée de plusieurs neurones, il est naturel de représenter les poids sous forme de matrice, où chaque ligne correspond aux poids d’un neurone spécifique. Par conséquent, les biais peuvent être représentés par un vecteur, dont la longueur est égale au nombre de neurones.

Pour une couche avec 33 entrées et 22 neurones, ses poids seront stockés dans une matrice 2×32 \times 3 WW et ses biais dans un vecteur 2×12 \times 1 bb, qui sont les suivants :

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, l’élément WijW_{ij} représente le poids de la jj-ième entrée vers le ii-ième neurone, donc la première ligne contient les poids du premier neurone, et la deuxième ligne contient les poids du deuxième neurone. L’élément bib_i représente le biais du ii-ième neurone (deux neurones – deux biais).

Propagation avant

Effectuer la propagation avant pour chaque couche consiste à activer chacun de ses neurones en calculant la somme pondérée des entrées, en ajoutant le biais, puis en appliquant la fonction d’activation.

Précédemment, pour un seul neurone, la somme pondérée des entrées était réalisée en calculant un produit scalaire entre le vecteur d’entrée et le vecteur de poids, puis en ajoutant le biais.

Puisque chaque ligne de la matrice de poids contient le vecteur de poids d’un neurone particulier, il suffit désormais d’effectuer un produit scalaire entre chaque ligne de la matrice et le vecteur d’entrée. Heureusement, c’est exactement ce que fait la multiplication matricielle :

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

Les éléments fondamentaux du perceptron sont ses couches ; il est donc logique de créer une classe distincte Layer. Ses attributs incluent :

  • inputs : un vecteur d'entrées (n_inputs est le nombre d'entrées) ;
  • outputs : un vecteur de valeurs de sortie brutes (avant l'application de la fonction d'activation) des neurones (n_neurons est le nombre de neurones) ;
  • weights : une matrice de poids ;
  • biases : un vecteur de biais ;
  • activation_function : la fonction d'activation utilisée dans la couche.

Comme dans l'implémentation d'un seul neurone, les weights et biases seront initialisés avec des valeurs aléatoires comprises entre -1 et 1 tirées d'une distribution uniforme.

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

Les attributs inputs et outputs seront utilisés ultérieurement lors de la rétropropagation, il est donc pertinent de les initialiser comme des tableaux NumPy remplis de zéros.

Note
Remarque

L'initialisation de inputs et outputs comme des tableaux NumPy remplis de zéros prévient les erreurs lors des calculs en propagation avant et arrière. Cela garantit également une cohérence entre les couches, permettant des opérations matricielles fluides sans vérifications supplémentaires.

La propagation avant peut être implémentée dans la méthode forward(), où les outputs sont calculés à partir du vecteur inputs en utilisant NumPy, selon la formule ci-dessus :

def forward(self, inputs):
    self.inputs = np.array(inputs).reshape(-1, 1)
    # Raw outputs
    self.outputs = ...
    # Applying the activation function
    return ...
Note
Remarque

Redimensionner inputs en un vecteur colonne garantit une multiplication matricielle correcte avec la matrice de poids lors de la propagation avant. Cela évite les incompatibilités de dimensions et permet des calculs fluides à travers toutes les couches.

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 matrix multiplication works in forward propagation?

What is the purpose of the activation function in a neural network layer?

Could you show an example of how to initialize the weights and biases in the Layer class?

Awesome!

Completion rate improved to 4

bookCouches de Perceptrons

Glissez pour afficher le menu

Perceptron désigne le type le plus simple de réseau de neurones, composé d’un seul neurone. Pour traiter des problèmes plus complexes, un modèle appelé perceptron multicouche (MLP) est utilisé. Un perceptron multicouche contient une ou plusieurs couches cachées qui permettent au réseau d’apprendre des motifs complexes dans les données.

La structure d’un perceptron multicouche comprend :

  1. Couche d’entrée : reçoit les données d’entrée ;
  2. Couches cachées : traitent les données et extraient des motifs significatifs ;
  3. Couche de sortie : produit la prédiction ou la classification finale.

Chaque couche est composée de plusieurs neurones, et la sortie d’une couche sert d’entrée à la couche suivante.

Poids et biais des couches

Avant de mettre en œuvre une couche, il est important de comprendre comment stocker les poids et biais de chaque neurone qui la compose. Dans le chapitre précédent, vous avez appris à stocker les poids d’un seul neurone sous forme de vecteur et son biais sous forme de scalaire (nombre unique).

Puisqu’une couche est constituée de plusieurs neurones, il est naturel de représenter les poids sous forme de matrice, où chaque ligne correspond aux poids d’un neurone spécifique. Par conséquent, les biais peuvent être représentés par un vecteur, dont la longueur est égale au nombre de neurones.

Pour une couche avec 33 entrées et 22 neurones, ses poids seront stockés dans une matrice 2×32 \times 3 WW et ses biais dans un vecteur 2×12 \times 1 bb, qui sont les suivants :

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, l’élément WijW_{ij} représente le poids de la jj-ième entrée vers le ii-ième neurone, donc la première ligne contient les poids du premier neurone, et la deuxième ligne contient les poids du deuxième neurone. L’élément bib_i représente le biais du ii-ième neurone (deux neurones – deux biais).

Propagation avant

Effectuer la propagation avant pour chaque couche consiste à activer chacun de ses neurones en calculant la somme pondérée des entrées, en ajoutant le biais, puis en appliquant la fonction d’activation.

Précédemment, pour un seul neurone, la somme pondérée des entrées était réalisée en calculant un produit scalaire entre le vecteur d’entrée et le vecteur de poids, puis en ajoutant le biais.

Puisque chaque ligne de la matrice de poids contient le vecteur de poids d’un neurone particulier, il suffit désormais d’effectuer un produit scalaire entre chaque ligne de la matrice et le vecteur d’entrée. Heureusement, c’est exactement ce que fait la multiplication matricielle :

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

Les éléments fondamentaux du perceptron sont ses couches ; il est donc logique de créer une classe distincte Layer. Ses attributs incluent :

  • inputs : un vecteur d'entrées (n_inputs est le nombre d'entrées) ;
  • outputs : un vecteur de valeurs de sortie brutes (avant l'application de la fonction d'activation) des neurones (n_neurons est le nombre de neurones) ;
  • weights : une matrice de poids ;
  • biases : un vecteur de biais ;
  • activation_function : la fonction d'activation utilisée dans la couche.

Comme dans l'implémentation d'un seul neurone, les weights et biases seront initialisés avec des valeurs aléatoires comprises entre -1 et 1 tirées d'une distribution uniforme.

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

Les attributs inputs et outputs seront utilisés ultérieurement lors de la rétropropagation, il est donc pertinent de les initialiser comme des tableaux NumPy remplis de zéros.

Note
Remarque

L'initialisation de inputs et outputs comme des tableaux NumPy remplis de zéros prévient les erreurs lors des calculs en propagation avant et arrière. Cela garantit également une cohérence entre les couches, permettant des opérations matricielles fluides sans vérifications supplémentaires.

La propagation avant peut être implémentée dans la méthode forward(), où les outputs sont calculés à partir du vecteur inputs en utilisant NumPy, selon la formule ci-dessus :

def forward(self, inputs):
    self.inputs = np.array(inputs).reshape(-1, 1)
    # Raw outputs
    self.outputs = ...
    # Applying the activation function
    return ...
Note
Remarque

Redimensionner inputs en un vecteur colonne garantit une multiplication matricielle correcte avec la matrice de poids lors de la propagation avant. Cela évite les incompatibilités de dimensions et permet des calculs fluides à travers toutes les couches.

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