Training des REINFORCE Algorithmus
Du bist bereit, deinen Lunar Lander mit REINFORCE zu trainieren! Alles, was du brauchst, ist die Implementierung der REINFORCE Trainingsschleife, einschließlich der REINFORCE Verlustberechnung.
Da sich die Schritte zur Verlustberechnung sowohl auf die innere als auch auf die äußere Schleife erstrecken, wirst du dieses Mal keine calculate_loss()
Funktion verwenden.
Wenn die Episode abgeschlossen ist, kannst du diese beiden Mengen verwenden, um den Verlust zu berechnen.
Als Referenz ist dies der Ausdruck für die Verlustfunktion REINFORCE:
Du verwendest wieder die Funktion describe_episode()
, um auszudrucken, wie dein Agent bei jeder Episode abschneidet.
Diese Übung ist Teil des Kurses
Deep Reinforcement Learning in Python
Anleitung zur Übung
- Füge die logarithmische Wahrscheinlichkeit der ausgewählten Aktion zu den logarithmischen Wahrscheinlichkeiten der Episode hinzu.
- Erhöhe den Episodenertrag um die abgezinste Belohnung des aktuellen Schritts.
- Berechne den REINFORCE Episodenverlust.
Interaktive Übung
Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.
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)