32
Modélisation avec réseaux de neurones sous SCILAB Boîte à outil HYDROGR 23 novembre 2006

Modélisation avec réseaux de neurones sous SCILAB Boîte à outil HYDROGR 23 novembre 2006

Embed Size (px)

Citation preview

Page 1: Modélisation avec réseaux de neurones sous SCILAB Boîte à outil HYDROGR 23 novembre 2006

Modélisation avec réseaux de neurones sous SCILAB

Boîte à outil HYDROGR

23 novembre 2006

Page 2: 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

Page 3: Modélisation avec réseaux de neurones sous SCILAB Boîte à outil HYDROGR 23 novembre 2006

Exemples

Page 4: Modélisation avec réseaux de neurones sous SCILAB Boîte à outil HYDROGR 23 novembre 2006

Nom de l’événement + date

Introduction à SCILAB

Page 5: Modélisation avec réseaux de neurones sous SCILAB Boîte à outil HYDROGR 23 novembre 2006

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

Page 6: Modélisation avec réseaux de neurones sous SCILAB Boîte à outil HYDROGR 23 novembre 2006

Installer HYDROGR

Dans SCILAB, l’écran doit être comparable au

suivant (la liste des fonctions peut varier suivant

les versions d'HYDROGR)

Page 7: Modélisation avec réseaux de neurones sous SCILAB Boîte à outil HYDROGR 23 novembre 2006

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 !

Page 8: Modélisation avec réseaux de neurones sous SCILAB Boîte à outil HYDROGR 23 novembre 2006

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')

Page 9: Modélisation avec réseaux de neurones sous SCILAB Boîte à outil HYDROGR 23 novembre 2006

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))

Page 10: Modélisation avec réseaux de neurones sous SCILAB Boîte à outil HYDROGR 23 novembre 2006

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 = ?

Page 11: Modélisation avec réseaux de neurones sous SCILAB Boîte à outil HYDROGR 23 novembre 2006

Nom de l’événement + date

Qu’est ce qu’un réseau de neurones ?

Page 12: Modélisation avec réseaux de neurones sous SCILAB Boîte à outil HYDROGR 23 novembre 2006

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

?

Page 13: Modélisation avec réseaux de neurones sous SCILAB Boîte à outil HYDROGR 23 novembre 2006

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

Page 14: Modélisation avec réseaux de neurones sous SCILAB Boîte à outil HYDROGR 23 novembre 2006

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

Page 15: Modélisation avec réseaux de neurones sous SCILAB Boîte à outil HYDROGR 23 novembre 2006

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

Page 16: Modélisation avec réseaux de neurones sous SCILAB Boîte à outil HYDROGR 23 novembre 2006

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

Page 17: Modélisation avec réseaux de neurones sous SCILAB Boîte à outil HYDROGR 23 novembre 2006

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

Page 18: Modélisation avec réseaux de neurones sous SCILAB Boîte à outil HYDROGR 23 novembre 2006

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');

Page 19: Modélisation avec réseaux de neurones sous SCILAB Boîte à outil HYDROGR 23 novembre 2006

Modélisation par réseaux de neurones

Page 20: Modélisation avec réseaux de neurones sous SCILAB Boîte à outil HYDROGR 23 novembre 2006

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 !

Page 21: Modélisation avec réseaux de neurones sous SCILAB Boîte à outil HYDROGR 23 novembre 2006

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

Page 22: Modélisation avec réseaux de neurones sous SCILAB Boîte à outil HYDROGR 23 novembre 2006

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

Page 23: Modélisation avec réseaux de neurones sous SCILAB Boîte à outil HYDROGR 23 novembre 2006

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

Page 24: Modélisation avec réseaux de neurones sous SCILAB Boîte à outil HYDROGR 23 novembre 2006

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

Page 25: Modélisation avec réseaux de neurones sous SCILAB Boîte à outil HYDROGR 23 novembre 2006

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"

Page 26: Modélisation avec réseaux de neurones sous SCILAB Boîte à outil HYDROGR 23 novembre 2006

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)

Page 27: Modélisation avec réseaux de neurones sous SCILAB Boîte à outil HYDROGR 23 novembre 2006

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

Page 28: Modélisation avec réseaux de neurones sous SCILAB Boîte à outil HYDROGR 23 novembre 2006

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);

Page 29: Modélisation avec réseaux de neurones sous SCILAB Boîte à outil HYDROGR 23 novembre 2006

Compléments

Page 30: Modélisation avec réseaux de neurones sous SCILAB Boîte à outil HYDROGR 23 novembre 2006

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

Page 31: Modélisation avec réseaux de neurones sous SCILAB Boîte à outil HYDROGR 23 novembre 2006

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

Page 32: Modélisation avec réseaux de neurones sous SCILAB Boîte à outil HYDROGR 23 novembre 2006

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