本文作者 Frankenstein,首發於作者的知乎主頁。
今天在學校又雙叒叕提到了 Deep Reinforcement Learning That Matters 這篇打響 DRL(Deep Reinforcement Learning, 深度強化學習)勸退第一槍的文章後,回來以後久違刷了一下推特,看到了這篇爆文 Deep Reinforcement Learning Doesn't Work Yet,或可直譯爲深度強化學習還玩不轉或意譯爲深度強化學習遠不能即插即玩。
看完以後很多從自己去年七月入坑以來隱隱約約的困惑都得到了解答。讀完大有如不見此文,萬古如長夜之感。心裏激動,一時難以自抑。知乎上深度強化學習的內容比較少,最好的私以爲是智能單元,此外還有許多零散的論文介紹、課程筆記、問答等等,但好像沒人提過這篇文章。這篇文章是我入坑以來看到的深度強化學習方面最好的階段性總結,強烈建議應該作爲深度強化學習的第一課,看完以後大家再慎重考慮到底要不要入坑。
先看一下作者的背景。作者叫 Alex Irpan,現爲谷歌大腦機器人團隊的軟件工程師。他從伯克利拿到的計算機科學本科學位,本科的時候曾經在伯克利人工智能實驗室(Berkeley AI Research (BAIR) Lab)進行本科科研,導師是 DRL 大牛 Pieter Abbeel,他還和 John Schulman 工作過。
這篇文章一上來就指出深度強化學習是個大坑。它的成功案例其實很少,但每個都太有名了,例如用 Deep Q Network(DQN)在 Atari games 上用原始像素圖片作爲狀態達到甚至超越人類專家的表現、通過左右互搏(self-play)等方式在圍棋上碾壓人類、大大降低了谷歌能源中心的能耗等等。造成的結果就是沒有從事過深度強化學習的研究人員對它產生了很大的錯覺,高估了它的能力,低估了它的難度。
強化學習本身是一個非常通用的人工智能範式,在直覺上讓人覺得非常適合用來模擬各種時序決策任務,如語音、文本類任務。當它和深度神經網絡這種只要給我足夠層和足夠多的神經元,可以逼近任何函數的非線性函數近似模型結合在一起感覺要上天啊,無怪乎 DeepMind 經常號稱人工智能=深度學習+強化學習。
然而 Alex 告訴我們別急,讓我們先來審視一些問題:
1.它的樣本利用率非常低。換言之爲了讓模型的表現達到一定高度需要極爲大量的訓練樣本。
2.最終表現很多時候不夠好。在很多任務上用非強化學習甚至非學習的其它方法,如基於模型的控制(model based control),線性二次型調節器(Linear Quadratic Regulator)等等可以獲得好得多的表現。最氣人的是這些模型很多時候樣本利用率還高。當然這些模型有的時候會有一些假設比如有訓練好的模型可以模仿,比如可以進行蒙特卡洛樹搜索等等。
3.DRL 成功的關鍵離不開一個好的獎勵函數(reward function),然而這種獎勵函數往往很難設計。在 Deep Reinforcement Learning That Matters 作者提到有時候把獎勵乘以一個常數模型表現就會有天和地的區別。但獎勵函數的坑爹之處還不止如此。獎勵函數的設計需要保證:
加入了合適的先驗,良好的定義了問題和在一切可能狀態下的對應動作。坑爹的是模型很多時候會找到作弊的手段。Alex 舉的一個例子是有一個任務需要把紅色的樂高積木放到藍色的樂高積木上面,獎勵函數的值基於紅色樂高積木底部的高度而定。結果一個模型直接把紅色樂高積木翻了一個底朝天。仔啊,你咋學壞了,阿爸對你很失望啊。
獎勵函數的值太過稀疏。換言之大部分情況下獎勵函數在一個狀態返回的值都是 0。這就和我們人學習也需要鼓勵,學太久都沒什麼回報就容易氣餒。都說 21 世紀是生物的世紀,怎麼我還沒感覺到呢?21 世紀纔剛開始呢。我等不到了啊啊啊啊啊。
有的時候在獎勵函數上下太多功夫會引入新的偏見(bias)。
要找到一個大家都使用而又具有好的性質的獎勵函數。這裏Alex沒很深入地討論,但鏈接了一篇陶神(Terence Tao)的博客,大家有興趣可以去看下。
4.局部最優/探索和剝削(exploration vs. exploitation)的不當應用。Alex舉的一個例子是有一個連續控制的環境裏,一個類似馬的四足機器人在跑步,結果模型不小心多看到了馬四腳朝天一頓亂踹後結果較好的情況,於是你只能看到四腳朝天的馬了。
5.對環境的過擬合。DRL 少有在多個環境上玩得轉的。你訓練好的 DQN 在一個 Atari game上work 了,換一個可能就完全不 work。即便你想要做遷移學習,也沒有任何保障你能成功。
6.不穩定性。
讀 DRL 論文的時候會發現有時候作者們會給出一個模型表現隨着嘗試 random seed 數量下降的圖,幾乎所有圖裏模型表現最終都會降到 0。相比之下在監督學習裏不同的超參數或多或少都會表現出訓練帶來的變化,而 DRL 裏運氣不好可能很長時間你模型表現的曲線都沒有任何變化,因爲完全不 work。
即便知道了超參數和隨機種子,你的實現只要稍有差別,模型的表現就可以千差萬別。這可能就是 Deep Reinforcement Learning That Matters 一文裏 John Schulman 兩篇不同文章裏同一個算法在同一個任務上表現截然不同的原因。
即便一切都很順利,從我個人的經驗和之前同某 DRL 研究人員的交流來看只要時間一長你的模型表現就可能突然從很好變成完全不 work。原因我不是完全確定,可能和過擬合和 variance 過大有關。
特別是上述第六點,幾乎是災難性的。作者提到自己實習的時候一開始實現 Normalized Advantage Function (NAF),爲了找出 Theano 本身的 bugs 花了六週,這還是在 NAF 作者就在他旁邊可以供他騷擾的情況下的結果。原因就是DRL的算法很多時候在沒找好超參數的情況下就是不 work 的,所以你很難判斷自己的代碼到底有沒有 bug 還是運氣不好。
作者也回顧了 DRL 成功的案例,他認爲 DRL 成功的案例其實非常少,大體包括:
各類遊戲:Atari Games, Alpha Go/Alpha Zero/Dota2 1v1/超級馬里奧/日本將棋,其實還應該有 DRL 最早的成功案例,93年的西洋雙陸棋(backgammon)。
DeepMind 的跑酷機器人。
爲 Google 的能源中心節能。
Google 的 AutoML。
作者認爲從這些案例裏獲得的經驗教訓是 DRL 可能在有以下條件的情況下更可能有好的表現,條件越多越好:
數據獲取非常容易,非常 cheap。
不要急着一上來就攻堅克難,可以從簡化的問題入手。
可以進行左右互搏。
獎勵函數容易定義。
獎勵信號非常多,反饋及時。
他也指出了一些未來潛在的發展方向和可能性:
局部最優或許已經足夠好。未來某些研究可能會指出我們不必過於擔心大部分情況下的局部最優。因爲他們比起全局最優並沒有差很多。
硬件爲王。在硬件足夠強的情況下我們或許就不用那麼在乎樣本利用率了,凡事硬剛就可以有足夠好的表現。各種遺傳算法玩起來。
人爲添加一些監督信號。在環境獎勵出現頻次太低的情況下可以引入自我激勵(intrinsic reward)或者添加一些輔助任務,比如DeepMind就很喜歡這套,之前還寫了一篇 Reinforcement Learning with Unsupervised Auxiliary Tasks(https://arxiv.org/abs/1611.05397) 。LeCun 不是嫌蛋糕上的櫻桃太少嗎,讓我們多給他點櫻桃吧!
更多融合基於模型的學習從而提高樣本使用率。這方面的嘗試其實已經有很多了,具體可以去看 Alex 提到的那些工作。但還遠不夠成熟。
僅僅把 DRL 用於 fine-tuning。比如最初 Alpha Go 就是以監督學習爲主,以強化學習爲輔。
自動學習獎勵函數。這涉及到 inverse reinforcement learning 和 imitation learning。
遷移學習和強化學習的進一步結合。
好的先驗。
有的時候複雜的任務反而更容易學習。Alex 提到的例子是 DeepMind 經常喜歡讓模型學習很多同一環境的變種來減小對環境的過擬合。我覺得這也涉及 curriculum learning,即從簡單的任務開始逐步加深難度。可以說是層層遞進的遷移學習。另外一個可能的解釋是很多時候人覺得困難的任務和機器覺得困難的任務是相反的。比如人覺得倒水很簡單,你讓機器人用學習的路子去學倒水就可以很難。但反過來人覺得下圍棋很簡單而機器學習模型卻在下圍棋上把人擊敗了。
最後 Alex 總體還是非常樂觀的。他說盡管現在有很多困難,使得 DRL 或許還不是一個強壯(robust)到所有人都可以輕易加入的研究領域並且很多時候一些問題用DRL遠沒有監督學習簡單和表現好,但或許過幾年你再回來 DRL 就 work 了也未知啊。這還是很振奮人心的。田淵棟老師也表達過類似的想法,覺得正因爲這個領域還不夠成熟所以還有很多機會。他們都是了不起的研究人員。
看到這篇文章我總體是非常激動的。但實話說也有些遺憾,如果去年暑假就有這篇文章的話也許我就會再慎重考慮一下到底要不要在實驗室沒有積累自己又離畢業和申請不遠的情況下開始這樣一個主題了。這是一個教訓,就是開始一個領域前要對這個領域要有充分的瞭解,之前零零散散在網上也有了一點相關的聲音,比如 Karpathy 就提到他在實現 vanilla policy gradient 的時候也遇到了很多困難。
If it makes you feel any better, I’ve been doing this for a while and it took me last ~6 weeks to get a from-scratch policy gradients implementation to work 50% of the time on a bunch of RL problems. And I also have a GPU cluster available to me, and a number of friends I get lunch with every day who’ve been in the area for the last few years.
Also, what we know about good CNN design from supervised learning land doesn’t seem to apply to reinforcement learning land, because you’re mostly bottlenecked by credit assignment / supervision bitrate, not by a lack of a powerful representation. Your ResNets, batchnorms, or very deep networks have no power here.
[Supervised learning] wants to work. Even if you screw something up you’ll usually get something non-random back. RL must be forced to work. If you screw something up or don’t tune something well enough you’re exceedingly likely to get a policy that is even worse than random. And even if it’s all well tuned you’ll get a bad policy 30% of the time, just because.
Long story short your failure is more due to the difficulty of deep RL, and much less due to the difficulty of 「designing neural networks」.
來源:https://news.ycombinator.com/item?id=13519044
但我一開始並沒有注意到。其實導師也一直有提到說他覺得我的 project 比較有風險,特別是他覺得現在除了 Berkeley, OpenAI,DeepMind 之外很少有 DRL 做的不錯的實驗室,這本身就表明這個方向可能有一些無形的門檻。現在我覺得這些可能包括計算資源和設備(機器人),對相關 trick 和坑瞭然於胸的相對資深的研究人員等等。客觀上這些地方的人綜合水平和工程能力也是強的讓人髮指,直接競爭非常困難。雖然我自己比較弱,但這些對於打算進入 DRL 的同學們都需要慎重考慮一下。
最後的最後還是要強推 Alex 的這篇文章,他列的這些點很多 DRL 的研究人員可能已經非常瞭解了,但之前沒有人這樣完整、有組織地介紹一遍。對於想要做 DRL 的同學們來說實在是福音。拙作是看完他文章後第一時間的感想和概括,對於我不夠了解的有些地方就一筆帶過了,或者表述也不夠準確。原文很長,我在對大部分內容比較熟悉的情況下看了一個半小時,但也很有意思,還是強烈推薦。
最後本文可能有些標題黨,並不是真的要完全勸退大家,Alex 的本意是希望大家更加冷靜地看待目前 DRL 研究的進展,避免重複踩坑。評論區裏有提到因爲困難纔有做的價值,還有機器人、控制論背景的朋友提到他覺得 drl can do anything 如果你有正確的超參數,這些意見也很值得大家參考。