You are on page 1of 9

Daniel Numberger Marzo 2004

ETSI Telecomunicacin
Universidad Politcnica de Madrid

Prctica intermedia del Laboratorio de Sistemas Inteligentes

Aprendizaje con Redes Neuronales

En estas prcticas se profundizan las tcnicas del aprendizaje automtico, lo cual es una cosa muy
importante en el campo de los Sistemas Inteligentes. La capacidad de aprender es una forma de
definir la inteligencia.
Para este informe se eligi la aprendizaje con redes neuronales. Hay muchos algoritmos para la
aprendizaje en redes neuronales entre los cuales el algoritmo de aprendizaje de retropropagacin
(Backpropagation Neural Networks, BPN) es el ms importante. Por eso usamos este algoritmo. El
algoritmo BPN pertenece al grupo de las redes feedforward (feedforward networks). Estas redes
tienen una arquitectura parecida, pero se diferencian en el modo de aprendizaje. Su fuerte es
clasificar patrones, y estn sometido a un aprendizaje supervisado.
Primero se estudi el funcionamiento de este algoritmo. En la segunda parte se aplic el algoritmo a
diferentes ejemplos entrenando las redes redes y evaluando los resultados del aprendizaje.

1.El algoritmo de aprendizaje de retropropagacin

El primer objetivo de estas prcticas fue aprender con ms detalle un algoritmo de aprendizaje.
Vamos a echar un vistazo a una neurona en una red feedforward. En este ejemplo tenemos una red
de perceptrn, con su funcin tpica de salida. El esquema de una red de retropropagacin es el
mismo, pero con otra funcin de salida.

Imagen1: Neurona
La activacin a es la suma de las entradas multiplicadas con sus correspondientes pesos. La salida y
es dado por la funcin de escalera.
n
1 si a0
a= w ix i , y=
i=1
0 si a0
En este caso, las salidas solamente usan valores binarios (0 y 1). Pero deseamos usar nmeros reales
para las entradas y salidas. Adems, la funcin de escalera no se puede diferenciar en el cero. Luego
queremos diferenciar esta funcin.
Por lo tanto usamos otra funcin de salida. Un gran rasgo del algoritmo de retropropagacin
consiste en esta funcin, y tambin es la mayor diferencia a los algoritmos de Perceptrn y
ADALINE. Debe ser continua, diferenciable y asimptotica para valores infinitamente grandes, tanto
positivos como negativos. Estos requisitos son cumplidos por la funcin sigmoide, la cual se usa en
el algoritmo BPN. La formula y el diagrama son:
1
y a=sgma= a/
1e

Imagen2: Funcin sigmoide

En lo sucesivo supongamos = 0, ya que tenemos valores negativos y positivos, y adems = 1.

Como miembro del grupo del las redes feedforward, una red de retropropagacin tiene una
arquitectura de capas y solamente conexiones feedforward entre las neuronas, es decir no hay
conexiones laterales, hacia la misma neurona o hacia atrs.
La red de retropropagacin consta de al menos tres capas de nodos (distinto al perceptrn o al
ADALINE). Las capas se denominan tpicamente input (entrada), hidden (capa oculta) y
output (salida). La arquitectura est indicado en la figura x. La capa oculta, es decir los nodos
ocultos son muy importante para extraer caractersticas y para generalizar.
Adems, normalmente hay solamente conexiones entre capas vecinas, y habitualmente las redes de
retropropagacin estn conectadas completamente.
En la figura 3 vemos un ejemplo de tal red de retropropagacin. (Faltan algunos pesos, pero en
realidad cada flecha tiene su peso.)

El ejemplo presentado todava no es interesante, porque todava no ha sido entrenado. Para poder
solver algn problema especfico hay que entrenar la red neuronal como el cerebro de un nio.
Vamos a entrenar esa red neuronal como enseamos a un nio. Le presentamos alguna letra o cifra,
despus le decimos el valor asignado. Por ejemplo presentamos a un nio un imagen de un A y
pronunciamos un A lo mejor posible. Por lo tanto proveemos la red neuronal de un conjunto de
nmeros y la red devuelve un resultado en la capa de salida. Como la red no est entrenada al
principio y las conexiones tienen pesos arbitrarios, no estaremos contentos con los resultados.
Entonces alteraremos algunos pesos para obtener un resultado mejor. Los alteraremos hasta que
obtengamos el resultado deseado para esta entrada. A continuacin lo haremos con otros ejemplos
hasta que obtengamos el resultado deseado para todos los ejemplos.
El conjunto entero debe ser presentado a la red neuronal varias veces para obtener un resultado
satisfactorio.
Capa de entrada Capa oculta Capa de salida

Entrada 1 w h [1,1] w o [1,1] Salida 1


f ... f ...
w h [1,2] w o [1,2]
w h [1,3]

w h [2,1]
Entrada 2 w h [2,2] Salida 2
f ... f ...

Entrada 3 Salida 3
f ... f ...

Ahora vamos a ver el algoritmo de retropropagacin ms detalladamente.


Una red neuronal debe ver ms que un ejemplo de una pareja de entrada-salida. No puede inferir las
caractersticas de los datos de entrada, lo que buscamos, de un solo ejemplo. Por ello necesitamos
muchos ejemplos. Se debe usar un campo ancho de ejemplos que exhiben todas las caractersticas
que se buscan. Para problemas ms complejos, se usan ms ejemplos. Es importante elegir ejemplos
que no tienen caractersticas dominantes que no nos interesan. Si es posible, conviene aadir un
poco de ruido para tener en cuenta el ruido en los datos reales.
Si usamos la funcin sigmoide, como hemos visto antes, no debemos fijar algn valor de entrada a
0 1. En el caso contrario no es probable que la red converja. Mejor dicho conviene tomar un
valor deseado como 0.9, y la red converger rpidamente.
Una red neuronal es solamente tan bueno como su entrenamiento.

Y cmo alteramos los pesos de las conexiones?


Supongamos que tenemos una red neuronal como en la figura 3 con tres capas. La capa de entrada
tiene m nodos, la capa oculta n nodos y la capa de salida p capas.
Denominamos las entradas I1, I2, ... In , las salidas de la capa oculta H1, H2, ... Hm y las salidas de la
capa de salida O1, O2, ... Op.
Calculamos las salidas de la capa oculta:
m
H 1=sgm I iw h [i ,1]
i=1
m
H 2=sgm I iw h [i ,2]
i=1
...
m
H n =sgm I iw h [i , n]
i=1

Las salidas de capa de salida son:


n n m
O 1=sgm H jw o [ j ,1]=sgm sgm I iw h [i , j ]w o [ j ,1]
j=1 j=1 i=1
n n m
O 2=sgm H jw o [ j ,2]=sgm sgm I iw h [i , j ]w o [ j ,2]
j=1 j=1 i=1
...
n n m
O p =sgm H jw o [ j , p]=sgm sgm I iw h [i , j ]w o [ j , p]
j=1 j=1 i=1

Ahora podemos calcular las salidas dadas las entradas. Esto permite calcular el error entre la salida
real y la salida deseada para este ejemplo de entrenamiento. Buscamos el error mnimo de la funcin
de error. Denominamos las salidas deseadas D1, D2, ... Dp. El error es entonces:
p p n m
2
E= D k O k 2= D k sgm sgm I iw h [i , j ]w o [ j , k ]
k =1 k =1 j=1 i=1

Esto es una funcin de los pesos de la red neuronal. Para encontrar el valor ms pequeo hace falta
calcular el gradiente respecto a cada peso. Vamos a mover cada peso en la direccin contraria del
gradiente.

La derivacin de la funcin sigmoide se puede expresar con ella misma:


d
sgm x=1sgm xsgm x
dx

El gradiente es un vector de las derivaciones parciales respecto a cada variable de la funcin. Como
el error es una funcin de las salidas de la red, debemos calcular las derivaciones de cada nodo de
salida respecto a cada peso.
n n n
Ol
= sgm H iw o [i , l ]=1sgm H iw o [i , l ]sgm H iw o [i , l ]H k
wo[ k , l ] wo [ k , l ] i=1 i=1 i=1

Con eso podemos calcular el gradiente de la funcin del error. El componente k del gradiente en la
neurona l es:
n n
E
=2 D l O l 1sgm H iw o [i , l ]sgm H iw o [i , l ]H k =o [l ]H k
wo[ k , l ] i=1 i=1

Denominamos a 0[l] factor de error de la neurona l (de la capa de salida). Para calcular los nuevos
pesos fijamos una taza de aprendizaje K (learning rate). Con esto y con el valor negativo del
gradiente obtenemos el nuevo valor del peso aadiendo el vector resultante al vector original de
pesos de la capa corriente.


w o [1, l ] H1
w o [2, l ] =K [l ] H2
o
... ...
w o [n , l ] Hn

Pero antes de ejecutar la asignacin de los nuevos valores calculamos los valores anlogos para la
capa oculta. El procedimiento es similar y la formula final la siguiente:
m m p
E
=1sgm I iw h [i , l ]sgm I iw h [i , l ] o [ n]w o [l , j ]I k
wh[ k , l ] i=1 i=1 j=1

Vemos parmetros correspondientes a la capa anterior en la formula de esta capa. Estos son la razon
por la cual el algoritmo se llama retropropagacin.
Ahora podemos actualizar los valores de todos los pesos. Esto es un ciclo completo para una pieza
de datos de entrenamiento.

Repetimos este ciclo hasta que el error baje a un valor determinado. Ahora la red neuronal tiene un
resultado satisfactorio para este ejemplo, y vamos a los ejemplos siguientes eligiendo uno de ellos
arbitrariamente. Seguimos entrenando hasta que hayamos usado cada uno de los ejemplos muchas
veces. La frecuencia oscila entre unos 20 y unos 10.000 dependiendo de la aplicacin y de la
complejidad.

2.Aplicacin del algoritmo de retropropagacin en diferentes


ejemplos

El algoritmo estndar de retropropagacin exige dos parmetros:


es la taza de entrenamiento (learning rate). Valores tpicos son entre 0,1 y 1,0.
dmax es la diferencia mxima d=t-y entre un valor deseado t y un valor de salida y de una neurona
de la capa de salida que es considera tolerable, es decir d=0.
Si fijamos d=0.1, entonces valores por encima de 0.9 son considerados 1 y valores por debajo de
0.1 considerados 0.
Valores tpicos son 0, 0.1 0.2.

2.1 Ejemplo 1: XOR

La mayora de los libros sobre el aprendizaje en redes neuronales demuestran la aplicacin mediante
el ejemplo de una funcin XOR y dicen que est bien para empezar. Por lo tanto vamos a empezar
tambin con este ejemplo.

Imagen4: Topologa

Por supuesto esta red neuronal tiene dos entradas y una salida. Empezamos con una capa oculta de
dos nodos.
Creamos los siguientes conjuntos de patrones para el entrenamiento. El primer es la funcin XOR,
el segundo lo mismo con poco ruido introducido.
XOR_1

entrada_1 0 1 0 1
entrada_2 0 0 1 1
salida 0 1 1 0

XOR_2
entrada_1 0,1 0,2 0,1 0 1 1
entrada_2 0,1 0 0,2 0,9 1 0
salida 0 0 0 1 0 1

El primer experimento se ejecuta con XOR_2 como training set y con XOR_1 como validation set.
El resultado sorprendiente es que no siempre hay un aprendizaje bueno, pero a veces s. Los dos
diagramas han dado por resultado con los mismos patrones de entrenamiento:

Imagen5 Imagen6

Parece que depende mucho de los valores iniciales. Si el algoritmo no converge, se queda atascado
en un mnimo local. En este caso deberamos empezar otra vez con el aprendizaje. En el caso de
xito necesitamos unos 3.000-4.000 ciclos (con =0.2 y dmax=0,1). Pero es evidente que en el caso,
donde hay valores ruidosos, el aprendizaje no tarda ms tiempo.

Vamos a usar los dos conjuntos de datos en lo sucesivo, pero con parmetros alterados:

Ciclos: Usamos para esta red siempre 10.000 ciclos. Con menos podra ser que el aprendizaje no
est competo. Despus de 5.000-10.000 ciclos no se ve ningn cambio.
Diferencia mxima dmax: Con la alteracin no se puede lograr mucho, ni con un valor bajo (0.0) ni
con un valor alto (0.4-0.5). Con un valor alto(prximo a 0.5, ya que un valor mayor que 0.5 no tiene
sentido) se puede conseguir que el aprendizaje converja un poco ms temprano, pero solamente
poco. No influye realmente en el aprendizaje, sino en la tolerancia en el error. En lo sucesivo la
dejamos con el valor estndar (0.1).
Taza de aprendizaje : Cuanto ms bajamos esta taza, tanto ms tiempo tarda el aprendizaje. Por
ejemplo con el primer conjunto de datos y con un =0.02 necesitamos unos 50.000 ciclos para el
aprendizaje. Pero no obtenemos resultados mejores. Con valores demasiado altos (p.e. =20) es
ms probable que el aprendizaje fracase, es decir el error converja en un valor superior a cero.
Con el segundo conjunto es diferente: tambin con una taza muy alta obtenemos resultados buenos.
Se puede deducir que con ms datos de entrenamiento podemos subir la taza de aprendizaje.
Pesos iniciales: A travs de los parmetros en Inicializing podemos ajustar el campo de valores
de los pesos. Ya hemos visto que los valores iniciales de los pesos influye en el resultado del
aprendizaje. Ajustamos ahora todos los pesos a 0.0, y veremos que el error siempre se queda por
encima de 0.5. Luego ajustamos el campo de valores entre -10 y 10. Entonces hace falta subir la
taza de aprendizaje. Pero parece que los resultados son peores que antes.
Funcin de aprendizaje: Se elige ahora otra funcin de aprendizaje: Retropropagacin con
Momentum (Backpropagation-Momentum). Con esta se pretende evitar quedarse atascado en los
mnimos locales. Y verdaderamente la probabilidad de un fracaso es palpablemente ms baja. Pero
no es cero.

Ahora vamos a probar otra topologa para la misma funcin. La sola diferencia sea que hay tres
nodos en la capa oculta.
Con los parmetros estndares se obtiene la misma velocidad como antes: El aprendizaje tarda unos
3.000-4.000 ciclos. La gran diferencia es que el aprendizaje siempre tiene xito, tambin cuando
usamos tazas de aprendizaje altas.
Vemos la nueva topologa en la imagen7 y el diagrama de error en la imagen8.

Imagen7: Topologa
Imagen8: Diagrama del error

La consecuencia es que para la funcin XOR es mucho mejor usar la topologa con una capa oculta
de tres nodos. Pero no se puede generalizar que para cada problema es mejor usar ms nodos.

2.2 Ejemplo2: Reconocimiento de letras


En este ejemplo vamos a intentar reconocer las letras de alfabeto. La entrada es una 5x7-matriz que
con valores binarios. Es decir hay 35 nodos de entrada. En la capa oscura hay 10 nodos, y en la capa
de salida 26 nodos de los cuales cada uno representa una mayscula. Si la letra entrante corresponde
a un nodo de salida, vemos un 1, en el caso contrario un 0. Vemos la red en la imagen9.
Podemos reconocer la letra en la parte izquierda.

Imagen9: Reconocimiento de letras


Ahora tenemos mucho menos nodos en la capa oscura, pero sin embargo la red neuronal es capaz de
reconocer las maysculas.
Presentamos un conjunto de 26 patrones a la red.

Con el algoritmo de retropropagacin (Backpropagation) obtenemos resultados buenos con una taza
de aprendizaje =2,0: Despus de 150 ciclos converge el algoritmo y el error desaparece. Podemos
bajar la taza, sin que empeore el aprendizaje (claro, es un poco ms lento). Si subimos la taza,
veremos que el algoritmo ya no es capaz de converger y obtendremos resultados malos.

Con el algoritmo de retropropagacin con momentum (Backpropagation-Momentum) obtenemos un


resultado muy bueno. El aprendizaje parece muy regular, distinto al algoritmo anterior. Los valores
ideales son =0,8, =0,6 y c=0,1. (= maximum growth factor, c = weight decay)
Pero de nuevo no es posible obtener un aprendizaje convergente en el caso de una taza demasiado
alta (>10).

El algoritmo Propagacin rpida (Quickpropagation) promete un aprendizaje rpido, pero necesita


ms tiempo que los algoritmos anteriores. Sus valores ideales para esta aplicacin son =0,1, =2 y
c=0,0001. No podemos subir la taza demasiado, como lo hemos visto antes, y tampoco el weight
decay c.

Podemos concluir que en este ejemplo es ms preciso tener los parmetros ideales que en ejemplo
de XOR. A lo mejor depende de la complejidad de la red neuronal.

Bibliografa
Kevin Gurnay: Computers and Symbols versus Nets and Neurons
Philippe Crochat, Daniel Franklin: Back-Propagation Neural Network Tutorial
Igor Fischer, Fabian Hennecke, Christian Bannes, Andreas Zell: JavaNNS User Manual
Jiri Sima: Introduction to Neural Networks
Andreas Zell, Gnter Mamier, Michael Vogt, Niels Mache, Ralf Hbner, Sven Dring, Kai-Uwe
Herrmann, Tobias Soyez, Michael Schmalzl, Tilman Sommer, Artemis Hatzigeorgiou, Dietmar
Posselt, Tobias Schreiner, Bernward Kett, Gianfranco Clemente, Jens Wieland, Jrgen Gatter:
SNNS User Manual
Alianna J. Maren: Handbook of Neural Computing Applications

You might also like