Implémentation d'un Neurone Unique
Un neurone est l’unité de calcul fondamentale d’un réseau de neurones. Il traite plusieurs entrées et génère une seule sortie, permettant ainsi au réseau d’apprendre et de faire des prédictions.
Dans cet exemple, l’objectif est de construire un réseau de neurones avec un seul neurone. Il sera utilisé pour une tâche de classification binaire, telle que la détection de spam, où 0 correspond à un email légitime (non-spam) et 1 correspond à un email spam.
Le neurone recevra en entrée des caractéristiques numériques extraites des emails et produira une sortie comprise entre 0 et 1, représentant la probabilité qu’un email donné soit un spam.
Voici ce qui se passe étape par étape :
- Chaque entrée est multipliée par un poids correspondant ; les poids sont des paramètres ajustables qui déterminent l’importance de chaque entrée ;
- Toutes les entrées pondérées sont additionnées ;
- Un terme de biais est ajouté à la somme des entrées, permettant au neurone de décaler sa sortie et d’apporter une flexibilité supplémentaire au modèle ;
- La somme est transmise à une fonction d’activation. Comme un seul neurone produit directement la sortie finale (une probabilité), la fonction sigmoïde est utilisée pour comprimer les valeurs dans l’intervalle (0,1).
Le biais du neurone est également un paramètre entraînable.
Classe Neurone
Un neurone doit stocker ses poids et son biais, ce qui fait d'une classe un moyen naturel de regrouper ces propriétés associées.
Bien que cette classe ne fasse pas partie de l’implémentation finale du réseau de neurones, elle illustre efficacement des principes clés.
class Neuron:
def __init__(self, n_inputs):
self.weights = ...
self.bias = ...
weights: une liste de valeurs initialisées aléatoirement qui déterminent l'importance de chaque entrée (n_inputscorrespond au nombre d'entrées) pour le neurone ;bias: une valeur initialisée aléatoirement qui permet au neurone de prendre des décisions plus flexibles.
Les poids et le biais doivent être initialisés aléatoirement avec de petites valeurs comprises entre -1 et 1, tirées d'une distribution uniforme, afin de briser la symétrie et de garantir que différents neurones apprennent des caractéristiques différentes.
Pour récapituler, NumPy fournit la fonction random.uniform() pour générer un nombre aléatoire ou un tableau (en spécifiant l'argument size) de nombres aléatoires issus d'une distribution uniforme dans l'intervalle [low, high).
import numpy as np
np.random.uniform(low, high, size=...)
Propagation avant
La classe Neuron doit inclure une méthode activate() qui calcule la somme pondérée des entrées puis applique la fonction d'activation (la fonction sigmoïde dans ce cas).
Lorsque deux vecteurs de même longueur — weights et inputs — sont disponibles, la somme pondérée peut être calculée efficacement à l'aide du produit scalaire de ces vecteurs.
Cela permet de calculer la somme pondérée en une seule ligne de code grâce à la fonction numpy.dot(), ce qui évite l'utilisation d'une boucle. Le biais peut ensuite être ajouté directement au résultat pour obtenir input_sum_with_bias. La sortie est ensuite calculée en appliquant la fonction d'activation sigmoïde :
def activate(self, inputs):
input_sum_with_bias = ...
output = ...
return output
Fonctions d'activation
La formule de la fonction sigmoïde est la suivante, où z représente la somme pondérée des entrées avec le biais ajouté (valeur de sortie brute) pour ce neurone particulier :
σ(z)=1+e−z1En utilisant cette formule, la sigmoïde peut être implémentée comme une fonction simple en Python :
def sigmoid(z):
return 1 / (1 + np.exp(-z))
La formule de la fonction ReLU est la suivante, qui attribue essentiellement à la sortie la valeur z si elle est positive et 0 sinon :
ReLU(z)=max(0,z)def relu(z):
return np.maximum(0, z)
1. Quel est le rôle du terme de biais dans un neurone unique ?
2. Pourquoi initialise-t-on les poids avec de petites valeurs aléatoires plutôt qu'avec des zéros ?
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion
Awesome!
Completion rate improved to 4
Implémentation d'un Neurone Unique
Glissez pour afficher le menu
Un neurone est l’unité de calcul fondamentale d’un réseau de neurones. Il traite plusieurs entrées et génère une seule sortie, permettant ainsi au réseau d’apprendre et de faire des prédictions.
Dans cet exemple, l’objectif est de construire un réseau de neurones avec un seul neurone. Il sera utilisé pour une tâche de classification binaire, telle que la détection de spam, où 0 correspond à un email légitime (non-spam) et 1 correspond à un email spam.
Le neurone recevra en entrée des caractéristiques numériques extraites des emails et produira une sortie comprise entre 0 et 1, représentant la probabilité qu’un email donné soit un spam.
Voici ce qui se passe étape par étape :
- Chaque entrée est multipliée par un poids correspondant ; les poids sont des paramètres ajustables qui déterminent l’importance de chaque entrée ;
- Toutes les entrées pondérées sont additionnées ;
- Un terme de biais est ajouté à la somme des entrées, permettant au neurone de décaler sa sortie et d’apporter une flexibilité supplémentaire au modèle ;
- La somme est transmise à une fonction d’activation. Comme un seul neurone produit directement la sortie finale (une probabilité), la fonction sigmoïde est utilisée pour comprimer les valeurs dans l’intervalle (0,1).
Le biais du neurone est également un paramètre entraînable.
Classe Neurone
Un neurone doit stocker ses poids et son biais, ce qui fait d'une classe un moyen naturel de regrouper ces propriétés associées.
Bien que cette classe ne fasse pas partie de l’implémentation finale du réseau de neurones, elle illustre efficacement des principes clés.
class Neuron:
def __init__(self, n_inputs):
self.weights = ...
self.bias = ...
weights: une liste de valeurs initialisées aléatoirement qui déterminent l'importance de chaque entrée (n_inputscorrespond au nombre d'entrées) pour le neurone ;bias: une valeur initialisée aléatoirement qui permet au neurone de prendre des décisions plus flexibles.
Les poids et le biais doivent être initialisés aléatoirement avec de petites valeurs comprises entre -1 et 1, tirées d'une distribution uniforme, afin de briser la symétrie et de garantir que différents neurones apprennent des caractéristiques différentes.
Pour récapituler, NumPy fournit la fonction random.uniform() pour générer un nombre aléatoire ou un tableau (en spécifiant l'argument size) de nombres aléatoires issus d'une distribution uniforme dans l'intervalle [low, high).
import numpy as np
np.random.uniform(low, high, size=...)
Propagation avant
La classe Neuron doit inclure une méthode activate() qui calcule la somme pondérée des entrées puis applique la fonction d'activation (la fonction sigmoïde dans ce cas).
Lorsque deux vecteurs de même longueur — weights et inputs — sont disponibles, la somme pondérée peut être calculée efficacement à l'aide du produit scalaire de ces vecteurs.
Cela permet de calculer la somme pondérée en une seule ligne de code grâce à la fonction numpy.dot(), ce qui évite l'utilisation d'une boucle. Le biais peut ensuite être ajouté directement au résultat pour obtenir input_sum_with_bias. La sortie est ensuite calculée en appliquant la fonction d'activation sigmoïde :
def activate(self, inputs):
input_sum_with_bias = ...
output = ...
return output
Fonctions d'activation
La formule de la fonction sigmoïde est la suivante, où z représente la somme pondérée des entrées avec le biais ajouté (valeur de sortie brute) pour ce neurone particulier :
σ(z)=1+e−z1En utilisant cette formule, la sigmoïde peut être implémentée comme une fonction simple en Python :
def sigmoid(z):
return 1 / (1 + np.exp(-z))
La formule de la fonction ReLU est la suivante, qui attribue essentiellement à la sortie la valeur z si elle est positive et 0 sinon :
ReLU(z)=max(0,z)def relu(z):
return np.maximum(0, z)
1. Quel est le rôle du terme de biais dans un neurone unique ?
2. Pourquoi initialise-t-on les poids avec de petites valeurs aléatoires plutôt qu'avec des zéros ?
Merci pour vos commentaires !