Redes Neuronales

Introducción al mundo de las Redes Neuronales

    En el estudio de Machine Learning, se puede encontrar una de las ramas más importantes como es Redes Neuronales (RNA), del cual desprenden muchos conceptos tanto sencillos como complejos, si dejamos de ver a la RNA como una caja negra, pero primero teniendo en cuenta sus diferentes usos y así adentrarse en sus aplicaciones con un mayor grado de interés, pues bien, las RNA ayudan con la clasificación, regresión, reconocimiento de imágenes, de voz, traducción automática, conducción automática de autos, publicidad dirigida y entre muchos otras utilidades. Como se muestra, aún existe un mundo no explorado del todo, es por eso que, en este artículo se dará un vistazo inicial para comprender el funcionamiento de las RNA.

    Una (RNA) consiste en un modelo matemático basado en el funcionamiento y comportamiento biológico de las neuronas que se organizan formando la estructura del cerebro humano (Caparrini, 2019).

    En la Figura 1, se puede observar un ejemplo de red neuronal con varias entradas, donde la neurona puede adaptarse al medio que lo rodea y aprender de él modificando el valor de sus pesos sinápticos, y por ello son conocidos como los parámetros libres del modelo, los cuales pueden ser modificados y adaptados para llevar a cabo una tarea determinada (Caparrini, 2019).

Figura 1: Modelo neuronal - Caparrini, 2019

    La red neuronal prealimentada fue la primera y más sencilla forma de red neuronal artificial ideada, donde en cuya red, la información se mueve en una única dirección: adelante. Desde los nodos de entrada, a través de los nodos escondidos (si los hay) hacia los nodos de salida. Además, no hay ningún ciclo en estas redes (Red neuronal prealimentada, 2020).

Arquitectura de una red neuronal artificial

Perceptrón de una capa

    Consta de una sola capa de nodos de salida; las entradas están conectadas directamente a las salidas a través de una serie de ponderaciones. La suma de los productos de las ponderaciones y las entradas es calculada en cada nodo y, si el valor es superior a algún umbral (típicamente 0), la neurona es disparada y toma el valor de activación (típicamente 1); de forma contraria, toma el valor de desactivación (típicamente -1) (Red neuronal prealimentada, 2020).

Perceptrón multicapa

    Los perceptrones individuales pueden agruparse formando redes de neuronas conectadas entre sí (de forma que la salida de unas se convierte en la entrada de otras) (Caparrini, 2019).

    Las conexiones que llegan y salen de las neuronas, se denominan sinápticas e indican el flujo de la señal a través de la red, y tienen asociadas el peso sináptico correspondiente (Caparrini, 2019).

    Si la salida de una neurona va dirigida hacia dos o más neuronas de la siguiente capa, cada una de estas últimas recibe la salida neta de la neurona anterior. La cantidad de capas de una RNA es la suma de las capas ocultas más la capa de salida. En el caso de existir capas ocultas nos referimos a la RNA como un Perceptron multicapa (Caparrini, 2019).

Función de activación

    Son las que permiten el paso o no del valor obtenido de la sumatoria de entradas por sus pesos correspondientes. A continuación, en las figuras 2, 3, 4, 5 y 6 se presentan algunas funciones de activación.

$$f(x)=x$$

Figura 2: Función Identidad

$$f(x)=\left\{\begin{matrix} 0 & para & x<0\\ 1 & para & x\geq 0\end{matrix}\right.$$
Figura 3: Binary Step

$$f(x)=\left\{\begin{matrix} 0 & para & x<0\\ x & para & x\geq 0\end{matrix}\right.$$
Figura 4: Rectificador lineal unitario

$$f(x)=\sigma(x)=\frac{1}{1+e^{-x}}$$
Figura 5: Función Logística

$$f(x)=tanh(x)=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}$$
Figura 6: Función TanH

Estructura de las capas

Capas de entrada

  • Debe haber una neurona por cada variable
  • Se deben centrar y reducir las variables
  • Por defecto no acepta variables categóricas, para eso debemos pasarlas a variables dummy

Capas ocultas

  • No es tan claro cuántas capas y neuronas usar
  • Para problemas simples no usar muchas capas
  • Generalmente 1 o 2 capas son suficientes
  • Entre más capas y neuronas mayor tiempo de ejecución

Capas de salida

  • Para regresión usa una neurona
  • Para clasificación binaria usa una neurona
  • Para clasificación multiclase usa una neurona por cada clase
  • Se debe indicar una función de activación adecuada

Función de costos

    Tomando un caso sencillo, como se observa en la Figura 7, se puede tomar una función de costos conexa como es: un medio de la diferencia de cuadrados de cada valor predicho con el real.

Figura 7: Esquema de función de costos

    La idea es buscar el mínimo valor de $C$ e ir corrigiendo los pesos. No obstante, nos encontramos con el problema de que ir ajustando este valor por fuerza bruta es computacionalmente costoso, y es por eso que surge la definición del gradiente descendente (estocástico).

Gradiente descendente

Figura 8: Gradiente descendente - Raschka, 2015

    Requiere una función de costes convexa, la idea es ubicarse en un punto de la función de costes, y medimos el ángulo de inclinación de dicha función, mediante el gradiente (tangente) dirección de máxima caída, esto para saber la pendiente de la curva y saber si es positiva o negativa. Si es negativa debemos ir hacia la derecha, si no, hacia la izquierda, y así sucesivamente hasta llegar al mínimo de $C$.

Gradiente descendente estocástico.

Nos ayuda en caso de que la función de costes se muestre de la siguiente manera:

Figura 9: Función de costes no convexa

En la Figura 9 se puede apreciar que el algoritmo halló un mínimo local y no global.

Figura 10: Gradiente Descendente por bloques

Figura 11: Gradiente Descendente Estocástico

    Y como podemos observar, el no estocástico toma una función de costes global, mientras que el estocástico va tomando por cada observación una función de costes y corrigiendo sus pesos. Esto tiene un exceso de coste computacional claramente, pero tiende a converger hacia un mínimo global.

    Entonces para darle una solución se puede fusionar ambos métodos, en donde la idea es tomar unas cuantas observaciones por mini-bloques de manera aleatoria e ir calculando la función de costes y realizar los respectivos ajustes de pesos.

Backpropagation

    El objetivo del algoritmo de retropropagación es calcular las derivadas parciales $\frac{\partial C}{\partial w}$ y $\frac{\partial C}{\partial b}$ las cuales nos permitirán modificar los pesos y al término b, denominado bias de cada neurona, para reducir el coste $C$ (Blanco).

     El sesgo o bias, es un parámetro que ayuda a mover la línea que divide los datos de cada neurona, si el valor de b es cero, la línea pasa por el origen, dependiendo del número que tenga este parámetro es por donde pasará la línea que divide a los datos (Rodríguez, 2018). 

    En la práctica es común combinar el algoritmo de BP con algún algoritmo de aprendizaje como la regla delta o el método del descenso por el gradiente estocástico (Blanco).

    Para implementar correctamente el gradiente descendiente se debería crear un loop externo que generara los mini-batches de manera aleatoria para iterar por las diferentes épocas (número de veces que se ejecutaran los algoritmos de forwardpropagation y backpropagation) del entrenamiento. (Blanco)

Tasa de aprendizaje

    La figura 12 muestra que, una tasa de aprendizaje pequeña requiere muchas actualizaciones antes de alcanzar el punto mínimo. 
Figura 12: Demasiado bajo

En cambio con una tasa de aprendizaje óptima se alcanza rápidamente el punto mínimo, se muestra la figura 13.

Figura 13: Correcto

    Y una tasa de aprendizaje demasiado grande provoca actualizaciones drásticas que conducen a comportamientos divergentes, como se observa en la figura 14.
Figura 14: Demasiado alto
                             

¿Cómo funciona una red neuronal?

A continuación se detalla una serie de pasos que ejecuta una red neuronal como parte de su funcionamiento interno.
  1. Inicializar los pesos aleatoriamente con valores cercanos a $0$ (pero no $0$).
  2. Introducir la primera observación del dataset en la Capa de Entrada, cada característica es un nodo de entrada.
  3. Propagación hacia adelante: de izquierda a derecha, las neuronas se activan de modo que la activación de cada una se limita por los pesos. Propaga las activaciones hasta obtener la predicción $y$.
  4. Comparamos la predicción con el resultado real. Se mide entonces el error generado.
  5. Propagación hacia atrás: de derecha a izquierda, propagando el error hacia atrás. Se actualizan los pesos según lo responsables que sean del error. El ratio de aprendizaje gobierna cuánto deben actualizarse los pesos.
  6. Se repiten los pasos 1a 5 y se actualizan los pesos después de cada observación (Reinforcement Learning). O: Se repiten los pasos 1 a 5 pero actualiza los pesos después de un conjunto de observaciones (Batch Learning).
  7. Cuando todo el conjunto de entrenamiento ha pasado por la RNA, se completa un epoch. Hacer más epochs.
En la Figura 15, vemos a una red neuronal identificar si una imagen proporcionada de una mascota, es un perro o un gato, esto de una manera muy abstracta como si fuera una caja negra, pero por detrás realiza los 7 pasos que se describieron anteriormente.

Figura 15: Red Neuronal en acción - Caparrini, 2019

Consideraciones importantes:

  • Si la función de activación de las neuronas es lineal, entonces la red completa solo podría calcular una función lineal (Caparrini, 2019).
  • El valor de salida de la red dependerá de los valores de los pesos y de los rangos de salida de las funciones de activación, entonces es recomendable estandarizar los datos (Caparrini, 2019).
  • La función sigmoide tiene algunas características que la hacen muy interesante para ser utilizada como función activadora de las en una red neuronal: Tiene un rango de salida $(0, 1)$ lo que hace que la propagación de las activaciones se mantenga siempre en ese rango y que no se descontrole, además la derivada de la función sigmoide es muy sencilla lo que implica que algoritmo de retropropagación sea más rápido (Blanco).
  • Por otra parte, al ser la función sigmoide una función exponencial y, por tanto, también serlo su derivada, la transmisión de los errores hacia atrás provoca que estos sean cada vez más cercanos a $0$ y por tanto que el aprendizaje en las capas más alejadas de la capa de salida sea casi nulo, este es el motivo por el que no ha sido posible entrenar redes neuronales con un número de capas elevado (Blanco).
  • El teorema de Aproximación Universal (TAU), dice que toda función continua se puede aproximar por una red neuronal con la estructura adecuada como consecuencia se puede con una única capa oculta  (Caparrini, 2019).

Bibliografía

Caparrini, F. (14 de diciembre de 2019). Redes Neuronales: una visión superficial. Obtenido de www.cs.us.es/~fsancho/?e=72

Nielsen, M. (2015). Neural Networks and Deep Learning. Determination Press.

Raschka, S. (2015). Python Machine Learning. Packt Publishing Ltd.

Blanco, P. A. (s.f.). Algoritmo de Retropropagación.

Red neuronal prealimentada. (11 de febrero de 2020). Obtenido de Wikipedia, La enciclopedia libre.: https://es.wikipedia.org/w/index.php?title=Red_neuronal_prealimentada&oldid=123470407

Rodríguez, V. (30 de octubre de 2018). Conceptos básicos sobre redes neuronales. Obtenido de https://vincentblog.xyz/posts/conceptos-basicos-sobre-redes-neuronales



Comentarios