Intelligence artificielle FIT 4 [INF444] – 2009/10 TP 8 – 1/4 Université Galata

Intelligence artificielle FIT 4 [INF444] – 2009/10 TP 8 – 1/4 Université Galatasaray FIT 4 [INF444] – 2009/10 Intelligence artificielle Vincent Labatut TP 8 implémentation du Perceptron 1 Présentation Dans ce TP, nous allons manipuler des neurones formels de type McCulloch & Pitts, utilisant la règle du perceptron pour l’apprentissage. Vous trouverez avec ce sujet un projet TP08 contenant un certain nombre de classes :  package gui : interface graphique.  package perceptron.neuron : classes permettant de définir des neurones : o LearningNeuron : neurone implémentant la règle d’apprentissage du perceptron. o FiringNeuron : neurone sans apprentissage, capable seulement d’émettre. o AbstractNeuron : classe abstraite contenant les méthodes et champs communs aux deux types de neurones. o TheoreticalOuptut : objet représentant la sortie théorique d’un neurone.  package perceptron.network : classes permettant de définir des réseaux : o LearningNetwork : réseau capable d’apprentissage, ne contenant qu’un seul neurone. o FiringNetwork : réseau sans apprentissage, pouvant contenir plusieurs neurones. o AbstractNetwork : classe abstraite contenant les méthodes et champs communs aux deux types de réseaux. o NetworkInput : objet représentant une entrée d’un réseau.  package main : classes de lancement. Le package gui permet de représenter un réseau de neurone sous la forme d’une fenêtre contenant autant de sous-fenêtre qu’il y a de neurones dans le réseau. Chaque sous fenêtre montre l’évolution des paramètres du neurone en temps réel. Un bouton Démarrer permet de lancer le traitement (émission et éventuellement apprentissage). Certaines classes sont incomplètes, et vous allez devoir définir les méthodes manquantes afin d’implémenter les algorithmes étudiés en cours. implémentation du Perceptron Intelligence artificielle FIT 4 [INF444] – 2009/10 TP 8 – 2/4 2 Implémentation 2.1 Neurone Dans l’implémentation qui vous est proposée, un neurone (FiringNeuron ou LearningNeuron) est caractérisé par un certain nombre de champs :  name : une chaîne de caractères représentant le nom du neurone.  weights : un tableau contenant les poids du neurone.  inputs : un tableau des objets (autres neurones ou entrées du réseau) constituant les entrées du neurone.  inputValues : un tableau contenant les valeurs issues de ces objets.  activation : la valeur d’activation a du neurone.  emission : la valeur d’émission y du neurone.  cycle, iteration : le cycle et l’itération courants. Si le neurone est capable d’apprentissage (LearningNeuron), on trouve en plus les champs suivants :  output : l’objet représentant la sortie théorique du neurone.  theoreticalOutput : la valeur t issue de cet objet.  error : la dernière erreur e commise par le neurone.  deltas : un tableau des variations à apporter aux poids pour réaliser l’apprentissage.  alpha : le coefficient d’apprentissage . Exercice 1 Dans la classe AbstractNeuron, complétez la méthode emit de manière à mettre à jour les champs activation et emission. Vous utiliserez les valeurs des poids, contenues dans le tableau weights. Les entrées du neurone sont contenues dans le tableau inputs : il s’agit soit d’autres neurones soit des entrées du réseau. Utilisez la méthode getValue pour obtenir leur valeur, et mettre à jour le tableau inputValues. Remarque : cette implémentation utilise la version de la formule d’activation dans laquelle le seuil est assimilé à un poids supplémentaire dont l’entrée associée vaut toujours 1. Exercice 2 Dans la classe LearningNeuron, complétez la méthode processDeltas de manière à calculer les variations à apporter aux poids. Ces variations doivent être stockées dans le tableau deltas. Vous utiliserez les valeurs d’entrée du neurone (que vous avez précédemment stockées dans inputValues), le coefficient d’apprentissage alpha et la sortie théorique du neurone, que vous pouvez obtenir en utilisant la méthode getValue de l’objet output. Vous devez également mettre à jour les champ error, représentant l’erreur commise par le neurone (soit ) ainsi que le champ theoreticalOutput. Exercice 3 Toujours dans la classe LearningNeuron, complétez la méthode updateWeights, qui effectue la mise à jour des poids à partir du tableau deltas que vous avez calculé. 2.2 Réseau Un réseau est caractérisé par :  inputs : un tableau d’entrées. implémentation du Perceptron Intelligence artificielle FIT 4 [INF444] – 2009/10 TP 8 – 3/4  layers : une liste de couches, chaque couche étant représentée par un tableau de neurones. S’il s’agit d’un réseau d’apprentissage (LearningNetwork), il ne contient qu’un seul LearningNeuron, puisque la règle du perceptron ne permet pas d’en manipuler plusieurs. S’il s’agit d’un simple réseau d’émission (FiringNetwork), il est possible de combiner plusieurs neurones, mais ceux-ci ne peuvent pas apprendre (FiringNeuron). La méthode run de la classe NetworkRunnable implémente l’enchaînement des cycles d’émission ou d’émission+apprentissage (suivant le type de réseau). Exercice 4 Complétez la méthode run de manière à définir une condition pour arrêter la répétition des cycles. Vous utiliserez la méthode getError de l’objet network, qui renvoie un booléen indiquant si le réseau a fait une erreur lors de la dernière itération (auquel cas la méthode renvoie true). Pour un réseau capable d’apprentissage, l’erreur consiste à calculer une sortie différente de la sortie théorique. Pour un réseau incapable d’apprentissage, l’erreur n’est pas nécessaire (la méthode renvoie toujours false). 3 Neurone et Exercice 5 La classe LearningNetworkLaunch permet de créer un réseau contenant un neurone et de lancer son apprentissage. Avant cela, il faut d’abord initialiser le réseau à traiter grâce à la méthode initNetwork. Vous remarquerez que les entrées sont initialisées de manière à former les valeurs , , et . Complétez la méthode de manière à faire apprendre l’opérateur et au neurone. Pour cela, vous devez précisez la sortie théorique en initialisant le tableau out. Vous devez également initialiser les poids de départ weights : utilisez les valeurs , et . Pour , utilisez successivement les valeurs ; et . Combien de cycles faut- il ? Pourquoi ? 4 Réseau ou exclusif Nous avons vu en cours que l’opérateur logique ou exclusif ne peut pas être implémenté par un seul neurone, car cela constitue un problème dont les solutions ne sont pas linéairement séparables. Par contre, il est possible d’implémenter simplement l’opérateur en utilisant un réseau à deux entrées et contenant trois neurones, connectés de la façon suivante : Comme le seul algorithme d’apprentissage que nous connaissons est celui du perceptron, et que cet algorithme permet l’apprentissage d’un neurone seul, nous devons traiter l’apprentissage de chaque neurone séparément. Exercice 6 Modifiez la méthode initNetwork de manière à tenter l’apprentissage du ou exclusif avec un seul neurone. Vous utiliserez les mêmes poids et coefficient d’apprentissage que pour l’opérateur et. Qu’observez-vous ? Exercice 7 implémentation du Perceptron Intelligence artificielle FIT 4 [INF444] – 2009/10 TP 8 – 4/4 Modifiez la méthode initNetwork de manière à réaliser l’apprentissage d’un neurone possédant la droite de décision suivante : Utilisez les paramètres de départ , , , et un coefficient d’apprentissage de . Vous relèverez les poids obtenus à la fin de l’apprentissage. Quel est l’opérateur logique implémenté par ce neurone ? Exercice 8 Même exercice pour un neurone possédant la droite de décision suivante : Vous utiliserez les mêmes poids de départ et le même coefficient d’apprentissage. Quel est l’opérateur logique implémenté par ce neurone ? Exercice 9 La table suivante décrit le comportement de (avec ) et (avec ), ainsi que le comportement que l’on voudrait avoir pour (avec ), de manière à ce que la sortie de ce neurone corresponde à un ou exclusif. x1 x2 y1 y2 t3 0 0 0 1 0 0 1 1 1 1 1 0 1 1 1 1 1 1 0 0 Quel opérateur logique le neurone doit-il implémenter ? Calculez les poids de . Exercice 10 La classe FiringNetworkLaunch permet de définir un réseau incapable d’apprendre mais pouvant contenir plusieurs neurones, et de calculer toutes les valeurs d’émission possibles. La méthode initNetwork construit un réseau de trois neurones correspondant à la structure décrite précédemment. Complétez cette méthode avec les poids obtenus précédemment, de manière à construire un réseau implémentant un ou exclusif, puis testez-le. 0 1 1 0 1 1 uploads/Ingenierie_Lourd/ inf444-tp08-implementation-du-perceptron.pdf

  • 73
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager