開始使用免費開始

裁切後的機率比

你現在要實作裁切後的機率比(clipped probability ratio),這是 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 的梯度計算圖中分離。
  • 計算機率比。
  • 對代理目標(surrogate objective)套用裁切。

動手互動練習

試著完成這個範例程式碼,體驗一下這個練習。

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)
編輯並執行程式碼