Redes Neuronales en 5 minutos

Share on facebook
Share on twitter
Share on linkedin
Redes neuronales 5 min

Las redes neuronales vanilla o shallow son algoritmos que llevan bastante tiempo en la agenda de investigadores de aprendizaje automático debido a su capacidad de funcionar como aproximadores universales de funciones. Resultan ser excelentes clasificadores discriminativos y tienen una enorme relevancia en tareas de clasificación y regresión. Estos algoritmos toman su inspiración en las redes neuronales biológicas, y utilizan una estrategia de “excitación neuronal” para realizar la propagación de información. Cada una de las neuronas, sigue un modelo llamado perceptrón, en donde tiene asociados pesos que indican los coeficientes o influencia de las variables de entrada en la activación de las neuronas. Lo anterior resulta interesante, puesto que se puede adaptar la señal de entrada de cada neurona para que la red propague la señal hacia adelante en las diferentes neuronas, produciendo una estimación para cada ejemplo. A partir de la estimación, se hace el cálculo del error en términos de la salida real, la cual es proporcionada junto con el ejemplo siguiendo una estrategia de aprendizaje supervisado.

Fig 1. Modelo de perceptrón

El proceso de propagación hacia adelante en redes neuronales superficiales se hace calculando el valor de la función de activación. Tradicionalmente se ha utilizado la función de activación sigmoide para este tipo de redes aunque recientemente, gracias a la explosión del deep learning, se ha experimentado con diferentes funciones de activación. Para ilustrar el proceso de propagación hacia adelante, utilizaremos la función de activación sigmoide para cada una de las neuronas. La propagación hacia adelante en una neurona se realiza calculando la combinación lineal de las activaciones de la capa anterior y los pesos que conectan a la neurona, además de sumar un intercepto (bias), para permitir a la hiper recta definida por la combinación lineal más libertad. Posteriormente se calcula la activación de la función lineal como se ilustra en la Figura 2, donde g representa a la función sigmoide y a la activación de la neurona. X representa la entrada, W los pesos asociados a la neurona y b el bias o intercepto.

Fig. 2 Propagación hacia adelante
Fig. 3 Función de activación sigmoide

La función de activación tiene un efecto de traducir los números reales calculados por la combinación lineal de la entrada y los pesos de la capa, a un dominio de activación entre 0 y 1 además de introducir una no linealidad en la salida mejorando el poder expresivo de la neurona.

Este proceso se repite a través de las diferentes neuronas y capas hasta conseguir la salida estimada de la red neuronal.

Una vez calculada la estimación de la red neuronal se procede a calcular el error, es decir que tanto difiere la hipótesis de la red con respecto al valor real en nuestro conjunto de entrenamiento. Este cálculo se realiza utilizando una función denominada función de pérdida, que devuelve un número indicando que tan “equivocada” está nuestra red neuronal.

Para ilustrar el cálculo del error, utilizaremos un ejemplo de clasificación binaria, es decir los valores reales que intentamos predecir son 0 o 1. Cuando se ha calculado la salida se puede comparar el valor estimado por la red con el valor real de nuestro conjunto de entrenamiento usando la función de pérdida binary cross entropy:

Fig. 4 Binary cross entropy

En la ecuación mostrada en la Figura 4, el valor real de nuestro conjunto de entrenamiento es denotado por y, mientras que el valor estimado por la red neuronal es denotado por la y’ .

La función binary cross entropy tiene la propiedad de cancelar uno de los términos dependiendo del valor de la variable de salida y real. El primero cuando el valor real es 0 y el segundo cuando es 1. Existen otras funciones de pérdida que se asocian principalmente a redes neuronales profundas.

Una vez que se conoce el error de la estimación con respecto de la salida real se procede a calcular el ajuste necesario para los pesos de la red, es decir mejorar los parámetros W y b de las neuronas de la red para que produzcan mejores estimaciones. Este proceso es llamado backpropagation.

La propagación hacia atrás estima el aporte de cada uno de los parámetros de la red al error total por medio del vector gradiente de los parámetros con respecto al error. El vector gradiente es una extensión multidimensional de la derivada y apunta en la dirección en donde la función de pérdida crece con mayor velocidad, por lo que su dirección inversa apunta hacia el punto en donde la función de costo decrece con mayor velocidad.

Fig. 5 Propagación hacia atrás en una neurona

Con este vector podemos actualizar los parámetros de la red neuronal para que la función de costo o pérdida disminuya, es decir para que las predicciones de la red sean cada vez mejores. Para esto se usa una taza de aprendizaje, la cual es uno de los hiperparámetros del algoritmo e indica que tanto debemos movernos a la dirección indicada por el negativo del gradiente. Los componentes del vector gradiente son ortogonales en los diferentes parámetros de la red neuronal, por lo que cada uno apunta a la dirección donde más decrece la función en su eje respectivo. De esta manera la regla de actualización de los pesos para la red neuronal puede ser escrita como:

Fig. 6 Actualización de los parámetros de la red neuronal

En la Figura 6 los pesos e interceptos de las diferentes neuronas se denotan por la letra griega theta, la cual es un vector columna con todos los parámetros de la red neuronal. El gradiente se calcula con el algoritmo de propagación hacia atrás, utilizando la regla de la cadena del cálculo para hallar la derivada del error con respecto a cada uno de los parámetros de theta como se ilustra en la figura 5. El vector de parámetros se actualiza restando una porción del vector gradiente. La porción del vector gradiente es la taza de aprendizaje denotada por la letra griega alpha.

De manera general podemos mencionar que los pasos para realizar el entrenamiento de una red neuronal son los siguientes:

  1. Propagación hacia adelante →Función de activación, sigmoide

2. Cálculo del error, función de pérdida → Cross entropy Loss

3. Cálculo del gradiente →Backpropagation

4. Actualización de los parámetros → Regla de actualización, taza de aprendizaje

Una nota sobre regularización

Debido a que estas redes neuronales son aproximadores poderosos, pueden presentar algunos errores cuando la variedad y número de nuestros datos de entrenamiento no es suficiente, por un fenómeno llamado sobreajuste. Para mitigar el sobreajuste se utilizan estrategias de regularización que ayudan a la red a generalizar mejor sus resultados. Una estrategia de regularización muy común en redes neuronales es la regularización L2, la cual suma a la loss el cuadrado de los pesos que la red aprende, de esta manera impide que los pesos de la red crezcan demasiado, ayudando a su generalización.

Conclusiones

Estos modelos funcionan bien cuando se trabaja con pocas capas ocultas o intermedias entre la entrada y la salida, sin embargo, presentan problemas importantes al trabajar con redes neuronales profundas, es decir cuando se tienen varias capas ocultas entre la entrada y la salida. Para resolver estos problemas se han empleado diferentes estrategias incluyendo distintas funciones de activación, funciones de pérdida, estrategias de regularización y estrategias de optimización de entrenamiento, incluyendo decaimiento de pesos que exploraremos en próximos artículos. Puedes encontrar una implementación detallada utilizando numpy en el repositorio de Github, dando click aquí.

Share on facebook
Share on twitter
Share on linkedin

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *


*

*

¡Conozcámonos mejor!

Súmate a nuestra newsletter donde además de ofertas exclusivas y novedades de SoldAI estaremos envíandote noticias y tendencias del mundo de la tecnología e Inteligencia Artificial.

¡Entérate de todo!