Download Trabajo - DavidHorat.com

Document related concepts

Propagación hacia atrás wikipedia , lookup

RNA de base radial wikipedia , lookup

Perceptrón wikipedia , lookup

Adaline wikipedia , lookup

Perceptrón multicapa wikipedia , lookup

Transcript
Índice
1. Problema a resolver ...................................................................................................... 2
2. Estudio teórico de las redes Backpropagation.............................................................. 3
3. Arquitectura y regla de aprendizaje de la red ............................................................... 4
Arquitectura .............................................................................................................. 4
Regla de aprendizaje. Regla delta generalizada ....................................................... 5
4. Resolución .................................................................................................................. 10
Caracterización del problema ................................................................................. 10
Configuración ......................................................................................................... 11
Entrenamiento......................................................................................................... 12
Metodología de las pruebas .................................................................................... 14
5. Resultados y análisis................................................................................................... 15
Efecto de la tasa de aprendizaje.............................................................................. 15
Efecto del orden de presentación de los patrones................................................... 21
Importancia de las condiciones iniciales ................................................................ 23
Entrenamiento en situaciones de ruido................................................................... 27
6. Conclusiones............................................................................................................... 29
7. Bibliografía................................................................................................................. 30
1. Problema a resolver
En esta práctica tendremos que crear una red neuronal que reconozca caracteres
y estudiar la influencia de la representación de la información en la efectividad del
reconocimiento. Hemos seleccionado 26 caracteres (A-Z) para que sean reconocidos.
Para ello usaremos una red neuronal de tipo Back Propagation ya que, como hemos
visto en prácticas anteriores, las limitaciones del Perceptrón nos impedirían realizarla.
Así mismo estudiaremos el funcionamiento, topología, neurodinámica, aprendizaje y
aplicabilidad de las redes Back Propagation.
2
2. Estudio teórico de las redes Backpropagation
En 1986, Rumelhart, Hinton y Williams, formalizaron un método para que una
red neuronal aprendiera la asociación que existe entre los patrones de entrada y las
clases correspondientes, utilizando varios niveles de neuronas.
El método backpropagation (propagación del error hacia atrás), basado en la
generalización de la regla delta, a pesar de sus limitaciones, ha ampliado de forma
considerable el rango de aplicaciones de las redes neuronales.
El funcionamiento de la red backpropagartion (BPN) consiste en el aprendizaje
de un conjunto predefinido de pares de entradas-salidas dados como ejemplo: primero
se aplica un patrón de entrada como estímulo para la primera capa de las neuronas de la
red, se va propagando a través de todas las capas superiores hasta generar una salida, se
compara el resultado en las neuronas de salida con la salida que se desea obtener y se
calcula un valor de error para cada neurona de salida. A continuación, estos errores se
transmiten hacia atrás, partiendo de la capa de salida hacia todas las neuronas de la capa
intermedia que contribuyan directamente a la salida, recibiendo de error aproximado a
la neurona intermedia a la salida original. Este proceso se repite, capa por capa, hasta
que todas las neuronas de la red hayan recibido un error que describa su aportación
relativa al error total. Basándose en el valor del error recibido, se reajustan los pesos de
conexión de cada neurona, de manera que en la siguiente vez que se presente el mismo
patrón, la salida esté más cercana a la deseada.
La importancia de la red backpropagation consiste en su capacidad de
autoadaptar los pesos de las neuronas de las capas intermedias para aprender la relación
que existe ente un conjunto de patrones de entrada y sus salidas correspondientes. Es
importante la capacidad de generalización, facilidad de dar salidas satisfactorias a
entradas que el sistema no ha visto nunca en su fase de entrenamiento. La red debe
encontrar una representación interna que le permita generar las salidas deseadas cuando
se le dan entradas de entrenamiento, y que pueda aplicar, además, a entradas no
presentadas durante la etapa de aprendizaje para clasificarlas.
3
3. Arquitectura y regla de aprendizaje de la red
Arquitectura:
La red de Back Propagation está formada por 3 capas: la capa de entrada, una
capa oculta y la capa de salida. Las neuronas están completamente interconectadas entre
capas adyacentes, siempre en el sentido entrada Æ oculta Æ salida.
Representaremos la red así:
1
1
Wh
x
Entrada
WS
h
NI
1
NH
Oculta
y
NS
Salida
La función de salida de las capas oculta y de salida es una función escalón (de
umbral). Como veremos más adelante, para desarrollar la regla de aprendizaje de la red
(la regla delta generalizada) es preciso que la función de salida empleada sea derivable.
La función escalón no lo es (aunque tiene derivada generalizada: la función delta de
Dirac), por lo que se emplea la función sigmoide, que es ésta:
Y ésta es su gráfica:
4
Una propiedad de la sigmoide que usaremos luego es que su derivada es así:
Éstas son, por tanto, las ecuaciones de proceso de la red:
Regla de aprendizaje. Regla delta generalizada:
Veamos ahora cómo se obtiene la regla de aprendizaje de la red. Back
Propagation, como se dijo antes, usa la llamada regla delta generalizada. Ésta es una
generalización de la regla de Widrow-Hoff a redes con cualquier función de activación,
cualquier función de salida, y cualquier número de capas. Se deduce para la red de Back
Propagation de la misma forma con que se hacía para el ALC:
5
Llamamos
a la salida deseada, y
al vector de error (
).
Buscamos minimizar la función de error cuadrático medio:
El método para minimizar la función es también el mismo: seguir el camino
opuesto al gradiente de la función. La regla de actualización de pesos es, por tanto:
Empezaremos por el gradiente según la capa de salida. Todas las constantes
positivas que vayan apareciendo de aquí en adelante las incorporaremos en la tasa de
aprendizaje, α.
La derivada que resulta es 0 excepto cuando k=i. Esto es así porque en el error
que genera el peso wSij no intervienen los pesos que van hacia las otras neuronas de
salida. Es por tanto:
6
Vemos cómo la expresión de los elementos del gradiente del error cuadrático
medio ha cambiado al haber cambiado la función de salida: Se ven multiplicados por el
valor de la derivada de dicha función. En realidad, esto también sucedía para la regla de
Widrow-Hoff, sólo que, en ese caso, al ser la función de salida la función identidad, su
derivada era 1 y no aparecía.
En aquel caso, era:
Ahora es:
Siendo el nuevo vector de error (el * representa al producto elemento a
elemento):
Es por este motivo que, a la hora de escoger una función de salida, es importante
que su derivada se pueda expresar fácilmente en función de su valor actual. Esto sucede,
además de con la sigmoide, por ejemplo, con la tangente hiperbólica. Es fácil saber eso
teniendo en cuenta que tanh(x)=2·σ(2x)-1. Si la función de salida fuera la tangente
hiperbólica, como en el caso del Back Propagation del SNNS, sería concretamente:
En definitiva, para los pesos de la capa de salida es:
Procedamos ahora a calcular el gradiente desde la capa oculta;
7
De nuevo nos encontramos con una derivada de esta forma:
Si llamamos:
Podemos escribir:
8
Resulta entonces para los pesos de la capa oculta:
La regla de aprendizaje de la red Back Propagation queda, en resumen, así:
O, de otra manera:
9
4. Resolución
Caracterización del problema:
Cómo ya hemos comentado, lo que queremos es construir una red de tipo Back
Propagation que nos reconozca un conjunto de 26 caracteres: [A, B, C, D, E, F, G, H, I,
J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z].
Para ello primero hemos de disponer de una capa de entrada, que en nuestro caso
será una lattice de 7 x 5. La capa intermedia (capa oculta), que es la encargada de
extraer las características de los patrones de entrada, será de 10 elementos. Y la capa de
salida será de 8 elementos que representarán las potencias de 2 desde 0 hasta 7 que nos
permitirán la representación de 256 elementos. Hemos elegido esta representación para
que se corresponda con el estándar ASCII, aunque en esta práctica sólo reconozcamos
26 caracteres. La representación gráfica la podemos encontrar en la figura 1, que viene a
continuación:
Figura 1
10
Una vez creada la estructura de la red que mostramos en la Figura 1, creamos el
fichero de patrones, cuyas entradas serán las letras de la A a la Z representadas en la
lattice de 7x5 y cuyas salidas serán las codificaciones que ya comentamos.
Configuración:
Cuando hayamos cargado tanto la red como el fichero de patrones, tendremos
que entrenar dicha red. Para ello seleccionamos el botón “Control” del SNNS, y nos
aparece la siguiente ventana (Figura 2):
Figura 2
Configuramos con ella la red de la siguiente manera:
•
El cuadro a la derecha de CYCLES indica el número de iteraciones
que se realizará. Podemos ponerlo tranquilamente a 500.
•
El cuadro a la derecha de LEARN indica la tasa de aprendizaje. Luego
veremos los resultados de utilizar distintos valores aquí. Si queremos
que converja lo podemos poner entre 0.3 y 0.7. Por ejemplo, a 0.5.
11
•
El botón llamado SEL. FUNC a la derecha de LEARN sirve para
establecer
la
regla
de
aprendizaje.
Hemos
de
usar
“Std_BackPropagation”.
•
El botón SEL. FUNC a la derecha de INIT sirve para elegir como
serán los pesos iniciales de las conexiones. Queremos que sean
aleatorios,
por
lo
que
escogeremos
la
primera
opción:
“Randomize_Weights”.
•
Los dos cuadros de texto a la derecha de INIT sirven para establecer el
rango de esos pesos aleatorios. Funcionan de la siguiente manera: El
valor del cuadro de la derecha es proporcional al rango de valores, de
modo que 50 000 da una amplitud de 1 (por ejemplo, de -0.5 a 0.5). Si
queremos que vayan de -1 a 1 pondremos 100 000, etc. El cuadro de la
izquierda indica el valor central del rango, aunque algo desplazado
hacia el límite inferior. Por lo general se puede poner la media entre el
valor central del rango y el límite inferior, y si los pesos no quedan del
todo bien, modificar el valor en el sentido que corresponda. Para
obtener unos pesos entre -0.5 y 0.5 los ponemos a -0.3 y 50 000.
Entrenamiento:
Para asignar a los pesos los valores aleatorios que indicamos al configurar,
hemos de darle al botón INIT. Podemos ver los pesos en tiempo real desde la ventana de
Weight Visualization (Figura 3), a la que accedemos pulsando el botón “Weights” del
SNNS.
Se configura fácilmente el rango de colores desde la ventana que aparece al
pulsar el botón SETUP.
12
Figura 3
En el eje de abcisas se numeran las 35 neuronas de la capa de entrada y las 10 de
la capa oculta (36 – 45). En el eje de ordenadas aparecen las de la capa oculta (36 – 45)
y las de salida (46 – 53).
Para que el SNNS vaya calculando el error cuadrático medio en cada iteración
del aprendizaje y lo represente gráficamente hemos de abrir la ventana “Graph”.
Además hemos de asegurarnos de que a la derecha de Display: esté seleccionado MSE
(mean squared error; error cuadrático medio), como se muestra en la Figura 4.
Figura 4
Finalmente, para entrenar la red con los patrones que cargamos, pulsamos el
botón ALL de la ventana de Control. Una vez ha terminado el entrenamiento, podemos
comprobar la respuesta de la red a los patrones que queramos así:
Abrimos la ventana de “Display”, en la que se muestran las neuronas de la red.
En la ventana de Control, haciendo clic en el botón USE del grupo PATTERN podemos
13
escoger qué fichero de patrones, de entre los que tenemos cargados, vamos a probar.
Finalmente, comprobamos la respuesta de la red a cada patrón haciendo clic en el botón
TEST (grupo PATTERN) repetidas veces.
Metodología de las pruebas:
Era necesario poder comparar con rigor el efecto que tienen los distintos
parámetros de la red sobre su aprendizaje. Por eso, creamos una distribución aleatoria
de pesos (entre -0.5 y 0.5) y la guardamos, de modo que todas las pruebas partirían de
los mismos pesos iniciales y así no intervendría el azar.
Estos fueron los pesos guardados (Están almacenados en el fichero
“caracteres.net”, a plena disposición):
Figura 5
14
5. Resultados y análisis
Efecto de la tasa de aprendizaje:
Al iterar con una tasa de aprendizaje de 0.2, que es el valor que se usa por
defecto, comprobamos cómo la red se queda estancada en un mínimo local de error
0.04.
Gráfica 1
Un vistazo a las respuestas que da la red permite comprobar que el error está en
el reconocimiento de la letra O, que interpreta como una G (Figura 6):
15
Figura 6
Con una tasa de 0.22 se obtiene el efecto curioso de pasar muy cerca del mínimo
local pero finalmente sobrepasarlo, llegando la red a converger, tal y como muestra la
gráfica del error cuadrático medio:
Gráfica 2
16
Éste es un detalle de la zona donde se sobrepasa el mínimo local:
Gráfica 3
Los pesos entre ambos estados de aprendizaje apenas cambian, como se
comprueba en las siguientes imágenes:
Pesos en el mínimo local
17
Pesos en el mínimo global
Es elemental el hecho de que a quienes hay que prestar atención es a las
conexiones salientes de las neuronas 15, 18 y 19 y a las entrantes a la neurona 50
(Figura 7).
Los pesos desde la neurona 15 apenas cambian. Desde las neuronas 19 y 18 se
puede apreciar un tenue aumento en la inhibición que ejercen sobre las neuronas 37 y
38 respectivamente. En cuanto a las conexiones que entran en la neurona 50, vemos
cómo el único cambio apreciable es que las conexiones que le vienen de las neuronas 37
y 38 se han reforzado.
Vemos en la Figura 7 cómo esta vez la respuesta ante la letra O es la correcta.
18
Figura 7
Con una tasa de aprendizaje de 0.5 la red converge sin problemas, y en unas 275
iteraciones, tal y como se aprecia en la gráfica:
19
Gráfica 4
Los pesos finales son los siguientes:
Figura 8
20
La tasa de aprendizaje puede subir más, e incluso pasar de 1.0, sin que la
convergencia de la red se vea afectada. Con el juego de pesos iniciales con el que
trabajamos, se puede llegar hasta una tasa de aprendizaje, de 1.7.
Con 1.75, por ejemplo, la red cae en un curioso mínimo local: En él todas las
respuestas de la red a los patrones de entrada son correctas, excepto para la letra Q, ¡que
identifica como una A! (Figura 9)
Figura 9
Con valores a partir de 1.8, la red oscila de forma brusca por el espacio de pesos,
lográndose rara vez la convergencia en un mínimo global.
Efecto del orden de presentación de los patrones:
Cuando los patrones de entrada se pueden agrupar en un pequeño número de
clases con importantes diferencias de forma entre sí, hay que prestar atención al orden
en que se presentan los patrones a la red: Si se realiza clase a clase, es más que probable
21
que la red se vaya olvidando de la clase anterior mientras itera en una nueva. El efecto
es similar al de orbitar alrededor del mínimo en el espacio de pesos.
Lo más apropiado en casos así es presentar los patrones a la red de manera
aleatoria, de modo que a lo largo de un cierto número de iteraciones queden
representadas todas las clases casi por igual. Hacer esto evita la otra solución al
problema, que es disminuir la tasa de aprendizaje, que es como pasar los patrones ante
la red más rápidamente.
Con una tasa de aprendizaje de 0.5 (que conservaremos también para el resto de
pruebas), éste es un resultado típico de los que se dan al iterar escogiendo los patrones
al azar.
Gráfica 5
Se ve nítidamente cómo la red sale del mínimo local de error 0.04 al
presentársele de forma consecutiva los patrones a los que no respondía bien en ese
estado (causa de la subida repentina del error cuadrático medio).
Se alcanzó finalmente la siguiente configuración de pesos:
22
Figura 10
Importancia de las condiciones iniciales:
Para estas pruebas dejamos la tasa de aprendizaje a 0.5, y variamos el rango de
los pesos iniciales. Tomamos en algunos casos varias muestras con el mismo rango
(pero distinta configuración inicial, al ser aleatoria) para comprobar que las variaciones
no eran debidas a la aleatoriedad de los pesos.
Así, usamos las siguientes configuraciones iniciales:
23
La evolución del aprendizaje de cada uno, de izquierda a derecha y de arriba
abajo, fue:
24
Rango [-0.5, 0.5]
Rango [-1.0, 1.0]
Rango [-4.0, 4.0]
Rango [-0.25, 0.25]
25
Rango [-0.25, 0.25]
Rango [-0.01, 0.01]
Con pesos iniciales entre ±0.5, el error cuadrático medio baja de 0.01 en 250 300 iteraciones.
Aumentando el rango a ±1.0, se tarda entre 300 y 350 iteraciones de bajar del
0.01 de error.
Con un rango de pesos iniciales entre ±4.0 se rondan los mínimos locales, por lo
que (como se comprueba en la gráfica) es una mala zona para que la red comience su
aprendizaje.
Si cerramos el rango hasta ±0.25, el número de iteraciones para bajar de 0.01 de
error apenas varía: entre 250 y 300.
Pero cerrando más allá, hasta ±0.01, la red tiene que invertir un número
considerable de iteraciones en “hacer arrancar” los pesos, con lo que acaba necesitando
400 iteraciones. La explicación de este fenómeno es fácil si imaginamos que el espacio
de pesos sólo tiene 2 variables, y es por tanto un campo de alturas. Bien, si en alguna
parte de ese campo hay una colina (máximo local), conseguimos antes que una bola
ruede cuesta abajo si la soltamos en la falda de la colina que si la soltamos en el centro,
donde apenas hay pendiente (gradiente cero).
26
Entrenamiento en situaciones de ruido:
En el libro “Redes Neuronales: Algoritmos, Aplicaciones y Técnicas de
programación” [NNAAPT] de Freeman y Skapura, los autores afirman que si una red de
Back Propagation ha de funcionar en un entorno con ruido, en su adiestramiento hay
que incluir algunos patrones de entrada con ruido. Además afirman que en algunos
casos hacer esto ayuda a la red a converger, aunque su propósito no sea el filtrado de
ruido.
Pues bien, preparamos una tanda de patrones formada por las 26 letras habiendo
añadido cambios aleatorios en la activación de algunos de los píxeles. Además,
preparamos un fichero de patrones similar al que usábamos originalmente en el
entrenamiento pero añadiendo, para cada letra, una réplica ruidosa de ésta. El ruido no
debía ser el mismo en los dos ficheros, por supuesto, sino aleatorio e independiente del
patrón.
Con la misma tasa de aprendizaje de 0.5, la red a la que suministramos patrones
de entrada sin y con ruido evolucionó así:
Gráfica 6
27
El aumento en la velocidad de convergencia es sólo aparente, ya que en cada
iteración se aplica dos veces cada patrón (una normal y otra con ruido). Por tanto las
165 iteraciones que tarda la red en bajar del error 0.01 equivalen a 330 iteraciones
“normales”.
Una vez teníamos las dos redes listas (una habiendo aprendido sin ruido, y la
otra con letras “limpias” y letras ruidosas), comprobamos la respuesta de ambas a la
presentación de patrones con ruido (los que preparamos en un fichero aparte).
El comportamiento de ambas fue bueno, aunque no en exceso:
La red que aprendió sin ruido identificó mal las siguientes letras, y de esta
forma: la E como F, K como Y o Z, P como F, U como E, V como X, W como Y e Y
como S. Un total de 7 fallos y 19 aciertos (73%).
La red que aprendió en un ambiente ruidoso identificó mal de esta manera: la E
como D, F como V, J como K, O como G, P como F, U como E, V como T y W como
Y o Z. En total, 8 fallos y 18 aciertos (69%).
28
6. Conclusiones
De todas las pruebas realizadas se extraen las siguientes conclusiones:
En la red de Back Propagation, la tasa de aprendizaje no condiciona fuertemente
la convergencia, al contrario de lo que sucede con otras redes. Esto hace que sea
especialmente eficaz.
La presentación de patrones de manera aleatoria sólo sirve para evitar que la red
oscile entre clases de patrones. Esto sucede si los patrones están más o menos ordenados
por similaritud y hay acusadas diferencias entre clase y clase. Se potencia cuando el
número de patrones en cada clase es elevado, aunque esto se combate directamente
disminuyendo la tasa de aprendizaje.
En el caso del que nos hemos ocupado, esta técnica no aporta nada.
Los pesos iniciales ideales para una red Back Propagation han de ser aleatorios y
comprendidos entre -0.5 y 0.5, tal y como afirman Freeman y Skapura en [NNAAPT].
Entrenar la red en un ambiente ruidoso no es eficaz para que su capacidad de
filtrado aumente. Estos hechos contradicen la afirmación de los dos autores anteriores
en su libro.
También afirman que entrenar la red en ambiente ruidoso hace en algunos casos
que converja más rápidamente. Éste claramente no es el caso.
La capacidad que mostró la red para filtrar ruido fue relativamente buena (75%
de aciertos), pero no excelente. Esto quizás es debido a la baja resolución de los
patrones de entrada que utilizamos (5x7 píxeles), que amplifica el efecto del ruido.
29
7. Bibliografía
Referencia
AUTORES
EDITORIAL
Referencia
AUTORES
EDITORIAL
[Caudill-92]
TÍTULO Understanding Neural Networks: Computer Explorations,
Vol 1,2.
Caudill, M, and Butler, Ch.
The MIT Press
AÑO
1992
[FreemanTÍTULO Neural Networks: Algorithms, Applications, and Pro91][Básica]
gramming Techniques
Freeman, J.A., and Skapura, D.V.
Addison Wesley Publishing Company
AÑO
1991
30