AI時代系列(3) 機器學習三部曲: 📘 第三部:《強化學習 —— AI 的決策與進化》
70/100 第七週:📌 高階強化學習演算法
70.小結與測驗:現代強化學習的戰力榜 🏆 你的選擇是哪一派?
________________________________________
🧠 知識總攬
本章節聚焦在「策略梯度的進階演化」,從 TRPO 到 PPO、再到 TD3 和 SAC,逐步展現強化學習演算法在穩定性、樣本效率與泛化能力上的突破。
________________________________________
🔑 核心主題整理:
強化學習進階單元總整理
• 61 ➡️ TRPO
o 關鍵詞:Trust Region、KL 限制、二階近似
o 👉 利用信賴區間控制策略變化幅度,提升學習穩定性。
• 62 ➡️ TRPO 原理
o 關鍵詞:共軛梯度法、線性搜尋、安全更新
o 👉 透過高效二階優化計算,精確控制更新步幅。
• 63 ➡️ PPO
o 關鍵詞:策略剪裁、穩定性佳、主流應用
o 👉 簡化 TRPO 的安全更新,用剪裁法平衡穩定與效率。
• 64 ➡️ PPO 細節
o 關鍵詞:clip 損失、value loss、entropy、訓練技巧
o 👉 結合多種損失設計,提升策略多樣性與收斂穩定性。
• 65 ➡️ TD3
o 關鍵詞:雙 Q、延遲更新、目標平滑雜訊
o 👉 解決 Q-learning 在連續控制中高估問題,提升穩定性。
• 66 ➡️ SAC
o 關鍵詞:最大熵、策略分布、溫度自調、Q1+Q2
o 👉 鼓勵探索與穩健學習兼具,適用複雜連續控制任務。
• 67 ➡️ PPO vs DQN vs A2C
o 關鍵詞:策略對比、應用推薦、訓練效率
o 👉 比較不同演算法在各類任務的適用性與特點。
• 68 ➡️ 多任務擴展
o 關鍵詞:Shared Policy、Multi-head、干擾控制
o 👉 發展可同時處理多目標的共享或獨立學習架構。
• 69 ➡️ 模型型 vs 無模型型
o 關鍵詞:預測 vs 經驗、樣本效率 vs 穩定性
o 👉 取決於能否建模環境,平衡資料效率與學習風險。
• 70 ➡️ 小結與測驗
o 關鍵詞:回顧 + 分派最適方法
o 👉 綜合整理學習內容,幫助選擇適合的應用策略。
_______________________________________
🏆 現代強化學習戰力榜分析:你的選擇是哪一派?
在強化學習主流演算法中,
🥇 PPO 以平衡的穩定性、中等探索性與樣本效率成為目前各類應用中全能主流王者,尤其適合自駕仿真與機器人控制等通用任務。
🥈 SAC 則在探索性與穩定性上都表現出色,適合探索需求高、連續動作控制精準的任務,被譽為穩定精準策略家。
🥉 TD3 針對高精度控制任務如 MuJoCo 環境特別擅長,屬於控制任務專精者。
🎓 TRPO 以嚴謹的理論穩健性為特色,多見於學術穩健派的研究與安全敏感測試場景。
🎮 DQN 則憑藉高樣本效率與簡單架構,仍在離散動作與經典遊戲領域保有實用價值,是經典實用派代表。
🧩 A2C 在並行訓練上具備良好基礎,適合作為並行探索者的入門穩定方案。
🌟 Model-Based 方法 則在能建立準確模型時,展現極高的樣本效率與控制能力,特別適合可模擬的醫療、製程優化等高價值領域。
________________________________________
✅ 測驗區:你真的掌握了高階強化學習嗎?
________________________________________
1️⃣ TRPO 中使用 KL 散度限制的目的為何?
A. 增加策略探索能力
B. 降低收斂速度
✅ C. 防止策略更新過度偏離
D. 優化策略損失值
📘 解析:
TRPO(Trust Region Policy Optimization)引入 KL 散度限制,是為了保證每次策略更新時不會「走得太遠」,避免策略性能急劇下降。這種「小步快跑」的做法讓學習更加穩定,是其核心特色。
________________________________________
2️⃣ PPO 的剪裁機制(clipping)主要解決什麼問題?
A. 數據重複問題
✅ B. 策略更新不穩定
C. 動作空間過小
D. 模型過擬合
📘 解析:
PPO 的 clipping 會限制策略比值 r(θ) 不超過 [1−ϵ,1+ϵ] 範圍,從而避免策略暴衝或忽然改變太多。這解決了原本策略梯度方法更新過度導致不穩定的問題。
________________________________________
3️⃣ TD3 使用兩個 Q 網路的主要目的是?
A. 增加探索性
B. 提高策略熵值
✅ C. 減少 Q 值過估計(Overestimation)
D. 模擬多任務學習
📘 解析:
DDPG 容易高估 Q 值,造成策略偏誤。TD3 採用兩個 Q 網路 Q1,Q2,並在目標值中使用 min(Q1,Q2)可以有效抑制過估計問題,讓學習過程更準確穩定。
________________________________________
4️⃣ SAC 與 TD3 的最大差異在哪裡?
A. TD3 支援離散動作空間
✅ B. SAC 引入最大熵原則來強化探索
C. TD3 沒有使用 Critic 網路
D. SAC 使用 Q-learning 更新 Q 值
📘 解析:
SAC(Soft Actor-Critic)在 reward 中加入 entropy bonus,目的是鼓勵策略保留「不確定性」,進而提升探索能力。這與 TD3 專注 exploitation 的設計不同,是兩者在設計哲學上的主要差異。
________________________________________
5️⃣ 在以下情境中,選哪個方法最合適:你要訓練一個能操作不同任務的通用機器手臂?
A. DQN
B. SAC
✅ C. Multi-task PPO
D. TRPO
📘 解析:
多任務學習(如 MT10、MetaWorld)需要策略能泛化到多種情境。PPO 在穩定性與可擴展性上表現優異,並容易整合「任務提示編碼」或「環境變數」作為輸入,非常適合建構 multi-task shared policy。
________________________________________
✍️ 延伸挑戰題(簡答題 x3)
________________________________________
1️⃣ 請解釋「最大熵策略」在強化學習中的功能與價值,並舉出一個使用它的演算法。
👉 最大熵策略在強化學習中除了追求累積回報外,額外鼓勵策略保持高隨機性(高熵),促進探索多樣化,避免過早陷入次優解,提升泛化能力與穩定性。
代表演算法如 SAC (Soft Actor-Critic) 就採用最大熵目標,在學習過程中平衡回報與策略多樣性。
________________________________________
2️⃣ 為什麼 PPO 被視為目前工業應用最穩健的演算法?它相較於 TRPO 有哪些改進?
👉 PPO 使用剪裁 (clipping) 機制限制每次策略更新的幅度,避免策略崩壞,既簡單又穩定,對超參數不敏感,訓練容易收斂,適合實際部署。
相較於 TRPO,PPO 移除了複雜的二階優化(如共軛梯度計算),用簡單的單階剪裁方法達到類似穩定效果,因此在工業應用上更易實作、運算成本更低、調參更方便。
________________________________________
3️⃣ 假設你在處理一個真實場域且訓練成本很高(如醫療、機器手臂),你會選用模型型還是無模型型 RL?為什麼?
👉 若能取得較可靠的環境模型,模型型 RL 可透過模擬大量虛擬樣本,極大提升樣本效率,降低實體訓練成本,非常適合高代價場域。
若環境建模困難或模型準確性不足,則採用穩健的 Model-Free RL(如 PPO) 仍是較保險選擇,透過實驗設計控制真實互動成本。
________________________________________
示範一個簡易的 高階強化學習演算法實作案例,選用目前最受歡迎、結構穩定的演算法——✅ PPO(Proximal Policy Optimization),並搭配 CartPole-v1 環境進行演練。
________________________________________
🛠️ PPO 高階強化學習:簡易實作案例(使用 PyTorch)
📦 環境需求:
pip install gym torch numpy
________________________________________
🔁 一、核心架構概覽:
環境互動 → 收集軌跡 → 計算 advantage → PPO clip 損失 → 更新策略與值網路
________________________________________
📘 二、完整代碼(簡化版本)
python
import gym
import torch
import torch.nn as nn
import numpy as np
from torch.distributions import Categorical
import torch.optim as optim
# 建立 Actor-Critic 架構
class PPOActorCritic(nn.Module):
def __init__(self, obs_dim, act_dim):
super().__init__()
self.shared = nn.Sequential(
nn.Linear(obs_dim, 64),
nn.ReLU(),
)
self.actor = nn.Sequential(
nn.Linear(64, act_dim),
nn.Softmax(dim=-1)
)
self.critic = nn.Linear(64, 1)
def forward(self, x):
shared = self.shared(x)
return self.actor(shared), self.critic(shared)
# 計算 Advantage
def compute_advantage(rewards, values, gamma=0.99):
advantage = []
G = 0
for r, v in zip(reversed(rewards), reversed(values)):
G = r + gamma * G
advantage.insert(0, G)
return torch.tensor(advantage) - torch.tensor(values)
# 主訓練流程
env = gym.make('CartPole-v1')
obs_dim = env.observation_space.shape[0]
act_dim = env.action_space.n
model = PPOActorCritic(obs_dim, act_dim)
optimizer = optim.Adam(model.parameters(), lr=1e-3)
eps_clip = 0.2
epochs = 1000
for episode in range(epochs):
state = env.reset()
log_probs, values, rewards, states, actions = [], [], [], [], []
for _ in range(200):
state_tensor = torch.tensor(state, dtype=torch.float32)
probs, value = model(state_tensor)
dist = Categorical(probs)
action = dist.sample()
next_state, reward, done, _ = env.step(action.item())
# 儲存資料
log_probs.append(dist.log_prob(action))
values.append(value.item())
rewards.append(reward)
states.append(state_tensor)
actions.append(action)
state = next_state
if done:
break
# 計算 advantage
returns = compute_advantage(rewards, values)
log_probs = torch.stack(log_probs)
values = torch.tensor(values)
returns = returns.detach()
# PPO clip 損失
for _ in range(4): # 多輪更新
probs, values_new = model(torch.stack(states))
dist = Categorical(probs)
new_log_probs = dist.log_prob(torch.stack(actions))
ratio = torch.exp(new_log_probs - log_probs)
surr1 = ratio * returns
surr2 = torch.clamp(ratio, 1 - eps_clip, 1 + eps_clip) * returns
loss = -torch.min(surr1, surr2).mean() + 0.5 * (returns - values_new.squeeze()).pow(2).mean()
optimizer.zero_grad()
loss.backward()
optimizer.step()
if episode % 50 == 0:
print(f"Episode {episode} | Return: {sum(rewards):.2f}")
這份程式透過簡單的 PPO Actor-Critic 架構,在每個回合中與環境互動收集資料,記錄狀態、動作、回饋與動作機率,完成完整 episode 後計算 Advantage 作為學習信號。接著運用 PPO clip objective,以新舊策略比值 (ratio) 控制每次更新幅度,穩定提升策略表現,同時同步更新價值預測。整個訓練流程不斷重複,最終模型學會穩定控制 CartPole-v1 環境,展現出 PPO 簡單穩定又高效的特性。
________________________________________
✅ 重點說明:
元素 說明
PPOActorCritic 建立共享的策略與值網路
compute_advantage 利用折扣回報 - 值函數估計計算 advantage
ratio = exp(new_log - old_log) 核心 clip 策略更新計算方式
torch.min(surr1, surr2) PPO clip 損失函數,避免策略跳太快
多輪mini-batch 更新 提升 sample efficiency
________________________________________
🎯 執行效果:
這段程式碼通常在幾百個 episodes 就能讓 CartPole 穩定達成 200 分,展示 PPO 的強大穩定性與適應力。
✨ 章末啟示與導向
• TRPO → PPO → TD3/SAC 是策略學習的進化主線
• 對於高穩定性 + 高探索 + 多場景泛化能力的需求,PPO 與 SAC 是現代工業與科研應用首選
• 若能結合「模型型預測 + 策略梯度更新」,將開啟未來強化學習更高效的新時代!