Primera toma de contacto con la inteligencia artificial¶
Bienvenidos a este curso sobre Inteligencia Artificial. Quizá no sepáis exactamente qué es, o qué abarca. En estos primeros documentos intentaremos dar una visión global de todo esto, para saber en qué mundo nos estamos adentrando. Para empezar, podemos definir rápidamente qué es la inteligencia artificial. Aunque en el siguiente documento la definiremos más exhaustivamente, podemos pensar en ella como un mecanismo mediante el cual un ordenador se comporta de forma inteligente o, en otras palabras, actúa como un humano.
1. La IA en los juegos clásicos¶
Comencemos por algunos ejemplos básicos de cómo podemos definir un comportamiento inteligente en algunos juegos de mesa sencillos. Plantearemos las reglas del juego, y algunas situaciones sobre las que veremos qué haríamos nosotros, y pensaríamos cómo podemos programar que una máquina siga nuestros mismos pasos.
1.1. El juego de Nim¶
El juego de Nim es un juego de tablero para dos jugadores. Existen algunas variantes, pero la idea básica es que se dispone de un conjunto de N fichas en una mesa (por ejemplo, N = 20) y, por turnos, cada jugador debe retirar una cantidad de entre 1 y 3 fichas. Pierde el jugador que retira la última ficha.
Basándonos en estas reglas sencillas, ¿cuántas fichas quitaríamos de la mesa en nuestro turno en esta situación?
La respuesta correcta sería retirar 3 fichas, para que en el siguiente turno el oponente sólo tenga la opción de retirar 1, y perder. Bien, ¿qué pensamos en esta otra situación?
En este caso, hagamos lo que hagamos (quitar 1, 2 o 3 fichas), el oponente se verá con opciones de dejar una sola ficha en el tablero para que perdamos. No hay jugada ganadora para nosotros.
Pasemos a este último escenario:
En este último caso podemos optar por retirar 3 fichas y dejar al oponente en una situación similar al tablero del ejemplo anterior, para que tenga las de perder.
Conclusiones
Como podemos ver, es un juego de reglas sencillas, cuya IA se puede programar fácilmente con una serie de condiciones consecutivas, tipo if..else o switch..case. Dependiendo del número de fichas que queden en la mesa, decidiremos SIEMPRE retirar unas fichas determinadas para forzar al oponente a otro escenario donde sigamos teniendo opciones de ganar. Básicamente se trata de intentar dejar el tablero con 1, 5, 9, 13... fichas.
1.2. El tres en raya¶
El tres en raya es otro juego de tablero con unas reglas sencillas: tenemos un tablero de 3 x 3 casillas, y dos jugadores. Cada jugador va poniendo un tipo de ficha en el tablero, y el objetivo es alinear tres fichas (horizontal, vertical o diagonalmente). Quien lo consiga gana y, si se llena el tablero sin que ninguno de los dos jugadores lo haya logrado, es un empate.
Supongamos que jugamos con fichas rojas y es nuestro turno. ¿Qué jugada haríamos en esta situación?
Evidentemente, colocaríamos la ficha en la esquina inferior izquierda para ganar. Bien, ¿y qué haríamos en este otro caso?
La respuesta correcta sería llenar la casilla inferior derecha, para que el otro jugador no gane en el siguiente turno.
Pasemos a esta última situación, ¿qué opción elegimos?
En este último caso no hay ninguna opción viable porque, hagamos lo que hagamos, el oponente tiene dos opciones de alinear fichas en la siguiente jugada (columna derecha o diagonal de abajo izquierda a arriba derecha). Perderemos hagamos lo que hagamos.
Conclusiones
En este juego hay que plantear una doble estrategia: intentar ganar en nuestra jugada y, si no es posible, intentar no perder en la jugada siguiente. Se puede programar distinguiendo todos los casos posibles con muchísimos if..else, aunque existen otras estrategias que nos permiten detectar la mejor jugada de forma más automatizada y con menos código.
1.3. Otros juegos de tablero¶
Podemos imaginar que, a medida que aumenta el tamaño del tablero, el número de fichas distintas o las opciones de movimiento, la complejidad del juego también aumentará drásticamente. Es el caso de juegos como las damas, o el ajedrez. En este caso necesitaremos máquinas y algoritmos con mucha capacidad de procesamiento para analizar todas las posibles jugadas y evaluar cuál es la mejor opción.
1.4. Conclusiones¶
Después de haber echado un vistazo a estos juegos clásicos, podemos sacar algunas conclusiones: en todos ellos debemos buscar en el espacio de posibles jugadas cuál es la mejor de cara al siguiente movimiento de nuestro oponente. Hacer un programa que aprenda a jugar a estos juegos como lo haría un humano consiste en definir un sistema de búsqueda, que explore el espacio de posibles soluciones en busca de una buena, o de la mejor. Existen distintas estrategias para esto, desde simples programas con varios if..else para cada situación (caso del juego Nim) a otros donde usamos algoritmos de búsqueda más exhaustivos que exploren todas las posibles ramificaciones a partir del tablero actual. En este último caso, hablamos de algoritmos como backtracking o MiniMax, entre otros.
2. La IA en problemas de restricciones¶
Los problemas de restricciones son un subgrupo de problemas dentro de la programación donde, dadas una serie de restricciones a cumplir, debemos elaborar un programa que encuentre una solución. Veamos un par de ejemplos.
2.1. Puzzles: el dilema del granjero¶
El dilema del granjero es un puzzle lógico en el que un granjero debe atravesar un río con una cabra, un lobo y una col. Para ello dispone de una barca en la que sólo puede llevar una de las tres cosas cada vez, y debe tener cuidado de:
- No dejar solos en la orilla al lobo y la cabra, porque el lobo se comerá a la cabra
- No dejar solos en la orilla a la cabra y la col, porque la cabra se comerá la col
Debemos definir la secuencia de pasos que permitirá al granjero cruzar el río sin problemas. La solución sería:
- El granjero cruza con la cabra
- El granjero regresa solo
- El granjero cruza con el lobo
- El granjero regresa con la cabra (para que no se la coma el lobo)
- El granjero cruza con la col
- El granjero regresa solo
- El granjero cruza con la cabra
2.2. El coloreado de mapas¶
El problema del coloreado de mapas consiste en elegir la mínima cantidad de colores necesaria para colorear un mapa sin elegir el mismo color para dos regiones adyacentes.
En la solución se suele indicar, también, qué color usar en cada región para satisfacer las restricciones.
2.3. Conclusiones¶
En estos tipos de problemas debemos probar diferentes alternativas, ver si cumplen las restricciones por un lado, y ver si se alcanza una solución satisfactoria por otro lado. Se podrían programar también de forma tradicional utilizando un sistema de búsqueda como los que hemos indicado antes, y empleando algún algoritmo de búsqueda exhaustiva como backtracking. Sin embargo, en este ámbito puede venir bien echar mano de la programación lógica, una forma de programar donde sólo tenemos que especificar las restricciones del problema y el resultado que queremos alcanzar, y el sistema se pondrá por sí solo a probar las posibles opciones hasta dar con una adecuada, empleando algún algoritmo interno.
3. La IA en videojuegos¶
La IA también se aplica a multitud de videojuegos, todos aquellos en los que una parte corre a cargo del ordenador. Juegos como "Super Mario Bros", "Stumble Guys", "Fifa", etc, tienen un componente más o menos avanzado de IA. ¿Qué estrategias se pueden seguir para programar esa IA? Pues en principio se sigue una estrategia similar a la que tenemos los humanos, pero mucho más condensada y a mucha más velocidad. Básicamente la idea general es que el sistema juegue varias partidas, y tenga un feedback de lo bien o mal que lo ha hecho, para adaptar su estrategia (normalmente al azar) para la siguiente vez, hasta que dé con una estrategia aceptable.
En este caso estamos aplicando mecanismos de aprendizaje por refuerzo, que se pueden programar a través de redes neuronales, o con sistemas de computación evolutiva, como los algoritmos genéticos.
4. La IA en tratamiento de imágenes¶
La IA también se aplica en diversas facetas del análisis o reconocimiento de imágenes. Veamos algunos ejemplos habituales.
4.1. Reconocimiento de elementos¶
Como seres humanos, tenemos muy interiorizado que, cuando vamos por la calle, sabemos identificar lo que es un coche, o una persona, o un familiar. ¿Cómo se consigue todo esto en un ordenador? Comencemos por un par de ejemplos simples. ¿Sabrías decir qué es esto?
Muy bien, es un perro. Perfecto. ¿Y esto otro?
De acuerdo, un semáforo. Subamos un poco el nivel... ¿qué es esto otro?
Se trata de un topo de nariz de estrella. ¿Lo sabías? Pues ahora ya lo sabes. Seguramente (si la memoria no te falla), la próxima vez que veas otro de estos sabrás identificarlo.
4.2. Descripción o segmentación de imágenes¶
Cuando en una imagen hay más de un elemento, el cerebro humano es capaz de analizar e identificar cada elemento relevante. Por ejemplo, ¿qué ves en esta imagen?
Dependiendo de la agudeza visual de cada uno, podemos identificar varios elementos: una moto roja circulando por la calle, o un coche blanco a su lado, un par de patinetes aparcados en la acera, semáforos al fondo, personas paseando por las aceras... Estamos segmentando la imagen en los diferentes elementos que la componen.
4.3. Conclusiones¶
Parémonos a pensar un poco en todo este proceso que hemos llevado a cabo. ¿Qué ha pasado con la imagen del topo? Seguramente muchos de vosotros no sabíais lo que era hasta que lo habéis leído en estos apuntes, y eso os va a permitir identificarlo las próximas veces que lo veáis. Con el reconocimiento de imágenes por ordenador sucede algo parecido. Tenemos que "decirle" al ordenador qué es cada cosa que le enseñamos para que lo vaya aprendiendo, y las identifique las próximas veces que se las enseñemos. Esta tarea se denomina clasificación, y se suele llevar a cabo mediante sistemas de aprendizaje automático, como por ejemplo, y sobre todo, las redes neuronales.
Del mismo modo, una vez tenemos interiorizado qué es una cosa, podemos identificarla en imágenes más complejas, junto a otras, e incluso decir en qué posición de lo que vemos está cada elemento. Esta tarea, que complementa a la clasificación, se denomina segmentación, y los ordenadores también aprenden a desarrollarla mediante sistemas de aprendizaje basados en redes neuronales.
5. La IA en tratamiento de textos¶
Cuando estamos leyendo un libro, o alguien nos hace una pregunta, se inicia un complejo proceso en nuestro cerebro para entender lo que estamos leyendo/escuchando y, en ocasiones, también para formular una respuesta correcta. ¿Cómo traducimos estos procesos a un programa de ordenador?
Veamos qué tal es nuestra comprensión escrita/oral. ¿Sabrías decir cuál de las siguientes frases es correcta?
- Juan cantamos playa mucho por
- Me he comprado un coche nuevo en el restaurante
- Pasamos una buena tarde jugando con los amigos
La respuesta correcta es la tercera opción. La primera frase tiene muchos errores sintácticos y de concordancia. La segunda frase, aunque es sintácticamente correcta, tiene errores semánticos o de asociación de significados (los coches no se compran en los restaurantes), y sólo la tercera cumple ambas condiciones (corrección sintáctica y semántica).
Pongamos ahora otra situación. Queremos ir de viaje a una ciudad, y echamos un vistazo a alguna web turística para ver las opiniones de los clientes sobre los diferentes hoteles, con el fin de determinar cuál es el más apropiado para alojarnos. Cuando leemos estas opiniones, sabemos identificar cuáles son positivas y cuáles negativas sobre el alojamiento. Es lo que se denomina análisis de sentimiento.
En situaciones más complejas establecemos una conversación con otra persona: nos hacemos preguntas, nos respondemos, intercambiamos opiniones. En ningún momento somos conscientes de todo lo que nuestro cerebro procesa para mantener esa conversación, comprender lo que nuestro interlocutor/a nos está diciendo y articular frases o discursos coherentes.
5.1. Conclusiones¶
¿Cómo aprendemos los humanos a hablar? Nadie nos enseña específicamente, lo aprendemos viendo cómo hablan los demás. Las normas sintácticas (concordancia de género y número, de sujeto y verbo, etc) las aprendemos también viendo a los demás, y con una serie de normas que aprendemos en la escuela. Las relaciones semánticas o de significado también las aprendemos con la experiencia.
En el caso de un sistema computacional ocurrirá algo parecido. Deberemos proporcionarle una serie de normas sintácticas para que sepa cómo se construyen las oraciones, y una buena batería de textos para que aprenda a relacionar unos términos con otros. Así, podrá inferir que si en una frase aparece la palabra "coche" y la palabra "comprar", posiblemente haya otra palabra que sea "concesionario", o a lo sumo "tienda", pero no "restaurante".
Sistemas actuales de conversación, como ChatGPT, se alimentan de cantidades ingentes de textos por todo Internet para aprender cómo los humanos articulamos nuestras oraciones, qué datos tienen conexión con qué otros datos... Y, así, darnos unas respuestas cada vez más acertadas a nuestra interacción con el sistema.
6. La IA en otros tipos de datos¶
Para terminar este repaso de ejemplos típicos donde interviene la inteligencia humana en nuestro día a día, veamos unos pocos casos más, que no encajan en ninguna de las clasificaciones hechas hasta ahora.
6.1. Predicción de valores¶
Imaginemos que queremos vender nuestra casa. ¿Cómo sabemos a qué precio podríamos venderla para no tener que esperar mucho, y que la operación sea rentable y razonable para nosotros? Tanto si somos agentes inmobiliarios como particulares, una buena idea es ver a qué precios están las casas de nuestro entorno (incluso, si tenemos esa información, a qué precio se han vendido recientemente algunas de ellas), y ajustar el precio de la nuestra de acuerdo a esos parámetros. Evidentemente, intervienen distintos factores, como la superficie, número de habitaciones, estado general del inmueble... Y, con todo eso, se fija un precio de venta final.
Podemos desarrollar sistemas inteligentes a los que les proporcionemos los datos del inmueble (habitaciones, superficie, ubicación, etc) y nos estimen el precio de venta que debería tener dicho inmueble. Lo que se hace aquí es aplicar un cálculo de regresión donde, a partir de una serie de datos previos conocidos (de otros inmuebles, en este caso), intentamos determinar cuál sería el valor adecuado del nuevo elemento que queremos añadir.
6.2. Clasificación de valores¶
Supongamos ahora que trabajamos en un banco. Nos llegan datos de clientes que quieren solicitar un préstamo, y debemos determinar si el préstamo que solicita el cliente es viable o no. Para ello, igual que en el caso anterior, debemos recopilar ciertos datos relevantes de cada cliente: edad, tipo de contrato, salario anual, otras cargas que tenga, qué cantidad de dinero está pidiendo... para con ello determinar si el proceso puede resultar perjudicial para la entidad o no.
En este caso estamos definiendo un sistema de clasificación: a partir de los datos de entrada de un cliente debemos clasificarlo en básicamente dos categorías: viable o inviable. Nuevamente, la comparación con otros casos previos de clientes nos ayudará a tomar una decisión más acertada, estudiando clientes con características similares, y viendo qué ocurrió con sus préstamos. Todo esto también lo podemos programar en un sistema inteligente que lo haga de forma automática.
7. La IA en otros ámbitos¶
Actualmente la inteligencia artificial tiene varios campos de aplicación, como por ejemplo:
-
Salud: podemos desarrollar sistemas que permitan detectar enfermedades en etapas muy tempranas, o incluso anticiparlas en base a ciertos marcadores previos. Además, se pueden crear sistemas expertos que, de algún modo, complementen la labor de los médicos a la hora de diagnosticar a los pacientes, aliviando de este modo las listas de espera y saturación en centros de atención primaria.
-
Negocios: en el ámbito de los diferentes negocios que pueda haber se pueden desarrollar estrategias generales en cuanto a tendencias en compras, previsión de demanda, sistemas de recomendación, segmentación del mercado, etc.
-
Tráfico: se pueden implantar sistemas que controlen y monitoricen el tráfico de forma automática en núcleos poblacionales. Así, por ejemplo, se podrían regular los semáforos en base a la densidad de tráfico de cada momento. Además, cada vez más se están implantando sistemas de conducción automática en vehículos que, aunque con bastantes limitaciones aún, pueden suponer un alivio y descanso para los conductores el día de mañana.
-
Seguridad: los sistemas basados en inteligencia artificial tienen un amplio campo de aplicación aquí. Desde la detección de caras para localizar a individuos sospechosos, hasta la automatización de ciertos mecanismos de seguridad en hogares y empresas, pasando por sistemas de reconocimiento de voz, detección de impostores, etc.
-
Entretenimiento: cada vez son más las plataformas que tenemos disponibles para nuestro entretenimiento. Desde portales de streaming como Netflix o Prime video hasta plataformas de juego online de diferentes consolas de videojuegos. Todos estos sistemas disponen de mecanismos de IA destinados a asimilar las preferencias de los usuarios, sugerirles novedades e incluso facilitar a los directivos información sobre los gustos de sus clientes para orientar el futuro de sus empresas.
-
Finanzas: delegar la gestión de todo nuestro patrimonio a una máquina puede parecer arriesgado, pero... ¿qué diríamos si esa máquina puede analizar y almacenar más información que cualquier broker experto, y predefir hacia dónde van a ir los mercados antes de que se produzca dicho cambio?
-
Creatividad: es un ámbito que se está desarrollando mucho actualmente. Así, encontramos programas o sistemas capaces de elaborar obras de arte, o piezas musicales, o reproducir imágenes aparentemente reales.
-
Otros, tales como optimización de la energía (reducción del consumo energético), sistemas de educación personalizada, recruiters automatizados para búsqueda de empleo... etc.
8. Limitaciones de la IA¶
¿Podemos incorporar en una máquina cualquier rasgo del comportamiento humano? Es una pregunta que a día de hoy tiene una respuesta negativa, aunque nunca se sabe qué puede ocurrir en un futuro. A pesar de que podemos desarrollar programas o sistemas capaces de (casi) cualquier cosa (aprender a pintar, a hablar idiomas, a predecir eventos futuros) hay algunos rasgos del pensamiento humano que no han podido ser aplicados a ninguna máquina como, por ejemplo, la auto-consciencia, la capacidad de tener sentimientos, o la iniciativa (ser capaz de aprender otras cosas por sí mismo/a). Como veremos a continuación, a pesar de que se han desarrollado sistemas extremadamente buenos en aquello que hacen, todavía no se han podido desarrollar sistemas multidisciplinares, es decir, sistemas que dominen varias facetas del comportamiento humano, y que adquieran con el tiempo otras nuevas. Sin embargo, es un futuro que cada vez resulta más cercano, gracias a sistemas como ChatGPT, entre otros.