TP de réseau de neurone

Perceptron

On se propose d'implémenter un perceptron multiclasses avec pour fonction d'activation g la fonction seuil (la sortie vaut 1 si la valeur d'activation est du même signe que la sortie attendue, 0 sinon). Le perceptron est représenté par une matrice w de taille kx(d+1) avec k le nombre de classes du problème et d la dimension des données en entrée. Les valeurs de w ont initialisées aléatoirement. Le pas d'apprentissage alpha est choisi arbitrairement entre 0 et 1.

Coder le perceptron à l'aide des fonctionnalités suivantes

  1. Calcul de la sortie sigma du perceptron w pour une entrée x
  2. Calcul de l'activation d'un neurone y = g(sigma)
  3. Calcul de delta
  4. Calcul de la mise à jour du perceptron

Par ailleurs, on souhaite visualiser l'évolution de l'apprentissage pour des données en dimension 2. Pour cela on utilisera l'instruction drawnow ainsi que le code suivant :

function plotPerceptron(x,y,k,w)

hold off;
[X,Y] = meshgrid(linspace(min(x(:,1)),max(x(:,1)),100),linspace(min(x(:,2)),max(x(:,2)),100));
pred = testPerceptron([reshape(X,10000,1),reshape(Y,10000,1)],w);
contourf(X,Y,reshape(pred,100,100));
hold on;
colormap('gray');
contour(X,Y,reshape(pred,100,100),[0,0],'r');
color = 'brgymck';
for i=1:k

plot(x(y==i,1),x(y==i,2),[color(i),'+']);

end

end

Afin de tester le perceptron, on utilisera les données synthétiques suivantes : les lignes suivantes permettent de générer des données en dimension 2 avec 4 classes linéairement séparables.

x = rand(n,2)*2-1;
y = ones(n,1);
y(x(:,1)<0) = 2;
y(x(:,2)>0.2) = 3;
y(x(:,2)<-0.5) = 4;

Compte-rendu

Le code obtenu est à envoyer en l'état (partie perceptron) par mail à G. Loosli à la fin des 2h de TP. Il devra être commenté et sera évalué.

MLP : Multi Layer Perceptron

Un travail équivalent est demandé pour apprendre un réseau multicouches. Le réseau devra avoir une unique couche cachée et la fonction d'activation g sera la fonction sigmoïde. Il est représenté par 2 matrices, w et w2 de dimensions respectives k x nbCaches et nbCaches x (d+1) On notera que l'ajout d'une seule couche peut se faire en doublant simplement chaque étape (ex : le calcul de la sortie, c'est le calcul de la sortie de la couche cachée en utilisant les entrées x, puis le calcul de la sortie de la couche de sortie en utilisant le résultat intermédiaire comme entrée).

Compte-rendu

Le code obtenu est à envoyer (partie MLP) par mail à G. Loosli au plus tard la veille de l'examen de data-mining. Il devra être commenté.