精華區beta DataScience 關於我們 聯絡資訊
Github好讀版連結 https://github.com/LilTwo/Article/issues/1 本文為 https://www.alexirpan.com/2018/02/14/rl-hard.html 的翻譯 這篇文章非常長,我預計分三到四個部分翻譯 講得都滿到位的,個人認為很值得花時間一看 有點出了幾個在DRL中常會遭運的困難 正文開始(以下的"我"代表的是原作者): 有一次在Facebook上,我說了下面這句話:   不管何時有人問我強化學習能否解決他們的問題,我都會告訴他們"不行"   我認為至少在70%的時候我是對的 因為某些理由,DRL被過分炒作 RL是個非常通用的方法,且原則上一個好的RL系統能在任何領域上都表現良好 而在過去一段時間DL也取得了很大的成功 因此將DL與RL結合起來是個再自然不過的事情 DRL是目前看起來最像強人工智慧(AGI)的方法之一,這吸引了無數的資金 但不幸地,現在它還很不成熟 我相信它具有成功的潛力,如果我不相信RL的話,我也不會研究它了 但現在依然存在非常多的問題,且很多是從根本上難以解決的 那些看起來完美的範例都將背後的血淚隱藏了起來 最近我看到有些人被DRL的一些成功案例矇騙了 他們一開始成功地用DRL解決了一些簡單的玩具問題 這些成功讓他們低估了DRL的困難,而後他們會經歷無數的失敗 直到他們知道如何設立合理的研究目標 這不是任何人的錯,更像是個系統性的問題 寫一個有關於成功案例的故事是很簡單的,但寫一個關於失敗案例的故事很難 失敗的案例是研究者實際上最常遇到的情況,並且它們也比成功的案例重要 在這篇文章剩下的部分,我會解釋為什麼DRL還不能很好地發揮作用,和那些成功案例 以及未來我預期DRL會如何地變得更可靠 寫這篇文章並不是要阻止人們投入這個領域 而是我相信如果人們能夠了解問題是什麼並取得共識,研究會更容易有進展 並且避免人們不斷重新發現其他人已經發現過的問題 我想要看到更多DRL的新研究,我想要更多人加入這個領域,我也想要人們了解他們會遇 到什麼 在文章繼續前,先講幾件事情 1.在這篇文章中我引用了一些paper,通常我是為了這些paper中具有啟發性的失敗案例而 引用它們,而略過裡面的成功案例 這並不代表我不喜歡這些paper,我喜歡它們,如果你有時間你也應該閱讀它們 2.我常常會交換使用RL和DRL這兩個詞,因為在最近RL通常指的是DRL 但我的批評針對的是DRL,而不是一般的RL 我引用的paper通常有一個具備深度網路的agent 雖然有些批評可能也適用於線性RL或表列式的RL,但我想這些缺點在較小的問題中是不存 在的 而DRL會紅起來是由於在大型、複雜及高維度的環境中,一個好的函數近似是需要的 這方面才是特別需要被點出來的 3.這篇文章的結構是從悲觀到樂觀,我知道文章有點長,但如果你在回應前花點時間把它 看完我會很感激的 在我們更進一步前,先提一些DRL失敗的點 DRL的取樣率非常差 最知名的DRL成功例子就屬Atari了,如同在那篇很有名的DQN paper裡,如果你將 Q-Learning與合理大小的神經網路結合起來 配合一些優化技巧,就能在幾款Atari遊戲裡達到人類甚至超越人類水平的表現 Atari遊戲的幀數是每秒60張,你能想像現在最先進的DQN算法要花多少禎數才能達到人類 水平嗎? 這個答案跟遊戲的種類有關,所以來看一下最近Deepmind的paper,Rainbow DQN (Hessel et al, 2017). 這篇paper將各個增進DQN效能的技巧分開來研究,分析它們的優勢與欲解決的問題 並示範如何將這些技巧的優勢結合在一起,達到最好的效能 它可以在40/57款Atari遊戲中達到人類的水平,結果如下圖: https://www.alexirpan.com/public/rl-hard/rainbow_dqn.png
y軸是"median human-normalized score",此分數計算方法是訓練57個DQN,每個DQN對應 一款遊戲 將DQN取得的分數以人類的表現為100%進行歸一化,然後取出中位數(在57款遊戲中) RainbowDQN需要1800萬幀才達到100%,這對應的83小時的遊玩時間,還要加上訓練所花的 時間 而大多數時候,人類只要花幾分鐘就能上手一款遊戲 還要提醒你,1800萬幀已經很好了,前一個紀錄是Diributional DQN的7000萬禎,足足是 四倍 而原版的DQN即使訓練超過2億幀也達不到人類水平 RL要學好一個策略要花的樣本數通常都超乎你的想像 這個問題不是在Atari才存在,另一個有名的成功案例是MuJoCo,一個由MuJoCo模擬器所 定義的任務集 在這些任務中,輸入狀態通常是機器人各個關節的位置和速度,即使不用解決視覺的問題 (因為環境是模擬的) 這些任務也都要花10萬到1000萬步去學習,在這麼簡單的環境中這是非常驚人的量 DeepMind parkour paper出了以下的示範影片,策略是由64個worker訓練超過100個小時 所得到 paper中沒有明確說明worker代表什麼,但我假設是代表CPU https://www.youtube.com/watch?v=hx_bgoTF7bs
這些成果很酷,當它剛出來時我很驚訝DRL可以達到如此成果 但同時,它們需要6400個CPU小時是令人沮喪的,我並不是預期它們應該需要更少的時間 而是DRL的取樣效率還是比實用水平高了好幾個數量級 這裡有一個很明顯的反駁論點:如果我們忽略取樣效率的? 有很多的環境下樣本是非常好取得的,例如遊戲 但不幸地是,現實中的環境大多數不是如此 如果你只在乎最後的成果,多數問題都能夠用其他方法解決並得到更好的結果 當你在找某個研究問題的解決方案時,通常都要在幾個目標間做取捨 你可以找到一個很好的解決方法,抑或是貢獻出一些很好的研究成果 最好的研究問題是那些你既可以找到好的解決方案同時也能貢獻好的研究成果 但找到這種問題是很難的 當你只關心效能時,DRL通常沒那麼好,它常輸給其他的方法 下面是一個MuJoCo的機器人,使用online trajectory optimization控制 正確的動作是在近乎即時、線上且沒有離線訓練的情況下被計算出來的 而且是跑在2012年的硬體上 https://www.youtube.com/watch?v=uRVAX_sFT24
我想這些行為跟parkour paper比起來是很好的,這兩個有什麼不一樣? 不一樣的點在於Tassa等人用的是model predictive control,能對真實的模型做出 planning Model-free的RL沒有做這種planning,所以它難得多 另一方面,如果對模型做planning幫助如此之大,為什麼還要訓練一個華而不實的RL策略 呢? 類似於上個例子,你可以輕易地用現成的MCTS超越DQN,底下的數字來自Guo et al, NIPS 2014 他們比較了DQN與UCT的在Atari遊戲中取得的分數(UCT是現在MCTS的標準版本) 再一次強調,這個比較並不公平,因為DQN沒有做搜索,MCTS則對真實的模型做了搜索 不過有時候你並不關心公平與否,你只想要演算法能夠成功地運作 強化學習理論上可以在任何事情上運作,包含那些無法得知環境模型的情況 但是這種通用性是有代價的:你很難取得到對特定問題的學習有幫助的資訊,這使你必須 取得非常大量的樣本 經驗法則是:除了那些特定的案例,針對該領域本身的演算法都能夠做得比RL更快更好 如果你使用DRL是為了研究DRL本身,那這並不重要,但當我將RL與其它幾乎任何演算法比 較時都相當沮喪 我喜歡AlphaGO的其中一個理由是它毫無疑問的是DRL的成功,這種例子非常少見 這讓我很難與外行人解釋為什麼我的問題是困難且有趣的,因為他們通常沒有經驗去了解 DRL難在哪 人們想像DRL能做到的事與它們實際能做到的事之間有一道很大的落差 我現在這在研究機器人,想一下當人們提到機器人時會想到的第一間公司:Boston Dynamics https://www.youtube.com/watch?v=fRj34o4hN4I
很多人以為這是用RL達成,但並不是 如果你去看他們的paper,你會發現paper提到 time-varying LQR, QP solvers, optimization 換言之:傳統的機器人控制方法,當你正確使用這些方法時它們可以表現的很好 RL通常需要一個獎勵函數B RL假設獎勵函數存在,通常是被給定的,或者由人工設計並在訓練時固定 我說"通常"是因為有例外,如inverse RL,但大部分的RL方法都需要獎勵函數 為了讓RL正確地執行,獎勵函數需要精準地描述你的任務,請注意,是"精準地" RL有一個很惱人的傾向是overfit你的獎勵,導致那些你沒有預期的事情發生 這就是為什麼Atari是一個很好的參考案例,不只是因為它很容易取得很多樣本 也是因為在所有遊戲裡目標都是取得盡可能多的分數,所以你不需要擔心怎麼設計獎勵函 數 而且你知道所有人都有一樣的獎勵函數 這也是為什麼MuJoco的任務是在這個領域如此地流行 因為它們是在模擬環境中執行,你對於物體的狀態有完整的理解 這讓獎勵函數的設計簡單了很多 在"Reacher"任務中,要控制一個由兩部分組成的手臂,手臂連接到中央的點 此任務的目的是要移動手臂的端點到目標的位置,下面的影片是一個成功學習的策略 https://www.youtube.com/watch?v=BkhSKqc8vSA
因為所有的位置都是已知的,獎勵可以被定義為手臂端點的目標的距離,加上一些控制成 本的損失 原則上在真實世界中也可以這麼做,只要你有夠多的感測器能夠精準地測量環境中的位置 但是在某些系統中合理的獎勵是很難定義的 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 58.114.212.150 ※ 文章網址: https://www.ptt.cc/bbs/DataScience/M.1536942208.A.83D.html
sma1033: 唉唷不錯喔 09/15 05:37
sma1033: 這篇文章點到很多RL研究會碰到的問題,我覺得很值得看 09/15 05:38
st1009: 推推 如果方便的話,把內容貼到PTT上吧,ctrl+e可以編輯文 09/15 12:02
st1009: 章 09/15 12:02
※ 編輯: thefattiger (58.114.212.150), 09/17/2018 23:04:27 > -------------------------------------------------------------------------- < 作者: thefattiger (LawTea) 看板: DataScience 標題: Re: [心得] 文章翻譯:為何DRL還行不通? Part2 時間: Mon Sep 17 23:43:40 2018 Github好讀版 https://github.com/LilTwo/Article/issues/2 這是本系列第二部分,比想像中還多... 看來還需要再三篇才能翻完 獎勵函數的設計是很難的 只是要得到一個獎勵函數並不難 困難的點在於獎勵函數的設計要能獎勵那些你想要的行為,並且要是可學習 在HalfCheetah環境,你有一個兩隻腳的機器人,被限制在垂直平面 意味著它只能向前或向後移動 https://www.alexirpan.com/public/rl-hard/upright_half_cheetah.mp4 此環境的目標是學習如何跑步,獎勵是機器人的速度 這種獎勵是shaped reward,意思是當狀態離目標越近時,會得到越多的獎勵 這與sparse reward相反,sparse reward只有在達到目標時會給予獎勵,其餘狀態則沒有 任何獎勵 shaped reward通常好學很多,因為即使策略還沒有完全解決問題,它也會給出正面的回 饋 不幸地,shaped reward可以讓學習出現偏差,就如之前所說,這可能會導致你不想要的 行為出現 這篇部落格文章是一個好的例子 https://blog.openai.com/faulty-reward-functions/ 這是關於一個賽船遊戲,目標是要完成比賽 可以想像sparse reward只有完成比賽時會給予+1的獎勵,其他狀況則都給予0的獎勵 而下面影片中的採用的獎勵函數則是當到達檢查點以及拿到加速道具(可以讓你更快完成 比賽)時都會給予獎勵,但最後的結果是策略發現不斷地重新拿到加速道具可以獲得的獎 勵比完成比賽還多 https://www.youtube.com/watch?time_continue=27&v=tlOIHko8ySg
老實說,當這篇文章剛出來時我對它有點反感,並不是因為我覺得它講得不夠到位 而是我認為這個結果是非常顯而易見的,當你使用不適當的獎勵函數時RL當然會學到一些 怪事! 我感覺這篇部落格文有點小題大作了 後來我開始寫篇文章時,才發現這部影片是用來解釋不適當的獎勵函數時最有說服力的範 例 並且已經被用在許多說明此問題的主題上了,所以我只好承認那篇部落格文還是挺不錯的 部分RL演算法具有很多關於環境的知識 另一部分則對於環境沒有太多了解,例如RL中最廣的分支:model-free RL 這種RL幾乎等同於黑盒優化(black box optimization) 它們只知道自己身處一個MDP,完全沒有其他知識 agent只被告知做這些事情會得到+1的獎勵,做那些事情則無 而問題在於任何給予+1獎勵的事情都是好的,即使得到這些獎勵並不來自於正確的結果 一個經典的非RL例子為應用遺傳演算法來做電路設計,然後得到一個必須有未連結邏輯閘 的電路 https://www.alexirpan.com/public/rl-hard/circuit.png
要得到正確的行為,灰色的區塊是必須的,包括最左上角的那一個,即使它沒有連接到任 何東西 http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.50.9691&rep=rep1&type=pdf 一個比較近期的例子可以看這篇文章 https://www.salesforce.com/products/einstein/ai-research/tl-dr-reinforced-model-abstractive-summarization/ 他們的目標是自動摘要擷取,並且使用一個以SL方式訓練的模型做為比較基準 比較方式是藉由一個叫ROGUE的度量標準,ROUGE是不可微分的 但RL可以處理不可微分的獎勵函數,所以他們試著直接對ROUGE做優化 結果是RL得到了很高的ROGUE分數,但並沒有取得很好的摘要擷取結果 所以最後他們採取了另一種的模型 https://arxiv.org/abs/1705.04304 另一個例子是這篇paper,有時被稱為"Lego stacking paper" https://arxiv.org/abs/1704.03073 使用的的算法是分散式的DDPG,目標是把紅色積木抓起來疊到藍色積木上 他們成功地讓RL運作了,但也遇到的一些一致的失敗案例 在第一個抓取任務時,獎勵是以紅色積木的高度來決定,這是以紅色積木底層平面的z座 標來定義 https://www.youtube.com/watch?time_continue=27&v=8QnD8ZM0YCo
一個失敗的模式是策略學到將積木翻過來而不是把它抓起來,顯然這不是原本的目的,但 RL不管這個 從RL的角度來看,將積木翻過來可以得到獎勵,所以它就會這麼做 一個解決方法是將獎勵改成sparse reward,讓獎勵函數只有在積木成功疊起來時會給予 正的值 有時候可以這樣做,因為sparse reward是可以學習的 但更多的時候過少的正面回饋會讓訓練變得太難 另一個方法是更謹慎地定義獎勵函數,加入新的項或是修改現有的係數 直到RL學到的行為是你想要它學的 這樣的調整是可能讓RL變得更好的並且有時候是必要的,但是讓人不太滿意 在這些調整過程中我總是覺得學不到任何東西 為了給讀者參考,下面是Lego stacking paper的獎勵函數 https://www.alexirpan.com/public/rl-hard/lego_reward.png
我不知道他們花了多久時間來設計這個獎勵,但根據這些項以及係數的數量,我猜花了很 久 與RL研究者聊天時,我聽他們講過一些不適當的獎勵函數會造成的有趣怪行為 1.一個agent被訓練來探索一個房間,當agent走到房間的邊界時即結束episode 他對於episode的結束沒有加入任何懲罰機制,結果最後學到是一個自殺策略 因為負獎勵太多了,正的獎勵太難取得,所以agent傾向快速的自殺以取得0獎勵 2.一個機器手臂被訓練來碰到桌上的某個目標點,點的座標是根據桌子的相對位置定義的 而桌子沒有被固定住,結果手臂學到的策略是把桌子翻到,讓目標點也跟著桌子移動 桌子倒下來目標點也剛好在手臂端點的旁邊了 3.一個機器人被訓練來撿起一個槌子並把釘子槌進洞裡 一開始獎勵是被定義為訂子離洞還有多遠,結果機器人用它自己的肢體把釘子槌進去,而 不會使用槌子 所以他們加入一些獎勵鼓勵機器人撿起槌子,他們也得到一個會撿起槌子的策略 但是之後機器人朝著釘子丟出槌子而不是使用它 當然這些都是二手消息,我沒有看過關於這些例子的影片 但對我來說這些聽起來都是有可能的,我已經因為過於相信RL而失望很多次了 即使有了一個好的獎勵函數,也很容易陷入局部最佳 前面的幾個RL例子,有時也被稱為reward hacking(不合適的reward設計) 從我的觀點來看,這暗示了有一個聰明、跳脫框架的答案 這個答案相較於獎勵函數設計者所預期的行為可以取得更多的獎勵 比起reward hacking,更常見的例子是困在不夠好的局部最佳解 這來自於exploration-exploitation取捨錯誤 底下這個影片是我最喜歡用來說明這個現象的例子,他們採用了Normalized Advantage Function https://arxiv.org/abs/1603.00748 影片如下 https://www.alexirpan.com/public/rl-hard/upsidedown_half_cheetah.mp4 從旁觀者來看,這真的非常愚蠢,但這是因為我們第三者的位置來看,並且我們早就知道 用腳跑步是更好的,但RL並不知道! 它只看到一個狀態向量,給出一個動作項輛,然後得到一些正面的獎勵,僅此而已 底下是我對於訓練過程的猜測: 1.在隨機的探索過程中,策略發現向前倒下比站著更好 2.重複了多次的訓練過程後,1.的行為變成固定的 3.向前倒下之後,策略學習到如果施了一次很大的力,會讓agent做空翻,並得到更多獎 勵 4.重複了多次訓練過程後,3.的行為也變成固定的 4.一但空翻的動作變成固定之後,接下要策略要學習:在躺著的情況下把自己向右移動, 或是站起來後再用標準的動作向右走,顯然前者勝出了 這個現象非常好玩,但當然,並不是我們要的結果 底下是Reacher環境裡,另一個失敗的結果 https://www.alexirpan.com/public/rl-hard/failed_reacher.mp4 在這次的訓練中,初始的隨機權重傾向輸出一個較大的動作,這讓大部分的動作都輸出極 值 而要快速地旋轉是很簡單的,只要在每個關節中一直給予很大的力 一但機器人陷入這個情況,就很難再脫離了,要脫離必須要有足夠多的探索步驟來停止旋 轉 當然這是可能的,但在這個例子下並沒有 這些exploration-exploitation取捨問題已經困擾了RL的研究很久了 你的訓練資料來自於現有的策略,如果策略探索太多你會取得一堆沒用的資料 如果策略利用太多則會讓你陷入一個非最佳的策略 有一些直覺上的方法可以一定程度地解決這個問題: intrinsic motivation, curiosity-driven exploration, count-based exploration等等 這些方法很多是在1980年代以前就被提出來,最近又隨著深度網路的出現被重新提起 不過就我所知,沒有一個方法能在所有環境中都有效地發揮作用 最好還是有一個exploration-exploitation策略在所用環境都能順利作用 但我想這種策略短時間內還不太可能被發現 不是因為人們沒有在嘗試,而是exploration-exploitation真的、真的、真的很難 底下引用一段維基的話: Originally considered by Allied scientists in World War II, it proved so intractable that, according to Peter Whittle, the problem was proposed to be dropped over Germany so that German scientists could also waste their time on it. 我現在將DRL想像為一個故意誤解你的獎勵函數,並且積極地往最懶惰的局部最佳搜尋的 惡魔 這聽起來很荒謬,但我也發現它實際上是講究效率的