НачатьНачать бесплатно

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