策略是什麼
策略(policy)是智能體的行動方針:一條把每個狀態映射到一個動作(或映射到動作上的一個分布)的規則。它是 MDP 的答案——一旦你有了一條好策略,智能體只要照著走就行。智能體學到的一切,都被壓縮進這一個物件裡。在更廣的機器學習裡,同一個字 策略,指的正是這條決策規則。
强化学习循环示意图:智能体采取动作,环境返回奖励和下一个状态。
策略有兩種味道。確定性策略(deterministic policy)在某個給定狀態下總是挑同一個動作——乾淨、好讀。隨機性策略(stochastic policy)回傳的是動作空間上的機率,所以同一個狀態在不同次造訪時,可能導向不同的選擇。
策略到底為什麼要隨機?
刻意隨機地行動聽起來很奇怪,但隨機性策略自有其價值:
- 探索。嘗試各式各樣的動作,是唯一能發現某個沒試過的選擇是否其實更好的方法——這正是「學習能發生」背後的引擎。
- 虛張聲勢的賽局。在剪刀石頭布裡,任何可預測的規則都會輸。最佳打法是貨真價實的隨機。
- 隱藏狀態。當兩個處境看起來一模一樣、卻需要不同動作時,依機率把它們混著來,就是你能做到的最好。
軌跡:智能體留下的足跡
把一條策略放進 MDP 裡跑,它就會產生一條軌跡(trajectory):它實際經歷的狀態、動作、獎勵所構成的序列——s₀、a₀、r₁、s₁、a₁、r₂,依此類推。一條軌跡就是「發生了什麼」的一個故事:智能體單次執行所親歷的經驗。
透過讓策略與環境一步步往前推進來產生一條軌跡,這個動作叫做展開(rollout)。展開正是學習演算法取得資料的方式:你沒辦法直接讀取獎勵函數,所以你藉由在世界裡行動、並觀察回傳了什麼,來採樣這個世界。
可交互的Q学习网格世界,智能体在格子间移动,绘出轨迹并收集奖励。
def rollout(env, policy, max_steps=1000):
s = env.reset()
trajectory = []
for _ in range(max_steps):
a = policy.sample(s) # stochastic: draw an action
s_next, r, done = env.step(a) # the MDP's transition + reward
trajectory.append((s, a, r))
s = s_next
if done: # hit an absorbing state
break
return trajectory從軌跡再回到目標
每條軌跡都有一個回報——它各個獎勵的折扣總和。由於隨機性策略與隨機的環境讓每次展開都略有不同,同一條策略會產出一片回報。智能體真正的目標,是期望回報:在這條策略所能產生的所有軌跡上,回報的平均值。
目标浓缩成一行:找到期望折扣回报最大的那个策略。
那一行字,就是整個領域的北極星:找出期望回報最大的那條策略。你之後會遇到的每個演算法——基於價值的、策略梯度的、基於模型的——都只是通往同一座山頂的不同路徑。它們全都從蒐集軌跡開始。