Cuando los desarrolladores aprendemos un nuevo lenguaje de programación o framework, lo primero que hacemos es un pequeño ejercicio en el que se muestra por pantalla un mensaje que por costumbre suele ser ‘Hola Mundo’ o ‘Hello World’. Por eso tenemos asociado este mensaje a la forma más sencilla de introducirnos en cualquier tecnología.
Y ese es el objetivo de este artículo, adentrarnos en el apasionante mundo de las redes neuronales, del aprendizaje automático y por tanto de la Inteligencia Artificial, concretamente en las IA generativas, que están provocando una ‘quinta’ revolución tecnológica y que probablemente van a generar más impacto que la aparición de Internet.
Por eso puede ser muy interesante partir de cero, porque, aunque evidentemente no vamos a construir redes desde el principio (sino que utilizaremos modelos ya creados y contrastados), conocer el funcionamiento de una red neuronal nos puede ayudar a comprender cómo funciona a gran escala la Inteligencia Artificial.
¿Cómo funcionan las redes neuronales?
Una red neuronal es un modelo matemático o algoritmo inspirado en el funcionamiento del cerebro humano que consiste en una colección de unidades interconectadas llamadas neuronas artificiales.
Cada neurona recibe una o varias entradas, realiza cálculos matemáticos en ellas y produce una salida. Estas salidas se transmiten a otras neuronas, creando una red de conexiones que permite que la información fluya y se procese a través del sistema para conseguir realizar una tarea.
De momento esta definición no nos aporta nada nuevo con respecto a la programación tradicional, en la que los algoritmos suelen usar funciones que reciben unos valores los procesan y devuelven unos resultados.
Entonces, ¿dónde radica el valor o “la magia” de las neuronas artificiales? Pues en que el procesamiento de los valores se lleva a cabo mediante el entrenamiento de un modelo de aprendizaje automático, de manera que a partir de múltiples registros, se puede deducir o inferir qué relación tienen los valores de entrada y salida para posteriormente introducir valores y que el modelo nos devuelva un resultado.
Mientras que en la programación funcional introducimos la (o las) fórmula matemática o lógica que van a procesar los datos, los modelos de IA deducen esas fórmulas a partir del proceso de entrenamiento y posteriormente las utilizan para obtener resultados razonables a partir de nuevas entradas.
Aprendizaje automático: creando neuronas
Vamos a comprobarlo de manera práctica con un ejercicio muy sencillo que consiste en crear una neurona artificial que averigüe el Índice de Masa Corporal o IMC, un indicador muy usado en nutrición y dietética a partir de la altura y peso de una persona.
Este modelo que vamos a crear no tiene demasiado sentido, porque de hecho ya existe la fórmula para calcular el IMC, pero nos va a servir para averiguar cómo trabajan las neuronas.
Para llevar a cabo la práctica vamos a usar Python como lenguaje y Tensorflow, la librería o framework más popular de aprendizaje automático. Para no tener que configurar ningún entorno, usaremos directamente Google Colab (puedes comprobar cómo funciona pulsando aquí).
El siguiente paso es de los más importantes: declarar el modelo de nuestra neurona mediante una serie de métodos de la clase Sequential con una parametrización de acuerdo a los tipos de datos con los que vamos a entrenar. En la documentación de Tensorflow y con la ayuda de ChatGPT podemos averiguar qué emplear para cada caso.
A continuación, vamos a compilar el modelo utilizando un optimizador llamado ‘adam’, adecuado para lo que estamos buscando y una de las funciones de pérdida de Tensorflow.
Una vez que tenemos el modelo llega el proceso de entrenamiento, que consiste en introducir registros con valores de entrada y salida, es decir, le decimos al modelo que para unas entradas concretas, tenemos unas salidas. Estos registros normalmente se obtienen de datos estadísticos o registros en grandes bases de datos, pero en nuestro caso, los vamos a proporcionar nosotros a partir de una certeza, y es que para unos valores de peso y altura, tenemos un IMC.
Por eso vamos a añadir en Python un array con cinco entradas de peso y altura y en otro array, los IMC reales correspondientes a esas entradas.
Una vez que tenemos los datos para entrenar el modelo, lo llevamos a cabo con la siguiente línea de código en la que le pasamos al método fit el array de valores de entrada, el array de valores de salida, los epochs igual a 1000 (es decir, el número de veces que se iterarán los datos y dejamos verbose en false).
A partir de aquí ya podemos ejecutar todos los bloques de código en el cuaderno y tendremos nuestro modelo listo para que la neurona pueda realizar su trabajo. Así, vamos a probar si funciona introduciendo un valor de peso en kg y altura en metros y comprobar que nos devuelve en un par de ejemplos. Para ello, añadimos y ejecutamos el siguiente código.
Observamos que, por ejemplo, para 78 kilos y 1,79 de altura, el modelo devuelve un IMC de 26,01. El valor correcto es 24,3 por lo que a pesar de la poca cantidad de datos con los que hemos entrenado, ya comenzamos a recibir resultados cercanos.
¿Cuál es la clave para conseguir mejores resultados?
Además de la configuración y parametrización de Tensorflow lo más importante es disponer de muchos datos para entrenar el modelo, ya que de esta forma conseguiremos resultados. Como nuestro caso es sencillo, vamos a comprobarlo.
Para ello vamos a generar con un script en Python 1.000 ejemplos de valores de IMC para combinaciones de peso y altura.
Y de nuevo vamos a entrenar nuestro modelo con el nuevo set de datos que al tener muchos más, tardará más tiempo en ejecutarse.
Con el entrenamiento adicional de nuestro modelo, repetimos su uso para averiguar los dos ejemplos anteriores del cálculo del IMC y ya podemos comprobar como sus resultados se aproximan bastante a la realidad.
Podríamos seguir entrenando nuestro modelo hasta conseguir los resultados óptimos, pero el ejemplo nos ha servido para averiguar cómo funcionan los procesos de aprendizaje automático a un nivel muy sencillo y atómico además de para comprender cómo la tecnología persigue simular la inteligencia humana.
De hecho, nuestro propio cerebro aprende a base de repeticiones desde una edad muy temprana, ya que por ejemplo, cuando somos bebés acabamos aprendiendo que si lanzamos muchas veces un juguete al suelo nos acabaremos quedando sin él porque lo romperemos o directamente lo perderemos.
A día de hoy podemos pensar que estas neuronas artificiales ubicadas en gigantescas redes con miles de millones de datos a procesar en enormes centros de datos permiten a la Inteligencia Artificial desarrollar modelos con las espectaculares prestaciones. La realidad es que todavía estamos dando los primeros pasos comenzando a utilizar esta tecnología, ¡pero sólo es el principio de todo lo que viene!
____________________________________________________
Nota del autor: El notebook Colab empleado en el artículo se encuentra disponible de forma pública en este enlace.