Upload
rosemonde-leloup
View
119
Download
2
Embed Size (px)
Citation preview
Modélisation avec réseaux de neurones sous SCILAB
Boîte à outil HYDROGR
23 novembre 2006
Programme Introduction SCILAB
Installer HYDROGR Fonctionnement de SCILAB Quelques commandes importantes
>> Mise en pratique
Qu’est-ce qu’un réseau de neurones ? Concepts de base Application sur un réseau simple
>> Mise en pratique
Modélisation par réseaux de neurones Les étapes Les fonctions disponibles dans HYDROGR
>> Mise en pratique
Exemples
Nom de l’événement + date
Introduction à SCILAB
Installer HYDROGR
1. Télécharger le fichier HYDROGRv01.zip
(http://lerat.julien.free.fr)
2. Dezipper dans le répertoire C:\Program Files\Scilab 3.1.1\contrib\
et créer un répertoire
HYDROGRv01
3. Supprimer le fichier loader.sce
qui se trouve dans C:\Program Files\Scilab 3.1.1\contrib\
Remplacer par le fichier loader.sce qui se trouve
dans le répertoire HYDROGRv01
4. Lancer SCILAB
Installer HYDROGR
Dans SCILAB, l’écran doit être comparable au
suivant (la liste des fonctions peut varier suivant
les versions d'HYDROGR)
Fonctionnement de SCILAB
SCILAB = Prompteur en ligne de commande Editeur de Script Aide
SCILAB est Gratuit Développé par l’INRIA Comparable à MATLAB Basé sur un langage
interprété (proche du Cen bcp plus simple)
CASE SENSITIVE !
Entrer une commande
Utiliser le prompteur Taper la commande Valider par entrée
Ecrire un script Taper dans le prompteur >> écrire
ses commandes dans l’éditeur de script (fichier .sce)
L’exécuter .. pour cela on peut Soit taper [Ctrl] + l dans l’éditeur de script Soit taper exec( [ Nom du fichier contenant le script ] )
dans le prompteur
--> a = ones(10,5)
--> b = 10 * a’
--> scipad( )
--> scipad()
--> exec('C:\MonScript.sce')
Quelques instructions importantes Ajouter des commentaires
// Lancer l’aide
help Eviter un affichage sur
le prompteur ;
Transposée d’une matrice ‘
Génération de vecteurs :
Fin de vecteur $
Matrice [ ] Faire un graph 2D plot2d
--> // Commentaire
--> u = 1
--> u = 1;
--> help plot2d
--> a = 1:100
--> b = 1:0.01:100
--> c = 100:-1:1
--> a2= a’
--> u = a($-10)
--> A = [[1 2];[3 4]]
--> plot2d(sin(a))
Petits exercices pour pratiquer SCILAB
Réaliser les produits matriciels suivants
Faire le graph de exp(-x²/10) entre -5 et 5
4 5 0 1
-1 2 -10
3
2 1 45 2
1 10
-5 2
6 -5
3 3
x = ?
Nom de l’événement + date
Qu’est ce qu’un réseau de neurones ?
Un réseau de neurone c’est…
Une méthode de régression non-linéaire (un "prolongement" non linéaire de la régression classique)
Un modèle « boîte-noire » estimant une variable à expliquer à partir de variables explicatives
Ce n’est pas… un objet capable de pensée (terme trompeur
« d’apprentissage ») très compliqué…
Entrée 1
Entrée 2
Entrée 3
Réseau
Sortie calculée
Observation
?
Vocabulaire
Le vocabulaire des réseaux: Apprentissage = Calage Nœud = variable intermédiaire Poids = Paramètre Couche d’entrée = Ensemble des variables
- explicatives
Couche cachée = Variables intermédiaires Couche de sortie = Variable expliquée Rétro-propagation = Une méthode de calage Epoque = Itération de la méthode
de - calage Fonction d’activation = Fonction interne du
réseau Sigmoïde = tangente hyperbolique
Architecture générale d’un réseau « feed forward »
Les grands types de réseaux Feed-forward / Récurrents Apprentissage supervisé / non-supervisé Perceptron / fonction de base radiale / …
Les types de réseaux
Entrée 1
Entrée 2
Entrée 3
Sortie 1
Couche cachée
Fonction d’activation sigmoïde
Biais
Biais
Biais
BiaisCouche d’entrée Couche de sortie
Biais
Comment marche un réseau ?
Entrée 1
Entrée 2
Entrée 3
+ Biais
X X
XPoids 1
Poids 2
Poids 3
1.Sommation pondérée
des entrées
2.Transformation
sigmoïde ( = sortie de la
couche cachée)
3.Sommation
pondérée des sorties de la
couche cachée
Fonction d’activation sigmoïde
Sortie 1
Biais
+X
X
X
XPoids 4
Poids 3
Poids 2
Poids 1
Pourquoi ça fonctionne ?
Association de fonctions « seuils » Ne réagit efficacement qu’autour du seuil, En deçà et au-delà >> saturation
Entrée 1
Entrée 2
Sortie
Réseau « feed-forward » à une couche cachée, deux entrées et un nœud dans la couche cachée
Construction d’un premier réseau
Entrée 1
Entrée 2
Sortie
Couche cachée
Tangente H
+Biais : PDcach(1)0.1
Couche d’entrée Couche de sortie
Biais:PDsortie(1)0.2
Poids 2 : PDcach(3)-0.3
Poids 1 : PDcach(2)0.4
Poids : PDsortie(2)-0.1
x
x
x
0 5 10 15 20 25 30 35 40 45 50-1.0
-0.5
0.0
0.5
1.0
1.5
0 5 10 15 20 25 30 35 40 45 50-1.0
-0.5
0.0
0.5
1.0
1.5
0 5 10 15 20 25 30 35 40 45 50-0.6
-0.4
-0.2
0.0
0.2
0.4
0.6
0.8
0 5 10 15 20 25 30 35 40 45 50-0.20
-0.15
-0.10
-0.05
0.00
0.05
Construction d’un premier réseau
Réseau « feed-forward » à une couche cachée, deux entrées et un nœud dans la couche cachée
--> // Entrées (convention: stockées en « ligne »)
--> EN = [ 0.28 0.87 1.35 0.97 0.86 0.06 -0.22 -0.81 -0.67 -0.09;
0.21 0.12 0.46 0.05 0.23 0.19 0.01 0.25 0.41 0.3 ];
--> // Poids--> PDcach = [0.1 0.4 -0.3];
--> PDsortie = [-0.1 0.2];
--> // Mise en oeuvre du réseau (Couche cachée)--> CACH = tanh(PDcach(2:3)*EN + PDcach(1));
--> // Mise en oeuvre du réseau (Couche de sortie)--> SORT = PDsortie(2) * CACH + PDsortie(1);
--> subplot(3,1,1),plot2d(EN'),xtitle('Entrees');--> subplot(3,1,2),plot2d(CACH'),xtitle('Couche c');--> subplot(3,1,3),plot2d(SORT'),xtitle('Sortie');
Modélisation par réseaux de neurones
Les étapes
1. Choisir ses variables d’entrée Pas trop nombreuses (10 grand maximum, plutôt 5) Vérifier leur pertinence par une analyse graphique
(très facile avec Scilab…)
2. Normaliser les variables d’entrée et de sortie pour qu’elles restent dans l’intervalle [-1..1] De manière classique on retranche la moyenne puis
on divise par n fois l’écart-type Parfois: Suppression de tendance
Attention >> étape importante !
Les étapes
3. Choisir une architecture de réseau Une seule couche cachée
Une seule sortie
Un nombre de nœuds cachés le plus petit possible (faire un essai avec 3 voir 2, puis 4 si cela ne donne rien…)
Il faut être conscient du nombre de paramètres que l'on cale (il peut rapidement devenir plus grand que l'échantillon de calage…):
Ex: 9 entrées, 6 nœuds cachés, 1 sortie >> 67 paramètres
sortiecachecacheentreesparam NNNNN 11
Les étapes
4. Lancer le calage plusieurs fois en faisant varier aléatoirement le point départ (i.e. répétitions) Le nombre de répétitions nécessaire se situe
généralement entre 5 (rapide) et 20 (plus sûr)
5. Retenir les paramètres issus de la meilleure répétition et valider le modèle obtenu sur des données indépendantes De bons résultats en calage ne présument pas de la
qualité du modèle
Utilisation d'un réseau avec HYDROGR
Utiliser la fonction ANN_SIM Cette fonction calcule la sortie d'un réseau à partir
des entrées et des paramètres (matrice des poids)
--> // Entrées normalisées--> EN = [ 0.04 0.16 ; 0.72 0.95 ;
--> // Réseau--> Ncach = 2;
--> // Valeur des poids et biais pour la couche cachée--> Wini = [0.09 0.73 0.78; 0.07 0.77 0.21];--> // Valeur des poids et biais pour la couche cachée--> Wini(:,:,2) = [0.34 0.62 0.45; 0.00 0.00 0.00];
--> // Calcul--> [CIBc] = ANN_SIM(EN,Ncach,1,Wini);
--> // Graph--> plot2d([EN' CIBc']);//Entrees sorties--> legends(['EN1' 'EN2' 'CALC'],1:3,'ur');
A compléter, Cf. Fichier
2.MODELISATION RESEAU.sce
Calage d'un réseau avec HYDROGR
Utiliser la fonction ANN_LMBR Cette fonction cale un réseau à partir des valeurs
initiales des paramètres par la méthode "Levenberg-Marquardt" avec régulation bayesienne (LMBR)
--> // Cible du calage du réseau--> // (fonction non lin. que le réseau doit trouver)--> CIB = exp(EN(1,:))+log(EN(2,:)+2);--> CIB = (CIB-2.4)./1.2;
--> [W,CIBc,RMSE] = ANN_LMBR(EN,CIB,Ncach,Wini);
--> // Graph--> subplot(2,1,1),plot2d([EN' CIB']);//Entrees sorties--> subplot(2,1,2),plot2d([CIB' CIBc']);//Obs. vs calc.
Entrées Sortie Nb de nœuds cachés
poids initiaux
Calage d'un réseau avec HYDROGR
Utiliser la fonction ANN_LMBR Fonctionnement du LMBR :
• Descente du gradient de l'erreur avec linéarisation au second ordre
• Composition entre deux fonctions objectif : minimisation de l'erreur et minimisation des paramètres
Sum of squared errors
Epochs
SSE
0 5 10 15 20 25 30 35 400
10
20
30
40
50
60
Sum of squared weights
Epochs
SSX
0 5 10 15 20 25 30 35 400
5
10
15
20
25
30
Number of well determined parameters
Epochs
GAMK
0 5 10 15 20 25 30 35 402
4
6
8
10
12
14
Evolution de la RMSE au fil des itérations (époques)
Evolution de la somme des poids
Nombre de paramètres "utiles"
Démarche complète
Utiliser la fonction ANN_REPET. Ce que fait la fonction (dans l'ordre):1. Normalisation des entrées et sorties
2. Identification de 3 sous-échantillons (P1 = première moitié, P2 = deuxième moitié, P3 = ensemble)
3. Pour chaque partie de l'échantillon :• Calage du réseau par LMBR avec répétition de la
procédure NR fois (NR à définir, par défaut 30)• Détermination de la simulation médiane parmi les NR
simulations• Renvoi du résultat
ATTENTION, cette fonction n'autorise qu'une seule sortie (1 seule variable expliquée)
Démarche complète
--> // Calage avec répétitions--> [W,CIBc,C,RMSE]=ANN_REPET(EN,CIB,Ncach,'C:\RAND.txt',10);
--> // Graph des entrées et sorties--> subplot(2,1,1),plot2d([EN' CIB']);--> // Graph de comparaison observé / modélisé en validation--> subplot(2,1,2),plot2d([CIB' CIBc(:,3:4)]);--> legends(['OBS' 'CALCcal' 'CALCcont'],1:3,'ur');
EntréesSortie Nb de nœuds
cachés
Fichier contenant des nombres aléatoires [0..1]
Nb de répétitions
Démarche complète
Analyser les sorties de ANN_REPET
W: 3 jeux de paramètres correspondant aux 3 sous-échantillons. Les paramètres sont stockés en colonne (cf. ANN_W_CONV)
CIBc: Matrice à 4 colonnes contenant les données modélisées: col. 1 = calage sur P1, col. 2 = calage sur P2, col.3 = calage sur P3, col. 4 = validation
C: ensemble de critères calculés sur CIBc(:,4) par rapport à CIB (cf. fonction CRIT)
RMSE:RMSE sur les 3 sous échantillons à l'issue du calage.
--> [W,CIBc,C,RMSE]=ANN_REPET(EN,CIB,Ncach,'C:\RAND.txt',10);
Compléments
Quelques instructions utiles sous SCILAB size : taille d’une matrice for … end : boucle for if .. then … else : condition find : identifier des éléments dans une matrice mean : moyenne par colonne ou par ligne st_deviation : Ec. type par colonne ou par ligne zeros : générer une matrice de zeros ones : générer une matrice de 1 diag : matrice carrée à partir d’une diagonale rand : générer une matrice de nb aléatoires execstr : évaluer une expression SCILAB convol : convolution discrète (>> HU) corr : auto-corrélation, corrélation croisée gsort : trier les éléments d’une matrice linear_interpn : Interpolation linéaire
La matrice des poids dans HYDROGR
Deux matrices à 2 dimensions
Be 1 Pe 1-1 Pe 2-1 … Pe Ne-1
Be 2 Pe 1-2 Pe 2-2 … Pe Ne-2
… … … … …
Be Nc Pe 1-Nc Pe 2-Nc … Pe Ne-Nc
Bs 1 Ps 1-1 Ps 2-1 … Pe Nc-1
0 0 0 … 0
… … … … …
0 0 0 … 0
Couche entrée >> cachée
Couche cachée >> sortie
Ne = Nb entréeNc = Nb nœud cach.Ns = 1 sortie
Entrée 1
Entrée 2
Entrée 3
Sortie 1
Sortie 2
Couche cachée
Fonction d’activation sigmoïde
Fonction d’activation identité
+ Biais
Biais
Biais
BiaisCouche d’entrée Couche de sortie
Fonction d’activation identité
Biais
Biais
Biais Poids
Nœud de la couche cach.1
IN 1(somme pondérée des entrées du nœud 1)
OUT 1(sortie de la sigmoïde du nœud 1)
IN = Entrée 1 * Pe 1-1 +Entrée 2 * Pe 2-1 +Entrée 3 * Pe 3-1 +Be 1
OUT = tanh(IN)
Entrée 1
Entrée 2
Entrée 3
Sortie 1
Sortie 2
Couche cachée
Fonction d’activation sigmoïde
Fonction d’activation identité
+ Biais
Biais
Biais
BiaisCouche d’entrée Couche de sortie
Fonction d’activation identité
Biais
Biais
Nœud de sortie1
CACH(somme pondérée des couches cachées)
FINAL 1(sortie finale
du nœud de sortie 1)
CACH = OUT 1 * Ps 1-1 +OUT 2 * Ps 2-1 +OUT 3 * Ps 3-1 +Bs 1
FINAL1= CACH
Biais Poids
Normaliser les variables sous HYDROGR
Utiliser la fonction ANN_NORM Cette fonction normalise en retranchant la moyenne
et en divisant par N fois l'écart-type.
Deux "sens" possibles: transformation de données brutes en normalisées ou l'inverse (en fournissant des moyennes et écart-type pour chaque variable)
--> // Entrées non normalisées--> EN = [ 0.04 0.16 ; ]';
--> // Normalisation--> [EN2,ENm,ENstd]=ANN_NORM(EN,'raw2norm',2);
--> // Graph--> subplot(2,1,1),plot2d(EN'),xtitle('Entrees brutes');--> subplot(2,1,2),plot2d(EN2'),xtitle('Entrees norm.');²
N
A compléter, Cf. Fichier
2.MODELISATION RESEAU.sce