- Aplicación de DQN: Juegos de Atari
Aplicación de DQN: Juegos de Atari
Implementación práctica de Deep Q-Network para jugar Breakout, Space Invaders y Pong. Preprocesamiento de estados, arquitectura de red convolucional y monitoreo de entrenamiento.
Preprocesamiento de estados
La entrada del entorno Atari (imagen RGB 210×160) se transforma para reducir dimensionalidad y capturar movimiento temporal. Cada paso se procesa de la siguiente forma:
- Conversión a escala de grises – se elimina la información cromática, reduciendo canales de 3 a 1.
- Reducción de resolución – la imagen se redimensiona a 84×84 píxeles, equilibrando detalle y coste computacional.
- Stacking de 4 frames consecutivos – se apilan los últimos 4 fotogramas (84×84×4) para capturar dirección y velocidad de los objetos. Esto permite que la red infiera movimiento sin recurrir a un historial explícito.
Arquitectura de red (DQN Atari)
La red convolucional clásica para Atari consta de 3 capas convolucionales seguidas de 2 capas fully connected. Esta estructura ha sido validada en múltiples títulos de Atari.
- Conv1: 32 filtros 8×8, stride 4, activación ReLU.
- Conv2: 64 filtros 4×4, stride 2, activación ReLU.
- Conv3: 64 filtros 3×3, stride 1, activación ReLU.
- Fully Connected 1: 512 unidades, activación ReLU.
- Fully Connected 2 (salida): número de acciones válidas del juego (ej. 4 para Breakout: izquierda, derecha, no movimiento, disparo).
La entrada a la red es un tensor de dimensión (84, 84, 4) y la salida son los Q-valores para cada acción.
Hiperparámetros típicos
| Parámetro | Valor | Nota |
|---|---|---|
| Batch size | 32 | estable y eficiente en GPU |
| Learning rate | 0.00025 | Adam (o RMSprop) con tasa baja |
| Factor de descuento γ | 0.99 | prioriza recompensas a largo plazo |
| Capacity replay buffer | 1,000,000 | (típicamente 1e6 frames) |
| Target network update | Cada 10,000 pasos | copia de pesos de la red online |
| Optimizador | Adam (o RMSprop) | con épsilon 1e-8 |
| Exploration ε | 1.0 → 0.1 en 1M frames | decaimiento lineal |
La política epsilon-greedy permite explorar al inicio y explotar después del entrenamiento.
Entrenamiento en GPU y monitoreo
El entrenamiento se realiza en GPU (CUDA) para acelerar las convoluciones. Durante el proceso se monitorean las siguientes métricas:
- Recompensa promedio por episodio – media de las últimas 100 partidas. Para Breakout, valores superiores a 300 indican política estable.
- Pérdida (loss) temporal – error cuadrático medio entre Q-target y Q-predicha.
- Magnitud de Q-valores – útil para detectar saturación.
- Frames por segundo (FPS) – rendimiento en GPU.
Visualización de la política aprendida
Se generan mapas de calor de los Q-valores para comprender qué acciones prioriza el agente en cada estado. Por ejemplo, en Breakout, la red asigna valores altos a la acción ‘moverse a la izquierda’ cuando la pelota se dirige al lado izquierdo de la pantalla.
- Los mapas de calor se calculan promediando Q-valores sobre múltiples episodios.
- Se visualiza la diferencia entre la acción con máximo Q y el resto.
- Herramientas como matplotlib o tensorboard permiten observar la evolución durante el entrenamiento.
Comparación de configuraciones: replay buffer y target network
Dos componentes clave de DQN: el replay buffer y la target network. Se experimentan distintas versiones:
| Configuración | Buffer | Target update | Rendimiento en Breakout (recompensa media) |
|---|---|---|---|
| Estándar (DQN) | 1M, uniforme | cada 10k pasos | ~350 |
| Buffer pequeño + target frecuente | 100k, uniforme | cada 2k pasos | ~210 |
| Buffer grande + target cada 30k | 2M, prioritizado | cada 30k pasos | ~410 (con PER) |
| Sin target network | 1M | N/A (online) | ~90 (inestable) |
El uso de Prioritized Experience Replay (PER) suele mejorar la eficiencia de muestreo, y la target network estabiliza el aprendizaje al reducir correlación.
Resultados empíricos en Space Invaders y Pong
La misma arquitectura DQN se ha evaluado en múltiples juegos de Atari. A continuación se muestran resultados representativos después de 10 millones de frames (entrenamiento con GPU).
| Juego | Recompensa media (100 episodios) | Mejor puntuación registrada | Observaciones |
|---|---|---|---|
| Breakout | 375 ± 45 | 432 | política consistente, rompe 3 bloques por ciclo |
| Space Invaders | 1650 ± 210 | 2010 | buena esquiva de disparos, uso de cobertura |
| Pong | 18.5 ± 1.2 | 21 (victoria perfecta) | política casi óptima, devuelve todos los golpes |
Pong es el juego más sencillo; DQN alcanza rendimiento sobrehumano. Space Invaders requiere más exploración por los movimientos laterales de los alienígenas.
Fragmento de entrenamiento (pseudocódigo conceptual)
# Entrenamiento DQN para Atari (simplificado)
for episodio in range(num_episodios):
estado = entorno.reset()
estado = preprocesar(estado) # grises + resize + stacking
while True:
accion = agente.seleccionar_accion(estado, epsilon)
siguiente, recompensa, terminado = entorno.ejecutar(accion)
siguiente_proc = preprocesar(siguiente)
buffer.almacenar(estado, accion, recompensa, siguiente_proc)
if len(buffer) > batch_size:
batch = buffer.muestrear(batch_size)
perdida = agente.actualizar_red(batch) # minimiza MSE(Q_target - Q)
if paso % 10000 == 0:
agente.actualizar_target()
estado = siguiente_proc
if terminado: break
El código anterior usa un buffer de replay y una target network actualizada periódicamente.
Conclusiones y siguientes pasos
La implementación de DQN con preprocesamiento de frames, arquitectura convolucional y ajuste de hiperparámetros permite resolver juegos de Atari con alta efectividad. La visualización de Q-valores y la comparación de configuraciones (buffer, target) son herramientas clave para depuración y mejora del agente.
Para profundizar, se recomienda explorar variantes como Double DQN, Dueling DQN o Rainbow, que integran múltiples mejoras sobre la base presentada.
No hay comentarios por ahora.
Compartir este contenido
Compartir enlace
Compartir en redes sociales
Compartir por correo electrónico
Please iniciar sesión para compartir esto Artículo por correo electrónico.