ПочатиПочніть безкоштовно

Навчання алгоритму 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)
Редагувати та запускати код