시작하기무료로 시작하기

REINFORCE 알고리즘 학습시키기

이제 REINFORCE로 Lunar Lander를 학습시킬 준비가 되었어요! 해야 할 일은 REINFORCE 학습 루프를 구현하는 것과 REINFORCE 손실 계산을 포함하는 것입니다.

손실 계산 단계가 내부 루프와 외부 루프 전반에 걸쳐 이루어지므로, 이번에는 calculate_loss() 함수를 사용하지 않습니다.

에피소드가 완료되면, 그 두 값을 사용해 손실을 계산할 수 있습니다.

참고로, 다음은 REINFORCE 손실 함수의 식입니다:

각 에피소드에서 에이전트의 성과를 출력하기 위해 이번에도 describe_episode() 함수를 사용합니다.

이 연습은 강의의 일부입니다

Python으로 배우는 Deep Reinforcement Learning

강의 보기

연습 안내

  • 선택한 행동의 로그 확률을 에피소드 로그 확률 목록에 추가하세요.
  • 현재 단계의 보상을 할인해 에피소드 반환값에 더하세요.
  • 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)
코드 편집 및 실행