機器之心專欄
作者:Yucheng Lu, Yikang Shen, Chuang Gan 等
假設你給機器看了一段很長的游戲視訊,在里面有砍樹,打獵,造房子等,你的模型能否從這個非結構化的錄像中自動地發現這些有意義的技能包?
在現實世界里,人類尤其具有這種將復雜任務有效分解為多個子任務的能力,這種能力幫助人類面對新環境時加速自身的學習過程并獲得更好的泛化能力。
傳統方法主要圍繞概率圖模型,這些工作將子任務結構建模為潛在變量,并從學到的后驗中提取子任務標識。在一篇ICLR 2021的論文中,MIT-IBM Lab 淦創團隊與蒙特利爾大學部合作提出了:是否可以設計更智能的神經網路,使子任務結構自動在模仿學習中出現?具體而言,研究者設計了一個循環決策網路,使得子任務結構能夠體現在每一步的表征中,
在該研究中,研究者提出有序記憶決策網路(OMPN),模型可以經過正常的行為克隆(behavior cloning)來發現子任務的層級,從非結構化示范中恢復子任務邊界。在 Craft 和 Dial 上進行的實驗表明,在沒有任何人類額外標注的情況下,子任務層次結構會自然地從模型中演化出。
- 論文地址:https:http://openreview.net/pdf?id=vcopnwZ7bC
- 項目地址:https:http://github.com/Ordered-Memory-RL/
Memory 如何表達子任務?
研究者提供了一個網格世界的示例用于說明,示例中有不同的原料(例如草)可供智能體拾取,還包括一家工廠以便智能體使用這些原料,假設智能體想要完成搭橋任務,該任務可以分解為樹狀多層結構,其中,根任務可以分為 “拾取原料” 和“制造橋梁”。“拾取原料”可以進一步分為 “拾取草” 和“拾取木頭”。
為了能夠實現上述的結構,智能體的記憶在每一步應該如何 “更新”?在下圖中,將記憶劃分為不同級別,對應不同層級的子任務。當‘t=1’時,模型僅從根任務“搭建橋梁” 開始,并 “展開” 得到 “拾取原料”,然后進一步“展開” 為“拾取木頭”。這里的 “展開”(藍色箭頭)可以理解成一種“planning operator”,動作從最低層級的記憶中產生。在‘t<3’時,“拾取原料” 會被復制,但是當 “拾取木頭” 完成后,即‘t=3’時,該子任務會被 “更新”。這里的“更新” 可以視為每個子任務的內部更新,而 “更新” 后的 “拾取原料” 通過 “展開” 重新得到下一個子任務 “拾取草”。同理“搭建橋梁” 一直被復制直到在‘t=5’(“拾取原料”完成)時進行 “更新”,然后“展開” 為“制造橋梁”和“前往工廠”。
這樣的過程中,可以定義 “展開高度”,即每一時刻發生“展開” 的記憶的位置。研究者同時觀察到,通過觀察 “展開高度” 的變化,可以由此確定子任務的邊界。例如從‘t=2’到‘t=3’,擴展位置從最低級別到中間級別,表明了低級別子任務的完成。從‘t=4’到‘t=5’,擴展位置從最低級別到最高級別,表明低級別和中級別子任務均已完成。所以目標就是希望通過合理的網路設計,讓模型可以收斂到上述記憶更新規則,具體包括:
- 若模型認為當前底層子任務已被完成,則需要輸出高展開位置,并從高層子任務中展開,
- 若模型認為當前底層子任務未被完成,則需要輸出低展開位置, 并將高層任務復制,來實現 long-term dependency。
網路設計的數據流效果如下所示:
從行為克隆中進行任務分解
主要的實驗結果就是表明:正確的子任務結構的確可以通過行為克隆后,在模型中體現出來,而在這個過程中,沒有任何額外的任務邊界標注。在接下來示例中,將智能體的軌跡以及展開位置的變化進行可視化,經過學習后,模型學會在每個子任務快結束的時刻,將展開高度提高。在每個子任務的行進過程中,將展開高度保持低位,符合之前說的直覺,
在 Craft 任務中,模型需要完成 4 個子任務來“造床”。
在 Dial 任務中,模型需要控制機器手臂連續按 4 個數字。
在 Kitchen 任務中,模型需要連續操控四個家電。
這才是真正的創新
供業內人士參考!