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

環境與基準:強化學習代理人成長的地方

代理人在學會任何事之前,需要一個可以行動的世界,以及一把衡量進度的尺。認識 Gym/Gymnasium、Atari 套件,以及怎樣的基準才算誠實。

環境就是問題本身

在監督式學習中,你從一個資料集開始;在強化學習中,你從一個環境(environment)開始:一個小世界,接收代理人的動作、改變自身狀態,並回傳一個獎勵(reward)代理人與環境共同構成一個不斷重複的迴圈,而這個迴圈就是你的全部問題。挑選或打造對的環境不是前置作業——它本身就是研究問題。

智能体—环境循环:环境接收一个动作,返回新的观测和奖励——这正是强化学习智能体所处的世界。

示意图:智能体向环境发送动作,环境返回观测和奖励,形成循环。

圍繞著共用的世界與共用的計分卡,整個領域長出了一套詞彙:環境與基準(benchmarks)環境是模擬器或任務;基準則是一組公認的環境,加上一套評分與比較代理人的方法。正因為有共用基準,我們才有辦法說某個演算法「贏過」另一個。

Gym / Gymnasium 的約定介面

幾乎每個現代強化學習程式庫都講同一套極小的介面,由 OpenAI Gym 帶起、如今以 Gymnasium 維護。它只有兩個方法:`reset()` 開啟一個全新回合(episode)並回傳第一個觀測;`step(action)` 施加一個動作,回傳下一個觀測、獎勵,以及代表回合是否結束的旗標。

obs, info = env.reset(seed=0)
done = False
while not done:
    action = policy(obs)            # agent chooses
    obs, reward, terminated, truncated, info = env.step(action)
    done = terminated or truncated  # natural end vs time limit
Gymnasium 迴圈:reset 一次,然後 step 直到回合結束。`terminated` 代表任務真正完成,`truncated` 代表被時間上限截斷。

正因為這套約定如此精簡,照它寫成的代理人可以原封不動地放到平衡桿、Atari 遊戲或機器人模擬器上。這種可移植性是整個生態系低調的超能力:策略(policy)只寫一次,底下的世界隨意替換。

經典的試煉場

有兩大基準家族定義了深度強化學習的第一個十年。街機學習環境(Arcade Learning Environment, ALE)把數十款 Atari 2600 遊戲包在同一套「螢幕像素進、搖桿訊號出」的介面後面;以它為基礎的 Atari 基準成了「用單一網路從原始像素學習」的標準測試。在連續控制這一側,MuJoCo 提供快速、可微分的物理引擎,用於移動運動任務(locomotion)——讓模擬獵豹奔跑、讓人形機器人站穩。

Atari 试验场把原始屏幕像素送入卷积流水线,提取特征并输出动作价值——正是这些基准所要逼出的视觉能力。

卷积网络流水线:把图像转化为池化特征,再输出分类或动作。

誠實的基準長什麼樣

基準唯有在「高分代表真本事、而非好運調參」時才有用。強化學習的結果出了名地脆弱:同一個演算法在不同亂數種子(random seed)下成績可能大幅震盪,而靠數百次超參數試驗磨出來的排行榜數字,換到新任務上常常撐不住。誠實的回報意味著:多個種子、信賴區間、固定的評估預算,以及保留未見過的變體來測試。

還有一個更隱微的陷阱:把你的獎勵調到基準分數好看為止,可能在不知不覺中教會代理人去鑽基準的漏洞,而不是真正解決任務。我們稍後會深入這門工藝——見獎勵工程實務——因為在應用型強化學習裡,多數專案的生死都繫於此。

從基準走向你自己的世界

終究你會離開標準套件,把你自己的問題包裝成一個環境——一座倉庫、一本交易帳、一條推薦動態。關鍵技巧是把你那雜亂的領域,對應到同一套乾淨的 `reset`/`step` 約定上。

G_t = \sum_{k=0}^{\infty} \gamma^{k}\, r_{t+k+1}

折扣回报:基准测试所评分的那个累计数值,用折扣因子 γ 对每一步的奖励求和。

  1. 定義觀測:代理人每一步實際看到什麼?這些資訊足以據以行動嗎(還是真正的狀態被隱藏了)?
  2. 定義動作空間:離散按鈕、連續旋鈕,還是結構化的選擇——在任務允許範圍內盡量讓它小。
  3. 定義獎勵:那個一旦被最大化、就能產生你真正想要行為的單一數字。
  4. 定義回合邊界:一次運行何時重置?什麼算成功、什麼算失敗?
  5. 用最簡單的代理人驗證:在你訓練任何東西之前,隨機策略與手寫基線都應該表現得合理。