Categorías
Universitario Videojuego

Aprendizaje profundo

Esta lección es importante por su relevancia actual. El Aprendizaje Profundo es el resultado de usar redes neuronales artificiales con muchas capas y representación jerárquica de características, que han sido entrenadas con backpropagation sobre cantidades ingentes de datos (Big Data)… y sin embargo eso supone un salto de abstracción muy importante.

Salto de abstracción

En el Aprendizaje Automático clásico que hemos ido viendo hasta ahora, los ingenieros dedican meses a diseñar variables a mano (feature engineering). El Aprendizaje Profundio (Deep Learning ó DL) es tan potente que elimina este cuello de botella: las capas intermedias de la red neuronal artificial aprenden automáticamente representaciones abstractas y jerárquicas a partir de datos en bruto (raw data), pudiendo obtenerse las características automáticamente (feature learning).

Semejante salto de abstracción se produce porque las llamadas «redes profundas» rompen el «techo de rendimiento» del Aprendizaje Automático tradicional cuando se las alimenta con volúmenes masivos de datos y su ejecución aprovecha el cómputo masivo en GPU/NPU.

A día de hoy los «modelos profundos» ya no son prototipos académicos engorrosos de desplegar en cualquier máquina, sino archivos optimizados que se distribuyen en formatos estándar como ONNX y que se ejecutan directamente en Unity, Unreal Engine o sobre el chip de una consola/dispositivo móvil.

Las aplicaciones estrellas del Aprendizaje Profundo son la visión por computador, el Procesamiento de Lenguaje Natural y los LLMs, que dan lugar a la IA generativa que veremos a continuación.

Redes convolucionales

Las llamadas Convolutional Neural Network o CNN están especializadas en problemas relacionados con la representación espacial y la percepción visual. Aprovechan el sesgo inductivo espacial, es decir, en lugar de procesar imágenes píxel a píxel (cosa que con capas densas acaba destruyendo por completo la información geométrica), lo que hacen es introducir filtros convolucionales y capas de pooling para analizar patrones invariantes a la posición (bordes, texturas, formas, objetos…), consiguiendo ser mucho más eficaces en el trabajo con imágenes.

Hay que pensar que esto es la base conceptual detrás de tecnologías de la industria de superresolución o escalado mediante IA… como Nvidia DLSS o AMD FSR 4, ya que lo que hacen es reconstruir fotogramas a alta resolución a partir de renders de más baja resolución para ahorrar tiempo de GPU. También en aquellas competiciones en las que un bot tiene que jugar mirando la pantalla, igual que un ser humano, se usa visión por computador in-game con estas técnicas para detectar objetos y analizar lo que hay en pantalla.

Redes recurrentes

Las redes recurrentes son muy útiles para los problemas con dimensión temporal donde se procesan secuencias: el orden de los eventos importa, de modo que el estado actual depende del histórico de acciones pasadas. Las llamadas Recurrent Neural Network (RNN) se diseñan para procesar secuencias de datos, teniendo en cuenta el orden temporal y manteniendo un estado interno que actúa como una especie de memoria de la información anterior.

En concreto, arquitecturas como LSTMs y GRUs explican cómo los mecanismos de memoria y puertas (gates) resuelven el problema del desvanecimiento del gradiente (vanishing gradient) que tienen tradicionalmente las RNN.

En videojuegos se puede usar para predecir trayectorias o proyectar intenciones a futuro según la última secuencia de acciones del jugador.

Arquitectura de Transformador

La revolución de la atención que surge en 2017 aparece cuando se inventan los mecanismos de atención (self-attention). Se trata de reemplazar la recurrencia estricta por un mecanismo que evalúa las relaciones cruzadas entre todos los elementos de una secuencia simultáneamente, calculando qué partes del contexto son más relevantes en cada instante.

Como sabemos, la arquitectura de Transformador (Transformer) se ha convertido en el bloque estándar para procesar texto y audio (en general Procesamiento de Lenguaje Natural… pero no sólo eso, sino también secuencias de acciones en videojuegos de última generación (por ejemplo cuando un agente debe «prestar atención» a diferentes entidades en un escenario complejo y multi-agente).

Típicamente los Transformadores tienen una primera fase de preentrenamiento autosupervisado y luego un ajuste fino (fine-tuning) supervisado… e incluso se utilizan también en problemas de Aprendizaje por Refuerzo.

Ejecución en tiempo real

En videojuegos, la latencia es un problema muy real… y un modelo no puede tardar 200 ms en responder (inference budget) si tenemos un presupuesto (total budget) de 16 ms por fotograma (típica ejecución a 60 FPS).

Una forma de «comprimir» el modelo puede ser la cuantización (quantization), que consiste en reducir la precisión de los pesos de la red (ej. pasar de coma flotante FP32 a enteros INT8) para acelerar dramáticamente la inferencia y reducir el consumo de memoria sin apenas perder precisión.

Otra forma es la destilación de conocimiento (knowledge distillation), entrenando una red más pequeña y ligera (red «estudiante») para que imite el comportamiento de una red gigante y profunda (red «profesor»), obteniendose un modelo más viable para usarlo en tiempo real.

Más información

Para complementar es recomendable consultar otros documentos.