Robotique et vision artificielle

Transcription

Robotique et vision artificielle
Université du Québec en Outaouais
– Département d'informatique et d’ingénierie –
C.P. 1250 - Hull - Québec
J8X 3X7
Téléphone: (819) 595-3900
Télécopieur: (819) 773-1638
Programme de Génie Informatique 7643
Cours
Sigle du Cours
Session - Groupe
Professeur
Assistant
Robotique et vision
artificielle
GEN1593
Hiver 2009
01
Marek Zaremba
Juba Bernou
Laboratoire 3 : Familiarisation avec les RNA (Réseaux de Neurones Artificiels)
Objectifs
Général
Le but de ce travail pratique est de se familiariser avec les réseaux de neurones
artificiels. La maîtrise de ces notions est nécessaire afin de pouvoir réaliser des
projets de synthèse.
Spécifiques
•
•
Introduction aux réseaux de neurones.
Utiliser « Neural Network Toolbox » de MATLAB.
Préalable
•
Connaissance de MATLAB et Simulink.
Équipement
•
Logiciel : MATLAB.
UQO - Département d’Informatique et d’Ingénierie GEN1593 : Robotique et vision artificielle
Introduction
Le fonctionnement du cerveau humain est très compliqué, il capable de résoudre des problèmes très
complexes. Bien que nous ayons une bonne compréhension de certaines des opérations de base qui
conduisent le cerveau, nous sommes toujours loin de savoir le tout à propos du cerveau.
Figure 1 : Modèle de neurone biologique
Microsoft Encarta définit un réseau neurologique en tant que « réseau fortement interconnecté des
éléments de traitement de l'information qui imite la connectivité et le fonctionnement du cerveau
humain ». Ces réseaux neurologiques peuvent résoudre beaucoup de problèmes qui pourraient être
impossibles à résoudre avec des méthodes de programmation traditionnelles. Ils peuvent apprendre
d'une manière qui est beaucoup plus semblable à la méthode humaine d'étude, et sont donc
beaucoup plus pertinents dans certains domaines tels que la reconnaissance de la parole.
Il y a deux types de neurones artificiels :
•
•
discrets
continus.
Voici comment Encarta les définit :
Les neurones discrets envoient un signal de sortie de 1 si la somme de signaux reçus est au-dessus
d'une certaine valeur critique appelée une valeur seuil, autrement ils envoient un signal de sortie de 0.
Laboratoire # 3 - Robotique et vision artificielle - GEN1593
Page - 2 / 16
Des neurones continus ne sont pas limités à envoyer des valeurs de sortie de 1 et de 0 seulement; au
lieu de cela ils envoient une valeur de sortie entre 1 et 0 selon le montant total d'entrée qu'ils
reçoivent. Plus le signal reçu est fort, plus le signal envoyé du nœud est fort et vice-versa.
Les neurones continus sont le plus généralement utilisés dans les réseaux neurologiques artificiels
réels.
En conclusion les réseaux de neurones artificiels ont été conçus à la base du modèle du neurone
naturel. Ce dernier étant excité par un stimulus, il y répond selon sa fonction de transfert par une
sortie (réponse) qui peut être une atténuation ou une amplification de l'entrée. Dans le cadre de ce
cours on s’intéresse particulièrement à l’application des réseaux de neurones dans la prédiction de
séries temporelles, ou le contrôle de robots.
Figure 2 : Vue simplifiée d'un réseau artificiel de neurones
Réseaux de neurones avec Matlab
On distingue deux types de neurones avec ou sans biais d’entrée (bias input). Le poids w sert à
amplifier ou à atténuer l'effet du stimulus sur la réponse.
Figure 3 : Neurone avec ou sans biais d’entrée (bias input)
Laboratoire # 3 - Robotique et vision artificielle - GEN1593
Page - 3 / 16
Préparation
Donner les valeurs de sortie d’un neurone à 2 entrées si :
• le vecteur augmenté d’entrée x = [1, 4, -3]
et
• le vecteur de poids de pondération w = [-0.4, -0.5, 1],
Pour la fonction d’activation :
a) binaire à seuil,
b) linéaire à seuil.
Avant de se présenter au laboratoire vous devez remettre vos préparations par
courriel.
Laboratoire # 3 - Robotique et vision artificielle - GEN1593
Page - 4 / 16
Manipulations
Partie I : Utilisation de l’interface graphique « Neural Network Fitting Tool »
Dans la fenêtre de commande de Matlab exécuter les commandes suivantes :
load housing % Charger les données
nftool
Appuyer sur « Next » pour continuer, ensuite sélectionner p et t des menus déroulants :
Laboratoire # 3 - Robotique et vision artificielle - GEN1593
Page - 5 / 16
Vous allez remarquer que les entrées et les cibles sont déjà assignées pour un intervalle de [-1,1].
Appuyer sur « Next » pour continuer, vous allez remarquer que « validation » et « test data sets »
sont a 20% de la valeur des données d’origine.
Appuyer sur « Next » pour continuer, vous allez remarquer que le nombre des neurones cachés est
de 20, vous pourrez le changer plus tard.
Une fois que le réseau est créé, appuyé sur « Train » pour réaliser l’apprentissage.
Laboratoire # 3 - Robotique et vision artificielle - GEN1593
Page - 6 / 16
Cette fois l’apprentissage a pris 20 itérations
Laboratoire # 3 - Robotique et vision artificielle - GEN1593
Page - 7 / 16
Appuyer sur « View Regression » dans la fenêtre de « Neural Network Fitting Tool »
Laboratoire # 3 - Robotique et vision artificielle - GEN1593
Page - 8 / 16
Le même résultat peut être obtenu en utilisant les commandes suivantes :
load housing
[p2,ps] = mapminmax(p);
[t2,ts] = mapminmax(t);
[trainV,val,test] = dividevec(p2,t2,0.20,0.20);
net = newff(minmax(p2),[20 1]);
[net,tr]=train(net,trainV.P,trainV.T,[],[],val,test);
a2 = sim(net,p2);
a = mapminmax('reverse',a2,ts);
[m,b,r] = postreg(a,t);
Pour plus de détails vous pouvez consulter l’aide de Matlab la section suivante :
« Using Command-Line Functions :: Getting Started (Neural Network Toolbox)»
Appuyer sur « Next » dans la fenêtre de « Neural Network Fitting Tool » pour évaluer le réseau.
Si vous êtes satisfait, appuyer sur « Next » pour sauvegarder le réseau. Ensuite appuyer sur
« Finish » pour terminer.
Laboratoire # 3 - Robotique et vision artificielle - GEN1593
Page - 9 / 16
Partie II : La fonction de transfert
La fonction d’activation : de seuillage ou fonction de transfert sert à introduire une non-linéarité dans le
fonctionnement du neurone.
Les fonctions de seuillage présentent généralement trois intervalles :
1. en dessous du seuil, le neurone est non-actif;
2. aux alentours du seuil, une phase de transition;
3. au-dessus du seuil, le neurone est actif.
Les trois les plus utilisées sont les fonctions :
«Seuil» (en anglais «hard limit»)
«Linéaire»
«Sigmoïde».
Comme son nom l’indique, la fonction seuil applique un seuil sur son entrée. Plus précisément, une
entrée négative ne passe pas le seuil, la fonction retourne alors la valeur 0 (on peut interpréter ce 0
comme signifiant faux), alors qu’une entrée positive ou nulle d´épaisse le seuil, et la fonction retourne
1 (vrai).
Pour visualiser la fonction « seuil », dans la fenêtre de commande de Matlab exécuter les commandes
suivantes :
n = -5:0.1:5;
a = hardlim(n);
plot(n,a,'c+')
1
0.8
0.6
0.4
0.2
0
-5
0
5
Figure 4 : La fonction : «Seuil»
Pour visualiser la fonction « linéaire », dans la fenêtre de commande de Matlab exécuter les
commandes suivantes :
a = purelin(n);
plot(n,a,'r+')
Laboratoire # 3 - Robotique et vision artificielle - GEN1593
Page - 10 / 16
5
0
-5
-5
0
5
Figure 5 : La fonction : «Linéaire»
Pour visualiser la fonction « sigmoïde », dans la fenêtre de commande de Matlab exécuter les
commandes suivantes :
a = logsig(n);
plot(n,a,'r+')
1
0.8
0.6
0.4
0.2
0
-5
0
5
Figure 6 : La fonction : «Sigmoïde»
Dans Simulink les fonctions de transfert sont :
Laboratoire # 3 - Robotique et vision artificielle - GEN1593
Page - 11 / 16
Figure 7 : Fonctions de transfert
Partie III : Le fonctionnement d'un neurone avec NND
A ) Dans la fenêtre de commande de Matlab exécuter la commande suivante : nnd2n1
Neural Network DESIGN
Input
One-Input Neuron
Line ar Ne uron: a = purelin(w *p+b)
Alter the weight, bias
and input by dragging
the triangular shaped
indicators.
w
p
a
Pick the transfer
function with the
F menu.
b
1
W atch the change to
the neuron function
and its output.
w
4
-2
0
2
2
a
b
-2
0
0
2
-2
F:
-4
-4
-2
0
2
Chapter 2
4
p
On vous demande de modifier les valeurs du poids w et du biais d’entrée (bias input) b et de
visualiser l'effet du stimulus sur la réponse. N’oublier de décrire ce que vous observez.
B) Dans la fenêtre de commande de Matlab exécuter la commande suivante : nnd2n2
Neural Network DESIGN
Input
Two-Input Neuron
Linear Neuron
Alter the input values
by clicking & dragging
the triangle indicators.
p(1)
w(1,1)
F
a
1
-2
0
0
6
2
n
4
6
-1
2
0
p(2)
1
-2
-6
Alter the weights and
bias in the same way.
Use the menu to pick
a transfer function.
Pick the transfer
function with the
F menu.
The net input and the
output will respond to
each change.
-4
0
w(1,2)
b
-6
1
-1
-2
0
2
-2
0
2
a = purelin(w *p+b)
Chapter 2
On vous demande de modifier les valeurs des entrées p(1) et p(2), du poids w et du biais d’entrée
(bias input) b et de visualiser l'effet du stimulus sur la réponse. N’oublier de décrire ce que vous
observez.
Laboratoire # 3 - Robotique et vision artificielle - GEN1593
Page - 12 / 16
Partie IV : Un premier exemple de simulation de RNA avec Matlab
L’objectif de cette partie est d’utiliser l’approche matricielle pour la simulation des réseaux de
neurones sans rétro-propagation avec Matlab.
A - Simulation avec des entrées concurrentes dans un réseau statique
La figure suivante présente le fonctionnement d'un neurone tel que l'ont décrit Mc Culloch et Pitts. Il
s'agit d'une unité arithmétique faisant la somme pondérée des signaux reçus en entrée à laquelle on
applique une fonction de transfert, ici la fonction lineaire, afin d'obtenir la réponse de la cellule (notée
a).
Avant d’exécuter les commandes suivantes, on vous demande de consulter l’aide de Matlab pour la
commande newlin et d’expliquer brièvement le fonctionnement.
net = newlin([1 3 ; 1 3],1);
% W = [1 2];
net.IW{1,1}=[1 2];
% b = [0];
net.b{1}=0;
P = [1 2 2 3;2 1 3 1];
A = sim(net,P)
B - Simulation avec des entrées séquentielles dans un réseau dynamique
Simulation avec des entrées concurrentes :
Laboratoire # 3 - Robotique et vision artificielle - GEN1593
Page - 13 / 16
net = newlin([-1 1],1,[0 1]);
net.biasConnect = 0;
net.IW{1,1} = [1 2];
P = {1 2 3 4};
A = sim(net,P)
C - Simulation avec des entrées concurrentes dans un réseau dynamique
P = [1 2 3 4];
A = sim(net,P)
P = {[1 4] [2 3] [3 2] [4 1]};
A = sim(net,P)
Partie V : Un premier exemple d’apprentissage de RNA avec Matlab
L'objectif de l'apprentissage est de fournir une méthode au réseau afin qu'il puisse ajuster ces
paramètres lorsqu'on lui présente des exemplaires à traiter.
On distingue habituellement trois paradigmes d'apprentissage : supervisé, non supervisé et hybride.
Supervisé
Dans ce cas on fournit au réseau la donnée à traiter mais aussi la réponse attendue. Le réseau
effectue une évaluation de la donnée, puis compare la valeur obtenue avec la valeur désirée, il va
ensuite modifier ses paramètres internes afin de minimiser l'erreur constatée.
Non supervisé
Dans ce cas aucune information (en plus des données à apprendre) n'est fournie au système. Celui-ci
est amené à découvrir la structure sous-jacente des données afin de les organiser en clusters.
Hybride
Cette approche combine méthodes numériques et méthodes symboliques. Certains, utilisent le terme
d'apprentissage hybride pour parler d'un couplage supervisé, non supervisé ; dans ce cas il s'agit d'un
réseau qui met en parallèle ou en série un réseau entraîné en mode supervisé et un autre en mode
non supervisé.
Dans Matlab l’apprentissage est lancé soit par la fonction adapt (incrémental) soit par train (par
paquets). Ces 2 fonctions auront le même effet.
A - Apprentissage incrémental dans un réseau statique
net = newlin([-1 1;-1 1],1,0,0);
net.IW{1,1} = [0 0];
net.b{1} = 0;
P = {[1;2] [2;1] [2;3] [3;1]};
T = {4 5 7 7};
Apprentissage incrémental
[net,a,e,pf] = adapt(net,P,T);
Si on modifie le taux d’apprentissage a 0,1 vous allez voir comment le réseau va se réajuster par
rapport aux entrées.
net.inputWeights{1,1}.learnParam.lr=0.1;
net.biases{1,1}.learnParam.lr=0.1;
[net,a,e,pf] = adapt(net,P,T);
Laboratoire # 3 - Robotique et vision artificielle - GEN1593
Page - 14 / 16
B - Apprentissage incrémental dans un réseau dynamique
net = newlin([-1 1],1,[0 1],0.1);
net.IW{1,1} = [0 0];
net.biasConnect = 0;
L’apprentissage incrémental de ce réseau présente les entrées et les cibles comme éléments de
chaque matrice ou tableau.
Pi = {1};
P = {2 3 4};
T = {3 5 7};
[net,a,e,pf] = adapt(net,P,T,Pi);
Partie VI : Architecture optimale
L’objectif de cette partie est de trouver l’architecture optimale d’un réseau multicouche pour la
classification de données de « Iris ».
On vous demande d’utiliser deux ensembles de données : un ensemble d’exemples (50%) et un
ensemble de données pour la vérification (50%). Essayer les architectures à différente taille en termes
de nombre de couches et de nombre de neurones. Donner la valeur minimale de l’erreur obtenue sur
l’ensemble de données de vérification, ainsi que les paramètres de la meilleure architecture du
réseau.
Pour importer les données dans l’espace de travail
load iris;
Les 4 premières colonnes, on les traite comme les données d'entrée, A1, A2, A3, A4 et la 5e colonne
signifie les 3 classes (sorties).
Commentaires sur le bon ou le mauvais fonctionnement du réseau de neurones.
Comparaison des sorties du réseau de neurones avec le vecteur à trouver.
Une brève critique sur l'approche utilisée.
Rapport
Avant la fin de la séance, vous devrez remettre :
%% Le script de Matlab commenté.
% Commentaires sur le bon ou le mauvais fonctionnement ...
%
Avant 09 :00 AM 7 jours après la fin de ce laboratoire, vous devrez remettre un compte rendu
individuel.
Laboratoire # 3 - Robotique et vision artificielle - GEN1593
Page - 15 / 16
Annexe A
%% Feed-Forward Network - Apprentissage par rétro-propagation
% la commande newff est utilisée pour créer un réseau MLP
%% On peut créer un réseau simplement avec par exemple :
% >> net = newff(PR,[ncc ncs],{'logsig','logsig'})
% PR matrice valeurs min. et max. des entrées,
% ncc nombre des neurones de la couche cachée,
% ncs nombre des neurones de sortie
% et l’entraîner avec :
% >> [net,tr] = train(net,P,T)
%% Matrice des valeurs min. et max. des entrées
% c’est le nombre de lignes de la matrice PR (paramètre d’entrée)
% qui indique le nombre de variables d’entrée.
PR = [0 1; 0 1];
%% nbre neurones couche cachée,
ncc = 2;
%% nbre neurones sortie
ncs = 1;
%% Créer le réseau
net = newff(PR,[ncc ncs],{'logsig','logsig'});
% net = newff([0 1; 0 1],[2 1],{'logsig','logsig'});
%% Matrice des entrées qui illustre la fonction logique xor
% les vecteurs de données d’entrée doivent être placés
% dans les colonnes d’une matrice P
P = [1 1 0 0; 1 0 1 0];
%% Matrice des sorties
% les données de sortie à obtenir doivent être placées dans un vecteur
% ligne T
T = [0 1 1 0];
%% Afficher les données
plotpv(P,T);
%% on simule la sortie de réseau en faisant
% une initialisation du réseau de neurone
Y = sim (net, P)
%% !
keyboard
%% On entraîne le réseau
% pour 10000 itérations !
net.trainParam.show = 5;
net.trainParam.epochs = 10000;
net = train(net,P,T);
%%
% La figure suivante décrit l'entraînement du réseau.
%% On simule de nouveau la sortie du réseau
Y = sim (net, P)
Laboratoire # 3 - Robotique et vision artificielle - GEN1593
Page - 16 / 16