PONTIFICIA UNIVERSIDAD CATÓLICA DEL ECUADOR FACULTAD DE INGENIERÍA Apuntes de Inteligencia Artificial Laboratorio: Perceptrón Simple JORGE AGUILAR JARAMILLO LABORATORIO 1: NEURONA Y PERCEPTRON SIMPPLE Objetivos. Breve revisión de la herramienta Matlab Reforzar el conocimiento adquirido sobre la neurona artificial y el perceptrón de Rosemblatt Implementar el algoritmo visto en clase del perceptrón, pero para neuronas lineales , que acepten cualquier valor Revisar las funciones que implementa Matlab para este caso: o newp y sim 3.1 LA NEURONA. 1. Revise los dos demos que trae Matlab1 sobre la neurona y observe como el valor de los pesos influye en la pendiente, y el valor de b en su ubicación en el eje de las y. 2. Pruebe las diferentes funciones 3. Observe en el segundo demo como varía la salida de la neurona en función de los valores de pesos W y b. 3.2 EL PERCEPTRON El perceptrón es una neurona con una función de transferencia escalón y un mecanismo de ajuste de pesos (aprendizaje) que compara la salida real, yd con la respuesta de salida de la red, y, para cualquier entrada o estímulo dado. Los Perceptrones son bien definidos para reconocimiento/clasificación de patrones El mecanismo de ajuste de pesos se llama regla de aprendizaje del perceptrón. 1 Para ir a los demos, una vez abierto Matlab, en la ventana de comandos, escriba demo. Se abrirá una nueva ventana en la que debe ir al Neural Network que se encuentra en el toolbox. Aquí encontrará los demos de la neurona (neurons) y del perceptron. 51 Jorge Aguilar J. Ilustración 1.‐ Esquema de un perceptrón simple (matlab, 2006) Matlab trae 6 demos para este tipo de redes: 1. Fronteras de decisión (Decision Boundaries) 2. Perceptrón learning rule 3. Classification with a 2‐input perceptrón 4. Outlier input vectors 5. Normalized perceptrón rule 6. Linearly non‐separable vector En el primer ejemplo, (Decision Boundaries), se observa como la definición del vector de pesos y el valor de b (umbral) define la frontera de separación entre las dos clases. En el segundo ejemplo, se aplica la regla del perceptrón, en el que se tiene las opciones de aplicar o no un bias (umbral): La opción learn aplica la regla a un solo ejemplo. 52 Jorge Aguilar J. La opción Train aplica el algoritmo hasta 5 datos, por esta razón normalmente se necesita correr más de una vez esta opción para encontrar una solución. Los demos del 3 al 6, muestran el aprendizaje de esta red para algunos casos particulares 3.3 EJEMPLO DE CLASIFICACIÓN Consideremos un ejemplo de clasificación de 2 clases: Consideremos los 5 ejemplos de la figura: 1 0.8 x1 x2 yd (clase) 0.6 0.2 1 (azul) ‐0.2 0.9 1 (azul) ‐0.3 0.4 0 (rojo) 0.1 0.1 0 (rojo) 0.5 ‐0.6 0 (rojo) 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -0.4 -0.2 0 0.2 0.4 0.6 0.8 Resolvamos este problema en Matlab, aplicando un algoritmo como el revisado en clase, para luego resolverlo con las funciones que implementa Matlab para el perceptrón. % Ejemplo de entrenamiento del PS. % Declaramos el vector de entrada P (tomando la convención de Matlab) % y el vector de salida T e inicializamos los pesos, W y el bias (b) P=[0.6 -0.2 -0.3 0.1 0.5; 0.2 0.9 0.4 0.1 -0.6]; T=[1 1 0 0 0]; W=[-2 2]; b=-1; % Graficamos estos datos de entrada y clase (0 y 1) juntamente con la frontera de separación: los valores iniciales. plotpv(P,T); % función para graficar los datos 53 Jorge Aguilar J. plotpc(W,b); % función para graficar la recta % Definimos un contador para el número de épocas que se refiere al % conjunto de todos los datos nepoc=0 % calculamos la salida del perceptrón, para estos datos. Y=hardlim(W*P+b); % Introducimos un lazo que ajuste los pesos mientas no se % cumpla la condición de tener la salida del sistema igual a la salida % deseada. while any(Y~=T) Y=hardlim(W*P+b); % Salida de la red E=T-Y; % Error [dW,db]= learnp(P,E); % Aprendizaje W=W+dW; % Modificación de pesos b=b+db; % Modificación del valor de b nepoc=nepoc+1; disp('epochs='),disp(nepoc), disp(W), disp(b); plotpv(P,T); plotpc(W,b); pause(1); end Copie este código en un archivo .m en Matlab (ejemplo, lab01.m) en alguna carpeta definida (por ejemplo (C:\Matlab701\Work\LabIA\) Defina esta carpeta en el ambiente de Matlab: 1. Vaya el menú File en Matlab a la opción Set Path; 2. En la nueva ventana que se despliega haga clic en Add Folder y vaya a la carpeta en la que grabó los archivos. 3. Selecciónela y haga clic en Aceptar 4. La nueva carpeta le aparecerá en la ventana Matlab search path 54 Jorge Aguilar J. 5. Ejecute los botones de control Save y Close Ahora si puede ejecutar el programa, tecleando su nombre del archivo en el Command Window de Matlab Vectors to be Classified Vectors to be Classified 1.5 1.5 1 1 0.5 P(2) P(2) 0.5 0 0 -0.5 -0.5 -1 -1 -0.6 -0.4 -0.2 0 0.2 P(1) 0.4 0.6 0.8 1 Los pesos definidos no son una solución al problema -0.6 -0.4 -0.2 0 0.2 P(1) 0.4 0.6 0.8 1 Luego de 11 iteraciones la red ha encontrado una solución a este problema RESOLUCIÓN DEL MISMO EJEMPLO DE CLASIFICACIÓN USANDO LAS FUNCIONES DE MATLAB: NEWP Matlab usa la función newp para crear una red perceptrón. Esta función tiene cuatro parámetros de entrada y el resultado (salida de la función) es la red perceptrón. red = newp(pr,s,tf,lf) Donde: pr – matriz de los valores máximos y mínimos de los datos de entrada (Nx2), donde N es el número de variables de entrada s ‐ Número de neuronas. tf – función de transferencia, por defecto = 'hardlim'. 55 Jorge Aguilar J. lf – función de aprendizaje, por defecto = 'learnp'. red la red perceptrón Por lo que, el mismo ejemplo que acabamos de ver, usando la funcion que trae Matlab para definir la red perceptrón se tiene: % Declaramos el vector de entrada P y El vector de salida T. P=[0.6 ‐0.2 ‐0.3 0.1 0.5; 0.2 0.9 0.4 0.1 ‐0.6]; T=[1 1 0 0 0]; % Graficamos plotpv(P,T); % Creamos el objeto red y le asignamos a la variable net: net = newp([-0.3 0.6; -0.6 0.9],1); % definimos el número de pases a 11 (como en el caso anterior) entrenamos la red y graficamos los resultados net.adaptParam.passes = 11; net = adapt(net,P,T); plotpc(net.IW{1},net.b{1}); Normalmente se entrena una red para que una vez que aprende, esta sirva para ejemplos nuevos, de los cuales no conocemos la salida y queremos conocer la salida de la red. Matlab trae otra función para clasificar ejemplos nuevos con los que no ha sido entrenada la red: la función sim. Es decir sim da la salida de la red, el y, dándole los datos de entrada y obviamente el objeto net, definido anteriormente: y = sim(net,p); Veamos la aplicación de esta función. Si definimos un dato de entrada, la red debe clasificarlo correctamente. Consideremos el ejemplo. p = [‐0.56; 0.1]; % calculamos la salida de la red. y = sim(net,p); plotpv(p,y); point = findobj(gca,'type','line'); set(point,'Color','red'); 56 Jorge Aguilar J. hold on; plotpv(P,T); plotpc(net.IW{1},net.b{1}); hold off; Como se observa en la figura la red clasifica en forma correcta el nuevo dato (graficado de color rojo). Vectors to be Classified 1.5 1 P(2) 0.5 0 -0.5 -1 -0.6 -0.4 -0.2 0 0.2 P(1) 0.4 0.6 0.8 1 PREGUNTAS A RESOLVER. Pruebe dos clases que no sean linealmente separables. ¿Qué se observa? ¿Por qué ocurre esto? Resuelve el caso de dos clases en las que se tenga los datos separados, como se muestra en la figura. ¿Existe alguna diferencia en el entrenamiento con los ejemplos vistos. Cuál es? 57 Jorge Aguilar J. 2 1.5 1 0.5 0 -0.5 -1 -1.5 -2 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 58 Jorge Aguilar J.