Introducción
El aprendizaje por refuerzo es un área interdisciplinar del aprendizaje automático que ha ganado popularidad en la última década gracias a sus recientes logros en juegos como Go y aplicaciones del mundo real como los coches autónomos. Este crecimiento también ha coincidido con los rápidos avances en las GPU modernas y la evolución de las técnicas de aprendizaje automático. Hemos llegado a un punto en el que las máquinas pueden superar fácilmente a los humanos en videojuegos. Deep Q-Network (DQN) es un algoritmo de aprendizaje por refuerzo que ha demostrado un gran potencial a la hora de manejar videojuegos como Atari debido a su alta dimensionalidad y a la necesidad de planificación a largo plazo. Esta guía explicará cómo funciona DQN y demostrará su eficacia al superar Lunar Lander de Gymnasium, anteriormente gestionado por OpenAI.
¿Qué es el aprendizaje por refuerzo?
El aprendizaje por refuerzo consiste en que un agente tome decisiones realizando acciones dentro de un entorno para maximizar las recompensas acumuladas.
Componentes clave del RL
- Agente: El responsable de tomar decisiones e interactuar con el entorno.
- Entorno: El sistema externo con el que interactúa el agente.
- Estado (S): La situación o configuración actual del entorno.
- Acción (A): Los posibles movimientos o decisiones que puede realizar el agente.
- Recompensa (R): Retroalimentación del entorno que indica la calidad de una acción.
- Política (π): Estrategia que asigna estados a acciones y define el comportamiento del agente.
- Función de valor (V): Estima la recompensa acumulada esperada desde un estado determinado.
- Función Q (Q): Estima la recompensa acumulada esperada al realizar una acción concreta en un estado determinado.
Cómo funciona el aprendizaje por refuerzo
- Inicialización: El agente comienza sin conocimiento o con un conocimiento mínimo del entorno.
- Interacción: El agente interactúa con el entorno realizando acciones según su política.
- Retroalimentación: El entorno responde a cada acción con un nuevo estado y una recompensa.
- Aprendizaje: El agente actualiza su política y/o sus funciones de valor basándose en las recompensas recibidas para mejorar futuras decisiones.
Conceptos clave
- Exploración vs. explotación: Equilibrio entre la exploración de nuevas acciones y la explotación de acciones conocidas con alta recompensa.
- Factor de descuento (): Determina la importancia de las recompensas futuras en relación con las recompensas inmediatas.
- Ecuación de Bellman: Describe la relación entre el valor de un estado y los valores de sus estados sucesores.
La ecuación de Bellman
La ecuación de Bellman es fundamental en el aprendizaje por refuerzo, ya que proporciona una descomposición recursiva de la función de valor. Relaciona el valor de un estado con los valores de los estados posteriores.
Para la función Q, la ecuación de Bellman establece que el valor Q de realizar una acción en un estado determinado es igual a la recompensa inmediata recibida, más el factor de descuento multiplicado por el valor Q máximo alcanzable desde el siguiente estado resultante.
Los componentes clave de esta relación son:
- es el valor Q de realizar una acción en un estado .
- es la recompensa recibida después de realizar esa acción.
- es el factor de descuento, que determina cuánto importan las recompensas futuras en relación con las inmediatas.
- es el valor Q máximo alcanzable en el siguiente estado, considerando todas las acciones posibles desde ese estado.
Aprendizaje por diferencia temporal
El aprendizaje por diferencia temporal (TD) es un enfoque clave dentro del aprendizaje por refuerzo, que combina ideas de la programación dinámica y los métodos Monte Carlo. Actualiza las funciones de valor basándose en la diferencia, o diferencia temporal, entre el valor predicho y la recompensa real recibida, más el valor descontado del siguiente estado.
En Q-learning, un tipo de aprendizaje TD, el valor Q del par estado-acción actual se ajusta gradualmente hacia un objetivo. Ese objetivo es la recompensa inmediata más la estimación descontada de las recompensas futuras del siguiente estado. El tamaño de cada ajuste está controlado por una tasa de aprendizaje, que determina cuánto sobrescribe la nueva información lo aprendido anteriormente.
Las dos cantidades importantes en esta actualización son:
- es la tasa de aprendizaje, que controla con qué intensidad el valor Q se mueve hacia la nueva estimación.
- es el valor objetivo, que combina la recompensa inmediata con la estimación descontada de las recompensas futuras.
El aprendizaje por refuerzo es un marco sólido para resolver problemas complejos de toma de decisiones. Este enfoque aprende la estrategia óptima mediante interacciones de prueba y error con el entorno.
Cómo funciona DQN
Deep Q-Network (DQN) combina Q-learning con redes neuronales profundas para manejar entornos con numerosos estados y acciones.
Aprendizaje a partir de la experiencia
Q-learning es un algoritmo de aprendizaje por refuerzo en el que un agente aprende a maximizar recompensas mediante interacciones con el entorno. Utiliza una función Q para predecir recompensas futuras. El agente actualiza sus valores Q usando la ecuación de Bellman, ajustando sus predicciones en función de las recompensas que realmente recibe y de las recompensas futuras esperadas.
Ejemplo práctico
Imagina que estás en un estado con un valor Q predicho de . Después de realizar una acción , pasas a un nuevo estado y recibes una recompensa de 8. El valor Q de la mejor acción en este nuevo estado es 95, y el factor de descuento es 0.99.
Con una tasa de aprendizaje de 0.1, el valor Q se ajusta un 10 % hacia el objetivo:
Deep Q-Learning
El Q-learning tradicional utiliza una tabla para almacenar valores Q, lo que resulta inviable en entornos con muchos estados y acciones. DQN utiliza una red neuronal para aproximar , permitiendo al agente generalizar a pares estado-acción no vistos. La entrada de la red neuronal es una observación, y la salida es un valor Q para cada acción posible.
Algoritmo DQN
- Experience Replay: Almacena experiencias en un búfer de repetición. El muestreo aleatorio del búfer ayuda a romper las correlaciones temporales, haciendo que el aprendizaje sea más estable.
- Red objetivo: Utiliza dos redes neuronales: la red principal para la toma de decisiones y la red objetivo para proporcionar objetivos de valores Q estables.
- Pasos de entrenamiento:
Inicializar el búfer de repetición y las redes.
Para cada episodio:
Inicializar el estado inicial.
Para cada paso:
- Seleccionar una acción utilizando una política -greedy.
- Ejecutar la acción y observar la recompensa y el siguiente estado .
- Almacenar la experiencia en el búfer de repetición.
- Tomar una mini-batch del búfer de repetición.
- Calcular el valor Q objetivo y realizar descenso de gradiente sobre la pérdida.
- Actualizar periódicamente la red objetivo.
Mejoras para la estabilidad
Para garantizar la estabilidad y la convergencia, se implementan varias mejoras:
- Selección de acciones -greedy: Equilibra exploración y explotación ajustando la tasa de exploración con el tiempo.
- Experience Replay: Permite aprender a partir de lotes de experiencias pasadas, garantizando un entrenamiento estable y una mejor convergencia.
- Red objetivo vs. red local: Utiliza una red objetivo para proporcionar objetivos de valores Q estables, reduciendo oscilaciones y divergencias.
Red objetivo vs. red local
En DQN, se utilizan dos redes para estabilizar el aprendizaje:
- Red principal (local): Esta red se actualiza continuamente y se utiliza para seleccionar acciones durante el entrenamiento. Aprende minimizando la pérdida entre los valores Q predichos y los valores Q objetivo.
- Red objetivo: Esta red proporciona objetivos estables para las actualizaciones de los valores Q. A diferencia de la red principal, los pesos de la red objetivo se actualizan con menos frecuencia, normalmente copiando los pesos de la red principal cada pocos miles de pasos.
Por qué utilizar dos redes
- Estabilidad: Los pesos de la red principal se actualizan con frecuencia, lo que puede provocar inestabilidad y divergencia. Al utilizar la red objetivo para proporcionar objetivos de valores Q estables, evitamos oscilaciones rápidas durante el aprendizaje.
- Consistencia: La red objetivo ayuda a mantener objetivos de aprendizaje consistentes, ya que solo se actualiza periódicamente. Esto garantiza que las actualizaciones de los valores Q se basen en objetivos más estables y fiables, lo que conduce a un aprendizaje más fluido y estable.
Mecanismo de actualización
- Actualización de la red principal: Después de cada acción, la red principal actualiza sus pesos utilizando la pérdida calculada a partir de la diferencia entre los valores Q predichos y los valores Q objetivo proporcionados por la red objetivo.
- Actualización de la red objetivo: Cada pocos miles de pasos, los pesos de la red principal se copian en la red objetivo, garantizando que esta proporcione objetivos estables durante un determinado número de pasos antes de volver a actualizarse.

Aquí tienes un ejemplo de código detallado
Paso 1: Instalar las bibliotecas necesarias
pip install swig gymnasium gymnasium[box2d] stable-baselines3 torch
Paso 2: Importar bibliotecas y configurar el entorno
import gymnasium
from stable_baselines3 import DQN
from stable_baselines3.common.evaluation import evaluate_policy
# Crear el entorno Lunar Lander
env = gymnasium.make("LunarLander-v3")
Paso 3: Definir el modelo DQN
# Definir el modelo DQN
model = DQN("MlpPolicy", env, verbose=1)
Paso 4: Entrenar el modelo DQN
# Entrenar el modelo (ajusta los timesteps según sea necesario)
model.learn(total_timesteps=750_000)
Paso 5: Evaluar el modelo entrenado
# Evaluar el modelo entrenado
mean_reward, std_reward = evaluate_policy(model, env, n_eval_episodes=10)
print(f"Recompensa media: {mean_reward} +/- {std_reward}")
# Opcionalmente, guardar el modelo
model.save("dqn_lunar_lander")
Paso 6: Visualizar el modelo entrenado
import time
# Cargar el modelo si es necesario
# model = DQN.load("dqn_lunar_lander")
# Visualizar el rendimiento del modelo
episodes = 5
for episode in range(1, episodes + 1):
obs, info = env.reset()
done = False
score = 0
while not done:
env.render()
action, _states = model.predict(obs)
obs, reward, terminated, truncated, info = env.step(action)
done = terminated or truncated
score += reward
print(f"Episodio: {episode}, Puntuación: {score}")
time.sleep(1)
env.close()
Explicación
- Configuración del entorno:
gymnasium.make("LunarLander-v3")inicializa el entorno Lunar Lander. - Modelo DQN: La clase
DQNde Stable Baselines3 se utiliza para definir el modelo con una política MLP. - Entrenamiento: El método
learnentrena el modelo con el número especificado de timesteps. - Evaluación: La función
evaluate_policyevalúa el rendimiento del modelo a lo largo de varios episodios. - Visualización: El bucle renderiza el entorno para visualizar cómo se comporta el modelo entrenado en tiempo real.
Consejos adicionales
- Hiperparámetros: Puede que necesites ajustar los hiperparámetros, como la tasa de aprendizaje o el tamaño del batch, para obtener un mejor rendimiento.
- Checkpoints: Guarda modelos intermedios durante el entrenamiento para evitar la pérdida de progreso.
- Monitorización: Utiliza TensorBoard para monitorizar las métricas de entrenamiento en tiempo real.

Conclusión
DQN es un potente algoritmo de aprendizaje por refuerzo que combina Q-learning y redes neuronales profundas. Mediante el uso de técnicas como experience replay y redes objetivo, DQN aprende de forma eficaz a resolver entornos complejos como Lunar Lander de Gymnasium, demostrando su potencial tanto en videojuegos como en aplicaciones del mundo real. El uso de una red objetivo junto con la red principal garantiza estabilidad y consistencia durante el aprendizaje, convirtiendo a DQN en un algoritmo sólido y eficiente para una amplia variedad de problemas de RL.
Materiales de aprendizaje adicionales
- Deep Q Learning w/ DQN - Reinforcement Learning p.5
- AI Learning to Land a Rocket (Lunar Lander) | Reinforcement Learning
- Documentación de Gymnasium - Lunar Lander
- Playing Atari with Deep Reinforcement Learning
- Solving Lunar Lander using DQN with Keras
- Deep Q-Networks Explained
- BCS Member Groups - Deep Q Network DQN
- Udacity - Deep Reinforcement Learning
Repositorio de código y modelos
Videos del progreso de entrenamiento
200,000 pasos de entrenamiento
400,000 pasos de entrenamiento
Mejor modelo
Rendimiento del modelo
| Entorno | Tipo de modelo | Recompensa media | Pasos totales de entrenamiento | HuggingFace | Google Colab |
|---|---|---|---|---|---|
| LunarLander-v3 | DQN | 218.56 +/- 63.62 | 750,000 | Ver modelo | Ver Colab |



