Ejercicio de programación: Entrenamiento del perceptrón Inteligencia Artificial
1. Introducción. En este ejercicio usted implementará el algoritmo de una red neuronal monocapa de tipo perceptrón. La implementación deberá realizarla en un script .m de MATLAB que contiene una función cuyo archivo base se encuentra adjunto.
2. Archivos incluidos en el ejercicio. entrenap.m – Código base de la función en la que debe incluir su código.
3. Algoritmo de entrenamiento del perceptrón El perceptrón es un clasificador que forma parte de las redes conocidas como redes de aprendizaje supervisado. Este tipo de redes neuronales se caracterizan por necesitar patrones de entrenamiento para el ajuste de los valores de sus pesos sinápticos. Los patrones de entrenamiento están formados por duplas , en donde corresponde al vector de entrada o vector de características y al valor esperado de salida.
{,}
Por ejemplo, si quisiéramos entrenar a un perceptrón para que se comporte como una compuerta AND de dos entradas, tendríamos las siguientes duplas:
1{[0 0], 0} 2{[1 0], 0],00} 3{[1 0], 0} 4{[1 1], 1}
De forma matricial las duplas pueden ser representadas por una matriz de entradas y un
vector de salidas :
= 00 10 10 = [0 0 0
1 1 1]
en donde cada columna de y representan la dupla correspondiente. Para el entrenamiento de una red de tipo perceptrón se utiliza un algoritmo por corrección de error. Básicamente se presenta una dupla de entrenamiento a la red y se calcula su salida. Se calcula el error obtenido y se actualizan los pesos sinápticos. El entrenamiento termina cuando se ha alcanzado un error de cero para todas las duplas o patrones de entrenamiento o cuando se ha superado el número de iteraciones establecidas previamente.
En síntesis, el algoritmo de entrenamiento para un perceptrón es:
− é dupla o patrón de entrenamiento a la red y calcular su salida: = ℎ( ). Calcular el error obtenido por la red: = ( − ) Actualizar la matriz/vector de pesos sinápticos: = +∝
1. Presentar la 2.
3. 4. Repetir el punto 1 hasta que el error para todos los patrones de entrenamiento sean
cero o hasta que se supere el número de iteraciones programadas.
4. Implementación del algoritmo Para la implementación del algoritmo debe usar el archivo entrenap.m que se encuentra adjunto. En dicho archivo se ha programado una función base en donde deberá incluir su código correspondiente al algoritmo de entrenamiento. A continuación se detalla el código base de la función: % % % % % % % % % % % % % % % % % % % % % % % % % % %
Wn = entrenap(P,t,Wo,iter,alpha) Esta función realiza el entrenamiento de una red de tipo perceptrón de una sola capa. Como parámetros de entrada la función tiene: P -> Matriz con los patrones de entrenamiento. La última fila corresponde a la entras del bias. t -> Vector con los valores de salida esperados Wo -> Matriz de pesos sinápticos inicial. La última fila corresponde al bias Wn -> Matriz con los pesos sinápticos entrenados. La última fila corresponde al bias. alpha -> Valor escalar que representa la tasa de aprendizaje P,Wo,Wn deben estar en formato columna. t debe estar en formato fila. Ejemplo: Si queremos entrenar la red neuronal con una función AND de dos entradas, tendríamos: p1 | p2 | t 0 | 0 | 0 0 | 1 | 0 1 | 0 | 0 1 | 1 | 1 P=[0 0 1 1; 0 1 0 1; 1 1 1 1] Wo=[0.3 ; -0.2; 0.3] t=[0 0 0 1] Wn=entrenap(P,t,Wo,1000,1);
% Autores: % Escriba aquí el nombre de autor 1 % Escriba aquí el nombre del autor 2 function Wn=entrenap(P,t,Wo,iter,alpha)
% PROGRAME AQUÍ SU CÓDIGO PARA EL ENTRENAMIENTO DE LA RED. % Su algoritmo debe funcionar para una red con cualquier % número de neuronas en la capa de salida. Recuerde que su % respuesta final debe ser almacena en la variable Wn, para que sea % correctamente devuelta por la función.
5. Prueba del algoritmo 5.1 Prueba del algoritmo para una red con una sola neurona y sin bias.
Para probar su algoritmo puede utilizar el siguiente código: P=[1 -1 0; 2 2 -1]; t=[1 0 0]; Wo=[1; -0.8]; Wn=entrenap(P,t,Wo,10000,1)
% Matriz de entrenamiento % Vector de salidas esperadas % Pesos sinápticos iniciales %Función de entrenamiento
Como resultado usted debería esperar: Wn = 3.0000 0.2000
Prueba del algoritmo para una red de varias neuronas y bias. 5.2 Prueba del algoritmo para una red con múltiples neuronas de salida y con bias.
Para probar su algoritmo puede utilizar el siguiente código: P=[0 1 0 1; 0 0 1 1; 1 1 1 1] % Matriz de entrenamiento con 1 para el bias t=[0 0 0 1; 0 1 1 1; 1 0 0 0] % Matriz de salida (3 neuronas) Wo=[1 -0.8 0; 1 -0.8 0; 1 -0.8 0] % Pesos sinápticos incluido el bias Wn=entrenap(P,t,Wo,30000,1)
Como resultado usted debería esperar: Wn = 1.0000 1.2000 -1.0000 2.0000 1.2000 -1.0000 -3.0000 -0.8000 0