# Proximal Policy Optimization (PPO) > 主要用於訓練代理(agent)在給定的環境中進行最佳決策 PPO會設法平衡學習新技巧與堅持已經學到的好技巧之間的關係 (Clip)。它不希望你的策略變化太快,這樣可以避免學到一些壞策略,這點像是教練想要確保你不會因為嘗試新動作而忘記了基本技巧。 核心思想是在保證新策略與舊策略不會差異太大的前提下,尋找一個性能更好的策略。這個特性通過一個被稱為「信賴區域(Trust region)」的概念來實現,這使得每一步更新都不會讓策略偏離太遠,從而避免了訓練過程中的不穩定現象。 PPO的目標函數 $𝐿(𝜃)$ 結合了策略的性能以及新舊策略之間的差異表示: $$ L(\theta) = \hat{\mathbb{E}} \left[ \min\left( r(\theta) \hat{A}_t, \text{clip}(r(\theta), 1-\epsilon, 1+\epsilon) \hat{A}_t \right) \right] $$ 其中 * $\hat{\mathbb{E}}$,表示對樣本的期望值 * $r(\theta)$是機率比率 $\frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)}$,表明了在新策略下選擇動作與舊策略下選擇動作機率的比例 * $\hat{A}_t$ 是優勢函數(advantage function),用來估計在狀態 $s_t$ 下採取動作 $a_t$ 比平均更好多少 * clip 函數將 $𝑟(𝜃)$ 的值限制在 $[1-\epsilon, 1+\epsilon]$ 的範圍內,這樣就避免了過大的策略更新 ## step-by-step ### **收集資料** * 用當前策略 $\pi_{\theta_{\text{old}}}$ 與環境互動,收集一批軌跡: $$ (s_t, a_t, r_t, s_{t+1}) $$ * 一次收集 T 個時間步(通常幾千筆)。 ### **計算回報與優勢值** * 用 GAE(Generalized Advantage Estimation)計算: $$ A_t = \delta_t + (\gamma \lambda)\delta_{t+1} + (\gamma \lambda)^2 \delta_{t+2} + \dots $$ 其中: $$ \delta_t = r_t + \gamma V(s_{t+1}) - V(s_t) $$ * $V(s_t)$ 是 value network 的預測(baseline)。 --- ### **3️⃣ 計算比例** $$ r_t(\theta) = \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{\text{old}}}(a_t|s_t)} $$ 這個 ratio 表示「新策略在相同動作下的機率比」。 ### **最小化損失函數** PPO 目標包含三個部分: $$ L(\theta) = \mathbb{E}_t \big[ L^{CLIP}(\theta)* c_1 (V_\theta(s_t) - V_t^{target})^2- c_2 \cdot \text{Entropy}[\pi_\theta(s_t)] \big] $$ * 第一項:policy loss(clipped objective) * 第二項:value loss(讓 V 預測準確) * 第三項:entropy bonus(鼓勵探索) ### **多次更新** * 使用 mini-batch(例如 64)在這批資料上訓練多次(K epochs)。 * 更新策略參數 $\theta$,再設為 $\theta_{\text{old}}$ 進入下一輪。 ### **重複收集與更新** 整個流程重複: * 收集資料 → 計算 advantage → 更新策略 直到收斂或達成目標。 --- ## 流程圖摘要 ```py for iteration in range(N): # 1. Collect trajectories using old policy trajectories = collect_data(pi_theta_old) # 2. Compute returns and advantages A_t, V_targets = compute_advantage(trajectories) # 3. Optimize policy K epochs for epoch in range(K): r_t = pi_theta(a_t|s_t) / pi_theta_old(a_t|s_t) L_clip = min(r_t*A_t, clip(r_t, 1-ε, 1+ε)*A_t) loss = -L_clip + c1*value_loss + c2*entropy_bonus update(theta) # 4. Update old policy theta_old ← theta ``` ## Reference * [Proximal Policy Optimization Algorithms](https://arxiv.org/pdf/1707.06347) * [[RL] Proximal Policy Optimization(PPO)](https://hackmd.io/@YungHuiHsu/SkUb3aBX6) * [DRL Lecture 2: Proximal Policy Optimization (PPO)](https://www.youtube.com/watch?v=OAKAZhFmYoI&t=889s)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up