8: Entrenamiento de una Red Neuronal
This page is a draft and is under active development.
( \newcommand{\kernel}{\mathrm{null}\,}\)
En lo que sigue, vamos a analizar el proceso de entrenamiento en una RNA de dos capas (ver figura 3). La red consta de una capa de entrada (correspondiente a l=0, con dos neuronas), una capa intermedia oculta (correspondiente a l=1, con tres neuronas) y la capa de salida (l=2 y dos neuronas). El objetivo es calcular los pesos de la RNA, utilizando el algoritmo de retropropagación de la siguiente forma:

- Las entradas (en l=0), x=(x1,x2)T son valores constantes. Vamos a denotar por hi la salida de la neurona i de la capa l=1, que serán a su vez entradas de la capa l=2. Análogamente, denotamos por y1 e y2 las salidas de la capa l=2 (salidas de la RNA).
- Los parámetros que debemos ajustar son los pesos (enlaces entre neuronas de diferentes capas). Se denotan por wlij, donde el superíndice l hace referencia a la capa a la que llega y los subíndices i y j a las neuronas de las capas l y l−1, respectivamente, que conecta este peso.
- En las neuronas de la capa oculta y de la capa de salida se realizan dos procesos:
- El primero, que simbolizamos con Σ, corresponde en ambas capas a la combinación lineal de la salida de la capa anterior con los pesos correspondientes. Esto es:
- En la neurona i (i=1,2,3) de la capa l=1: a1i=x1w1i1+x2w1i2.
- En la neurona k (k=1,2) de la capa l=2: a2k=h1w2k1+h2w2k2+h3w2k3.
- El segundo, que represintamos en la figura con f, corresponde a la función de activación que suponemos que es la misma para l=1,2: σ(u)=11+e−u Recordemos que la derivada de esta función es: σ′(u)=e−u(1+e−u)2=σ(u)(1−σ(u)) Entonces, tenemos que las salidas de cada capa son:
- hi=σ(a1i), i=1,2,3
- yk=σ(a2k), k=1,2
- El primero, que simbolizamos con Σ, corresponde en ambas capas a la combinación lineal de la salida de la capa anterior con los pesos correspondientes. Esto es:
- Definimos la función de pérdida o de error, como se hace usualmente, mediante la desviación cuadrática media L(y1,y2)=122∑k=1(yk−tk)2 siendo tk (k=1,2) los valores deseados correspondientes a cada salida yk de la RNA.
Puesto que nuestro objetivo es minimimar la función de pérdida, debemos buscar los pesos que lo consiguen, utilizando el algoritmo de retropropagación. Se trata de un proceso iterativo en el que se parte de unos valores iniciales para los pesos y estos se van modificando mediante el método del gradiente descendiente. Con los valores iniciales de los pesos, a partir de los valores x se calculan los de a1,h,a2 e y. Con ellos, partiendo de la capa de salida, vamos hacia atrás:
- Aplicamos la regla de la cadena ∂L∂w2ki→∂L∂yk∂yk∂a2k∂a2k∂w2ki con (k=1,2):
- ∂∂w2kia2k(w2k1,w2k2,w2k3)=hi(i=1,2,3)
- ∂yk∂a2k=∂∂a2kσ(a2k)=σ(a2k)(1−σ(a2k))=yk(1−yk)
- ∂∂ykL(y1,y2)=(yk−tk)
Resulta, sustituyendo: ∂L∂w2ki→(yk−tk)yk(1−yk)hi
- Siguiendo el método del gradiente descendente, actualizamos los pesos w2ki en esta capa. Llamando w2=(w2ki)k=1,2;i=1,2,3 w2←w2−ε∇w2L
- Aplicamos la regla de la cadena en la capa oculta: ∂L∂w1ij→∂L∂hi∂hi∂a1i∂a1i∂w1ij con (i=1,2,3):
- ∂∂w1ija1i(w1i1,w1i2)=xj(j=1,2)
- ∂hi∂a1i=∂∂a1iσ(a1i)=σ(a1i)(1−σ(a1i))=hi(1−hi)
- Para calcular ∂L∂hi tenemos en cuenta la dependencia de las funciones respecto a las distintas variables: L(y1,y2), yk(a2k) y a2k(h1,h2,h3). Así, aplicando la regla de la cadena: ∂L∂hi→∂L∂y1∂y1∂a21∂a21∂hi+∂L∂y2∂y2∂a22∂a22∂hi Ya habíamos obtenido anteriormente las expresiones para ∂L∂yk y ∂yk∂a2k, por lo que sólo queda calcular el último factor de cada sumando:
- ∂ak2∂hi=w2ki
Sustituyendo: ∂L∂w1ij→xjhi(1−hi)2∑k=1[(yk−tk)yk(1−yk)w2ki]
- Finalmente, se actualizan los pesos w1ij. Llamando w1=(w1ij)i=1,2,3:j=1,2 w1←w1−ε∇w1L
Con esto se ha dado un paso de la iteración de la actualización de los pesos. A continuación, se volvería a repetir el proceso partiendo de los valores de los datos x.
En la práctica se suele contar para el entrenamiento con un conjunto de datos (no solo uno) y la función que se minimiza entonces es la suma de todas las “pérdidas” que se tienen al considerar todos esos datos.