每次看到人類訓練機器人,我都會很困惑一件事,那就是在如此殘酷環境中培養出來的技能,到底能在現實世界中用上幾回?
像是狠狠從背後踹它一腳,讓它倒地後再爬起來;讓兩個機器人鬥毆在地上瘋狂摩擦;又或者是在十幾米的高臺不停地跳高高……有事嗎???
這麼對待重金打造的機器人,先不說畫面“不忍直視”,修理損耗難道不要錢的嗎?
後來我明白了,這跟目前的技術路徑有關。深度學習就是要進行大量的實踐和訓練,才能不斷最佳化演算法,直至機器人能夠應對真實世界中各種各樣的狀況。
理論上講,只要時間足夠長、預算無上限,猴子也能用電腦寫出文學著作,更何況是算力逆天的機器。
但,這跟我們普通人又有什麼關係呢?我們能否在有生之年用上(而且買得起)可靠解決問題的機器小助手呢?一萬年太久,我們只爭朝夕好嗎?
最近,伯克利和谷歌大腦最新開發的強化學習演算法——soft actor-critic(SAC),據說就現實世界的機器人學習,或許,有望改變一下訓練機器人的古早思維。
今天我們就來聊聊,SAC會如何改變機器人的“成材之路”?
為什麼想要一個rio的機器人,這麼難?
在介紹SAC這個新演算法之前,有必要先解釋一下,是不是一定要有更好的機器人演算法呢?或者說,這個演算法到底能夠改變什麼?
這要從機器人在現實世界中遇到的挑戰來解答。
首先,是目前的訓練方式,決定了機器掌握新技能的速度還遠遠不夠。
傳統的機器學習演算法,每次執行新任務時,都需要對原型設計進行引數調整,有的還需要重新收集資料進行訓練,這就使得機器新技能所需的總時間迅速增加;
其次,現實場景中的無數意外,都有可能讓機器出現故障。
真正在使用機器時,無論出現什麼問題,比如斷電或者網路延遲,機器都會以“當機”來應對危機。如果每次都要以“重啟”來恢復作業,那應用機器人的價值何在?
以上都是效率問題,傳統訓練方式帶來的成本困境,更是令研究人員愁到禿頭。
無論是訓練人員人為製造bug的暴力操作,還是執行器在種種複雜環境下的高頻抖動,都會給硬體帶來極大的磨損。這是機器人嗎?這是鈔票粉碎機啊!
當然,人類也不是沒有想過辦法。比如讓機器人打遊戲啦,設計模擬環境啦,這些努力都大大減少了對現實訓練的依賴,但歸根結底,都無法替代現實環境的多樣性和隨機性。最重要的,還是得打造一套專為現實世界機器人“量身定製”的演算法。
真實世界的機器人,到底需要怎樣的演算法?
那麼,這樣一套演算法應該具備哪些屬性呢?
至少需要有這樣幾個關鍵要素:
1.良好樣本複雜性。提供給演算法的訓練樣本數量越多,機器獲得資料標籤的時間成本也就越低,返回的誤差也更小,在強化學習中的表現自然也就越出色;
2.沒有敏感的超引數。為了提高機器學習的效能和效果,往往需要對超引數進行最佳化,但在現實環境中,自然是引數調整越少越好。演算法就需要最大限度地減少調整超引數的需求;
3.非同步取樣。真實世界中,難免會出現資料流終端、推理延遲等問題,要讓機器在“重啟”階段也能夠保持一定的持續性和穩定性,就必須將資料的收集和訓練在確保在最小化的多個獨立執行緒中進行。
4.動作平滑。為了防止大幅度動作或震動損壞硬體,因此,時間上具有關聯和連貫性的探索就變得尤為重要了。
簡單總結一下,如果我們相信未來真實世界中的機器人不可或缺,那麼,要求它用無限長的時間、無限多的投入、無數次的碰壁去掌握這樣那樣的本領,顯然不太明智。
如何讓它自己進行有取捨、有現實意義的訓練呢?SAC應聲出現。
SAC成功的秘訣,就是心大
說了這麼多,正主終於出現了。那麼。究竟什麼是SAC?
SAC,全稱是Soft actor-critic。從名字不難看出,SAC也是基於Actor-Critic演算法的邏輯,即actor(玩家)隨機表演,critic(評委)隨機打分,互相制衡下追求更好的表現(reward)。
不同的是,SAC對引數的態度十分“溫柔”,它會自動權衡預期收益(最大化回報)和探索深度(最大化的不確定性),然後自動學習不是將其視為需要調整的“超引數”,從而獲得最優策略。
這樣帶來的好處是,訓練樣本多樣,還不需要頻繁調整引數,學習效率高了很多。即使遇到最差的實驗環境,也表現良好。
這就像是以前機器需要在人類親媽的“呵護”之下,點燈熬夜窮經皓首地做奧數題,以期成為“數學神童”。如今學會了勞逸結合奮發圖強,拿下高考高分就一本滿足了。顯然,後者才是大多數普通機器的榜樣和人類家長應該有的期待嘛。
具體表現如何,有請來自“伯克利小學”的三位機器人同學現身說法:
第一個向我們走來的是Minitaur,一個帶有八個驅動執行器的小型四足機器人。在前進時,往往藉助控制器追蹤四肢的擺動部位,觀察好各種角度以平衡腿上的力度。如果沒有有效的訓練策略,很容易失去平衡而摔倒,摔多了鋼筋鐵骨也會壞的啊。
不過,在掌握了新的學習方法之後,由於訓練時將資料的不確定性最大化,Minitaur不需要任何額外的學習,就可以駕馭絕大對數平衡性的干擾。
第二位是非常靈活的“三指手”同學,它的任務是用手旋轉“閥門”,使彩色掛鉤朝右。但閥門上安裝了一個小型電機,受力會自動復位。因此,每轉一次,閥門的初始位置都會被隨機重置,使得機器必須重新感知當前的閥門方向。這個任務需要感知預測,並精準地控制9個伺服電機關鍵來完成,非常具有挑戰性,但我們的“三指手”依然順利完成了任務。
最後一位機器人同學雖然在玩樂高,但並沒有從中得到多少樂趣。因為訓練者要求它在堆疊積木的時候準確地對準螺柱以減少摩擦。
除了需要確定關節的位置和速度之外,還需要保證末端的力度,並且將複雜命令同時傳送給7個關節。這和要求人類小孩“百步穿楊”有差別嗎?
不過,掌握了SAC大法的機器並沒有讓人失望,只用3個小時就學會了如何搞定這個任務。而以往使用的PPO策略用了7.4小時才搞定。SAC是不是很棒棒?
在論文中,研究人員給SAC用了一個高調的定語:“state-of-the-art”(最先進的),可以說是實至名歸了。
當然了,上述還都只是些比較概念化的實驗,真正要將這種能力擴充套件到更具挑戰性的現實任務中,還需要大量的最佳化迭代、開發編碼調參等工作,不過可以預測的是,由於SAC的出現,機器人正在無限近地接近概念到實用的臨界點。
有了這個最佳引路人,機器人終於可以少受點“虐待”,真正滲透進生活的細節了。