Вы находитесь на странице: 1из 7

Redes Neuronales Multi-Capa El Perceptrn Multicapa El inters por la investigacin en redes multicapa parte de los trabajos de Rosenblatt (1962)

sobre Perceptrones y los de Widrow y sus alumnos sobre Madalines (1962). Los Madalines estaban constituidos por varias unidades de entrada y varios elementos Adalides en la primera capa, y con varios dispositivos lgicos (AND, OR,) en la segunda capa. Hemos visto que el Perceptrn simple es capaz de resolver problemas de clasificacin e implementar funciones lgicas, como por ejemplo, la funcin OR, pero es incapaz de implementar funciones como la funcin lgica XOR (funcin de paridad). Sobre estas limitaciones, Minsky y Papert (1969) publicaron un libro titulado Perceptrons que supuso el abandono por parte de muchos cientficos de la investigacin en redes neuronales, pues no se encontraba un algoritmo de aprendizaje capaz de implementar funciones de cualquier tipo. Las limitaciones de las redes de una sola capa hicieron que se plantease la necesidad de implementar redes en las que se aumentase el numero de capas, es decir, introducir capas intermediarias o capas ocultas entre la capa de entrada y la capa de salida de manera que se pudiese implementar cualquier funcin con el grado de precisin deseado, es decir, que las redes multicapa fuesen aproximadores universales. Por ejemplo, con un Perceptrn con dos capas se puede implementar la funcin lgica XOR. De manera general, vamos a ver que cualquier funcin Booleana de {0,1}N {0,1} se puede implementar con un perceptrn multicapa utilizando una sola capa intermedia de unidades de proceso bipolares. Las entradas y las salidas tambien van a ser valores bipolares (-1 1). Para implementar una funcin Booleana vamos disear una red neuronal con tantas unidades de proceso en la capa intermedia como argumentos de la funcin Booleana a los que le asigna el valor 1 (salida verdadera). Por lo tanto, a cada patrn de entrada que tenga salida igual a uno le asignamos una unidad de proceso cuyos pesos sinpticos van a ser los mismos valores de la entrada y el umbral o sesgo va a ser igual a N. Finalmente, utilizando una unidad de salida bipolar con sus pesos sinpticos iguales a 1 y un umbral o sesgo tambin igual a 1 conseguimos la representacin deseada. Por ejemplo, si deseamos implementar la funcin XOR basta con utilizar dos unidades de proceso en la capa oculta, puesto que hay solo dos patrones de entrada a los que le asigna una salida igual a 1: (1,1) 1 y (1, 1) 1. Tomando como pesos sinpticos w1 = (1,1) y w2 = (1, 1) garantizamos que el potencial sinptico de una neurona oculta sea mximo cuando el patrn de entrada es el que tiene asignado, y su valor ser igual a 2. En caso contrario, el potencial sinptico ser inferior a 2. Por lo tanto, solo se activar una unidad de proceso oculta cuando el patrn de entrada tenga como salida deseada la unidad y no se activar ninguna en caso contrario. Finalmente, si utilizamos una unidad de salida binaria cuyos pesos sinpticos y sus umbrales sean iguales a uno obtenemos la representacin que perseguamos, puesto que solo se activar la unidad de salida cuando se active una unidad oculta, es decir, cuando al patrn de entrada le corresponda la salida 1 (ver la figura 1).

Para entender el perceptrn multicapa tenemos que responder primero a la siguiente pregunta: Qu papel desempea la capa intermedia? La capa intermedia realiza una proyeccin de los patrones de entrada en un cubo cuya dimensin viene dada por el nmero de unidades de la capa oculta. Se trata de realizar una proyeccin en la que resulten separables linealmente los patrones de entrada de manera que la unidad de salida se pueda realizar una clasificacin correcta. En el ejemplo anterior la capa intermedia ha realizado la siguiente transformacin: Al patrn de entrada (1, 1) le asigna la salida (1, 0); al patrn de entrada (1, 1) le asigna la salida (0, 1); al patrn de entrada (1, 1) le asigna la salida (0,0) y al patrn de entrada (1,1) le asigna la salida (0,0), como se muestra en la figura 2. Los patrones de entrada no son separables linealmente pero una vez transformados por las neuronas de la capa intermedia s son ya separables linealmente.

Al tener estas redes una topologa ms complicada, tambin se complica la forma para encontrar los pesos correctos, ya que el proceso de aprendizaje es el que decide qu caractersticas de los patrones de entrada son representadas por la capa oculta de neuronas. Hemos visto que se puede implementar cualquier funcin Booleana mediante un perceptrn multicapa. Ahora vamos a ver cmo se puede implementar una funcin continua cualquiera de RN en RM, con el grado de precisin deseado, mediante un perceptrn multicapa. Las entradas sern nmeros reales (seales analgicas) y las unidades de proceso continuas. El problema se centra en desarrollar un algoritmo de aprendizaje que permita la determinacin de los pesos sinpticos y de los umbrales a partir de un conjunto de patrones de entrenamiento que nos dan las entradas y salidas deseadas para la red. En 1986 se abri un nuevo panorama en el campo de las redes neuronales con el redescubrimiento por parte de Rumerlhard, Hinton y Williams del algoritmo de retropropagacin. La idea bsica de retropropagacin fue descubierta por Werbos en su tesis doctoral (1974). Asimismo, algoritmos similares fueron desarrollados independientemente por Bryson y Ho (1969), Parker (1985) y LeCum (1985). El algoritmo de retropropagacin del error es un mtodo eficiente para el entrenamiento de un Perceptrn Multicapa. Se puede decir que puso fin al pesimismo que sobre el campo de las redes neuronales se haba puesto en 1969 con la aparicin del libro citado de Minsky y Papert. A continuacin vamos a estudiar al arquitectura (topologa) de este tipo de redes, su dinmica de la computacin y la regla de aprendizaje basada en la retropropagacin del error cometido por la red al comparar las salidas de la misma con las salidas deseadas. Resolucion de XOR Para comprender mejor las redes neuronales vamos a ver un ejemplo que resuelve la

funcin XOR:

Necesitamos una red neuronal con dos neuronas de entrada y una de salida. Como la funcin XOR no es un problema separable linealmente, intentaremos resolver el problema con una capa oculta en la que colocaremos dos neuronas. El modelo de neurona que utiliza matlab, existen dos posibilidades con o sin bias:

Existen diferentes funciones de activacin de las neuronas:

De tal forma que el modelo de red neuronal que utiliza matlab es el siguiente:

Para crear la red utilizaremos la funcin newff (fed-forward). Es una red que se propaga hacia-adelante. >> help newff >> net = newff([0 1; 0 1],[2 1],{'logsig','logsig'}) Como parmetros necesita el rango de valores de las neuronas de entrada ([0 1; 0 1]), el nmero de celdas en la capa oculta y en la de salida ([2 1]) y la funcin de activacin de cada capa ({logsig,logsig})

Vamos a ver cmo es de buena la red sin entrenar. Necesitamos una matriz con las entradas. Las entradas de la red son las columnas de la matriz. Si queremos una matriz con las entradas: 1 1, 1 0, 0 1 y 0 0 debemos escribir. Los vectores de entrada a la red deben ser vectores columna, por tanto hacemos una matriz con los 4 vectores de entrada: >> input = [1 1 0 0; 1 0 1 0] Veamos qu salidas obtenemos si le damos esta entrada a la red: >> output=sim(net,input) output = 0.3394 0.0659 0.0769 0.1025 La funcin sim se utiliza para simular la red y as calcular las salidas. La salida no es muy buena. Lo deseable era (0 1 1 0) y nos hemos encontrado con (0.3394 0.0659 0.0769 0.1025). Esto es as porque la red no ha sido entrenada. El objetivo de esta red es ser capaz de producir: >> target = [0 1 1 0] Con el comando plot podemos ver el objetivo y lo que hemos conseguido hasta el momento:

>> plot(target, 'o') >> hold on >> plot(output, '+r')

Objetivo (crculos en azul) y solucin obtenida sin entrenar la red (+ en verde) Parece que con los pesos que tiene la red sin entrenar no se obtiene una buena solucin. Veamos los pesos que hay entre la capa de entrada y la capa oculta (Se guardan en IW, input weights): >> net.IW{1,1}

Podramos cambiar cualquier peso de la red: >> net.IW{1,1}(1,2)=5; >> net.IW{1,1} ans = 7.7055 5.0000 -7.9089 -0.4123 Los pesos entre la capa oculta y la capa de salida se almacenan en LW (Layer Weight): >> net.LW{2,1} As la red con todos los pesos sera (incluyendo el cambio realizado):

Hemos cambiado un peso, as que podemos volver a evaluar la red: >> output=sim(net,input) output = 0.6645 0.0659 0.0846 0.1025 >> plot(output,'g*') Podramos pasarnos horas modificando los pesos tratando de acercarlos a la solucin (prueba a hacer un par de cambios). Pero parece ms sencillo dejar que los pesos se calculen automticamente. Para ello tenemos que entrenar la red. Para entrenar la red tenemos que utilizar la funcin train: >> net = train(net,input,target); Aparece un grfico en el que vemos la evolucin del entrenamiento. El objetivo a alcanzar es bajar de un gradiente de 1E-10 (por defecto). Vemos tambin que el nmero de iteraciones mximo, por defecto, es 100. Como hay pocos ejemplos el entrenamiento es muy rpido. Veamos si hemos aprendido

bien >> output = sim(net,input) output = 0.0000 1.0000 1.0000 0.0000 Y ahora vamos a ver los pesos que se han calculado en el entrenamiento: >> net.IW{1,1} ans =

9.2325 -11.5070 -12.0289 13.7543 >> net.LW{2,1} ans = 27.6393 30.3009

Вам также может понравиться