環境就是問題本身
在監督式學習中,你從一個資料集開始;在強化學習中,你從一個環境(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正因為這套約定如此精簡,照它寫成的代理人可以原封不動地放到平衡桿、Atari 遊戲或機器人模擬器上。這種可移植性是整個生態系低調的超能力:策略(policy)只寫一次,底下的世界隨意替換。
經典的試煉場
有兩大基準家族定義了深度強化學習的第一個十年。街機學習環境(Arcade Learning Environment, ALE)把數十款 Atari 2600 遊戲包在同一套「螢幕像素進、搖桿訊號出」的介面後面;以它為基礎的 Atari 基準成了「用單一網路從原始像素學習」的標準測試。在連續控制這一側,MuJoCo 提供快速、可微分的物理引擎,用於移動運動任務(locomotion)——讓模擬獵豹奔跑、讓人形機器人站穩。
卷积网络流水线:把图像转化为池化特征,再输出分类或动作。
誠實的基準長什麼樣
基準唯有在「高分代表真本事、而非好運調參」時才有用。強化學習的結果出了名地脆弱:同一個演算法在不同亂數種子(random seed)下成績可能大幅震盪,而靠數百次超參數試驗磨出來的排行榜數字,換到新任務上常常撐不住。誠實的回報意味著:多個種子、信賴區間、固定的評估預算,以及保留未見過的變體來測試。
還有一個更隱微的陷阱:把你的獎勵調到基準分數好看為止,可能在不知不覺中教會代理人去鑽基準的漏洞,而不是真正解決任務。我們稍後會深入這門工藝——見獎勵工程實務——因為在應用型強化學習裡,多數專案的生死都繫於此。
從基準走向你自己的世界
終究你會離開標準套件,把你自己的問題包裝成一個環境——一座倉庫、一本交易帳、一條推薦動態。關鍵技巧是把你那雜亂的領域,對應到同一套乾淨的 `reset`/`step` 約定上。
折扣回报:基准测试所评分的那个累计数值,用折扣因子 γ 对每一步的奖励求和。
- 定義觀測:代理人每一步實際看到什麼?這些資訊足以據以行動嗎(還是真正的狀態被隱藏了)?
- 定義動作空間:離散按鈕、連續旋鈕,還是結構化的選擇——在任務允許範圍內盡量讓它小。
- 定義獎勵:那個一旦被最大化、就能產生你真正想要行為的單一數字。
- 定義回合邊界:一次運行何時重置?什麼算成功、什麼算失敗?
- 用最簡單的代理人驗證:在你訓練任何東西之前,隨機策略與手寫基線都應該表現得合理。