Huấn luyện thuật toán REINFORCE
Bạn đã sẵn sàng huấn luyện Lunar Lander bằng REINFORCE! Việc bạn cần làm là triển khai vòng lặp huấn luyện REINFORCE, bao gồm cả bước tính hàm mất mát REINFORCE.
Vì các bước tính mất mát trải dài ở cả vòng lặp trong và ngoài, lần này bạn sẽ không dùng hàm calculate_loss().
Khi episode kết thúc, bạn có thể dùng cả hai đại lượng đó để tính mất mát.
Tham khảo, đây là biểu thức của hàm mất mát REINFORCE:
Bạn sẽ tiếp tục dùng hàm describe_episode() để in ra tiến độ của tác tử sau mỗi episode.
Bài tập này là một phần của khóa học
Deep Reinforcement Learning bằng Python
Hướng dẫn bài tập
- Thêm log xác suất của hành động đã chọn vào danh sách log xác suất của episode.
- Cộng dồn tổng phần thưởng của episode với phần thưởng đã chiết khấu tại bước hiện tại.
- Tính hàm mất mát REINFORCE cho episode.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
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)