Implementación en matlab de una red backpropagation backpropagation para resolver el problema de Caperucita Roja La red backpropagation es una red neuronal que cumple con las siguientes características (Hilera y Martínez, 2000):
Tipo de red: Multicapa – feedforward Mecanismo de aprendizaje: Supervisado. Tipo de aprendizaje Aprendizajes por corrección de error. Tipo de asociación entrada-salida: Red heteroasociativa. Aprendizaje: Offline
Algunos de los campos de aplicación de la red backpropagation son:
Codificación de información Traducción de texto en lenguaje hablado Reconocimiento Reconocimiento en lenguaje hablado Reconocimiento Reconocimiento óptico de caracteres (OCR)
La red puede ser usada también para resolver r esolver problemas menos complejos como el de Caperucita Roja: La mamá de Caperucita Roja le desea enseñar como reaccionar reaccionar antes diferentes personas que se le puedan acercar de acuerdo con algunas características que se pueden identificar.
Si se le acerca alguien con orejas grandes, dientes grandes y ojos grandes es porque es un lobo, Caperucita debe correr, gritar y buscar al leñador. l eñador. Si se le acerca una mujer arrugada y amable, es la abuelita, debe ofrecerle alimento y darle un beso en la mejilla. Si se le acerca un hombre amable y bien parecido, es el leñador, debe darle un beso en la mejilla y coquetearle.
Se describe a continuación la solución del problema y su implementación en Matlab.
Paso No. 1: Definir la estructura de la red backpropaga backpropagation tion La entrada se va a modelar como una matriz de seis columnas (cada una representa las características del personaje) y tres filas, una para cada personaje.
Personaje El lobo La abuelita El leñador
Col1 Orejas grandes
Col2 Dientes grandes
Col3 Ojos grandes
Col4 Arrugado
Col5 Amable
Col6 Bien parecido
La salida se va modelar de forma similar: una matriz de seis columnas (cada reacción de Caperucita) y tres filas, una para cada personaje.
Personaje
Col1 Corre
Col2 Grita
Col3 Busca al leñador
Col4 Ofrece alimento
Col5 Beso en la mejilla
Col6 Coquetea
El lobo La abuelita El leñador
Paso No. 2: Determinar los valores de entrada y salida Los valores asignados a la entrada y salida son valores entre 0 y 1. El valor de 0 representa que la característica o acción NO se presenta, el valor de 1 representa que la característica o acción SI se presenta. Los valores de entrada y salida para cada personaje se presentan en la siguiente tabla:
El lobo Entrada
Salida
Col1 Orejas grandes 1
Col2 Dientes grandes 1
Col1 Corre
Col2 Grita
1
1
Col3 Ojos grandes 1 Col3 Busca al leñador 1
Col4 Arrugado
Col5 Amable
0
0
Col4 Ofrece alimento 0
Col6 Bien parecido 0
Col5 Beso en la mejilla 0
Col6 Coquetea
Col4 Arrugado
Col5 Amable
1
1
Col6 Bien parecido 0
0
La abuelita Entrada
Salida
Col1 Orejas grandes 0
Col2 Dientes grandes 0
Col1 Corre
Col2 Grita
1
1
Col3 Ojos grandes 0 Col3 Busca al leñador 1
Col4 Ofrece alimento 0
Col5 Beso en la mejilla 0
Col6 Coquetea
Col4 Arrugado
Col5 Amable
0
1
Col6 Bien parecido 1
0
El leñador Entrada
Salida
Col1 Orejas grandes 0 Col1
Col2 Dientes grandes 0
Col3 Ojos grandes 0
Col2
Col3
Col4
Col5
Col6
Corre
Grita
0
0
Busca al leñador 0
Ofrece alimento 0
Beso en la mejilla 1
Coquetea 1
Paso No. 3: Determinar las variables de la red Para el entrenamiento de la red backpropagation en matlab se definen 3 variables:
Neuronas: Número de neuronas usadas en la red Epochs: Número máximo de iteraciones de entrenamiento de la red Error: Máximo error permitido en la salida
Las variables serán modificadas varias veces hasta obtener una salida cercana a la esperada.
Paso No. 4: Realizar pruebas de entrenamiento Intento A El primer intento se realizó con 5 neuronas y un error de 0.01, el entrenamiento se realizó en 1 epoch. El resultado de la simulación de la entrada con esta red fue: 0.9614 0.9614
0.9614 0.0740 -0.0014 0.0208
0.0337
0.0337
0.0337
0.9330
1.0049
0.4694
0.1356
0.1356
0.1356
0.9307
1.0031
0.4042
Intento B El segundo intento se realizó con 5 neuronas y un error de 0.0001, el entrenamiento se realizó en 3 epochs. El resultado de la simulación de la entrada con esta red fue: 0.9999 0.9999
0.9999 0.0273 -0.0000 0.0007
-0.0000 -0.0000 -0.0000 0.9782 1.0001 0.4499 0.0009
0.0009
0.0009
0.9790
1.0000
0.4655
Intento C El tercer intento se realizó con 5 neuronas y un error de 0.000001, el entrenamiento se realizó en 4 epochs. El resultado de la simulación de la entrada con esta red fue: 0.9999 0.9999
0.9999 0.0273 -0.0000 0.0007
-0.0000 -0.0000 -0.0000 0.9782 1.0001 0.4499 0.0009
0.0009
0.0009
0.9790
1.0000
0.4655
Intento D El cuarto intento se realizó con 10 neuronas y un error de 0.000001, el entrenamiento se realizó en 2 epochs. El resultado de la simulación de la entrada con esta red fue: 1.0001 1.0001
1.0001 -0.0008 0.0001
0.0002
-0.0001 -0.0001 -0.0001 0.9991 0.9999 0.9999 0.0001
0.0001
0.0001
1.0003
1.0001
1.0003
Intento E El quinto intento se realizó con 10 neuronas y un error de 0.00000001, el entrenamiento se realizó en 3 epochs. El resultado de la simulación de la entrada con esta red fue: 1.0000
1.0000
1.0000 -0.0000 -0.0000 -0.0000
-0.0000 -0.0000 -0.0000 1.0000 1.0000 1.0000 0.0000
0.0000
0.0000
1.0000
1.0000
1.0000
Paso No. 5: La prueba Después de encontrarse la red entrenada para los personajes principales, se va a probar cómo reacciona Caperucita Roja ante nuevos personajes:
Personaje 1: Un leñador bien parecido pero que no es amigable Personaje 2: Un leñador que es amigable, pero es medio arrugado y no muy bien parecido. Personaje 3: Una abuelita de grandes ojos, arrugada, amable y más o menos simpática.
Los valores dados a cada característica de cada personaje se resumen en la siguiente tabla, la cual constituye la entrada de la red neuronal.
Característica Personaje Personaje 1 Personaje 2 Personaje 3
Col1 Orejas grandes 0 0 0
Col2 Dientes grandes 0 0 0
Col3 Ojos grandes 0 0 1
Col4 Arrugado
Col5 Amable
0 0.5 1
0 1 1
Col6 Bien parecido 1 0.5 0.5
Después de realizar la simulación de la red con los datos de prueba, se obtienen los siguientes resultados.
Característica Personaje
Col1 Corre
Col2 Grita
Col3 Busca al leñador
Col4 Col5 Col6 Ofrece Beso en la Coquetea alimento mejilla
Personaje 1 Personaje 2 Personaje 3
0.3774 1.0404 0.1388
0.3774 1.0404 0.1388
0.0000 1.0000 1.0000
-0.0990 0.9614 1.2596
0.0000 1.0000 1.0000
0.1511 0.7112 0.3451
Programa en matlab clc; neuronas = 10; error = 0.00000001; iteraciones = 20; % Entradas % col1 col2 % Orejas Dientes
Ojos
col3 col4 col5 Arrugado Amable
col6 Bien parecido
entrada=[[1 1 1 0 0 0]; [0 0 0 1 1 0]; [0 0 0 0 1 1]]; % Salidas % col1 col2 col3 col4 col5 col6 % Correr Gritar Busca leñador Ofrece alimento Beso mejilla Coquetea salida=[[1 1 1 0 0 0]; [0 0 0 1 1 1]; [0 0 0 1 1 1]] % Se inicia la red net = newff(entrada, salida, neuronas); % Se definen los parámetros de entrenamiento net.trainParam.epochs=iteraciones; net.trainParam.goal=error; % Se entrena la red net = train(net, entrada, salida); % Se simula la red con la entrada Y = sim(net,entrada) % Se simula la red con la prueba prueba = [[0 0 0 0 0 1]; [0 0 0 0. prueba = [[0 0 0 0 0 1]; [0 0 0 0.5 1 0.5]; [0 0 1 1 1 0.5]]; Y = sim(net, prueba)