Durée : 50 minutes
Le perceptron est l’ancêtre des réseaux de neurones. Il s’agit d’un classificateur linéaire qui prend une combinaison linéaire des entrées et applique une fonction d’activation (seuil) pour produire une sortie binaire.
La mise à jour des poids se fait en fonction de l’erreur entre la sortie prédite et la valeur attendue, permettant ainsi d’ajuster progressivement le modèle.
Objectif : Écrire un algorithme en Python pour entraîner un perceptron à résoudre la fonction logique OR.
import numpy as np
def perceptron(X, y, learning_rate=0.1, n_iterations=10):
n_samples, n_features = X.shape
weights = np.zeros(n_features)
bias = 0
for _ in range(n_iterations):
for idx, x_i in enumerate(X):
linear_output = np.dot(x_i, weights) + bias
y_predicted = 1 if linear_output > 0 else 0
update = learning_rate * (y[idx] - y_predicted)
weights += update * x_i
bias += update
return weights, bias
# Données pour la porte OR
X = np.array([[0,0], [0,1], [1,0], [1,1]])
y = np.array([0, 1, 1, 1])
weights, bias = perceptron(X, y, learning_rate=0.1, n_iterations=10)
print("Poids :", weights)
print("Biais :", bias)
# Test du perceptron
for x in X:
result = 1 if np.dot(x, weights) + bias > 0 else 0
print(f"Entrée: {x}, Sortie: {result}")
Le perceptron met à jour ses poids de manière incrémentale pour chaque exemple. L’approche "for each example" permet de simplifier le processus d’apprentissage dans ce contexte pédagogique.