Las ecuaciones que aprenden: las matemáticas de las redes neuronales

Escrito por Gustavo Plaza Roma para $``\textbf{pa-ciencia}''$.

Las redes neuronales han emergido como una fuerza revolucionaria hoy en día y están redefiniendo la forma en que interactuamos con la tecnología y han demostrado ser la clave para desbloquear nuevas dimensiones de la innovación y el progreso en nuestra sociedad cada vez más digitalizada.

Las redes neuronales son modelos informáticos que imitan la arquitectura y el funcionamiento de las redes neurales biológicas. Compuestas por capas de nodos interconectados, estas estructuras son capaces de aprender y adaptarse a partir de datos, permitiendo a las máquinas realizar tareas que antes solo parecían posibles para la mente humana.

Esta tecnología es ampliamente usada hoy en día, desde la clasificación de imágenes hasta la traducción de idiomas, estas redes aprenden patrones complejos y se adaptan continuamente para mejorar su rendimiento. En el ámbito de la salud, las redes neuronales están acelerando los diagnósticos y tratamientos. Desde la interpretación de imágenes médicas hasta la identificación de patrones genéticos, estas tecnologías están impulsando avances significativos en la atención médica personalizada y la investigación biomédica.

Matemáticas en las redes neuronales

El uso de conceptos matemáticos es esencial para entender los fundamentos teóricos y prácticos detrás del funcionamiento de las redes neuronales. La comprensión de las ecuaciones matemáticas utilizadas en las redes neuronales, como la función de activación, la función de coste y el algoritmo de retropropagación, es crucial para diseñar e implementar estas redes de manera efectiva. Las redes neuronales usan una arquitectura de aprendizaje que se inspira en el funcionamiento del cerebro humano y están compuestas por miles o incluso millones de "neuronas" artificiales interconectadas.

A continuación, veremos los distintos componentes de una red neuronal y algún ejemplo práctico. Empecemos con las neuronas.

Neuronas artificiales

Las neuronas son el principal elemento de la red neuronal y se basan en el modelo matemático de las células nerviosas biológicas. Cada neurona recive una serei de entradas y genera una salida. La operación que realiza cada neurona es la suma ponderada seguida de una función de activación. Esto se puede expresar matemáticamente de la siguiente manera:

$$y=f\left(\sum_{i}{\omega_ix_i}+b\right)$$

Donde:

$y$ es la salida de la neurona.

$f$ es la función de activación, que introduce no linealidad en la red.

$\omega_i$ son los pesos de las conexiones entre la neurona y las neuronas de la capa anterior.

$x_i$ son las salidas de las neuronas en la capa anterior.

$b$ es el sesgo de la neurona.

El sesgo es un componente adicional de cada neurona cuya función principal es desplazar el resultado obtenido a través de la función de activación, lo que permite una mayor flexibilidad en la representación de los patrones de entrada. Se puede considerar como un peso adicional que se agrega a la entrada de cada neurona, que se puede ajustar durante el entrenamiento de la red neuronal.

La salida de cada neurona sirve de entrada para las neuronas de capa siguiente. Por último, la salida de la última capa de neuronas es considerada como la salida final de la red neuronal. El cálculo de los valores que toma la salida de cada neurona según los pesos de esta y la salida de la red se denomina “forward propagation”.

Las redes están compuestas por capas y cada una de esas capas está compuesta por neuronas.

Retropropagación 

La retropropagación es el algoritmo clave para recalcular los pesos de cada una de las neuronas de la red. Se utiliza este algoritmo para ajustar los pesos y minimizar la función de coste de la red con el objetivo de mejorar el rendimiento de la red.

En primer lugar, la red genera predicciones a partir de un conjunto de datos de entrada, estas predicciones se comparan con los valores de salida esperados y se calcula un error. La función de coste, que mide este error, se denota como .

El objetivo es encontrar cómo pequeñas variaciones en los pesos y sesgo de las neuronas puede afectar a la función de coste para calcular se usan derivadas parciales.

La derivada $\frac{\partial C}{\partial\omega_i}$ mide cómo cambia la función de coste en función el peso $\omega_i$ de una neurona y de manera similar se puede calcular cómo cambia con respecto al sesgo usando $\frac{\partial C}{\partial b}$.

Estas derivadas se agrupan en lo que se conoce como vector gradiente $\nabla C$. Este vector contiene las derivadas parciles de la función de coste con respecto a los pesos de las neuronas y los sesgos.

Retropropagación de los Errores

La retropropagación empieza desde la capa de salida y se mueve hacia atrás a través de la red. Para la capa de salida se calcula directamente $\frac{\partial C}{\partial\omega_i}$ y, $\frac{\partial C}{\partial b}$ a partir del error obtenido con respecto a la predicción y las derivadas de la función de activación de esa neurona. La retropropagación en un proceso muy importante para que las redes aprendan a partir de los datos. Según los errores se retropropagan, la red ajusta los pesos permitiendo que se adapte a los patrones de los datos de entrenamiento.

Actualización de pesos

Una vez se han calculado los gradientes, se usa un algoritmo de optimización como el descenso de gradiente para actualizar los pesos.

Los nuevos valores de los pesos y sesgos se calculan restando el gradiente multiplicado por una tasa de aprendizaje $\eta$ de los valores anteriores:

$$\omega_i\rightarrow\omega_i-\eta\frac{\partial C}{\partial\omega_i}$$ $$b\rightarrow b-\eta\frac{\partial C}{\partial b}$$

Replicación del proceso

Los pasos anteriores se repiten iterativamente durante los distintos ciclos de entrenamiento hasta que la función de coste alcance un valor aceptable o esta converja a un valor concreto.

Función de activación

Las funciones de activación son un elemento muy importante de la neurona, estas funciones introducen la no linealidad al modelo haciendo que la red pueda aprender a partir de los datos. Algunas de las funciones de activaciones son: la función sigmoide que se ha ido usando cada vez menos ya que su derivada tiende a cero cuando los valores de entrada son muy pequeños o grandes. La función ReLU que es simple de calcular y es la función de activación más utilizada en la actualidad. Y la función tangente hiperbólica que es útil en redes que requieren salidas en un rango simétrico alrededor de cero, también ayuda a mitigar el problema de desvanecimiento de gradientes en comparación con la función sigmoide.

Ejemplo numérico

En el siguiente ejemplo vamos a construir una red neuronal muy simple, se va a usar para predecir el precio de una casa basada en el número de habitaciones. La función de coste que se va a usar en el valor cuadrático medio, con esto podremos medir el rendimiento de la red.

Arquitectura de la red

La red va a constar de una capa de entrada de una sola neurona, la entrada de esta neurona es el número de habitaciones. Para crear una red más compleja la red de entrada podría tener más neuronas con otras entradas cómo podría tamaño de la casa.

La capa oculta también cuenta con una neurona con la función de activación ReLU. Y la capa de salida también tiene una neurona cuya salida será la predicción del precio de la casa.

Primero, inicializamos los pesos de manera aleatoria. Supongamos que los pesos iniciales son:

Peso de la conexión entre la capa de entrada y la capa oculta: $\omega_1=0.5$

Peso de la conexión entre la capa oculta y la capa de salida: $\omega_1=-0.2$

Paso 1: Cálcalo de la salida 

Calculamos las salidas en cada capa de la red mediante la suma ponderada y la función de activación ReLU.

Para una entrada $x=4$, que representa el número de habitaciones, el cálculo sería:

Capa de Oculta:

Suma Ponderada: $z_1=x\cdot\omega_1=4\cdot0.5=2.0$

Función de Activación ReLU: $a_1=\max\left(0,z_1\right)=\max\left(0,2.0\right)=2.0$

Capa de Salida:

Suma Ponderada: $z_2=a_1\cdot\omega_2=2.0\cdot\left(-0.2\right)=-0.4$

Paso 2: Cálculo del error y gradientes 

Calculamos el error utilizando la función de coste (mínimos cuadrados) y luego calculamos los gradientes en las capas de salida y oculta.

Supongamos que el valor real del precio de la casa es $$y_{real}=150,000$$

Error: $E=\frac{1}{2}\cdot\left(z_2-y_{real}\right)^2=\frac{1}{2}\cdot\left(-0.4-150,000\right)^2$

A continuación, calculamos los gradientes:

Gradiente en la Capa de Salida: 

$$\frac{\partial E}{\partial z_2}=\frac{1}{2}\left(z_2-y_{real}\right)^2=\frac{1}{2}\cdot\left(-0.4-150,000\right)^2$$

Gradiente en la Capa Oculta: 

$$\frac{\partial E}{\partial z_1}=\frac{\partial E}{\partial a_1}\cdot\frac{\partial a_1}{\partial z_1}$$

Dado que $a_1=2.0$ y la derivada de ReLU es 1 cuando $z_1>0$ y 0 en otros casos:

$$\frac{\partial a_1}{\partial z_1}=1\ \text{(debido a que }z_1>0)$$

Entonces:

$$\frac{\partial E}{\partial z_1}=\frac{\partial E}{\partial a_1}\cdot\frac{\partial a_1}{\partial z_1}=\left(-0.4-150,000\right)\cdot1$$

Paso 4: Actualización de pesos 

Usamos los gradientes calculados para actualizar los pesos. Supongamos una tasa de aprendizaje $\eta=0.001$
Nuevos Pesos:
$$\omega_2=\omega_2-\eta\frac{\partial E}{\partial z_2}=-0.2-0.001\cdot(-0.4-150,000)$$
$$\omega_1=\omega_1-\eta\frac{\partial E}{\partial z_1}=0.5-0.001\cdot(-0.4-150,000)$$

Estos son los nuevos pesos después de una iteración. El proceso de cálculo de la salida, cálculo de errores, gradientes y actualización de pesos se repite en varias iteraciones hasta que la función de costo converja y la red aprenda a realizar predicciones precisas.





Comentarios

Publicar un comentario

Entradas populares de este blog

Oppenheimer vs Heisenberg. La carrera por la bomba atómica.

LA RADIACIÓN DE LAS ANTENAS...¿ES MALA PARA LA SALUD?

Matemáticas en el antiguo Egipto. ¿Tuvieron ayuda? Parte 1