Навчання алгоритму REINFORCE
Ви готові навчати свій Lunar Lander за допомогою REINFORCE! Потрібно реалізувати цикл навчання REINFORCE, зокрема обчислення функції втрат REINFORCE.
Зважаючи на те, що кроки обчислення втрат охоплюють як внутрішній, так і зовнішній цикли, цього разу ви не використовуватимете функцію calculate_loss().
Коли епізод завершиться, ви зможете використати обидві ці величини, щоб обчислити втрати.
Для довідки, ось вираз функції втрат REINFORCE:
Ви знову скористаєтеся функцією describe_episode(), щоб виводити, як ваш агент поводиться в кожному епізоді.
Ця вправа є частиною курсу
Глибоке навчання з підкріпленням у Python
Інструкції до вправи
- Додайте логймовірність вибраної дії до списку логймовірностей епізоду.
- Збільшіть сумарну винагороду епізоду на дисконтовану нагороду поточного кроку.
- Обчисліть втрати епізоду за REINFORCE.
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
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)