始める無料で始める

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)
コードを編集して実行