Clipped surrogate objective function
PPO के लिए calculate_loss() फंक्शन इम्प्लीमेंट करें. इसमें PPO का मुख्य नवाचार — clipped surrogate loss function — कोड करना शामिल है. यह policy update को सीमित रखने में मदद करता है ताकि हर स्टेप पर पॉलिसी पिछली पॉलिसी से बहुत दूर न चली जाए.
Clipped surrogate objective का सूत्र इस प्रकार है
आपके environment में clipping hyperparameter epsilon को 0.2 सेट किया गया है.
यह अभ्यास पाठ्यक्रम का हिस्सा है
Python में Deep Reinforcement Learning
अभ्यास निर्देश
\pi_\thetaऔर\pi_{\theta_{old}}के बीच probability ratios प्राप्त करें (unclipped और clipped वर्ज़न).- Surrogate objectives निकालें (unclipped और clipped वर्ज़न).
- PPO clipped surrogate objective की गणना करें.
- Actor loss की गणना करें.
इंटरैक्टिव व्यावहारिक अभ्यास
इस अभ्यास को इस नमूना कोड को पूरा करके आज़माएँ।
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)