
En la actualidad, la inteligencia artificial ha tenido un gran impulso y se encuentra presente en gran parte de nuestras vidas. Las redes neuronales han jugado un papel en suma importancia, pues se trata de modelos con gran capacidad adaptativa que son capaces de resolver problemas de gran complejidad, como el procesamiento y generación de imágenes o de lenguaje natural. Es, de hecho, gracias a las redes profundas que actualmente se han resuelto problemas en inteligencia artificial que antes se veían casi imposibles. En este artículo, revisamos los fundamentos matemáticos de las redes neuronales, mostrando que se trata de funciones que pueden aproximar tanto como se quiera a las funciones continuas y que, además, presentan la ventaja de poder aprender, es decir, adaptarse para encontrar la solución a un problema dado una muestra de ejemplos de ese problema.
Recientemente las redes neuronales artificiales han tenido un auge debido a las tecnologías de inteligencia artificial que hacen uso de éstas. Agentes conversacionales como chatGPT o modelos para generación de imágenes como Dall-e o Stable Difussion han permitido generar tanto texto como imágenes que cada vez se acercan más a las producciones humanas. Esto ha desatado un gran debate en diferentes comunidades acerca de que representa la inmersión de estas tecnologías en nuestras vidas, cómo aprovecharlas, o que riesgos pueden traer. Sin embargo, este debate ha tocado poco a los fundamentos matemáticos que radican en las redes neuronales y su importancia en la funcionalidad de éstas. Quizá comprender más a fondo los motivos matemáticos que radican detrás de las redes neuronales y el aprendizaje profundo puede servirnos para desmitificar un poco estas tecnologías. En este artículo buscamos presentar las nociones matemáticas esenciales que radican en las redes neuronales: en primer lugar, presentamos cómo las redes neuronales buscaron, al menos en un principio, modelar el funcionamiento de neuronas biológicas a partir de funciones. Posteriormente, mostramos los límites de estos modelos e introducimos la noción de red densa que da pie al aprendizaje profundo al utilizar el concepto de capas ocultas, donde interactúan un conjunto de neuronas. Abordamos la propiedad de este tipo de funciones de aproximar funciones continuas, lo que se conoce como aproximador universal. Finalmente, hacemos una breve introducción sobre el aprendizaje en este tipo de neuronas, lo que les permite adaptarse a diferentes problemas a partir de un conjunto finito de ejemplos.
En los años 40s, Warren McCulloch y Walter Pitts [MP43] propusieron un modelo neuronal para el cálculo de funciones lógicas que, junto con Frank Rosenblatt [Ros58], llevó al diseño del primer modelo computacional de una neurona, el perceptrón. Esta neurona es capaz de aprender
, es decir, de adquirir experiencia que le permita modificarse para resolver problemas específicos sin necesidad de que un programador le diga cómo tiene que darse esta adaptación.
|
|
|
| (a) Imagen de una neurona | (b) Modelo matemático de neurona |
El modelo propuesto por Rosenblatt se basa en abstraer los componentes de una neurona biológica. Las dendritas de una neurona, que funcionan como receptores de información o estímulos, se representan con valores numéricos $x_1, x_2,...,x_d$. Estos estímulos pasan a través de conexiones neuronales ponderadas por $w_1, w_2, ..., w_d$, que representan la fuerza de la conexión entre los estímulos de entrada y el núcleo de la neurona. Se obtiene una suma de los estímulos ponderada por los pesos de las conexiones. Si dicha suma supera cierto umbral $\theta$ (esto es si $\sum_iw_ix_i \mayorque \theta)$, la neurona se activa, de lo contrario la neurona permanece inactiva. Si denotamos $\theta = -b$, podemos escribir las interacciones en el núcleo de la neurona como: $$\sum_{i=1}^d w_ix_i + b$$ Cuando este valor es positivo, la neurona se activa. Visualmente, el perceptrón puede verse como en la Figura 1 donde su relación con la neurona biológica es más claro. Por tanto, podemos definir el perceptrón, utilizando notación vectorial, como sigue:
La definición del perceptrón puede recordar a otras funciones, como la regresión logística o la regresión lineal.
El perceptrón considera a la neurona como una función binaria, pero las funciones que activan la neurona, que llamaremos funciones de activación, pueden tomar distintas formas. Es común que estas funciones tengan una forma de S, como la llamada función sigmoide: $$\sigma(a) = \frac{1}{1+e^{-a}}$$ Esta función, acotada por 0 y 1, puede usarse para activar la neurona, de tal forma que los valores de salida estén en el intervalo $[0,1]$. Este modelo se conoce como regresión logística. Además, podemos suponer que la activación de la neurona es la identidad, de tal forma que $f(x) = wx+b$; esto define el modelo de regresión lineal. Ambos modelos, junto con el perceptrón, pueden considerarse como redes neuronales. Considérese una función de pre-activación $a: \mathbb{R}^d \to \mathbb{R}$, dada como $a(x) = wx+b$, definimos:
Si la función de activación es el sigmoide, tenemos la regresión logística; si es la función signo, tenemos el perceptrón, y si es la identidad tenemos la regresión lineal. Es común utilizar otras funciones de activación como la tangente hiperbólica, $\tanh$, o la llamada función ReLU (de las siglas de Rectified Linear Unit), dada por $ReLU(a) = \max\{0, a\}$ [GBB11].
Los modelos de una neurona entran dentro de la categoría de modelos lineales, pues queda claro que la pre-activación $wx+b$ parametriza una recta ortogonal a $w$ y trasladada por $b$. Para entender sus límites, necesitamos revisar primero los problemas que pueden resolver [Mit97]:
Los problemas de regresión toman valores en un intervalo continuo; por ejemplo, se pueden presentar en la predicción de precios.
Los problemas de clasificación, por su parte, hacen predicciones sobre un conjunto finito de enteros positivos que representan clases.
Supongamos que tenemos un objeto representado por $d$ características $x_1,x_2,...,x_d$ y queremos clasificarlo como un animal: gato
, perro
, otro
; contamos con tres clases que podemos asociar con los enteros positivos 0, 1 y 2, respectivamente. El problema de clasificación asignará su clase a cada dato $x \in \mathbb{R}^d$ según las características que lo describen.
Para estudiar los límites de una neurona (artificial) podemos enfocarnos a los problemas de clasificación. Por ejemplo, fijémonos en las funciones lógicas. La función de conjunción $\land$, podría definirse como: $$\land(x_1,x_2) = \begin{cases} 1 & \text{si } x_1 = 1 = x_2 \\ 0 & \text{en otro caso} \end{cases}$$ La conjunción puede verse como un problema de clasificación $\land: \{0,1\}^2 \to \{0,1\}$, donde las clases pueden interpretarse como falso o verdadero. Si tomamos la siguiente función de pre-activación: $$a(x) = x_1 + x_2 -1.5$$ donde $w^T = \begin{pmatrix} 1 & 1\end{pmatrix}$ y $b = -1.5$, tenemos que el perceptrón definido por esta función de pre-activación es igual a la conjunción lógica. Más aún podemos encontrar perceptrones que definan las funciones lógicas de disyunción y negación.
Ahora, veamos que existe una relación estrecha entre el perceptrón y la regresión logística; esta última, aunque tome valores en $[0,1]$ que pueden interpretarse como una probabilidad, se usa en la práctica para problemas de clasificación, interpretando $p(Y=1|x) = \big(\sigma\circ a\big)(x)$ y $p(Y=0|x) = 1-\big(\sigma\circ a\big)(x)$.
El perceptrón hace una clasificación discreta, mientras que la regresión logística hace una clasificación probabilística. Con base en esto, podemos ver las limitantes de estos modelos. Consideremos la disyunción exclusiva lógica (Xor) definida como: $$\oplus(x_1,x_2) = \begin{cases} 1 & \text{si } x_1 \neq x_2 \\ 0 & \text{si } x_1 = x_2 \end{cases}$$ Marvin Misky y Seymour Papert [MP69] mostraron que el perceptrón (ni tampoco la regresión logística) pueden resolver este problema:
Un perceptrón (o un modelo de regresión logística) no es capaz de resolver un problema como la disyunción exclusiva (Xor) ya que este no es un problema linealmente separable; es decir, no podemos encontrar una recta (o un hiperplano) en el espacio de los datos que separe los puntos de una clase de los de la otra clase (véase la Figura 2).
|
|
|
| (a) Separación lineal | (b) Problema Xor |
Para solventar las limitaciones que presentaba el modelo de una neurona, se propusieron redes neuronales como las de base radial [LB88] que introducían un preprocesamiento estadístico antes de aplicar un perceptrón. Los modelos que lograron imponerse fueron las redes profundas, comenzando por el perceptrón multicapa. La idea es muy sencilla: si se tiene el modelo de una neurona, se puede hacer una red que incorpore varias de estas neuronas trabajando en conjunto para resolver un problema. Por ejemplo, en la disyunción exclusiva, sabemos que se puede expresar por funciones lógicas simples como: $$x_1 \oplus x_2 = (x_1 \lor x_2) \land \lnot (x_1 \land x_2)$$ Ya que la conjunción, la disyunción y la negación son problemas linealmente separables, existen perceptrones, $f_\land, f_\lor$ y $f_\lnot$ que los solucionan, por lo que podemos componer una nueva función $f_\oplus$ como: \begin{align*} f_\oplus(x_1, x_2) &= f_\land \Big( f_\lor(x_1,x_2), f_\lnot \big( f_\land(x_1,x_2) \big) \Big) \\ &= sgn\Big( sgn(x_1 + x_2 -0.5) + sgn\big( -sgn(x_1+x_2-1.5) +0.5\big) -1.5 \Big) \end{align*} Donde $sgn: \mathbb{R} \to \{0,1\}$ es la función que envía valores negativos al 0 y positivos al 1. El problema puede simplificarse si se introducen tres neuronas que procesen previamente a los datos de entrada. Definamos estas neuronas por las funciones $h_1,h_2,h_3:\mathbb{R}^2 \to \mathbb{R}$ que están dadas como: \begin{align*} h_1(x) &= ReLU(0.5x_1 + 0.5 x_2) \\ h_2(x) &= ReLU( -x_1 + x_2) \\ h_3(x) &= ReLU(-x_1 + x_2 + 0.5) \end{align*} Recuérdese que $ReLU(a) = \max\{0,a\}$. Estos tres valores de las neuronas se pueden incorporar en un nuevo vector $h^T(x) = \begin{pmatrix}h_1(x) & h_2(x) & h_3(x) \end{pmatrix}$. Este vector puede verse como la entrada a un perceptrón definido como: $f(x) = sgn(0x_1 + 1.3x_2 -1.6x_3 + 0.6)$ lo que soluciona el problema de la disyunción exclusiva. La solución se puede ver en la Figura 3b.
|
|
|
| (a) Transformación de datos | (b) Regiones de solución |
La idea que radica detrás de esta solución es simple: se busca transformar los datos para llevarlos a un espacio donde sean linealmente separables. En la Figura 3a se puede ver esto. Los datos se pasan a tres dimensiones por medio de la transformación $h: \mathbb{R}^2 \to \mathbb{R}^3$ que hemos definido previamente. Esta transformación la podemos expresar en forma matricial como: $$h(x) = ReLU\Big(\begin{pmatrix} 0.5 & 0.5 \\ -1 & 1 \\ -1 & 1 \end{pmatrix}\begin{pmatrix} x_1 \\ x_2 \end{pmatrix} + \begin{pmatrix} 0 \\ 0 \\0.5 \end{pmatrix} \Big)$$ La función de activación ReLU se aplica punto a punto. Si expresamos a la matriz como $W \in \mathbb{R}^{m \times d}$ y al vector de sesgos como $b \in \mathbb{R}^m$, tenemos que la fórmula puede escribirse como: \begin{equation} h(x) = g\Big( Wx + b\Big) \end{equation} Esta fórmula es central en las redes neuronales, y define lo que se conoce como una capa oculta. Para generalizar esto, se pueden introducir un número arbitrario de capas ocultas que toman como entrada a las capas ocultas previas. Esto define lo que se conoce como redes densas o completamente conectadas (feedforward en inglés):
Las redes densas pueden verse como un conjunto de neuronas que interactúan entre si para solucionar un problema. Cuando se utilizan varias capas ocultas, se suele hablar de red profunda. Una red profunda, entonces, puede verse como la composición de un conjunto de funciones que son las capas ocultas. Generalmente a la última capa se le conoce como capa de salida. Asimismo, se tienen otros dos conceptos importantes dentro de las redes densas [GBC16]:
Las redes neuronales han mostrado su capacidad para resolver prácticamente todo tipo de problemas en inteligencia artificial. Esto está fundamentado en el principio teórico de la aproximación universal. Se ha mostrado que una red de profundidad $K=1$ y con una anchura arbitraria puede aproximar cualquier función continua [Cyb89; Les+93] (o medible [HSW89]). De hecho, existen una serie de teoremas que muestran este hecho para diferentes casos. Revisamos aquí el teorema de aproximador universal de Cybenko [Cyb89]. Para esto, primero debemos definir lo que entendemos por aproximador universal:
si es denso en $C(X)$, $\overline{\mathcal{F}} = C(X)$.
Es decir, un aproximador universal es una familia de funciones que puede aproximar a las funciones continuas tanto como se quiera. En esta definición, en particular se asume que el codominio es real, pero el resultado puede extenderse a función de $\mathbb{R}^d$ a $\mathbb{R}^n$. Definamos el concepto de función discriminatoria:
Con esta definición, podemos utilizar el teorema de Hahn-Banach [Olt22] para probar que las redes neuronales son densas en $C(X)$. Para esto, nos limitaremos a las redes con una sola capa oculta.
Podemos representar este funcional con base en una medida $\mu \neq 0$ (pues $L$ es diferente de 0) de la siguiente forma: $$L(f) = \int f d\mu$$ Ahora, observemos que la función $g(W_ix+b) \in \mathcal{F}$ para todo vector $W_i \in \mathbb{R}^d$ y toda $b \in \mathbb{R}$. Por tanto tenemos que $L$ envía esta función al 0; esto es: $$\int g(W_ix + b) d\mu(x) = 0$$ Pero como asumimos que $g$ es discriminatoria, entonces $\mu = 0$, lo que contradice el que $L$ sea diferente de 0. Es decir, hemos llegado a una contradicción al suponer que $\overline{\mathcal{F}} \neq C(\mathbb{R}^d)$. Por tanto debe ser que las redes neuronales son aproximadores universales para $C(\mathbb{R}^d)$.
La propiedad de aproximación universal tiene gran importancia en las aplicaciones prácticas de las redes densas. Sin embargo, todavía deja algunos inconvenientes: en primer lugar, tenemos que usar funciones discriminatorias. En particular, funciones como la sigmoide o la tangente hiperbólica son de este tipo. También se ha probado que las funciones ReLU cumplen con la aproximación universal [DJC+23], y todas aquellas funciones no polinomiales [Les+93]. El segundo inconveniente es conocer el número de neuronas que necesita la capa oculta (la anchura) para que podamos aproximar un problema particular. Existen resultados que dan cotas acerca de la anchura de la red para resolver un problema [Par+20; DJC+23], sin embargo, en la práctica suele ser un proceso más bien artesanal y muchas veces el procesamiento se distribuye a través de un número (muchas veces grande) de capas ocultas.
Las redes neuronals profundas son aproximadores universales como otras familias de funciones, pero lo que ha despertado el interés sobre estas funciones dentro de la inteligencia artificial es la flexibilidad que muestran para adaptarse y solucionar diferentes problemas prácticos, así como su facilidad para poder estimar los pesos de la red en base al aprendizaje. Este aprendizaje se basa en optimización con base al gradiente de los pesos dado los datos de un problema. El aprendizaje en redes neuronales radica en dos métodos esenciales: el descenso por gradiente [Ben00] y el algoritmo de retro-propagación [RHW86].
La estrategia de aprendizaje consiste en: 1) definir una función objetivo que indique qué tanto se parecen las soluciones al problema con lo que predice la red neuronal; 2) obtener el gradiente de todos los pesos de la red con respecto a la función objetivo; y 3) actualizar los pesos con un optimizador basado en gradiente para minimizar la función objetivo. Consideremos las siguientes definiciones:
La función de pérdida $L\big( f(x),y\big)$ determina un error
entre la predicción hecha por la red $f(x)$ y una señal de guía (o supervisión) $y$ [Vap98]. Por tanto, entre más se aleje $f(x)$ de $y$ mayor será este error
. Una forma típica de la función de pérdida está dada por $L\big( f(x), y \big) = -1(y) \ln f(x)$, donde $1(y)$ es la función indicadora en $y$. En estos casos, a la función objetivo se le conoce como entropía cruzada [MMZ23].
En principio, para redes sin capas ocultas, el descenso por gradiente puede aplicarse sin dificultad aplicando la regla de la cadena a las funciones de pre-activación, activación y objetivo. Cuando contamos con redes multicapas, con un número arbitrario de capas profundas, debemos extender la regla de la cadena. El algoritmo de retro-propagación [RHW86] permite hacer esto de forma sencilla y eficiente al aplicar la regla de la cadena de forma recursiva sobre la estructura de una red neuronal con función objetivo dada.
El algoritmo de retro-propagación, como aquí lo hemos presentado, depende de la estructura de las redes profundas. Se pueden utilizar métodos de diferenciación automática para facilitar la implementación tanto de las redes neuronales como la obtención del gradiente y la optimización dentro de éstas. En [Bay+18] se puede profundizar sobre la diferenciación automática en gráficas computacionales. Estos métodos han contribuido a su uso extensivo para solucionar problemas prácticos. Por ejemplo, bibliotecas del lenguaje de programación Python como PyTorch [Pas+17] o TensroFlow [PNW20] utilizan estas ideas para facilitar la creación e implementación práctica de redes profundas.
Las redes neuronales y el aprendizaje profundo han tenido un impacto en nuestras vidas a través de las tecnologías de inteligencia artificial. Estas redes tienen un fundamento matemático profundo del que aquí hemos revisado tan sólo lo más básico, como la definición de red densa, su capacidad de aproximación universal y la forma en que aprenden. Actualmente, las redes densas son de gran importancia, pero se utilizan otro tipo de arquitecturas de redes que permiten manejar datos con estructuras más complejas. Algunos ejemplos son las redes recurrentes [Elm90] que tienen aplicaciones en datos secuenciales como el lenguaje natural, las redes convolucionales [LeC+98] que se aplican para procesar imágenes, o los transformadores [Vas+17] que se utilizan en los grandes modelos del lenguaje como GPT [Bro+20] (el modelo detrás de chatGPT).
Asimismo, se ha mencionado que el proceso que se conoce como aprendizaje, se basa en la optimización a partir del gradiente de la función objetivo. Cabe mencionar, sin embargo, que actualmente el método de descenso por gradiente es poco usado, pues tiene algunos problemas en la búsqueda de los mínimos de una función, principalmente cuando esta no es convexa. Por tanto, se han optado por otros optimizadores como Adagrad (de Adptative gradient) [DHS11], momento de Nesterov [Lin+19], Adam (de Adaptative momentum) [Kin14], o Noam (de Normalized adam) [Vas+17]. Estos optimizadores también están basados en gradiente.
Además de sus múltiples aplicaciones, el estudio de las redes neuronales representa un apasionante campo en donde se intersecta con áreas de la matemática como el análisis funcional, la topología o la geometría. Actualmente, existen proyectos que buscan abordar las bases teóricas del aprendizaje profundo a partir de enfoques geométricos, como el aprendizaje profundo geométrico [Bro+17], topológicos [Pap+23] o desde la teoría de categorías [Gav+24].