Hàm mục tiêu surrogate có clip
Cài đặt hàm calculate_loss() cho PPO. Nhiệm vụ này yêu cầu bạn hiện thực hóa đổi mới cốt lõi của PPO — hàm loss surrogate có clip. Cách làm này giúp ràng buộc cập nhật policy để tránh đi quá xa so với policy trước đó ở mỗi bước.
Công thức cho mục tiêu surrogate có clip là
Trong môi trường của bạn, siêu tham số clipping epsilon được đặt là 0.2.
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
- Tính tỷ lệ xác suất giữa
\pi_\thetavà\pi_{\theta_{old}}(bản chưa clip và đã clip). - Tính các mục tiêu surrogate (bản chưa clip và đã clip).
- Tính mục tiêu surrogate có clip của PPO.
- Tính actor loss.
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.
def calculate_losses(critic_network, action_log_prob, action_log_prob_old,
reward, state, next_state, done):
value = critic_network(state)
next_value = critic_network(next_state)
td_target = (reward + gamma * next_value * (1-done))
td_error = td_target - value
# Obtain the probability ratios
____, ____ = calculate_ratios(action_log_prob, action_log_prob_old, epsilon=.2)
# Calculate the surrogate objectives
surr1 = ratio * ____.____()
surr2 = clipped_ratio * ____.____()
# Calculate the clipped surrogate objective
objective = torch.min(____, ____)
# Calculate the actor loss
actor_loss = ____
critic_loss = td_error ** 2
return actor_loss, critic_loss
actor_loss, critic_loss = calculate_losses(critic_network, action_log_prob, action_log_prob_old,
reward, state, next_state, done)
print(actor_loss, critic_loss)