Entrenamiento del algoritmo REINFORCE
¡Estás listo para entrenar tu Lunar Lander utilizando REINFORCE! Todo lo que necesitas es implementar el bucle de entrenamiento REINFORCE, incluido el cálculo de pérdidas REINFORCE.
Dado que los pasos del cálculo de pérdidas abarcan los bucles interior y exterior, esta vez no utilizarás una función calculate_loss()
.
Una vez finalizado el episodio, puedes utilizar ambas cantidades para calcular la pérdida.
Como referencia, ésta es la expresión de la función de pérdida REINFORCE:
Utilizarás de nuevo la función describe_episode()
para imprimir cómo le va a tu agente en cada episodio.
Este ejercicio forma parte del curso
Aprendizaje profundo por refuerzo en Python
Instrucciones del ejercicio
- Añade la probabilidad logarítmica de la acción seleccionada a las probabilidades logarítmicas del episodio.
- Incrementa el retorno del episodio con la recompensa descontada del paso actual.
- Calcula la pérdida del episodio REINFORCE.
Ejercicio interactivo práctico
Prueba este ejercicio completando el código de muestra.
for episode in range(50):
state, info = env.reset()
done = False
episode_reward = 0
step = 0
episode_log_probs = torch.tensor([])
R = 0
while not done:
step += 1
action, log_prob = select_action(policy_network, state)
next_state, reward, terminated, truncated, _ = env.step(action)
done = terminated or truncated
episode_reward += reward
# Append to the episode action log probabilities
episode_log_probs = torch.cat((____, ____))
# Increment the episode return
R += (____ ** step) * ____
state = next_state
# Calculate the episode loss
loss = ____ * ____.sum()
optimizer.zero_grad()
loss.backward()
optimizer.step()
describe_episode(episode, reward, episode_reward, step)