Knowledge Base Help Center
< All Topics
Print

Introducción teórica y práctica a la Inteligencia Artificial

1. Introducción

La Inteligencia Artificial (IA) es un área del conocimiento que ha experimentado increíbles avances en las últimas décadas, especialmente en los últimos años, y que revolucionará a la humanidad en los próximos.

Imagen generada por DALL-E

Dada la importancia de la IA, se hacen cada vez más necesarios recursos formativos que permitan a las personas conocer sus aspectos fundamentales, pero sin tecnicismos matemáticos ni informáticos, sin ignorar las desventajas de la IA ni exagerar sus capacidades.

No tener en cuenta cuándo debe aplicarse IA, cuándo no, o los usos mixtos entre IA, humanos y algoritmos, puede llevarnos a situaciones donde no solo no avancemos, sino que retrocedamos, en algunos casos de forma peligrosa. Esto último ha quedado demostrado en ejemplos como los accidentes mortales de algunos automóviles autónomos, donde a fecha de hoy tienen una tasa de accidentes mayor que la de los humanos[1]; o como algunos procesos de selección de personal basados en IA donde se detectaron sesgos que discriminaron por género[2].

Por tanto, este documento de introducción teórica y práctica a la IA tiene como objetivos que el lector comprenda:

  • Qué es la IA y cuáles son sus orígenes.
  • En qué casos tiene sentido aplicar IA.

Para conseguir los objetivos anteriores, en este documento, abordaremos la IA desde una perspectiva teórica y práctica, para que lector tenga una introducción completa y de primera mano.

1.1. Glosario

En esta sección se mencionan algunos términos necesarios para la comprensión del documento.

  • Neurona: una neurona es la unidad más fundamental de procesamiento. También se llama perceptrón.
  • Capa de entrada o input layer: compuesta por neuronas, introduce los datos en la red neuronal.
  • Capa de salida u output layer: es la última capa de neuronas que produce la salida de la red neuronal.
  • Capas ocultas o hidden layers: son las capas de neuronas que se encuentran entre la capa de entrada y la de salida.
  • Propagación hacia adelante: es el algoritmo utilizado en la red neuronal para predecir sus salidas en base a sus entradas.
  • Propagación hacia atrás o Backpropagation: es el algoritmo utilizado en la red neuronal para aprender sus salidas en base a sus entradas.
  • Época o epoch: es el entrenamiento de la red neuronal con todos los datos de entrenamiento durante un ciclo de propagación hacia delante y hacia atrás. Por ejemplo, si entrenamos la red neuronal con 30 épocas, significa que la hemos entrenado con todos los datos 30 veces.
  • Tasa de aprendizaje o learning rate: es un hiperparámetro utilizado para regular el ritmo al que el algoritmo de propagación hacia atrás actualiza los valores de la estimación de otro parámetro (pesos y sesgos), a menudo entre 0 y 1. El ritmo de aprendizaje controla la rapidez con la que el modelo se adapta al problema. Las tasas de aprendizaje más pequeñas requieren más épocas de entrenamiento, dado que los cambios realizados en los pesos en cada actualización son menores, mientras que las tasas de aprendizaje más altas producen cambios más rápidos y requieren menos épocas de entrenamiento.

2. Teoría

2.1. ¿Qué es la Inteligencia Artificial (IA)?

La IA es la capacidad, mostrada por sistemas no biológicos, de aprender y aplicar conocimientos.

Para resolver un reto o problema, podemos utilizar:

  • Algoritmo: conocer a fondo el reto y los pasos a seguir para resolverlo.
  • IA: aplicar IA para que aprenda el reto y la solución.
  • Mixto: conocer parte del reto y los pasos a seguir para resolverlo y aplicar IA a la parte que no conocemos.

Las ventajas de utilizar IA frente a algoritmos son:

  • Aprende: la IA aprende por lo que no necesitamos conocer a fondo el reto ni los pasos o procedimiento (algoritmo) a seguir para su solución.
  • Adaptativa: se adapta a los cambios del entorno.
  • Versátil: las mismas herramientas sirven para resolver muchos tipos de retos.
  • Ignora atípicos: la IA es normalmente más capaz, que las técnicas estadísticas, de ignorar los valores atípicos (outliers en inglés).

Sin embargo, la IA presenta las siguientes desventajas:

  • Caja negra: como su funcionamiento se basa en miles de millones de cálculos, no es posible saber realmente cómo la IA llega a sus conclusiones.
  • Imperfecta: el éxito de la IA para resolver un reto se mide en porcentaje y casi nunca es del 100%.
  • Consumo de energía: la IA consumirá mucha más energía, normalmente varios órdenes de magnitud, que el algoritmo equivalente.

Otros autores también presentan como desventajas los siguientes puntos que explicaremos:

  • Calidad de los datos: la dependencia de la calidad de los datos que se le introducen no debería considerarse una desventaja frente a los algoritmos porque también les ocurre a éstos últimos cuando están siendo definidos.
  • Sesgo: esto no debería considerarse una desventaja frente a los algoritmos porque también éstos pueden estar diseñados siguiendo una determinada inclinación (bias en inglés) hacia un resultado u otro.

Debido a las anteriores desventajas se dice que la IA es siempre la 2ª mejor opción, siendo la 1ª mejor opción conocer a fondo el reto que se quiere resolver, el detalle del procedimiento para resolverlo (algoritmo) e implementar dicho procedimiento de forma automática.

Sin embargo, a veces, o bien no es posible o es demasiado costoso conocer a fondo el reto y el detalle del procedimiento para resolverlo, o bien las ventajas de la IA son imprescindibles para un reto concreto; y en esos casos es cuando utilizar IA es conveniente.

2.2. Breve historia de la IA

Orígenes y Desarrollo Temprano (1940s – 1950s)

  • 1943: Warren McCulloch y Walter Pitts publican un artículo describiendo una red neuronal simple basada en matemáticas y algoritmos, sentando una base teórica para la IA (ver 1 en “Fuentes y referencias” más adelante).
  • 1950: Alan Turing publica su artículo seminal “Computing Machinery and Intelligence”, proponiendo lo que ahora se conoce como el “Test de Turing” para evaluar la inteligencia de una máquina (2).
  • 1956: El término “inteligencia artificial” es acuñado por John McCarthy en la Conferencia de Dartmouth, un evento considerado como el nacimiento de la IA como campo de estudio autónomo​ (3).

Crecimiento y Desafíos (1960s – 1970s)

  • Durante los años 60 y 70, la IA experimentó un período de optimismo y financiación, seguido por los “inviernos de la IA” debido a limitaciones técnicas y teóricas​ (4).

Resurgimiento y Avances (1980s – 2000s)

  • 1980s: Un renovado interés en la IA, impulsado en parte por el éxito de los sistemas expertos y el desarrollo de algoritmos de aprendizaje automático​ (4).
  • 1997: El superordenador Deep Blue de IBM derrota al campeón mundial de ajedrez Garry Kasparov, un hito significativo en el desarrollo de la IA​ (5).

Era Moderna de la IA (2010s – Presente)

  • 2012: Avances significativos en redes neuronales profundas, especialmente el trabajo en redes neuronales convolucionales por Alex Krizhevsky, Ilya Sutskever y Geoffrey Hinton, revolucionan la percepción de la IA (6).
  • 2016: AlphaGo de DeepMind derrota al campeón mundial de Go, Lee Sedol, en un juego conocido por su complejidad​ (7).
  • 2020s: Continúan los avances en la IA, con desarrollos notables en procesamiento del lenguaje natural, robótica, y aplicaciones éticas y sociales de la IA​​ (8).

Fuentes y Referencias

  1. McCulloch, W., & Pitts, W. (1943). “A logical calculus of the ideas immanent in nervous activity”. Bulletin of Mathematical Biophysics.
  2. Turing, A. (1950). “Computing Machinery and Intelligence”. Mind.
  3. McCarthy, J., Minsky, M. L., Rochester, N., & Shannon, C. E. (1955). “A Proposal for the Dartmouth Summer Research Project on Artificial Intelligence”.
  4. Russell, S., & Norvig, P. (2009). “Artificial Intelligence: A Modern Approach”. Prentice Hall.
  5. IBM (1997). “Deep Blue”.
  6. Krizhevsky, A., Sutskever, I., & Hinton, G. E. (2012). “Imagenet classification with deep convolutional neural networks”. NIPS.
  7. Silver, D. et al. (2016). “Mastering the game of Go with deep neural networks and tree search”. Nature.
  8. OpenAI (2020s). “GPT series: Advancements in Natural Language Processing”.

2.3. ¿Cómo funciona la IA?

La IA funciona de una manera similar a como parece que lo hacen las inteligencias biológicas, que basan su funcionamiento en unas células llamadas neuronas, que se organizan en grupos llamados redes neuronales.

Las redes neuronales, como veremos a continuación, lo que hacen en realidad es calcular funciones matemáticas. En otras palabras, la IA funciona como una función matemática. Para comprenderlo, veamos a continuación una red neuronal muy sencilla capaz de clasificar los puntos de un plano en función de si el punto es rojo azul.


[1] Para más información, consulte: https://www.wired.com/story/self-driving-car-crashes-rear-endings-why-charts-statistics/

[2] Para más información ver: https://www.codedbias.com/

[3] Nota del autor: existe actualmente (2023) cierta controversia acerca de si se ha superado ya o no el test de Touring.

Source: https://www.youtube.com/c/LuisSerrano

La red neuronal, mostrada a la derecha de la imagen anterior, está compuesta por 3 neuronas que, juntas, calculan la función:

2x + 7y = 4

Las neuronas x e y son las entradas, es decir, tomarán los valores de los puntos (x, y) rojos y azules del plano de la imagen. La neurona marcada con el número 4 es la salida. Los valores 2 y 7 son lo que se conocen como pesos.

Esta función permite saber, con una tasa elevada de éxito, si un punto del plano mostrado en la imagen será rojo o azul.

Combinando múltiples grupos de neuronas como el de la imagen es posible definir funciones mucho más complejas que permitan encontrar la solución a retos mucho más complejos. Retos que no tienen porqué limitarse a un plano de dos dimensiones, como en la imagen anterior, sino que pueden estar en planos conceptuales de miles de dimensiones.

Por tanto, el ejemplo visto anteriormente es capaz de pasar del plano de los datos de los puntos x e y de un plano, al concepto de si el punto será rojo o azul. Esa capacidad es la que permite a las redes neuronales pasar del plano de los datos a cualquier otro plano, como, por ejemplo, al de los conceptos abstractos, como hace ChatGPT.

Como hemos visto anteriormente, la IA es normalmente la 2ª mejor manera de resolver un reto, por eso, los sistemas biológicos y los investigadores de IA han utilizado la 1ª mejor manera para hacer que la IA aprenda: algoritmos de aprendizaje.

Existen distintos algoritmos de aprendizaje utilizados para implementar IA. Uno de los más conocidos es el llamado de propagación hacia atrás o back propagation en inglés. Este algoritmo se suele implementar mediante cálculos de matrices ya que es la forma más rápida de ejecutarlo utilizando los ordenadores actuales. Consulta la bibliografía de este documento si estás interesado en profundizar en esta área.

3. Práctica

En esta sección realizaremos tres ejercicios utilizando la librería Anaimo AI SDK y la aplicación NNViewer. Al final de cada ejercicio, hay algunas preguntas para ver si se han entendido los conceptos. Las respuestas a estas preguntas están en la siguiente sección, pero te animamos a que las respondas por ti mismo primero.

3.1. Librerías

Para que podamos practicar con IA sin tener que desarrollar nosotros mismos las redes neuronales y todas las funciones y utilidades necesarias, existen en el mercado distintas librerías software, como por ejemplo Tensorflow de Google o Keras sobre Python.

En nuestro caso utilizaremos Anaimo AI SDK, una librería software que ejecuta las redes neuronales que construiremos e incluye otras utilidades que también necesitaremos. Esta librería es gratuita para un número limitado de neuronas, por lo que podemos descargarla desde la página web de Anaimo (https://anaimo.ai).

Puedes consultar en la página web de la librería Anaimo AI SDK (https://anaimo.com/sdk/) las ventajas que tiene frente a otras alternativas. En este documento la utilizaremos porque nos sirve para resolver retos que van desde los más sencillos hasta los más complejos que existen.

3.2. Instalación de Anaimo AI SDK

Es importante destacar que la documentación técnica actual de Anaimo está en inglés, como probablemente la totalidad de la documentación técnica disponible de cualquier librería de IA.

Utilizaremos la versión 2024-01 (build 10010) del Anaimo AI SDK. Para su descarga e instalación, seguiremos estos pasos:

  1. Lo descargamos desde la página web oficial de Anaimo. Para ello, abrimos un explorador de internet, y en la dirección (URL) tecleamos: https://anaimo.com/shop/
  2. Seleccionamos (opción “Add to cart”) la versión gratuita y procedemos (opción “View cart”) a su descarga.
  3. Hacemos clic en “Proceed to checkout” para descargarlo, rellenamos los datos que se nos solicitan y podremos descargar el software haciendo clic en el botón “Free SDK AI Toolkit”.

Una vez descargado, descomprimiremos el fichero ZIP, y nos encontraremos esta estructura de carpetas y ficheros:

Para los ejercicios que realizaremos aquí, utilizaremos la aplicación NNViewer, que se encuentra, incluido su código fuente, en el directorio \Examples\.NET\NNViewer

La aplicación NNViewer corre en Windows y está desarrollada con Microsoft VB.NET. Consulta por favor el manual de usuario del Anaimo AI SDK para conocer la versión correcta de Microsoft Visual Studio (recuerda que puedes usar la versión gratuita Community) u otros componentes software que debas instalar previamente para poder ejecutar la aplicación.

Ejecuta la aplicación NNViewer y responde a las preguntas con el valor por defecto. La aplicación mostrará, a la izquierda, una tabla que muestra los valores de las entradas, y a la derecha, una tabla que muestra los valores de las salidas. Entre otras muchas cosas que podemos hacer, con el ratón podemos pintar en las entradas y las salidas.

Recuerda que en la aplicación NNViewer puedes pulsar la tecla M en cualquier momento para consultar la ayuda de las teclas disponibles. Con NNViewer puedes hacer, por ejemplo:

  • Importar tus propias imágenes desde carpetas, tanto en blanco y negro, como color, como separadas en RGB; activando para ellas la salida que desees y crearte así tus propios proyectos.
  • Hacer variaciones de las imágenes (aumentación) para que la red neuronal aprenda mejor.
  • Crear redes de forma automática y manual, donde tendrás que establecer las conexiones entre las neuronas manualmente.
  • Crear distintas arquitecturas de redes neuronales, desde totalmente conectadas hasta convolucionales.
  • Reordenar automáticamente los registros (páginas) para que tengas un conjunto de datos de entrenamiento primero y uno de pruebas después.
  • Obtener la matriz de confusión, es decir, la matriz que informa de qué ha predicho para cada caso la red neuronal, tanto cuando ha acertado como cuando no.
  • Ver los conjuntos de datos que la librería Anaimo AI SDK tiene en memoria, ya que NNViewer es capaz de abrir los ficheros NNV que la librería genera.

Además de muchas más funcionalidades ya incluidas que, como dispones del código fuente, podrás modificar, ampliar y crear nuevas.

3.3. Ejercicio: Función XOR

En este ejercicio crearemos una función XOR (“o exclusiva”) mediante una red neuronal. La función “o exclusiva” se define así:

Entrada 1Entrada 2Salida
000
011
101
110

Puedes utilizar la aplicación NNViewer para hacer que una red neuronal aprenda la función XOR. Dispones del archivo \Examples\.NET\NNViewer\bin\Release\net6.0-windows\xor.nnv, que puedes cargar con la tecla O (“open”) para que no tengas que crear los registros (páginas en NNViewer) de datos de la tabla anterior.

Cuando vayas a crear la red neuronal, te recomendamos que le indiques que quieres solo 1 capa oculta e introducir manualmente que esta capa intermedia debe tener 2 neuronas. Tu red neuronal será como la que se muestra a continuación (fíjate que las neuronas se numeran empezando por el cero):

Una vez hayas conseguido que tu red neuronal sea capaz de reproducir las salidas de la función XOR según la tabla anterior, responde por favor a las siguientes preguntas.

Pregunta 1 ¿Cuántas epochs ha necesitado tu red neuronal para aprender la función XOR al 100%?

Pregunta 2. Si quisieras resolver el mismo reto mediante un algoritmo, ¿cuál sería éste?

Pregunta 3 ¿Qué consumiría más energía, resolver el reto mediante tu red neuronal o mediante el algoritmo?

3.4. Ejercicio: Detección de patrones y anomalías

En este ejercicio haremos que la red neuronal reconozca patrones, los aprenda y, por tanto, detecte anomalías, es decir, registros que no se ajustan a los patrones.

Para este ejercicio usaremos el archivo \Examples\.NET\NNViewer\bin\Release\net6.0-windows\ranges.nnv, que puedes cargar con la tecla O (“open”).

Responderemos aceptando las opciones por defecto a todas las preguntas que nos haga. Una vez cargado, veremos esto:

Este proyecto ranges.nnv ha cargado 100 páginas. Puedes utilizar las techas de las flechitas para navegar entre las páginas.

Este proyecto se ha construido de la siguiente forma:

  • En el 95% de las páginas se han activado 2 filas contiguas de entradas dejando algún cuadrado en blanco y, a la derecha, se ha activado la salida que está a la misma altura visualmente. En la imagen anterior se muestra esto en un recuadro amarillo.
  • Sin embargo, en el 5% de las páginas, se han introducido excepciones o anomalías a la norma anterior.

Puedes encontrar una anomalía al patrón en la página 3, como se muestra en la imagen a continuación:

A continuación, vamos a hacer que la red neuronal aprenda, por sí misma, el patrón definido. Para ello, seguiremos los siguientes pasos:

  1. Tecleamos la A para que aprenda e introducimos 30 epochs:
  1. Respondemos Ok aceptando el valor por defecto en la siguiente pregunta, menos en la pregunta de lotes, que respondemos 0:
  1. Respondemos Ok aceptando el valor por defecto en las siguientes preguntas, menos en la pregunta del último registro a usar para entrenamiento, que responderemos 100, para que use todos:

Esto es porque normalmente NNViewer no utilizará todos los registros para entrenamiento y por eso proponía que el último registro de entrenamiento fuera uno inferior, para dejar un porcentaje de los registros para las pruebas del aprendizaje. Esto es porque en IA es siempre obligatorio hacer las pruebas con registros de datos que la IA nunca haya visto antes, pero no aplica en este caso porque nos interesa que la IA aprenda todos los registros.

  1. En pocas epochs, la IA habrá aprendido el 95% de los registros y nos lo indicará en pantalla así:

Ahora que la IA ya ha aprendido el patrón, podemos ver qué “piensa” ella de los registros usando la tecla T, para que entre en modo “pensando” (“Thinking”):

Para que las salidas se muestren más claramente, podemos pasarlas a blanco y negro mediante la tecla B, respondiendo que No a invertir todas las imágenes y que Sí a pasar al modo blanco y negro. Una vez hecho esto, lo mostrará así:

En este punto, podemos hacer una prueba para ver cuántas páginas se ha aprendido correctamente la IA. Para ello, podemos usar la tecla V y respondemos a todas las preguntas por defecto excepto ésta:

Al responder 1 en el registro para iniciar la prueba, hará la prueba con todas las páginas. Deberemos obtener el 95% de acierto.

A continuación, por favor responde a las siguientes preguntas.

Pregunta 1 ¿Existe alguna razón común para las páginas que no ha aprendido la IA? Entonces: ¿por qué no las ha aprendido?

Pregunta 2 ¿Qué utilidad práctica tendría el hecho de que la IA no haya aprendido esas páginas?

Pregunta 3 ¿Crees que con más epochs llegaría a aprender el 100% de las páginas?

3.4.1 Sobreajuste y subajuste

Sobreajuste (“overfitting” en inglés) es cuando la red neuronal se aprende las salidas que debe predecir frente a las entradas en lugar de los patrones que éstas definen. En el ejercicio anterior ocurre cuando le pedimos que aprenda hasta un porcentaje de éxito mayor que el 95%, porque significa que estará aprendiéndose las anomalías de memoria, y no el patrón que hace que esos casos sean anomalías.

Subajuste (“underfitting” en inglés) es lo contrario, es cuando la red neuronal no ha aprendido el patrón.

3.5. Ejercicio: Reconocimiento de caracteres de números manuscritos

En este ejercicio haremos que la red neuronal aprenda a reconocer caracteres de números escritos por personas, es decir, manuscritos.

Para ello utilizaremos un conjunto de caracteres numéricos manuscritos llamado MNIST muy popular en el ámbito de los retos de IA.

Los caracteres numéricos manuscritos ya están disponibles dentro de un proyecto de NNViewer, dentro del archivo \Examples\.NET\NNViewer\bin\Release\net6.0-windows\handwritten_28x28_50000_10000

También existe una versión idéntica del reto pero para Python en la carpeta \Examples\Python\MSVS_Handwritten_Digits, cuyo archivo Python_Handwritten_Digits.sln también puede abrirse con MS Visual Studio Community.

Este proyecto consta de 50.000 imágenes en tonos de grises de 28×28 píxeles con caracteres numéricos realmente escritos por personas, ordenados consecutivamente desde el 0 al 9. A continuación, los siguientes 10.000 registros son, de nuevo, caracteres numéricos manuscritos también ordenados consecutivamente del 0 al 9. Esto es así porque en IA siempre debe realizarse el aprendizaje con un conjunto de registros y las pruebas de los resultados del aprendizaje con un conjunto de registros o datos que la IA nunca haya visto. Por tanto, en este caso, utilizaremos los primeros 50.000 registros para el aprendizaje y los últimos 10.000 para la prueba de los resultados del aprendizaje.

Seguiremos los siguientes pasos:

  1. Desde el NNViewer, abrimos el archivo \Examples\.NET\NNViewer\bin\Release\net6.0-windows\handwritten_28x28_50000_10000, con la tecla tecla O (“open”). Responderemos que queremos solo 1 capa intermedia, ya que para este proyecto será suficiente así:
  1. Responderemos Ok con las opciones por defecto al resto de preguntas. Finalmente nos creará una red neuronal con estas características:

Esperaremos a que cargue el proyecto entero, lo cual podría llevar unos minutos.

  1. Una vez el proyecto esté cargado, podemos utilizar las teclas de las flechitas para recorrer las distintas páginas. También podemos utilizar la tecla G para ir a una página en concreto. Recuerda que con la tecla M puedes consultar todas las teclas disponibles. 
  2. Ahora haremos que la red neuronal aprenda los caracteres numéricos manuscritos. Cambiaremos la tasa de aprendizaje (“learning rate”) a 3, con la tecla L:

Podemos dejar la tasa de decaimiento en su valor por defecto 1. Esta tasa haría que la tasa de aprendizaje disminuya en cada epoch. Puedes consultar el manual de usuario del Anaimo AI SDK si quieres más información.

  1. Cambiaremos a validación por máximo. Esto significa que la red neuronal considerará la salida activa aquella que tenga la mayor probabilidad, y no aquella que supere un cierto umbral. Para ello, usaremos la tecla V:

Cancelaremos el siguiente paso, ya que no queremos realizar el test en sí, sino simplemente decirle a la librería cómo debe medir ella sus resultados, por máximo: 

  1. Para acelerar el proceso de aprendizaje, podemos indicarle que use todos los núcleos de la CPU de nuestro ordenador. Si no se lo decimos, realizará el aprendizaje utilizando sólo un núcleo. Para averiguar cuántos núcleos tenemos disponibles, podemos usar el Administrador de Tareas de Windows. Para indicarle el número de núcleos que queremos utilizar, usa la tecla X:
  1. Para iniciar el aprendizaje usamos la tecla A, y le decimos, por ejemplo, 30 epochs de aprendizaje:
  1. Respondemos con el valor por defecto a la tasa de acierto deseada, y respondemos que utilice 5.000 lotes de registros. Dado que usaremos 50.000 registros para el aprendizaje, eso hará que el tamaño del lote sea de 10 registros, lo que significa que consolidará el aprendizaje cada 10 registros:
  1. Responderemos que el primer registro de aprendizaje sea el 1 y que el último sea el 50.000, así:
  1. Finalmente, si respondemos que No refresque la pantalla durante el aprendizaje, la aplicación se mostrará en blanco, pero el aprendizaje será un poco más rápido:
  1. El aprendizaje empezará. Resultados típicos son que aprenda por encima del 85% de los caracteres en la primera epoch, como puede verse en la siguiente imagen:
  1. Podemos esperar a que termine las 30 epochs o podemos detener el proceso de aprendizaje en cualquier momento con la tecla de escape. Es conveniente tener en cuenta que el proceso puede acelerarse utilizando juegos de instrucciones AV2 y AVX512, disponibles en las librerías del SDK.
  2. Una vez haya terminado, obtendrás un resultado parecido a éste:

Como puede verse en la imagen anterior, la red neuronal ha aprendido el 94,96% de los caracteres manuscritos, después de 30 epochs y utilizando una red con 1 capa intermedia de 30 neuronas totalmente conectadas. Pueden obtenerse resultados similares en menos epochs utilizando redes convolucionales. Si estás interesado en profundizar en las redes convolucionales, puedes generarlas, y otras arquitecturas de redes, con la tecla I y usando nemotécnicos de arquitecturas. Esa parte más avanzada queda, por ahora, fuera de este documento, pero recuerda que el manual de usuario del Anaimo AI SDK tiene más información sobre los nemotécnicos para arquitecturas.

Ahora que tu red neuronal ha aprendido, por favor, responde a las preguntas siguientes.

Pregunta 1 ¿Tendría sentido definir el procedimiento o algoritmo, a detalle, para reconocer los caracteres numéricos manuscritos, tal como ha conseguido la IA? Razona tu respuesta.

Pregunta 2 ¿Se te ocurren otras razones para cuestionarte el uso de algoritmos?

4. Soluciones

Veamos a continuación las respuestas a los ejercicios.

4.1. Ejercicio: Función XOR

Seguimos los siguientes pasos:

  1. Nos aseguramos de tener instalado Microsoft Visual Studio (VS) 2022 (o superior) Community, con el entorno de desarrollo de VB.NET.patata
  2. Vamos a la carpeta: \Examples\.NET\NNViewer
  3. Hacemos doble clic en el fichero NNViewer.sln. Debería abrir el proyecto NNViewer desde VS.
  4. Ejecutamos el proyecto. La primera vez creará una red neuronal temporal, por lo que le respondemos a todas las preguntas que nos haga tomando la opción por defecto.
  5. Cuando esté listo para recibir comandos, teclearemos la O para abrir un proyecto (recuerda que dispones de la tecla M para consultar la ayuda de las teclas).
  1. Nos aparecerá un cuadro de diálogo para abrir el proyecto, encontraremos el proyecto xor.nnv aquí: \Examples\.NET\NNViewer\bin\Release\net6.0-windows\xor.nnv
  2. Responderemos 1 capa intermedia así:
  1. Diremos que sí a “Full Connected”, que significa conectar automáticamente todas las neuronas con todas las neuronas de la capa siguiente.
  1. Responderemos que No a que la aplicación asigne el número de neuronas automáticamente:
  1. Le diremos que ponga 2 neuronas en la capa oculta (intermedia):
  1. Aceptaremos los siguientes parámetros por defecto y ésta es la red que creará:
  1. Ahora con las teclas de flechas podemos revisar las 4 páginas de datos (registros) de la función XOR.
  2. A continuación, haremos que la red neuronal aprenda. Tecleamos la A y nos preguntará el número de epochs para aprender: 10000 es un buen valor para este proyecto:
  1. Aceptamos el resto de los valores por defecto, excepto el último registro para el entrenamiento, que deberá ser el 4.

Esto es porque normalmente NNViewer no utilizará todos los registros para entrenamiento y por eso proponía que el último registro de entrenamiento fuera uno inferior, para dejar un porcentaje de los registros para las pruebas del aprendizaje. Esto es porque en IA es siempre obligatorio hacer las pruebas con registros de datos que la IA nunca haya visto antes, pero no aplica en este caso porque nos interesa que la IA aprenda todos los registros.

  1. En un número determinado de epochs (2179 en la imagen de debajo), la red neuronal aprenderá la función XOR y mostrará que tiene una tasa de éxito del 100%:
  1. Una vez la función XOR esté aprendida podremos cambiar al modo “Pensando” (“Thinking”) con la tecla T y ver qué predicción (salida) hace la red neuronal para cada registro. Si queremos que las salidas se muestren en blanco y negro podemos usar la tecla B, responder que No a invertir todas las imágenes y que Sí a pasar a blanco y negro.

Es necesario tener en cuenta que las redes neuronales se inicializan con número aleatorios por lo que los resultados pueden diferir de una ejecución a otra. También podría ocurrir que no aprendiera el 100% en el número de epochs indicado y fueran necesarias más epochs. Puede sorprender que una función tan sencilla como XOR necesite tantas epochs para ser aprendida y es algo interesante para la reflexión.

Pregunta 1 ¿Cuántas epochs ha necesitado tu red neuronal para aprender la función XOR al 100%?

Respuesta: 2179.

Pregunta 2. Si quisieras resolver el mismo reto mediante un algoritmo, ¿cuál sería éste?

Respuesta: el algoritmo de la función XOR es

  • Salida = 1, si las entradas son distintas.
  • Salida = 0, si las entradas son iguales.

Pregunta 3 ¿Qué consumiría más energía, resolver el reto mediante tu red neuronal o mediante el algoritmo?

Respuesta: consume más energía, en varios órdenes de magnitud, el aprendizaje que hemos realizado que lo que hubiera supuesto entender a fondo el reto de la función XOR, crear e implementar el algoritmo.

4.2. Ejercicio: Detección de patrones y anomalías

Veamos las respuestas a continuación.

Pregunta 1 ¿Existe alguna razón común para las páginas que no ha aprendido la IA? Entonces: ¿por qué no las ha aprendido?

Respuesta: no ha aprendido ese 5% de las páginas porque no se ajustan al patrón común definido por todas las otras páginas.

Pregunta 2 ¿Qué utilidad práctica tendría el hecho de que la IA no haya aprendido esas páginas?

Respuesta: la utilidad práctica es que la IA aprende los patrones, por lo que es capaz de detectar anomalías. Si en lugar de esas entradas y salidas de pruebas, le hubiéramos introducido datos reales de cualquier sistema, la IA podría indicarnos aquellas situaciones que no se ajustan al patrón habitual.

Pregunta 3 ¿Crees que con más epochs llegaría a aprender el 100% de las páginas?

Respuesta: la respuesta intuitiva es que no, porque como la IA aprende patrones, nunca aprendería las excepciones, si están por debajo de un cierto porcentaje frente al total de los datos. Sin embargo, la respuesta correcta en este caso es que sí, porque aunque hemos definido un patrón que es marcar las entradas y las salidas a la misma altura, las entradas están marcadas aleatoriamente y por eso tienen a veces celdas blancas en la franja que debería estar totalmente negra. Eso permite a la IA, si se le dan más epochs para aprender, distinguir incluso esos casos especiales y llegar a aprenderse el 100% de las páginas.

4.3. Ejercicio: Reconocimiento de caracteres de números manuscritos

Veamos las respuestas a continuación.

Pregunta 1 ¿Tendría sentido definir el procedimiento o algoritmo, a detalle, para reconocer los caracteres numéricos manuscritos, tal como ha conseguido la IA? Razona por qué es mejor hacerlo con IA en este caso.

Respuesta: Este es uno de los casos donde es mejor utilizar IA que definir el algoritmo, porque la IA aprende a reconocer caracteres numéricos manuscritos en pocos minutos, como hemos visto en este ejercicio, mientras que definir el algoritmo para reconocerlos podría llevarnos semanas de trabajo para finalmente conseguir una tasa de acierto igual o peor que la IA.

Pregunta 2 ¿Se te ocurren otras razones para cuestionarte el uso de algoritmos?

Respuesta: Como se ha visto en este documento, en aquellos casos donde el reto cambie con el tiempo, un algoritmo normalmente no se adaptaría a dichos cambios, mientras que la IA se adaptaría, si no utilizara un conocimiento estático y aprendiera en tiempo real.

5. Comentarios, ayuda y soporte

Para cualquier comentario, si necesitas ayuda o soporte de una forma más continua, por favor dirígete a las siguientes páginas web y utiliza los mecanismos habilitados:

6. Bibliografía


Table of Contents