Implementación de red de neuronas en C en entorno GNU Linux

Durante los últimos años hemos visto como las diferentes inteligencias artificiales como los modelos GPT o DALL-E de OpenAI han sido el punto de mira para toda la sociedad, siendo así que a diario oímos sobre nuevas tecnologías y avances en este campo tanto de personas cercanas como de los medios de comunicación. Muchos de los usuarios con acceso a internet hoy en día dan uso estas emergentes tecnologías en el trabajo y educación como herramientas de apoyo y consulta, siendo cada vez más común encontrar soluciones y sistemas que usen estas inteligencias artificiales. Las redes neuronales artificiales forman parte del conjunto de instrumentos de Aprendizaje Automático (Machine Learning), que se utilizan para diseñar y desarrollar modelos que permiten dar respuestas a problemas complejos mediante un entrenamiento iterativo. Como su nombre indica, las redes neuronales artificiales se inspiran en las neuronas del sistema nervioso biológico y en la conexión entre ellas con el fin de simular una falsa inteligencia. Pese a que ahora estén en pleno auge, las redes neuronales no son tan modernas como aparentan, los primeros intentos de diseños que proponían la estructura de una red de neuronas datan de la década de los 1940s. Pero hasta el final de los 2000s y principios de los 2010s no se pudieron lograr los hitos masivos que vemos que cada poco tiempo incrementan la capacidad de las IAs y nos acercan a los futuros descritos en la ciencia ficción donde las maquinas son capaces de tomar decisiones y razonar por si solas. En este trabajo nos adentraremos en una de las bases de las nuevas tecnologías emergentes, las redes de neuronas artificiales, y sus principios más básicos, construyendo una librería en el lenguaje C que nos permita crear redes y entrenarlas de forma sencilla. Exploraremos la raíz de este modelo matemático y diferentes formas de aplicarlo para resolver problemas de clasificación, predicción y reconocimiento de patrones. Empezaremos con el estudio de los modelos más sencillos y la implementación de diferentes de estos aumentando la complejidad y añadiendo ajustes y técnicas cada vez. Pasando desde el perceptrón y redes de una a dos capas con ajuste lineal a redes multicapa con aprendizaje de retro propagación hasta llegar a implementar una solución que con pocos parámetros nos permita generar redes con diferentes configuraciones y entrenarlas.
ABSTRACT
During the last few years, we have seen how the different artificial intelligences such as OpenAI’s GPT or DALL-E models have been the focus of attention for the whole society, so we hear daily about new technologies and advances in this field from people close to us as well as from the media. Many of the users with access to the Internet today make use of these emerging technologies in work and education as support and consultation tools, being increasingly common to find solutions and systems that use these artificial intelligences. Artificial neural networks are part of the Machine Learning toolset, which are used to design and develop models that provide answers to complex problems through iterative training. As their name suggests, artificial neural networks are inspired by the neurons of the biological nervous system and the connection between them to simulate a false intelligence. Although they are now booming, neural networks are not as modern as they appear to be the first attempts at designs proposing the structure of a network of neurons date back to the 1940s. But it was not until the late 2000s and early 2010s that the massive milestones witnessed by AIs were achieved, increasing the capacity of Ais, and bringing us closer to the futures described in science fiction where machines can make decisions and reasoning on their own. In this work we will go into one of the foundations of the new emerging technologies, artificial neural networks, and their most basic principles, building a library in the C language that allows us to create networks and train them in an effortless way. We will explore the root of this mathematical model and unusual ways to apply it to solve classification, prediction and pattern recognition problems. We will start with the study of the simplest models and the implementation of different of these increasing the complexity and adding adjustments and new techniques each time. Going from the perceptron and one to two-layer networks with linear adjustment to multi-layer networks with backpropagation learning until we get to implement a solution, that with few parameters allows us to generate networks with different configurations and train them.

​Durante los últimos años hemos visto como las diferentes inteligencias artificiales como los modelos GPT o DALL-E de OpenAI han sido el punto de mira para toda la sociedad, siendo así que a diario oímos sobre nuevas tecnologías y avances en este campo tanto de personas cercanas como de los medios de comunicación. Muchos de los usuarios con acceso a internet hoy en día dan uso estas emergentes tecnologías en el trabajo y educación como herramientas de apoyo y consulta, siendo cada vez más común encontrar soluciones y sistemas que usen estas inteligencias artificiales. Las redes neuronales artificiales forman parte del conjunto de instrumentos de Aprendizaje Automático (Machine Learning), que se utilizan para diseñar y desarrollar modelos que permiten dar respuestas a problemas complejos mediante un entrenamiento iterativo. Como su nombre indica, las redes neuronales artificiales se inspiran en las neuronas del sistema nervioso biológico y en la conexión entre ellas con el fin de simular una falsa inteligencia. Pese a que ahora estén en pleno auge, las redes neuronales no son tan modernas como aparentan, los primeros intentos de diseños que proponían la estructura de una red de neuronas datan de la década de los 1940s. Pero hasta el final de los 2000s y principios de los 2010s no se pudieron lograr los hitos masivos que vemos que cada poco tiempo incrementan la capacidad de las IAs y nos acercan a los futuros descritos en la ciencia ficción donde las maquinas son capaces de tomar decisiones y razonar por si solas. En este trabajo nos adentraremos en una de las bases de las nuevas tecnologías emergentes, las redes de neuronas artificiales, y sus principios más básicos, construyendo una librería en el lenguaje C que nos permita crear redes y entrenarlas de forma sencilla. Exploraremos la raíz de este modelo matemático y diferentes formas de aplicarlo para resolver problemas de clasificación, predicción y reconocimiento de patrones. Empezaremos con el estudio de los modelos más sencillos y la implementación de diferentes de estos aumentando la complejidad y añadiendo ajustes y técnicas cada vez. Pasando desde el perceptrón y redes de una a dos capas con ajuste lineal a redes multicapa con aprendizaje de retro propagación hasta llegar a implementar una solución que con pocos parámetros nos permita generar redes con diferentes configuraciones y entrenarlas.
ABSTRACT
During the last few years, we have seen how the different artificial intelligences such as OpenAI’s GPT or DALL-E models have been the focus of attention for the whole society, so we hear daily about new technologies and advances in this field from people close to us as well as from the media. Many of the users with access to the Internet today make use of these emerging technologies in work and education as support and consultation tools, being increasingly common to find solutions and systems that use these artificial intelligences. Artificial neural networks are part of the Machine Learning toolset, which are used to design and develop models that provide answers to complex problems through iterative training. As their name suggests, artificial neural networks are inspired by the neurons of the biological nervous system and the connection between them to simulate a false intelligence. Although they are now booming, neural networks are not as modern as they appear to be the first attempts at designs proposing the structure of a network of neurons date back to the 1940s. But it was not until the late 2000s and early 2010s that the massive milestones witnessed by AIs were achieved, increasing the capacity of Ais, and bringing us closer to the futures described in science fiction where machines can make decisions and reasoning on their own. In this work we will go into one of the foundations of the new emerging technologies, artificial neural networks, and their most basic principles, building a library in the C language that allows us to create networks and train them in an effortless way. We will explore the root of this mathematical model and unusual ways to apply it to solve classification, prediction and pattern recognition problems. We will start with the study of the simplest models and the implementation of different of these increasing the complexity and adding adjustments and new techniques each time. Going from the perceptron and one to two-layer networks with linear adjustment to multi-layer networks with backpropagation learning until we get to implement a solution, that with few parameters allows us to generate networks with different configurations and train them. Read More