JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

策略、軌跡與展開

策略,是把智能體的整套行為濃縮成一條規則。讓它在 MDP 裡跑一遍,你就得到經驗——每個學習演算法賴以為生的原料。

策略是什麼

策略(policy)是智能體的行動方針:一條把每個狀態映射到一個動作(或映射到動作上的一個分布)的規則。它是 MDP 的答案——一旦你有了一條好策略,智能體只要照著走就行。智能體學到的一切,都被壓縮進這一個物件裡。在更廣的機器學習裡,同一個字 策略,指的正是這條決策規則。

策略就住在智能体内部:它读取状态并选择动作,驱动这个循环。

强化学习循环示意图:智能体采取动作,环境返回奖励和下一个状态。

策略有兩種味道。確定性策略(deterministic policy)在某個給定狀態下總是挑同一個動作——乾淨、好讀。隨機性策略(stochastic policy)回傳的是動作空間上的機率,所以同一個狀態在不同次造訪時,可能導向不同的選擇。

策略到底為什麼要隨機?

刻意隨機地行動聽起來很奇怪,但隨機性策略自有其價值:

  1. 探索。嘗試各式各樣的動作,是唯一能發現某個沒試過的選擇是否其實更好的方法——這正是「學習能發生」背後的引擎。
  2. 虛張聲勢的賽局。在剪刀石頭布裡,任何可預測的規則都會輸。最佳打法是貨真價實的隨機。
  3. 隱藏狀態。當兩個處境看起來一模一樣、卻需要不同動作時,依機率把它們混著來,就是你能做到的最好。

軌跡:智能體留下的足跡

把一條策略放進 MDP 裡跑,它就會產生一條軌跡(trajectory):它實際經歷的狀態、動作、獎勵所構成的序列——s₀、a₀、r₁、s₁、a₁、r₂,依此類推。一條軌跡就是「發生了什麼」的一個故事:智能體單次執行所親歷的經驗。

透過讓策略與環境一步步往前推進來產生一條軌跡,這個動作叫做展開(rollout)。展開正是學習演算法取得資料的方式:你沒辦法直接讀取獎勵函數,所以你藉由在世界裡行動、並觀察回傳了什麼,來採樣這個世界。

让策略在这个网格世界里跑一遍,看一次推演(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
一次展開:交替進行「策略挑一個動作」與「環境回傳一個獎勵和下一個狀態」,直到回合結束。

從軌跡再回到目標

每條軌跡都有一個回報——它各個獎勵的折扣總和。由於隨機性策略與隨機的環境讓每次展開都略有不同,同一條策略會產出一回報。智能體真正的目標,是期望回報:在這條策略所能產生的所有軌跡上,回報的平均值。

J(\pi)=\mathbb{E}_{\tau\sim\pi}\!\left[\sum_{t=0}^{\infty}\gamma^{t}\,r_{t+1}\right],\qquad \pi^{\star}=\arg\max_{\pi}\,J(\pi)

目标浓缩成一行:找到期望折扣回报最大的那个策略。

那一行字,就是整個領域的北極星:找出期望回報最大的那條策略。你之後會遇到的每個演算法——基於價值的、策略梯度的、基於模型的——都只是通往同一座山頂的不同路徑。它們全都從蒐集軌跡開始。