我們究竟為何要在模擬中訓練
強化學習是個大胃王:一個策略在變得堪用之前,可能需要數百萬次嘗試。在真實機器人上,每次嘗試都要花掉實際時間、磨損硬體,還可能弄壞東西——甚至傷人。於是我們在模擬器中訓練,那裡的嘗試快速、可平行、免費又安全,再把學到的策略搬到真實裝置上。這就是模擬到真實轉移(sim-to-real)。
模擬還讓我們做到真實世界裡不可能的事:瞬間重置到任意狀態、讓上千個機器人平行運行、讀取完美的真值狀態來塑形獎勵。問題在於——模擬器永遠不是真實世界。
現實鴻溝
每個模擬器都在細微處出錯:摩擦力略有偏差、馬達延遲幾毫秒、相機看到的顏色略有不同、接觸物理只是近似。一個學會利用這些特定怪癖的策略,在模擬中可能表現精湛,到了硬體上卻毫無用處。這種落差就是現實鴻溝(reality gap),也是應用型機器人強化學習裡的頭號反派。
可交互的 Q-learning 网格世界,智能体学习动作价值以抵达目标。
領域隨機化:讓真實只是又一個樣本
最具影響力的解法把問題翻轉過來。與其打造一個完美的模擬器,不如打造一整族不完美的模擬器,並在每個回合隨機改變它們——重力、摩擦力、質量、感測雜訊、光照、延遲。這就是領域隨機化(domain randomization)。如果策略必須在廣泛的物理分布上都成功,那麼真實世界看起來就只是那個分布裡的又一次抽樣,於是策略得以轉移。
把域随机化写成目标:在整个随机化物理参数 ξ 的分布上最大化期望回报,于是真实设备只是其中又一个样本。
for episode in training:
# randomise the simulator before each rollout
sim.gravity = uniform(9.4, 10.2)
sim.friction = uniform(0.7, 1.3)
sim.mass = base_mass * uniform(0.8, 1.2)
sim.latency = uniform(0, 40) # milliseconds
rollout(policy, sim) # learn to be robust to ALL of these隨機化太少,你會過擬合到模擬器;太多,任務會難到策略什麼都學不會。實務上常讓隨機化範圍隨訓練逐步擴大——一套自動課程,從簡單開始,隨著代理人應付得來而逐漸放寬。
三条曲线,分别展示欠拟合、恰当拟合和过拟合。
從另一側縮小鴻溝
領域隨機化讓策略更強健;另外兩個互補的工具則讓模擬器更誠實。系統辨識(system identification)量測真實裝置——它真正的質量、摩擦力、延遲——並據以校準模擬器,在訓練前就縮小鴻溝。領域適應(domain adaptation)則對齊代理人所感知到的東西:它把真實的感測讀數(或真實相機影像)映射回策略在模擬中見過的分布,讓同一個策略賓至如歸。
- 辨識:量測真實系統並校準模擬器,使其基準狀態盡量接近。
- 隨機化:把剩下的未知量散佈成一個分布,讓策略對你量不到的部分仍然強健。
- 適應:透過把真實觀測映射進模擬分布,彌合任何殘餘的感知落差。
- 盡早且頻繁地在硬體上測試:真實裝置才是最終唯一算數的基準。
這些技術合在一起,把模擬到真實從一種期盼變成一套方法——例如,讓完全在模擬中訓練的靈巧機器人操作(robotic manipulation)策略,在實體機械手第一次開機時就能運作。