开始使用免费开始使用

截断的概率比

现在,您将实现截断的概率比,这是 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 中的深度强化学习

查看课程

练习说明

  • action_log_prob 得到动作概率 prob,从 action_log_prob_old 得到 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)
编辑并运行代码