Está en la página 1de 11

Perceptrón multicapa para aproximar una función

Dufrane Victoria D., Jiménez Cervantes Abel, Reyes Montiel J. Jennessi


Facultad de Física - Universidad Veracruzana
Cálculo Diferencial en Varias Variables

June 8, 2018

Abstract
Using the method of the gradient descent it was posible to build a multilayer perceptron
that was able to aproximate a function in a given interval, minimizing the error between the
given data and the output of the perceptron. In order to complete the task it was used the
software OCTAVE.

Resumen
Se realizó un perceptrón multicapa, dónde a través del método del descenso del gradiente
estocástico se lograra, minimizar el error entre un conjunto de datos proporcionados a la red
y los datos de salida. De tal forma que se lograra aproximar una función a dichos datos. Para
realizar la tarea se utilizó el programa OCTAVE.

1 Introducción
Uno de los problemas más antiguos de la ciencia experimental consiste en encontrar funciones que
ajusten, o expliquen, datos que se observan de fenómenos naturales. La principal ventaja de la
existencia de tales funciones es la posibilidad de predecir el comportamiento del sistema natural
en el futuro y controlar sus salidas mediante la aplicación de las entradas adecuadas. La dificultad
estriba en que los datos observados tienden a ir acompañados de ruido y los mecanismos exactos
que los generan normalmente son desconocidos [1].
En ocasiones será posible encontrar un modelo matemático exacto que explique el proceso del
que provienen los datos que observamos. Muchas veces, sin embargo, no podremos dar detalles de
ese proceso[3]. El objetivo será estimar el modelo subyacente que genere a los datos observados.
En estos casos, las técnicas de aprendizaje automático nos permiten establecer estos modelos
utilizando datos de ejemplos o experiencias pasadas. Dentro de estas técnicas, que podríamos
llamar de estimación semiparamétrica, se encuentran las Redes de Neuronas Artificiales.
Una red neuronal artificial es un modelo matemático formado por una red interconectada
de unidades simples, denominadas neuronas. Estas neuronas reciben unos datos de entrada, los
analizan, y deciden que hacer con ellos mediante la experiencia adquirida. Esto es, pasarlos a otras
neuronas a través de las conexiones o directamente como salida aplicando algún tipo de función
[2]. Es un paradigma de procesamiento de información inicialmente inspirado en el modo en el que
lo hace el cerebro. El elemento clave de este paradigma es la estructura [1].

1
2 Marco Teórico
2.1 Redes Neuronales Artificiales
Las redes neuronales actuales se basan en el modelo matemático de neurona propuesto por McCu-
lloch y Pitts en 1943. En dicho modelo cada neurona recibe un conjunto de entradas {x1 , x2 , ..., xd }
y devuelve una única salida y. Además, dentro de una Red Neuronal Artificial (en adelante, RNA)
existen numerosas conexiones entre las distintas neuronas que la forman. Estas conexiones simulan
las conexiones interneuronales del cerebro y, al igual que estas, pueden establecerse con menor o
mayor intensidad [1].

Figura 1: Comparación entre una neurona y una neurona artificial

En el caso de las RNA esta intensidad la determinan los pesos sinápticos (o simplemente pesos).
De este modo, cada entrada xi de una neurona se encuentra afectada por un peso wi .
Con la finalidad de que la RNA modifique los pesos y con ello, aprenda, es necesario introducir
una función de activación o de transferencia g(a). Las más comunes son:
• Función escalón
• Función Lineal
• Función Sigmoidea
• Función Tangente Hiperbólica (tanh)
• Función Gaussiana

2.2 Métodos de Aprendizaje


Para que una RNA aprenda es necesario que tenga la capacidad de generalizar. Dicho proceso
está dado por la modificación de ciertos parámetros (como el peso sináptico) para obtener mejores
resultados. Es importante destacar que la red no debe memorizar un solo ejemplo o un solo conjunto
de ejemplos[5]. Para ello a la red se le da un grupo de entrenamiento y otro de prueba. Con base
en el conjunto de entrenamiento se clasifica el método de aprendizaje entre supervisado y no
supervisado.

2
Figura 2: Funciones de activación más utilizadas

2.2.1 Aprendizaje Supervisado

En el aprendizaje supervisado se parte de una serie de observaciones o entradas y unas salidas


deseadas que la red debería obtener y el objetivo es aprender la correspondencia entre ambas. Es
decir, el conjunto de entrenamiento estará compuesto por pares de la forma:
N
X = (xn , tn )n=1 (1)

donde x es el vector de entradas, t el de salidas deseadas y N es el tamaño del conjunto de


entrenamiento [1].

2.2.2 Aprendizaje No Supervisado

En este caso, en el conjunto de entrenamiento los datos de entrada x no vienen acompañados de una
salida deseada y el objetivo no es encontrar un mapeo entrada-salida, sino encontrar patrones que
definan regularidades subyacentes en x además, estos patrones ocurren con distintas frecuencias y
la red deberá encontrar lo que ocurre con más generalidad [1].

2.3 El Perceptrón Simple


En 1957 Frank Rosenblatt, basándose en el modelo de McCulloch-Pitts y empleando como regla de
aprendizaje una modificación de la propuesta por Hebb, presentó el perceptrón, el primer modelo
de red de neuronas artificiales. La arquitectura que Rosenblatt definió para el perceptrón consistía
en una primera capa de j neuronas con funciones φj que se encargaban de transformar los datos de
entrada [5]. Estas funciones reciben un subconjunto aleatorio de entradas a través de unos pesos
fijos y les aplican una función de activación de tipo escalón. De nuevo existe un peso especial o
sesgo w0 y se definía una entrada artificial x0 con valor 1 asociado a este peso, en el caso del
perceptrón se considera una función de activación extra φ0 = 1. La salida de esta primera capa de
funciones φj se conecta a través de unos pesos a una última neurona para, finalmente, calcular la
salida del perceptrón como:
M
X
y = g(a) = g( wj φj (x) = g(wT φ) (2)
j=0

Donde φ es el vector formado por las funciones de activación φ0 , ..., φM y g es la función escalón
definida para los valores {−1, 1}.
La principal aportación del perceptrón es que la adaptación de sus pesos se realiza teniendo en
cuenta el error entre la salida que obtiene la red y la salida que se desearía obtener. Es, por tanto,
el primero método de aprendizaje supervisado.

3
2.4 El Perceptrón Multicapa
Las limitaciones de las redes de una sola capa, hicieron que se plantease la necesidad de implementar
redes en las que se aumentase el número de capas introduciendo capas intermedias entre la capa
de entrada y la de salida, de manera que se pudiese implementar cualquier función con el grado
de precisión deseada[1]. La función que cumple dicha capa intermedia es tratar de realizar una
proyección en la que resulten separables linealmente los patrones de entrada de manera que la
unidad de salida pueda realizar una clasificación correcta [3].
La arquitectura de la red se divide en la entrada, las capas ocultas y la salida. En primer lugar
tenemos la entrada de la red que son los datos que recibe la red para procesar y se conectan a las
primeras neuronas de la primera capa oculta. Las capas ocultas son el conjunto de neuronas que
no están conectadas directamente con la entrada. Estas neuronas están organizadas por capas y
cada neurona de una capa, normalmente conecta con todas las neuronas de la capa siguiente sin
formar ningún tipo de bucle. Esto se conoce como conectividad total [2].

Figura 3: Arquitectura de un perceptrón multicapa

Se considerará un perceptrón con una sola capa oculta. Consta de D entradas, M neuronas en
su capa oculta y C unidades de salidas. El nivel de activación aj de la neurona j de la capa oculta
se calcula como una combinación lineal de las D entradas xi que recibe sobre la que, tras aplicar
una función de transferencia g se obtiene la salida zj de dicha neurona:
D
X
zj = g(aj ) = g( wji xi ); k = 1, 2, ..., M (3)
i=0

4
donde wji es el peso asociado a la neurona j y la entrada xi . De manera similar, cada salida de la
red se obtiene como la suma ponderada de las salidas de las unidades de la capa oculta, sobre la
que se aplica una función de transferencia, es decir, la salida de la neurona k viene dada por:
M
X M
X D
X
yk = g 0 ( ) = g 0 ( )wkg g( )wji xi (4)
j=o j=0 i=0

Es importante destacar que las funciones de transferencia g y g’ no tienen que ser iguales, por ello
la notación que se emplea es diferente.

2.4.1 Algoritmo de retropropagación del error

Al igual que el perceptrón simple, el MLP basa el aprendizaje de sus pesos en una regla de ajuste
del error, esto es, trata de determinar los pesos y las conexiones sinápticas de manera que las salidas
de la red coincidan con las salidas deseadas, o por lo menos, sean las más próximas posibles[4].
El algoritmo de aprendizaje del MLP utiliza el método de descenso del gradiente para ajustar los
pesos de la red. Dicho ajuste se realiza comenzando por la capa de salida, según el error cometido,
y propagando este error a las capas anteriores, hasta llegar a a capa de las unidades de entrada, de
ahí que se denomine algoritmo de retropropagación del error. Consiste en dos fases que se repiten
hasta conseguir minimizar el error: En la primera fase se aplica un patrón a las entradas de la red y
su efecto se propaga a través de la misma, capa a capa. Finalmente la red presenta un conjunto de
salidas como respuesta a dicho patrón de entrada. Este paso consiste en el cálculo de la ecuación
(4) para un conjunto de pesos dado[3]. En la siguiente fase, los pesos de la red se recalculan de
acuerdo con una regla de ajuste del error. Así, para cada patrón xn se tiene la siguiente función
de error:
C
1X n 2
En = (ek ) (5)
2
k=0
1
El factor no afecta el resultado de la función y solamente se introduce para facilitar cálculos
2
posteriores. Así mismo, se define al error enk como:

enk = ykn − tnk (6)

Como se ha mencionado anteriormente, el algoritmo de retropropagación corrige el peso sináptico


wkj añadiendo un incremento ∆wkj . Dado que la función E es dependiente de los pesos (ya que
las salidas ykn están dadas como una combinación lineal de las salidas de las neuronas en la capa
oculta por sus pesos) y entonces, tiene M pesos y una única salida, en otras palabras es una función
definida de Rn a R. Una función escalar. Entonces, como busca encontrarse el error mínimo, es
posible usar el método del descenso del gradiente para llegar a ese mínimo [1].
Es importante destacar que la dirección indicada por el gradiente conseguirá minimizar el error,
aunque no necesariamente conducirá al mínimo absoluto, sino a uno local [2]. Es decir, podría existir
una mejor solución al problema, pero no se sabe cual es. De aucerdo con la regla de la cadena para
derivadas parciales, podemos representar el ∇E como:

∂E ∂E ∂ek ∂yk ∂ak ∂g 0 (ak )


= = −ek zj (7)
∂wkj ∂ek ∂yk ∂ak ∂wkj ∂ak
PM
El restulado de obtiene después de derivar las ecuaciones (5), (6), (4) y ak = j=0 wkj zj

∂E ∂ek ∂yk ∂g 0 (ak ) ∂ak


= ek = −1 = = zj (8)
∂ek ∂yk ∂ak ∂ak ∂wkj

5
Figura 4: Representación del descenso del gradiente para el caso simple con dos pesos sinápticos

Teniendo en cuenta que el gradiente local δ de una neurona k se define como:

∂E ∂ek ∂yk ∂g 0 (ak )


δk = = −ek (9)
∂ek ∂yk ∂ak ∂ak
Entonces, el incremento que se debería aplicar al peso wkj es:
∂E
∆wkj = η = −ηδk zj (10)
∂wkj
En este caso, a η se le conoce como ratio de aprendizaje. La ecuación señala que para obtener el
incremento solo es necesario multiplicar el valor de δ para la unidad de salida de la neurona por el
valor z de la unidad de entrada de la neurona.
Veamos cómo calcular el gradiente local δk considerando que la neurona k puede encontrarse en
la capa de salida o en una capa oculta. El primer caso se reduce a calcular el error e k aplicando la
ecuación (6). Sin embargo, si la neurona k se encuentra en la capa oculta no hay una forma directa
de calcular el error, ya que no se conoce la salida deseada en ese punto [1]. Así, este error tendrá
que determinarse recursivamente considerando todas las neuronas de la capa de salida a las que
está conectada dicha neurona k. Retomando la notación previa, se denomina j a la neurona de la
capa oculta de la que se desea estimar el gradiente, y k a cada una de las neuronas de salida. El
gradiente local δj para una neurona en la capa oculta se define como:

∂E ∂zj ∂E ∂g(aj )
δj = − =− (11)
∂zj ∂aj ∂zj ∂aj

6
Una vez más, aplicando la regla de la cadena para calcular la primera derivada parcial:

∂E X ∂ek X ∂ek ∂ak X ∂g 0 (ak ) X


= ek = ek = ek wkj = − δk wkj (12)
∂zj ∂zj ∂ak ∂zj ∂ak
k k k k

De acuerdo a la ecuación (11):

∂g(aj ) X
δj = δk wkj (13)
∂aj
k

El ajuste del peso sináptico está dado de una manera similar al de la ecuación (10):

∆wji = ηδj xi (14)

Con expresiones análogas para los pesos de la segunda capa. Una de las ventajas de este algoritmo
es su eficiencia computacional .

3 Planteamiento del problema


El problema consiste en aproximar una función continúa a un conjunto de datos discretos. Tal y
como se presenta en un experimento de laboratorio, social, etc. El problema no es novedoso, existen
una amplia cantidad de métodos para realizar la tarea. ¿Cuál es entonces la diferencia con respecto
a métodos como los de Simpson? La capacidad de generalización es la diferencia.
En concreto, todo perceptrón multicapa aproxima una funcion aun cuando se le ocupe para
clasificar estará aproximando una función que logre separar los datos. Lo que se pretende es hacer
una red con la capacidad de generalizar y poder introducir cualquier serie de datos sin necesidad
de cambiar el algoritmo.
Es esencial definir la topología del perceptrón. Sin embargo, no es una tarea concreta, es difícil
saber a priori cuantas capas ocultas se necesitan y cuantas neuronas en ellas. En la literatura se
encuentra que es más un problema que se soluciona con experiencia, a prueba y error más que de
una manera analítica. En este caso, sin embargo, lo que sí es concreto es el número de neuronas de
entrada y de salida. Hay una en cada una. La de entrada representa el valor en Y de los datos de
entrada y la neurona de salida el valor en Y que calcula la red para aproximar la función.
En primera instancia, se le da un valor aleatorio a todos los pesos para que el perceptrón
comience a funcionar. El algoritmo de retropropagación de error se vuelve importante en este punto.
Al final de cada iteración comprobará el error entre el dato que predijo y el dato proporcionado.
Aquí el método del descenso del gradiente es usado para llegar a un mínimo local (haciendo énfasis
en que es local, podría haber una combinación de pesos que resulte en un valor menor al que
calculó la red pero por este método no es posible determinarlo, aunque sí existen tales métodos.
Las máquinas de soporte vectorial hacen uso de los multiplicadores de Lagrange para asegurar la
optimización) e iteración tras iteración logre acercarse mejor a los datos.
Aun cuando el algoritmo de retropropagación del error se podría ver como varios cálculos
engorrosos y difíciles de programar, en realidad es algo sencillo. En el marco teórico las derivadas se
dejaron representadas para permitir generalidad. En la práctica se resume en escribir las derivadas
de las funciones de activación mostradas en la figura dos, las cuales pueden calcularse o bien,
algunos softwares específicos como TensorFlow los proporciona.
La función de activación para cada neurona es también un problema a resolver que muchas
veces suele caer en la experiencia. Sin embargo, lo que puede determinarse con mayor precisión

7
Figura 5: Error Cuadrático Medio

es de que forma debe ser la función para la neurona de salida. En la mayoría de las funciones de
activación
Finalmente, el problema se resume en permitir al algoritmo que realice cuantas iteraciones sean
necesarias para que el error cometido sea menor a un  dado o cuando los errores ponderados
de tres iteraciones seguidas sean prácticamente iguales. Se pretende también que la computadora
grafique la serie de datos y la función aproximada.

4 Resultados
Por las limitaciones del tiempo, solamente fue posible correr el programa con una serie de datos. La
respuesta fue aceptable, en las imágenes 5 y 6 se observa como va descendiendo el Error Cuadrático
Medio con cada iteración. En la imagen 7 se encuentra la aproximación de la red a los datos.

5 Conclusión
A través de los resultados obtenidos, se puede ver que las redes neuronales son una herramienta
bastante útil para interpolar una función a través de datos experimentales, que pueden ser derivados
de experimentos físicos o de cualquier otra índole.

6 Referencias
1. José, T. P; Roque, M. M: Inteligencia Articial: Métodos, técnicas y aplicaciones. España,2008.

8
Figura 6: Zoom a la gráfica del Error Cuadrático Medio

Figura 7: Aproximación a la función

9
2. Miguel, A.l: Aproximación de funciones con redes neuronales.2016.
3. Almeida, L. B.: Langlois, T.; Amaral, J. D. y Plakhov:«Parameter adaptation in stochas-
tic optimization» En: D. Saad (Ed.), On-line Learning in Neural Networks, capítulo 6, pp.
111–134. Cambridge University Press, 1999.
4. Bishop, C. M.: Neural Networks for Pattern Recognition. Oxford University Press, Inc., New
York, USA, 1995.
5. Castillo, E.; Fontenla-Romero, O.; Betanzos, A. Alonso y GuijarroBerdiñas, B.: «A Global
Optimum Approach for One-Layer Neural Networks». Neural Computación, 2002, 14(6), pp.
1429–1449.

7 Apéndice 1: Código

l o a d ( ’ d a t o s . mat ’ )
Q=s i z e (P , 2 ) ;

# Valores i n i c i a l e s
n1 = 3 0 ;
n2 = 4 0 ;
ep =1;
W1 = 2∗ ep ∗ rand ( n1 , 1 ) −ep ;
b1 = 2∗ ep ∗ rand ( n1 , 1 ) − ep ;
W2 = 2∗ ep ∗ rand ( n2 , n1 ) − ep ;
b2 = 2∗ ep ∗ rand ( n2 , 1 ) − ep ;
W3 = 2∗ ep ∗ rand ( 1 , n2 ) − ep ;
b3 = 2∗ ep ∗ rand − ep ;
a l f a =0.1;
f o r Epocas =1:2000
sum=0;
f o r q=1:Q
#q=r a n d i (Q) ;

#Pr op a ga ci on de l a e n t r a d a h a c i a l a s a l i d a
a1=s i g m o i d (W1∗P( q)+b1 ) ;
a2 = s i g m o i d (W2∗ a1 + b2 ) ;
a3 = W3∗ a2 + b3 ;
#R e t r o p r o p a g a c i o n de l a s e n s i b i l i d a d e s
e = T( q)−a3 ;
s 3 = −2∗1∗ e ;
s 2 = d i a g ((1 − a2 ) . ∗ a2 ) ∗W3’ ∗ s 3 ;
s 1 = d i a g ((1 − a1 ) . ∗ a1 ) ∗W2’ ∗ s 2 ;
#A c t u a l i z a c i o n de p e s o s s i n a p t i c o s y p o l a r i z a c i o n e s
W3 = W3 − a l f a ∗ s 3 ∗ a2 ’ ;
b3 = b3 − a l f a ∗ s 3 ;
W2 = W2 − a l f a ∗ s 2 ∗ a1 ’ ;
b2 = b2 − a l f a ∗ s 2 ;

10
W1 = W1 − a l f a ∗ s 1 ∗P( q ) ’ ;
b1 = b1 − a l f a ∗ s 1 ;
# Sumando e l e r r o r c u a d r a t i c o
sum = e ^2 + sum ;
endfor
#ECM
emedio ( Epocas)=sum/Q;
endfor
f i g u r e , p l o t ( emedio )

#V e r i f i c a c i o n G r a f i c a
p = −0:0.01:6;
for q = 1: length (p)
a1 = s i g m o i d (W1∗p ( q ) + b1 ) ;
a2 = s i g m o i d (W2∗ a1 + b2 ) ;
a3 ( q ) = W3∗ a2 + b3 ;
endfor
f i g u r e , p l o t ( p , a3 , P , T , " r ∗ " )

# C a l c u l o d e l e r r o r c u a d r a t i c o medio para l o s p a t r o n e s de e j e m p l o
ec = 0 ;
f o r q = 1 :Q
a1 = s i g m o i d (W1∗P( q ) + b1 ) ;
a2 = s i g m o i d (W2∗ a1 + b2 ) ;
a = W3∗ a2 + b3 ;
e c = e c + (T( q ) − a ) ^ 2 ;
endfor
e c /Q

ACLARACIÓN:
• datos.mat fueron unos datos extraídos desde internet correspondientes a una función sigmoi-
dal con ruido gaussiano

• sigmoid se definió en un archivo independiente y corresponde solamente a la función sigmoidal


tangencial

11

También podría gustarte