La humanidad lleva cientos de años intentando descubrir cómo crear una inteligencia artificial. ¿Has oído hablar de herramientas como los asistentes virtuales, chatbots para marketing, aplicaciones de analítica predictiva o algunas otras? ¡Todo es IA!
Hoy en día, estas herramientas se han popularizado tanto que, de hecho, España se ubica como el 6to país con más patentes de IA en el mundo (más de 42 mil patentes). De ahí la necesidad de aprender a programar inteligencia artificial para crear soluciones cada vez más potentes.
En este artículo, nos centraremos en comprender qué son las Redes Neuronales Artificiales (RNA) y por qué son fundamentales a la hora de programar inteligencia artificial. Te ofrecemos una guía con el paso a paso para la programación de inteligencia artificial con python para crear RNA.
Para programar inteligencia artificial es necesario, primero, entender qué es una red neuronal artificial.
Una red neuronal o red conexionista es un conjunto de nodos (neuronas) conectados entre sí, de modo que forman una estructura de capas de profundidad, también llamadas “capas de aprendizaje”. Dichas capas son las que permiten que la inteligencia artificial pueda ‘aprender’.
Así, a través de estas capas, la red procesa unos datos numéricos de entrada (inputs) para dar un resultado (output). El output puede ser un número o un array de los mismos.
El resultado siempre viene acompañado de otro valor numérico entre 0 y 1, llamado loss (pérdida). Este representa la precisión con la que la red ha obtenido un resultado.
La siguiente cuestión para programar inteligencia artificial es conocer la estructura de las capas al detalle, la anatomía de las neuronas artificiales y los pasos para entrenar las RNA.
Un ejemplo de lo que se puede lograr al aplicar esta tecnología es el caso de éxito de nuestro chatbot con inteligencia artificial para e-commerce que resuelve hasta el 80% de las consultas.
Al programar inteligencia artificial se debe tener en cuenta que existen tres tipos de capas en una RNA:
Toda neurona artificial o nodo tiene un peso (weight), un bias y una función de activación. En este artículo usaremos la ‘Sigmoid activation function’.
Si a una neurona le entra un input ‘x’ y esta envía un output ‘y’, la forma de calcularlo será:
y=σ(wx+b), donde w=peso; b=bias
Entonces, para todas las neuronas de una capa podemos definir un vector W1, el cual representará todos los pesos de todas las neuronas de la primera capa, W2 de la segunda y así sucesivamente. Lo mismo ocurre con las bias, que llamaremos B1, B2, etc.
Por lo tanto, para la red neuronal mostrada anteriormente, tenemos:
Y=σ(W2σ(W1x+B1)+B2)
Donde Y, Wx, Bx, x son matrices.
Al programar inteligencia artificial debemos entender que el objetivo de toda RNA es ajustar tanto los pesos como los bias, con el fin de dar los resultados más precisos posibles. Para ello debemos entrenar la red, lo cual explicamos a continuación.
Para entrenar las RNA al momento de programar inteligencia artificial se deben seguir dos pasos:
Se trata, simplemente, de introducir un input a la red y calcular el output de esta. Llegados a este punto, probablemente te estés preguntando cómo sabe la red el resultado que debería dar, y para ello utilizaremos lo que se llama la loss function.
Para este ejemplo, usaremos la suma de los errores al cuadrado:
Durante el entrenamiento, tendremos que indicarle a la red qué output es el esperado para cada input. Luego, para saber cómo de acertado ha sido, aplicaremos a cada output la loss function, que nos dará un valor numérico, el cual deberá conseguir minimizar.
Después de medir el error de nuestra predicción (loss), necesitamos encontrar una manera de propagar el error y actualizar los pesos y bias. Para determinar la cantidad indicada de ambos parámetros, debemos conocer la derivada de la loss function con respecto a los pesos y bias.
Si tenemos la derivada, simplemente podemos actualizar los pesos y los bias aumentándolos o reduciéndolos. Esto se conoce como descenso del gradiente. Sin embargo, no podemos calcular directamente la derivada de la loss function con respecto a los pesos y bias porque la ecuación de esta función no contiene dichos parámetros. Por lo tanto, necesitamos implementar la ‘regla de la cadena’:
Ahora, con las bases anteriores ya sentadas, pasemos a programar inteligencia artificial y a construir nuestra primera RNA con python. Conoce las ventajas de este potente lenguaje de programación en nuestro artículo Redes neuronales con Python: ¿por qué es el mejor lenguaje para IA?
Así, podemos decir que los requisitos para comenzar a programar inteligencia artificial son dos: Python y NumPy.
PASO 1: definir la clase correspondiente a nuestra red neuronal artificial.
PASO 2: definir la función de ‘feedforward’:
En esta función también debemos definir dos parámetros: ’msg’ y ‘step’. Estos sirven para decidir si queremos ver un mensaje del error actual de la red neuronal durante el entrenamiento. Por defecto no se muestra este mensaje y en caso de activarlo se mostraría cada 100 rondas.
PASO 3: definir la función de ‘backpropagation’.
PASO 4: podemos añadir una función que realiza un feedforward del input que le pasemos como parámetro, mostrando un mensaje por pantalla con la predicción realizada por nuestra RNA.
Al programar inteligencia artificial es necesario que, tras el proceso, la RNA sea testeada. Por ello, en este repositorio se encuentran los archivos para probar la red neuronal en la que hemos trabajado.
Allí puedes observar que hay dos redes neuronales distintas, debido a que quiero mostrar la importancia de seleccionar unos buenos datos a la hora de entrenar una red neuronal artificial.
Por otro lado, para ver en funcionamiento las RNA, he creado este archivo de muestra en el que inicializamos dos redes neuronales que tendrán de input un array de tres valores [v1, v2, v3] y como resultado queremos obtener una operación XOR entre v1 y v2.
A la primera red la entrenaremos con todos los posibles valores que pueden entrarle y los valores que esperamos, mientras que a la segunda la entrenaremos únicamente con los inputs acabados en 1:
Después de ejecutar todas las rondas de entrenamiento (en nuestro caso 12000), obtenemos los siguientes resultados:
Como podemos observar, la red neuronal mal entrenada falla al predecir el resultado de un input acabado en 0, aunque el valor del mismo no importe en la operación que se está realizando. Sin embargo, al predecir el resultado acabado en 1, lo predice con una confianza incluso mayor que la red bien entrenada.
Cuando hablamos de redes neuronales artificiales al programar inteligencia artificial es muy importante tener en cuenta que no solo la complejidad de estas es importante, sino también que los datos elegidos para entrenar a las mismas deben ser adecuados para obtener los resultados esperados.
Creamos nuevos productos y servicios superiores hibridando la tecnología con los modelos de negocio
¿En que estás interesado?
¡Ya has completado el formulario!
¡Ya has completado el formulario! Revisaremos tu solicitud y nos pondremos en contacto contigo lo antes posible.
Gracias por confiar en nosotros.