Perceptron : élément constitutif du réseau de neurones artificiels

Nœud source: 1216283

Si vous êtes un passionné d'apprentissage automatique et d'IA, vous devez avoir rencontré le mot perceptron. Perceptron est enseigné dans le premier chapitre de nombreux cours d'apprentissage en profondeur. Alors qu'est-ce que c'est exactement ? Quelle est l'inspiration derrière cela? Comment résout-il exactement le problème de classification? Dans cet article, nous allons commencer par l'inspiration biologique derrière le perceptron, puis approfondir ses aspects techniques mathématiques, et enfin construire un classificateur binaire à partir de zéro en utilisant une unité de perceptron.

Inspiration biologique des réseaux de neurones

Un neurone (cellule nerveuse) est la pierre angulaire du système nerveux. Un cerveau humain est constitué de milliards de neurones interconnectés les uns aux autres. Ils sont chargés de recevoir et d'envoyer des signaux du cerveau. Comme le montre le diagramme ci-dessous, un neurone typique se compose de trois parties principales : les dendrites, un axone et le corps cellulaire ou soma. Les dendrites sont des branches arborescentes provenant du corps cellulaire. Ils reçoivent des informations des autres neurones. Soma est le noyau d'un neurone. Il est responsable du traitement des informations reçues des dendrites. Axon est comme un câble à travers lequel les neurones envoient l'information. Vers sa fin, l'axone se divise en de nombreuses branches qui établissent des connexions avec les autres neurones par l'intermédiaire de leurs dendrites. Les La connexion entre l'axone et les autres dendrites des neurones est appelée synapse.

1 : Neurone biologique versus réseau de neurones artificiels

Source de l'image: Willems, K. (2017, 2 mai). Tutoriel Keras : Apprentissage approfondi en Python.

Comme ANN s'inspire du fonctionnement du cerveau, voyons comment fonctionne le cerveau. Le cerveau est constitué d'un réseau de milliards de neurones. Ils communiquent au moyen de signaux électriques et chimiques via une synapse, dans laquelle les informations d'un neurone sont transmises à d'autres neurones. Le processus de transmission implique une impulsion électrique appelée « potentiel d'action ». Pour que l'information soit transmise, les signaux d'entrée (impulsion) doivent être suffisamment forts pour franchir un certain seuil de barrière, alors seul un neurone s'active et transmet le signal plus loin (sortie).

Inspiré par le fonctionnement biologique d'un neurone, un scientifique américain Franck Rosenblatt a proposé le concept de perceptron au Cornell Aeronautical Laboratory en 1957.

  • Un neurone reçoit des informations d'autres neurones sous forme d'impulsions électriques de force variable.
  • Le neurone intègre toutes les impulsions qu'il reçoit des autres neurones.
  • Si la somme résultante est supérieure à une certaine valeur seuil, le neurone « se déclenche », déclenchant un potentiel d'action qui est transmis aux autres neurones connectés.

Principaux composants du Perceptron

Le perceptron de Rosenblatt est essentiellement un classificateur binaire. Le perceptron se compose de 3 parties principales :

  • Nœuds d'entrée ou couche d'entrée : la couche d'entrée prend les données initiales dans le système pour un traitement ultérieur. Chaque nœud d'entrée est associé à une valeur numérique. Il peut prendre n'importe quelle valeur réelle.
  • Pondérations et biais : les paramètres de pondération représentent la force de la connexion entre les unités. Plus le poids est élevé, plus l'influence du neurone d'entrée associé pour décider de la sortie est forte. Le biais joue le même rôle que l'interception dans une équation linéaire.
  • Fonction d'activation : La fonction d'activation détermine si le neurone se déclenchera ou non. Dans sa forme la plus simple, la fonction d'activation est une fonction d'étape, mais en fonction du scénario, différentes fonctions d'activation peuvent être utilisées.

Nous verrons plus à ce sujet dans la section suivante.

Fonctionnement d'un perceptron

Dans la première étape, toutes les valeurs d'entrée sont multipliées par leurs poids respectifs et additionnées. Le résultat obtenu est appelé somme pondérée wi*xi, ou dit autrement,  x1*w1 + x2*w2 +…wn*xn. Cette somme donne une représentation appropriée des intrants en fonction de leur importance. De plus, un terme de biais b s'ajoute à cette somme ∑wi*xi + b. Le biais sert d'autre paramètre de modèle (en plus des poids) qui peut être ajusté pour améliorer les performances du modèle.

Dans la deuxième étape, une fonction d'activation f est appliqué sur la somme ci-dessus wi*xi + b pour obtenir la sortie Y = f(wi*xi + b). Selon le scénario et la fonction d'activation utilisée, le Sortie est soit binaire {1, 0} ou une valeur continue. 

Fonctionnement d'un perceptron

(Souvent, ces deux étapes sont représentées comme une seule étape dans les perceptrons multicouches, ici je les ai montrées comme deux étapes différentes pour une meilleure compréhension)

Fonctions d'activation

Un neurone biologique ne se déclenche que lorsqu'un certain seuil est dépassé. De même, le neurone artificiel ne se déclenchera également que lorsque la somme des entrées (somme pondérée) dépasse une certaine valeur seuil, disons 0. Intuitivement, nous pouvons penser à une approche basée sur des règles comme celle-ci -

Si ∑wi*xi + b > 0 : sortie = 1 sinon : sortie = 0

Son graphique ressemblera à ceci :

Fonctions d'activation

Il s'agit en fait de la fonction d'activation Unit Step (Threshold) qui était à l'origine utilisée par Rosenblatt. Mais comme vous pouvez le voir, cette fonction est discontinue à 0, elle pose donc des problèmes dans les calculs mathématiques. Une version plus douce de la fonction ci-dessus est la fonction sigmoïde. Il sort entre 0 et 1. Un autre est la tangente hyperbolique (tanh), qui produit une sortie entre -1 et 1. Les fonctions sigmoïde et tanh souffrent de problèmes de gradients évanouissants. De nos jours, ReLU et Leaky ReLU sont les fonctions d'activation les plus utilisées. Ils sont relativement stables sur les réseaux profonds.

Perceptron en tant que classificateur binaire

Jusqu'ici, nous avons vu l'inspiration biologique et les mathématiques du perceptron. Dans cette section, nous verrons comment un perceptron résout un problème de classification linéaire.

Importation de certaines bibliothèques –

à partir de sklearn.datasets importer make_blobs importer matplotlib.pyplot en tant que plt importer numpy en tant que np %matplotlib inline

Générer un jeu de données factice à l'aide make_blobs fonctionnalité fournie par scikit learn -

# Générer un jeu de données X, Y = make_blobs(n_features = 2, centers = 2, n_samples = 1000, random_state = 12)
# Visualiser l'ensemble de données plt.figure(figsize = (6, 6)) plt.scatter(X[:, 0], X[:, 1], c = Y) plt.title('Ground Truth', fontsize = 18) plt.show()
Perceptron en tant que classificateur binaire

Disons que les points bleus sont des 1 et les points verts sont des 0. En utilisant la logique perceptron, nous pouvons créer une limite de décision (hyperplan) pour la classification qui sépare différents points de données sur le graphique.

Avant d'aller plus loin, ajoutons un terme de biais (uns) au vecteur d'entrée -

# Ajoute un biais au vecteur d'entrée X_bias = np.ones([X.shape[0], 3]) X_bias[:, 1:3] = X

L'ensemble de données ressemblera à ceci

jeu de données

Ici, chaque ligne de l'ensemble de données ci-dessus représente le vecteur d'entrée (un point de données). Afin de créer une limite de décision, nous devons trouver les poids appropriés. Les poids sont « appris » de la formation en utilisant la règle ci-dessous -

w = w + (prévu — prédit) * x

Perceptron w

Cela signifie que soustraire le résultat estimé de la vérité terrain, puis le multiplier par le vecteur d'entrée actuel et y ajouter les anciens poids afin d'obtenir la nouvelle valeur des poids. Si notre sortie est la même que la classe réelle, alors les poids ne changent pas. Mais si notre estimation est différente de la vérité terrain, alors les poids augmentent ou diminuent en conséquence. C'est ainsi que les poids sont progressivement ajustés à chaque itération.

Nous commençons par affecter des valeurs arbitraires au vecteur de poids, puis nous les ajustons progressivement à chaque itération en utilisant l'erreur et les données disponibles -

# initialiser les poids avec des valeurs aléatoires w = np.random.rand(3, 1) print(w)

Sortie :

[[0.37547448] [0.00239401] [0.18640939]]

Définir la fonction d'activation du perceptron –

def activation_func(z) : if z >= 1 : return 1 else : return 0

Ensuite, nous appliquons la règle d'apprentissage du perceptron -

for _ in range(100): for i in range(X_bias.shape[0]): y = activation_func(w.transpose().dot(X_bias[i, :])) # Mettre à jour les poids w = w + (( Y[i] - y) * X_bias[i, :]).reshape(w.shape[0], 1)

Il n'est pas garanti que les poids convergent en un seul passage, nous introduisons donc toutes les données d'apprentissage dans l'algorithme perceptron 100 fois tout en appliquant constamment la règle d'apprentissage afin que nous parvenions finalement à obtenir les poids optimaux.

Maintenant que nous avons obtenu les poids optimaux, nous prédire la classe pour chaque point de données en utilisant Y = f(∑wi*xi + b) ou Y = wT.x sous forme vectorielle.

# prédire la classe des points de données result_class = [activation_func(w.transpose().dot(x)) pour x dans X_bias]

Visualisez la limite de décision et les étiquettes de classe prédites –

# convertir en vecteur unitaire w = w/np.sqrt(w.transpose().dot(w))
# Visualiser les résultats plt.figure(figsize = (6, 6)) plt.scatter(X[:, 0], X[:, 1], c = result_class) plt.plot([-10, -1], hyperplane ([-10, -1], w), lw = 3, c = 'rouge') plt.title('Classification Perceptron avec limite de décision') plt.show()
Classification Perceptron avec frontière de décision

Vous pouvez comparer l'image de vérité terrain avec l'image de résultat prévue et voir certains points mal classés. Si nous calculons la précision, cela revient à environ 98% (je laisse cela en exercice aux lecteurs).

Si vous voyez, ici, nos données d'origine étaient assez séparées, nous sommes donc en mesure d'obtenir une si bonne précision. Mais ce n'est pas le cas avec les données du monde réel. En utilisant un seul perceptron, nous ne pouvons construire qu'une limite de décision linéaire, donc si les données sont mélangées, l'algorithme du perceptron fonctionnera mal. C'est l'une des limites du modèle perceptron unique.

Notes

Nous avons commencé par comprendre l'inspiration biologique derrière le perceptron de Rosenblatt. Ensuite, nous sommes passés aux mathématiques du perceptron et aux fonctions d'activation. Enfin, en utilisant un jeu de données de jouets, nous avons vu comment perceptron peut effectuer une classification de base en construisant une limite de décision linéaire qui sépare les points de données appartenant à différentes classes.

À propos de l’auteur

Pratik Nabriya est un Data Scientist qualifié actuellement employé par une société d'analyse et d'IA basée à Noida. Il maîtrise l'apprentissage automatique, l'apprentissage profond, la PNL, l'analyse de séries chronologiques, la manipulation de données, SQL, Python et est familier avec le travail dans un environnement Cloud. Dans ses temps libres, il adore participer à des Hackathons et rédiger des articles techniques.

Les médias présentés dans cet article n'appartiennent pas à Analytics Vidhya et sont utilisés à la discrétion de l'auteur.

Source : https://www.analyticsvidhya.com/blog/2021/10/perceptron-building-block-of-artificial-neural-network/

Horodatage:

Plus de Analytique Vidhya