OpenAI發布8個模擬機器人環境以及一種HER實現,以訓練實體機器人模型
OpenAI:我們將發布8個模擬的機器人環境,以及一種叫做「事後經驗回顧」(Hindsight Experience Replay,簡稱HER)的一種Baselines實現,它允許從簡單的、二元的獎勵中學習,從而避免了對複雜的獎勵工程的需求。所有這些都是為我們過去一年的研究而開發的。我們利用這些環境來訓練在實體機器人上工作的模型,並且還發布了一組機器人研究的請求。
相關鏈接:
- 關於HER的相關論文:https://arxiv.org/abs/1707.01495
- 實體機器人:https://blog.openai.com/robots-that-learn/;https://blog.openai.com/generalizing-from-simulation/
- 機器人研究的請求:https://blog.openai.com/ingredients-for-robotics-research/#requestsforresearchheredition
https://www.zhihu.com/video/951813126635646976
- Gym環境:https://gym.openai.com/envs/#robotics
- OpenAI Baselines是一組高質量的強化學習演算法的實現。Github地址:https://github.com/openai/baselines
- 技術報告:https://s3-us-west-2.amazonaws.com/openai-assets/research-covers/ingredients-for-robotics-research/technical-report.pdf
這次發布了包括四個使用Fetch科研平台的環境,以及使用ShadowHand機器人的四個環境。這些環境中所包含的操作任務要比目前在Gym使用的MuJoCo持續控制環境要困難得多,這些環境現在都可以使用像PPO這樣的最近發布的演算法來解決。此外,我們新發布的環境使用了真實的機器人模型,並要求agent解決實際任務。
環境
這次發布為Gym提供了8個機器人環境,使用了MuJoCo物理模擬器。環境如下:
Fetch
FetchReach-v0(抵達):Fetch必須將它的末端執行器(在機器人技術中,末端執行器是機器人手臂末端的裝置,它是用來與環境進行交互的。這個裝置的確切性質取決於機器人的應用。)移動到期望的目標位置。
Fetchslide-v0(滑動):Fetch必須在一個長桌上打擊一個冰球,這樣它就可以滑過,並在期待的目標上停下來。
FetchPush-v0(推動):Fetch必須推動一個立方體,直到它達到一個理想的目標位置。
FetchPickAndPlace-v0(撿起和放置):Fetch必須使用它的夾鉗從一個桌子上撿起一個盒子(黑色),並將它移動到桌面上的一個期望的目標上。
ShadowHand(一種機械手臂)
HandReach-v0:ShadowHand必須用它的拇指和一個選定的手指來接觸,直到它們在手掌上達到一個理想的目標位置。
HandManipulateBlock-v0(機械手操控一個塊):ShadowHand必須操作一個塊,直到它達到預期的目標位置並旋轉。
HandManipulateEgg-v0(機械手操控一個蛋體):ShadowHand必須操控一個蛋體,直到它達到一個理想的目標位置並旋轉。
HandManipulatePen-v0(機械手操控一支筆):ShadowHand必須操控一支筆,直到它達到理想的目標位置並旋轉。
目標
所有的新任務都有一個「目標」的概念,例如在滑動任務中冰球的期望位置,或者在機械手操控塊任務中的期望方向。如果期望的目標還沒有達到,那麼所有的環境默認使用的是-1的稀疏獎勵。如果達到了(在一定的範圍內),那麼是0。這與被用於傳統的Gym持續控制問題的成型的(shaped)獎勵形成了鮮明的對比,例如,Walker2d-v2。
我們還包括一個對每個環境都有密集獎勵的變體。然而,我們相信,在機器人應用程序中,稀疏的獎勵更現實一些,我們鼓勵每個人使用這種稀疏的獎勵變體。
事後經驗回顧
除了這些新的機器人環境,我們還發布了事後經驗回顧(Hindsight Experience Replay,簡稱HER)的代碼(如下),這是一種可以從失敗中學習的強化學習演算法。我們的研究結果表明,HER可以從很少的獎勵中學習到大多數新的機器人問題的成功策略。在此基礎上,我們還展示了未來研究的一些潛在方向,進一步提高了HER演算法在這些任務中的性能。
- 代碼:https://github.com/openai/baselines
了解HER
為了了解HER的作用,讓我們在FetchSlide(上文提到)的背景下看一看,我們需要學習將一個冰球滑過桌子並擊中一個目標。我們的第一次嘗試很可能不會成功。除非我們非常幸運,否則接下來的幾次嘗試也很可能不會成功。典型的強化學習演算法不會從這種經驗中學到任何東西,因為它們只獲得一個不包含任何學習信號的恆定獎勵(在這種情況下是-1)。
HER的正式觀點是人類直覺上所做的:即使我們沒有在一個特定的目標上取得成功,我們至少也取得了一個不同的目標。那麼,為什麼不只是假裝我們想要開始實現這個目標,而不是我們最初想要實現的目標呢? 通過進行這種替換,強化學習演算法可以獲得一個學習信號,因為它已經達到了一定的目標;即使這不是我們最初想要達到的目標。如果我們重複這個過程,我們最終將學會如何實現任意的目標,包括我們真正想要實現的目標。
這種方法可以讓我們學會如何在桌子上滑動一個冰球,儘管我們的獎勵是非常稀疏的,即使我們可能從來沒有真正達到我們想要的目標。我們將這種技術稱為事後經驗回顧(HER),因為在事件結束後,它回顧了目標經驗(一種通常在DQN和DDPG等非策略的強化學習演算法中使用的技術),這些目標經驗都是事後選擇的。因此,HER可以與任何偏離策略的強化學習演算法相結合(例如,HER可以與DDPG演算法結合使用,我們將其稱為「DDPG+HER演算法」)。
結果
我們發現HER在以目標為基礎的環境中工作得非常好,而獎勵卻很稀疏。我們在新任務上比較了DDPG+HER演算法和vanilla DDPG演算法。這種比較包括每種環境的稀疏和密集版本的獎勵。
對於在HandManipulateBlockRotateXYZ-v0上的
四個不同的配置的中位數檢測成功率(線)和四分位距(陰影區域)。數據是在訓練epoch上進行繪製的(plot),並總結了每個配置的5個不同的隨機種子。
DDPG+HER的稀疏獎勵遠遠超過其他的配置,並且在這個具有挑戰性的任務上學習了一個成功的策略,只有很稀疏的獎勵。有趣的是,DDPG+HER的密集獎勵可以學習,但成績更差。在這兩種情況下,Vanilla DDPG大多都無法學習。我們發現這種趨勢在大多數環境中都是正確的,並且在我們的技術報告中包含了完整的結果。
研究請求:HER版本
雖然HER是一種很有前途的方法,可以通過我們在這裡提出的機器人環境來學習複雜的基於目標的任務,但是仍然有很大的改進空間。與我們最近推出的研究請求2.0版本的要求相似,我們有一些關於如何改進HER的方法,以及強化學習的方法。
- 事後自動創建目標:我們現在有一個硬編碼的策略來選擇我們想要替代的事後目標。如果這一策略能被學會,那將是很有趣的。
- 無偏見的HER:以一種沒有原則的方式,目標的替代改變了經驗的分配。這種偏見在理論上會導致不穩定,儘管我們在實踐中並沒有發現這種偏見。儘管如此,推出一個沒有偏見的版本還是很不錯的,例如利用重要性採樣(統計學中估計某一分布性質時使用的一種方法。該方法從與原分布不同的另一個分布中採樣,而對原先分布的性質進行估計。來源:維基百科)。
- HER+HRL:將HER與分層強化學習(HRL)中的一個近期的想法結合起來將會很有趣。它不僅可以應用於目標,還可以應用於高級策略所生成的操作。例如,如果較高的水平要求較低的水平實現目標A,而目標B是實現的,我們可以假設更高的水平要求我們最初實現目標B。
- 更快的信息傳播:大多數無策略的深層強化學習演算法使用目標網路來穩定訓練。然而,由於變化需要時間來傳播,這將限制訓練的速度,我們在實驗中注意到,它往往是決定DDPG+HER學習速度的最重要因素。研究其它不引起這種減速的穩定訓練的方法是很有趣的。
- HER+多步驟的返回:在HER上所使用的經驗是非常沒有策略的,因為我們可以替代目標。這使得在多步驟返回時很難使用它。但是,多步驟返回是可取的,因為它們允許更快地傳播關於返回的信息。
- 有策略的HER:目前,HER只能在無策略的演算法中使用,因為我們可以替代目標,使這種體驗極度偏離策略。然而,最近像PPO這樣的演算法表現出了非常有吸引力的穩定性特徵。研究HER是否能與這種有策略的演算法結合在一起是很有趣的,例如重要性採樣。在這個方向上已經有了一些初步的結果。
- 非常頻繁的強化學習行動:當前的強化演算法對採取行動的頻率非常敏感,這就是為什麼在Atari開發的遊戲中使用跳幀技術的原因。在連續的控制域中,當動作的頻率趨於無窮時,性能趨於零,這是由兩個因素造成的:不一致的探索和引導程序(bootstrap)需要更多時間來傳播關於及時返回的信息。如何設計一種簡單高效的強化演算法,即使當動作的頻率趨於無窮時,它仍然能保持它的性能呢?
- 把HER和最近在強化學習上的進步結合起來:最近有大量的研究可以改善強化學習的不同方面。一開始,HER可以與優先化經驗回顧、分散式強化學習、熵正則化強化學習或反向課程生成相結合。你可以在技術報告中找到關於這些建議和新Gym環境的附加信息和參考資料。
使用基於目標的環境
引入「目標」的概念需要對現有的Gym API進行一些向後兼容的改變:
- 所有基於目標的環境都使用一個gym.spaces.Dict。環境被期待包含一個期望的目標,agent應該嘗試實現(
desired_goal
),它當前實現的反而是(achieved_goal
),以及實際的觀察(observation
),例如機器人的狀態。 - 我們公開了一個環境的獎勵功能,因此允許用改變的目標來重新計算一個獎勵。這支持了HER方式的演算法,這種演算法可以替代目標。
這裡有一個簡單的例子,它與基於目標的環境進行交互,並執行目標替換:
01import
numpy as np
02import
gym
03
04
05env=
gym.make(′FetchReach-v0′)
06obs=
env.reset()
07done=
False
08
09def
policy(observation, desired_goal):
10
# Here you would implement your smarter policy. In this case,
11
# we just sample random actions.
12
return
env.action_space.sample()
13
14while
not
done:
15
action=
policy(obs[′observation′], obs[′desired_goal′])
16
obs, reward, done, info=
env.step(action)
17
18
# If we want, we can substitute a goal here and re-compute
19
# the reward. For instance, we can just pretend that the desired
20
# goal was what we achieved all along.
21
substitute_goal=
obs[′achieved_goal′].copy()
22
substitute_reward=
env.compute_reward(
23
obs[′achieved_goal′], substitute_goal, info)
24
print(′rewardis
{}, substitute_rewardis
{}′.format(
25
reward, substitute_reward))
新的基於目標的環境可以與現有的與Gym匹配的強化學習演算法,比如Baseline一起使用。使用gym.wrappers.FlattenDictWrapper將基於dict的觀察空間flatten為一個數組:
01import
numpy as np
02import
gym
03
04
05env=
gym.make(′FetchReach-v0′)
06
07# Simply wrap the goal-based environment using FlattenDictWrapper
08# and specify the keys that you would like to use.
09env=
gym.wrappers.FlattenDictWrapper(
10
env, dict_keys=[′observation′, ′desired_goal′])
11
12# From now on, you can use the wrapper env as per usual:
13ob=
env.reset()
14print(ob.shape) # is now just an np.array
原文地址:Ingredients for Robotics Research
本文為atyun編譯,轉載請註明出處。更多內容關注微信公眾號atyun_com;訪問網站http://www.atyun.com;或加資源群:213252181
推薦閱讀:
※2018年,終於,發那科開始動手了?
※氣動軟體機器人設計太麻煩?最新研究幫你自動完成
※幾則設施建築領域機器人應用
※什麼是機器人教育?
※機器人將淘汰所有人工,人類未來何去何從?