Comment utiliser le simulateur de
Réseaux de Neurones Récurrents Aléatoires sur
Matlab.
Téléchargement
et installation
Vous pouvez
télécharger le noyau permettant de simuler des RRNN's ici.
Le dossier "Noyau" contient les fichiers suivants :
- f_heavy.m
- f_tanh_01.m
- f_trans.m
- init_dyn.m
- init_J.m
- init_sequence.m
- init_systeme.m
- init_theta.m
- iter_dyn.m
- ppcm.m
L'ensemble de ces fichiers peut etre utilisé comme une toolbox
RRNN en l'ajoutant dans votre Path Matlab.
|
UK
|
La structure d'un réseau
Un réseau est décrit à l'aide sous forme d'un
objet Matlab. Cet objet
contient l'ensemble des variables qui decrivent le réseau :
paramètres,
et variables globales.
Avant d'utiliser les fonctions du noyau, il est nécessaire de
définir un certain nombre de paramètres.
Paramètres pour un
réseau récurrent à poids gaussiens à une
population
Exemple de fonction d'initialisation :
|
|
function
net=init_param_rrnn:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
PARAMETRES
GENERAUX
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
net.fichier_I={''}; % net.fichier_I
décrit le nom d'un fichier
% contenant
% la description du signal à appliquer au réseau
net.N=500;
% net.N : taille du réseau
net.dim=0;
% net.dim : topologie des liens :
% 0 : pas de topologie
% 1 : topologie 1D
% 2 : topologie 2D
net.densite=1; %
densité de connexion (entre 0 et 1)
net.f_trans={'tanh_01'}; % net.f_trans : nom de la
fonction de
% transfert
% 'tanh_01' (tangente hyperbolique à valeurs
% sur [0,1])
% 'heavy' (heavyside)
net.distr={'gauss'}; %
net.distr : distribution de poids :
% 'gauss' : distribution gaussienne
% 'unif' : distribution uniforme
net.g=5;
% paramètre de gain de la fonction de
% transfert
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
LE
SIGNAL
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
net.I=
{sparse(net.N,1)}; % Pas de signal
d'entree
net.flag_I = 0;
% net.flag_I : booléen qui active l'entree
net.bruit_I=0;
% net.bruit_I : taux de bruit sur l'entree
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
LES
POIDS
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
net.J_barre =
0; %
net.J_barre : valeur moyenne des poids
net.sigma_J =
1; %
net.sigma_J : ecart-type des poids
net.tau_min=1;
% net.tau_min : delai de transmission minimal
net.tau_moy=0;
% net.tau_moy : parametre pour la
% distribution de poisson
% (la valeur 0 indique des delais constants)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
LES
SEUILS
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
net.theta_barre=0;
% net.theta_barre : valeur moyenne du seuil
net.sigma_theta=0;
% net.sigma_theta : ecart-type du seuil
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
APPRENTISSAGE
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
net.alpha=0.1;
% net.alpha : parametre d'apprentissage
% (regle l'intensité de la modification des poids)
net.beta=0.1;
% net.beta : parametre qui regle la mise à
net.beta_=1-net.beta; % jour de
l'activation moyenne.
net.feed=0; % net.feed
: booléen indique l'ajout
% d'un terme de feedback dans la regle
% d'apprentissage
net.app='mem'; % net.app : regle le type
d'apprentissage
% 'mem' : regle de Hebb de type covariance
% 'delta' : regle de Hebb fondee sur la difference
%
d'activation
% 'hebb' : regle de hebb elementaire
net.norm_alpha=1; % net.norm : normalisation du terme
d'apprentissage
% (par population)
net.renf=0; % net.renf :
booléen qui active l'apprentissage par
% renforcement
net.script_out=''; % net.script_out : donne le nom d'un
fichier script
% qui peut s'exécuter parallèlement à la
dynamique
net.script_init=''; % net.script_init : donne le nom d'un fichier
script
% qui initialise la dynamique externe |
|
Simulation d'un réseau
On utilisera les commandes suivantes :
>> net=init_param_rrnn;
>> net=init_systeme(net,num);
(où num est le
numéro du réseau)
>> net=init_dyn(net);
>> net=iter_dyn(net,nbp,0);
(itération de la dynamique sans apprentissage, nbp est le nombre de pas de temps)
>> net=iter_dyn(net,nbp,1);
(itération de la dynamique avec apprentissage)
>> net.g=6
(modification de la valeur de g)
>> net=iter_dyn(net,nbp,0);
>> net.sigma_theta=0.2; net.num_theta=autre_num;
net=init_theta(net);
(où autre_num est
le numéro du motif des seuil)
>> net=iter_dyn(net,nbp,0);
>> net.theta{1}=0;
(suppression
du motif)
etc...
|
|
Visualiser l'activité du réseau
Pour visualiser la distribution des poids :
hist(nonzeros(net.J{1}{1}{1}),30);
Pour visualiser la distribution de la somme des poids
afférents :
hist(sum(net.J{1}{1}{1}'),20);
Pour
visualiser l'activité du neurone num
:
plot(net.DYN_X{1}(num,:));
Pour visualiser l'activité moyenne du réseau
:
plot(mean(net.DYN_X{1}));
Pour visualiser l'activité de tous les neurones
:
imagesc(-net.DYN_X{1});colormap(gray);
|
|