Actualmente y, en ocasiones, aunque no nos demos cuenta, la Inteligencia Artificial (IA) se encuentra presente en muchos ámbitos de la vida cotidiana. Un ejemplo conocido por todos tiene que ver con los sistemas de reconocimiento facial, que encontramos en la mayoría de smartphones y que realizan un procesado de las imágenes tomadas por la cámara frontal de nuestros dispositivos (en ocasiones, en conjunción con más sensores) para extraer información y patrones de nuestros rostros y, en consecuencia, desbloquear el acceso al dispositivo.
Otros ejemplos pueden ser la conducción autónoma, que trata de procesar la información recogida mediante las cámaras y diferentes sensores del automóvil, como sensores LIDAR o radares, para dirigir el coche hacia su destino teniendo en cuenta las condiciones del tráfico; o los asistentes virtuales, que hacen uso de sistemas de reconocimiento de voz para poder atender nuestras peticiones.
Sin embargo, existe un campo en el que la IA se ha aplicado ya con bastante éxito: los videojuegos, debido en parte a su naturaleza. Por ejemplo, como veremos a continuación, en la rama del aprendizaje por refuerzo, los videojuegos son un área que permite establecer una función de recompensa de manera directa atendiendo al objetivo del juego. Además, también se pueden aplicar técnicas de tratamiento de imágenes y de generación procedural de contenidos.
Aprendizaje por refuerzo en los videojuegos
Una de las primeras IAs fue Deep Blue, desarrollada por IBM, que compitió contra el campeón del mundo de ajedrez Garri Kasparov consiguiendo batirle y marcando así un hito en la evolución de este tipo de sistemas. Aunque a Deep Blue podamos entenderla como IA, dado que nos encontramos con una máquina que “imita” las capacidades humanas, tenemos que viajar hasta el año 2015 para encontrar a otra de las más famosas, en este caso, entrenada con técnicas más modernas de aprendizaje automático y de la que ya hemos hablado en este blog, que es AlphaGo. Desarrollada por la empresa DeepMind, consiguió batir al campeón del mundo del juego tradicional Go, demostrando un gran poder para descubrir jugadas nuevas y para poner contra las cuerdas a uno de los maestros de este juego.
Así pues, los videojuegos son un buen terreno para poner a prueba el aprendizaje por refuerzo, una rama de la Inteligencia Artificial que consiste en entrenar un agente para que intente maximizar una función de recompensa y, de esta manera, mejorar en el desempeño de su tarea asignada, que en este caso sería ganar el juego.
Mediante la técnica de explotación y exploración, que consiste en encontrar un equilibrio entre tomar acciones ya conocidas y previamente evaluadas o explorar nuevas alternativas; así como con diferentes algoritmos de Deep Reinforcement Learning, el agente es capaz de ir aprendiendo en base a la experiencia recogida a lo largo de una gran cantidad de exposiciones al entorno y al resultado de las acciones llevadas a cabo sobre este.
Otros casos de IAs similares son OpenAI Five, capaz de derrotar a uno de los mejores jugadores del videojuego Dota2, y Agent57, nuevamente entrenada por DeepMind y capaz de jugar a una amplia variedad de videojuegos de la consola Atari, superando en ocasiones de manera notable el rendimiento promedio obtenido por los humanos. Como curiosidad, en uno de los juegos, Montezuma’s Revenge, la IA obtuvo resultados claramente inferiores a los de un humano, debido a las particularidades de los niveles de este juego en concreto. No obstante, consiguió finalmente superarlo en evoluciones posteriores.
Técnicas de tratamiento de imágenes para videojuegos
Otras aplicaciones de Machine Learning más “tradicionales” son utilizadas en la actualidad ya no para conseguir ganar un videojuego, sino también para mejorar la experiencia de los jugadores e incluso democratizar en cierta medida el acceso a un hardware limitado para los usuarios. En este sentido, empresas como NVIDIA, puntera en el desarrollo de hardware y, en este caso, Unidades de Procesamiento Gráfico (GPU), utilizan técnicas de Inteligencia Artificial para ofrecer algunas mejoras a la hora de jugar a videojuegos como, por ejemplo, las técnicas de Super Sampling.
Este tipo de técnicas de tratamiento de imágenes parten de imágenes renderizadas por la GPU a una resolución inferior a la resolución objetivo y, mediante la aplicación del aprendizaje automático, generan el fotograma definitivo infiriendo de un modelo previamente entrenado cómo debería ser dicho fotograma objetivo. De esta manera, se libera carga de procesamiento a la GPU, puesto que es más ligero computacionalmente hacer la inferencia que hacer todos los cálculos necesarios para renderizar el fotograma, y se consigue aumentar el rendimiento final y, por tanto, la tasa de fotogramas capaces de ser generados por la GPU.
NVIDIA presentó en 2019 su primera versión de lo que denominaron como “Deep Learning Super Sampling” o DLSS. Esta tecnología consiste, en esencia, en el entrenamiento de un modelo llamado auto-encoder. Este tipo de algoritmos se encuentran formados por dos redes neuronales: la primera de ellas se corresponde con la etapa de codificación (encoder) y la segunda, con la de decodificación (decoder).
La primera de las redes se entrena con datos sin etiquetar para conseguir una codificación de la señal de entrada, pero bajo ciertas restricciones que no le permitan aprender directamente la función de entrada. Estas restricciones atienden, fundamentalmente, al tamaño de la representación. Esto significa que la dimensión de los datos una vez atraviesan el encoder es menor que la entrada original. Por otro lado, el decoder intenta recuperar la señal original, pero tras ser pasada por el encoder.
De esta manera, ambas partes de la red componen un tándem en el que ambos bloques consiguen obviar el ruido a la entrada y generar una salida lo más fiel posible a la entrada. Así, lo que se plantea para esta técnica de DLSS es:
- Primera etapa: se dispone de una primera red neuronal que toma como entrada el fotograma actual y los vectores de movimiento del juego para hacer un suavizado de los bordes y un antialiasing
- Segunda etapa: se hace un escalado de la imagen desde una imagen de menor resolución para llegar a la imagen objetivo final.
Inteligencia de los NPC (Non-Player Characters)
Habitualmente, en una gran cantidad de videojuegos, el humano se enfrenta a una Inteligencia Artificial convertida en lo que se conoce como “personaje no jugador” o NPC (Non-Player Character). Por ejemplo, es frecuente jugar partidas contra la inteligencia del propio juego en los videojuegos de fútbol. Aquí, uno de los equipos es manejado por el humano, mientras que el otro equipo se controla de manera artificial por la propia máquina. En este caso, se utilizan otro tipo de algoritmos más tradicionales como son los árboles de decisión, un modelo de representación lógica de toma de decisiones. Para el ejemplo propuesto, podríamos tener un árbol de decisión como el siguiente:
Con esto, queda definido el comportamiento de los NPC y es su manera de interactuar contra las instrucciones aportadas por el humano. Los árboles de decisión para uso en videojuegos pueden ser sustituidos por modelos más complejos, pero más robustos y con un funcionamiento más natural y similar al comportamiento humano, como los que permite el aprendizaje por refuerzo o Reinforcement Learning.
En el IIC, empleamos habitualmente variaciones de estos modelos. Un ejemplo puede ser el algoritmo de Random Forest que, tomando estos árboles como estimadores base y fundamentándose en el principio de agregación por voto, plantea el entrenamiento de un conjunto de árboles de decisión. Una vez entrenados, se toma como resultado la opción más repetida por los árboles en el caso de los problemas de clasificación y el valor medio de los resultados calculados en el caso de encontrarnos ante problemas de regresión.
Junto con lo anterior, el algoritmo de Random Forest incorpora algunas técnicas para evitar los problemas de sobreajuste tan comunes en el mundo del aprendizaje automático. Por ejemplo, se entrena cada árbol con un subconjunto del total de las variables para que, así, no todos los árboles aprendan en base a las mismas características. En el IIC, utilizamos frecuentemente este tipo de algoritmos para el desarrollo de los modelos de predicción entregados a nuestros clientes.
Generación Procedural para videojuegos
Por último, existe un ámbito de aplicación de la Inteligencia Artificial en el área de la generación procedural para videojuegos. Este proceso consiste en desarrollar un sistema capaz de generar diversas partes del juego de manera automática y aleatoria, tales como niveles, vegetación, personajes, texturas o la propia música.
La generación de contenido de manera procedural se basa en establecer una serie de reglas o procedimientos que deben acotar y obligar al algoritmo a comportarse de manera controlada, ya que, en caso de aportar demasiada flexibilidad o libertad, podría conducir a generaciones y productos imposibles o que no tuvieran sentido. Así, similar al funcionamiento de los árboles de decisión comentados anteriormente, se deben establecer algoritmos de ramificación y poda que permiten controlar las soluciones ofrecidas por el algoritmo.
También se emplean modelos de Deep Learning para esta generación procedural. De esta manera, modelos como las GANs (Generative Adversarial Networks), descritas en 2014 por Ian Goodfellow, son utilizadas, por ejemplo, en la generación de nuevos terrenos. Estos modelos constan de dos partes:
- El generador, se encarga de producir nuevas imágenes “falsas” a partir de los datos con los que fue entrenado.
- El discriminador, intenta descubrir si la imagen generada por el generador es real o falsa.
Ambas partes compiten en un escenario similar a un juego, de tal manera que el generador se especializa en crear nuevas imágenes, que deben ser tan buenas que el discriminador no sea capaz de detectarlas como falsas. De esta forma, se consigue un gran realismo de los nuevos objetos producidos de manera artificial y automatizada. Esto abre además un mundo muy grande en la producción de videojuegos, ya que permite aumentar las posibilidades y el entretenimiento de los juegos sin necesidad de que sean específicamente programados.
Aunque el campo de la generación procedural lleva años explorándose, uno de los videojuegos más recientes basado fundamentalmente en este paradigma es No Man’s Sky, cuyo contenido es generado en gran parte de manera procedural. Este juego consiste en ir explorando el universo y descubrir nuevos planetas, galaxias, animales… Es precisamente en esta parte donde se utiliza la generación procedural: cada uno de los planetas, así como la música, el nombre de las galaxias, la cantidad de lunas o las naves son generadas con esta técnica.
A lo largo de este artículo hemos visto varios usos de la Inteligencia Artificial en el mundo de los videojuegos. En el IIC, creemos que estos son un buen campo de pruebas, pero además, aplicamos las técnicas descritas para en el entrenamiento de modelos en otros ámbitos tales como la salud, la energía o el sector legal, por mencionar algunos. ¿Conocías todos estos usos de la Inteligencia Artificial en el sector de los videojuegos?