Обрізане співвідношення ймовірностей
Тепер ви реалізуєте обрізане співвідношення ймовірностей — ключовий компонент цільової функції PPO.
Для довідки, співвідношення ймовірностей визначається так: $$\frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)}$$
А обрізане співвідношення ймовірностей: \(\mathrm{clip}(r_t(\theta), 1-\varepsilon, 1+\varepsilon)\).
Ця вправа є частиною курсу
Глибоке навчання з підкріпленням у Python
Інструкції до вправи
- Отримайте ймовірність дії
probзaction_log_prob, аprob_old— зaction_log_prob_old. - Відʼєднайте старий логарифм ймовірності дії від графа обчислення градієнта torch.
- Обчисліть співвідношення ймовірностей.
- Застосуйте обрізання до сурогатної цільової функції.
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
log_prob = torch.tensor(.5).log()
log_prob_old = torch.tensor(.4).log()
def calculate_ratios(action_log_prob, action_log_prob_old, epsilon):
# Obtain prob and prob_old
prob = ____
prob_old = ____
# Detach the old action log prob
prob_old_detached = ____.____()
# Calculate the probability ratio
ratio = ____ / ____
# Apply clipping
clipped_ratio = torch.____(ratio, ____, ____)
print(f"+{'-'*29}+\n| Ratio: {str(ratio)} |\n| Clipped ratio: {str(clipped_ratio)} |\n+{'-'*29}+\n")
return (ratio, clipped_ratio)
_ = calculate_ratios(log_prob, log_prob_old, epsilon=.2)