Bắt đầu ngayBắt đầu miễn phí

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

Xem khóa học

Hướng dẫn bài tập

  • Tính tỷ lệ xác suất giữa \pi_\theta\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)
Chỉnh sửa và Chạy Mã