從老虎機講起,從頭開始深度強化學習
本文筆者將對深度RL領域的各個核心部分做出一個任何人都可以讀懂的概述,對深度RL主要使用的許多算法的一個全面總結。
最近,我在北京的O’Reilly AI大會上做了一個演講,是關于我們在NLP世界里學到的一些有趣的經驗。當時,我很幸運地參加了Unity Technologies舉辦的關于“從頭開始深度強化學習”的課程。我覺得這個由Arthur Juliani主講的課程,干貨極多,下面我把主要內容分享出來。
在與各公司的交流中,我們發現有趣的深度RL應用、工具和成果在增多。同時,深度RL的運作機制和應用,比如下圖所示的AlphaGo,通常深奧而晦澀。
一部關于深度DL最著名應用之一的紀錄片
在本文中,我將對此領域的各個核心部分做出一個任何人都可以讀懂的概述。
很多圖片都是來自那個演講的幻燈片,也有新的。所有的解釋和觀點都是我自己的。有任何不清楚的,可以通過這里聯系我。
深度強化學習的興起
人們對深度RL領域有著極大的研究興趣,例如:學習玩Atari游戲,擊敗Dota 2職業選手,戰勝圍棋冠軍。傳統的深度學習側重于識別(這張圖片里有“停車”標志嗎?),與之相反,深度RL增加了影響環境的動作的維度(目標是什么?我如何達成?)。
例如:在對話系統中,傳統的深度學習關心的是對給出的問題如何學到正確的回答。但是,深度強化學習則著眼于一系列正確的語句,并從中得到一個積極的結果,比如,一個滿意的客戶。
這使得深度RL對于那些需要計劃和應變的行業,如制造業或自動駕駛,格外有吸引力。
然而,行業應用落后于飛速發展的技術研究成果。一個主要原因是深度RL通常需要一個代理進行無數次摸索后,才能學到有用的東西,速成的辦法是使用模擬環境。這個教程使用Unity來建立一個訓練代理的環境。
這個由Arthur Juliani和Leon Chen主持的研習會,其目標是讓每個一學員在4小時內成功訓練多個深度DL算法。這簡直是天方夜譚!
以下是對深度RL主要使用的許多算法的一個全面總結。
從老虎機到電子游戲:RL綜述
深度RL能用來擊敗人類圍棋頂尖高手。但要想知道如果實現的,你必須先從簡單問題入手,掌握幾個基本概念。
1. 一切始自老虎機
第一個游戲問題:我們知道哪個箱子里最有可能有獎品嗎?
假設每一輪你有4個箱子可選,每個箱子都有不同平均回報,你的目標是在給定的輪數后,拿到的回報總金額最高——這是一個經典的游戲,名叫“多臂賭博機”。我們從這個游戲開始研究,這個游戲的難點在于平衡探索和獲利,探索讓我們知道哪種情形才是好的,獲利是探索到的知識去選擇最好的老虎機。
這里,我們要使用一個值函數來映射我們的動作與預期的獎品,這個函數叫Q函數。
首先,我們把所有Q值初始化為相等值。然后,我們每做一個動作(選取一個箱子),根據這個動作導致的回報的好壞,更新這個動作對應的Q值。這樣,我們就能得到一個好的值函數。我們用一個能學習到4個候選箱子的概率分布(使用softmax)的神經網絡(從一個非常淺的開始)來逼近Q函數。
值函數能讓我們評估我們動作的好壞,而策略決定了我們最終采取哪個動作。
憑直覺,我們會使用能選擇出Q值最高的動作的策略。在實際應用中,這種做法表現很差,因為在我們通過試錯取得足夠經驗之前,起初所預估的Q值都是很不靠譜的。這促使我們在策略中加進一種機制,以增加探索的成分。
方法之一是使用?貪心算法,它是由隨機選取一個具有?概率的動作構成。開始時,總是隨機選擇動作,讓?接近1,然后逐步降低?,并進一步了解哪些箱子是好的。最終,我們確定出最好的箱子。
在實踐中,相比要么選擇一個我們認為最好的動作,要么隨機選一個動作,我們應該需要一個更巧妙的辦法。一個廣泛采用的方法叫Boltzmann Exploration,它是通過加入隨機因子來調整基于我們當前對于箱子好壞的預估的概率。
2. 增加不同的狀態
這里,不同的背景顏色代表不同的平均箱內獎勵。
前面的例子僅描述了一種情形——即我們總是從面前的4個箱子中進行選取,而在現實中,是有多種情形的。
下面,我們把這種情況加入到我們的環境中來。
現在,每一輪中,箱子的背景色在3種顏色中交替顯示,表示箱子不同的平均值。這意味著,我們所學習的Q函數,不僅取決于動作(我們所選的箱子),還取決于具體狀態(什么樣的背景色)。這種類型的游戲叫作上下文多臂賭博機。
很奇怪,我們仍然能用前述的方法。只要在神經網絡中加多一個稠密層,用來輸入當前狀態的矢量就行了。
3. 了解動作的后續結果
這里,我們是藍色方塊,嘗試學習如何到達綠色方塊,而不碰到紅色方塊。
有一個關鍵因素使得我們的游戲比大多數都簡單,在大部分環境中,比如上面那個迷宮,我們采取的行動對狀態世界是有影響的。我們向上移動一格,可能得到獎勵,也可能得不到,但是下一輪,我們將處于不同的狀態。這就是為什么我們要引入“計劃”。
首先,我們把Q函數定義為我們當前狀態的即時獎勵,加上我們做完所有動作后所期望的折扣獎勵。如果我們的Q函數對狀態的預測準確的話,這種方法是管用的。那么,我們怎樣做出準確的預測呢?
我們用一個叫時序差分(TD)學習的方法來生成一個好的Q函數。其要點是只看未來的有限步驟,例如:TD(1)只用后續的兩個狀態來評估獎勵。
很奇怪,我們可以用TD(0),只看當前狀態,預測下一輪的獎勵,效果很不錯。網絡結構是一樣的,但是我們需要進到下一步才能發現錯誤。接著,我們用這個錯誤來反向傳播梯度,就像傳統的深度學習那樣,然后更新預測值。
3+. Monte Carlo介紹
Monte Carlo預測是另一個用來預測我們的動作是否成功的方法。它的原理是用當前策略把所有步驟走完(在上圖中,成功到達綠色方塊或者因碰到紅色方塊而以失敗告終),并用結果來更新每一個經過的狀態的預測值。這樣我們可以在全部步驟完成后一次性傳播預測值,而不用每步都做。代價是在預測值中引入了噪聲,因為獎勵的路徑太長。
4. 很少離散的世界
前面講的方法都是先把有限數量的狀態和行動進行映射,然后用神經網絡來逼近預測值。
在那個迷宮例子中,一共有49個狀態(方塊)和4個行動(相鄰的4個移動方向)。在本圖的情形中,我們嘗試學習如何讓一個球在一個二維托盤中保持平衡,每一時刻我們都要決定托盤是要朝左還是朝右傾斜。這里,狀態空間變成連續的了(托盤的角度,球的位置)。好消息是,我們還是可以用神經網絡進行函數逼近!
關于策略無關(off-policy)和策略相關(on-policy)學習的提醒:我們先前用的是策略無關方法,即我們可以用任何方式來生成數據(比方說?貪心算法),并從中學習。而策略相關方法,只能從由策略產生的行動中去學習(記住,策略是我們用來決定如何行動的方法)。這會限制學習過程,因為策略中必須嵌入探索方法,但是也使得結果與推理相關聯,令學習效率更高。
我們要采用的方法叫“策略梯度”,是策略相關的。先前,我們就每一個狀態的每一個動作學習到了值函數Q,并在此基礎上生成了策略。
在香草梯度策略中,我們仍舊使用Monte Carlo預測,但是我們使用損失函數增加選取到能獲獎的行動的概率,然后直接從損失函數中學習策略。因為我們是依賴策略來學習的,所以不能用類似?貪心算法(其包含隨機選擇)那樣的方法來使代理探索整個環境。我們用來強化探索的方法叫熵正則化,它能增加概率預測的寬度,從而在探索空間時采用更冒險的做法。
4+. 利用深度學習進行表達
在實踐中,許多最新型的RL模型要求學習一個策略和若干預測值。用深度學習的方法來實現的話,是讓兩者成為從同一個主干神經網絡產生的兩組分離的結果,這樣做更易于讓神經網絡學習到好的表達方式。
可用的方法之一是Advantage Actor Critic(A2C)。 我們直接用策略梯度(上面定義的)來學習策略,同時用一種叫Advantage的東西學習值函數。我們不是基于獎勵來更新值函數的,而是基于“優勢(advantage)”。所謂“優勢”,是指跟用舊的值函數的預測結果相比,一個動作變得更好或更壞的度量。這使學習的效果的穩定性優于簡單Q學習和“香草策略梯度”。
5. 從屏幕中直接學習
模型的輸入就是上面圖片的像素!
對于這些方法來說,使用深度學習還有一個優勢,那就是深度神經網絡在感知類任務中表現優秀。一個人在玩游戲時,他接收到的信息并不是一連串狀態,而是一幅圖像(通常是屏幕、棋盤或者周圍環境)。
基于圖像的學習綜合了卷積神經網絡(CNN)和RL。在本場景中,我們輸入原始圖像而不是特征,并在架構中加入一個2層CNN,其它都不用改。我們甚至可以檢查一下激活函數,看看網絡識別到了什么,它是如何確定值和策略的。
在下面的例子中,我們可以看到網絡用當前的得分和遠處的障礙建立當前的狀態值,同時根據附近的障礙決定如何行動,很利索!
檢查CNN的激活函數,看看對于值預測(左)和策略預測(右),哪些是重要因素?
順便提一句,我隨手玩了一下現成的代碼,發現圖像學習對于超參數特別敏感。比如:稍微改變一下折扣率,即使是一個玩具應用,神經網絡也無法學習了。這個問題是大家都知道的,但親身體驗一下也蠻有意思的。
6. 微妙動作
到目前為止,我們已經嘗試過了狀態空間是連續和離散的兩種場景。
然而,我們探討的所有這些場景的動作空間都是離散的:向四個方向之一進行移動,或者向左向右傾斜托盤。理論上,類似自動駕駛等應用,我們需要學習連續的動作,比如在0-360度之間轉動方向盤。在這種叫“3D球世界”的場景里,我們可以沿著托盤的每一個軸傾斜任意角度。這給了我們執行動作更多的控制,但也使動作空間大了很多。
為解決這個問題,我們通過高斯分布來逼近可能的選擇。我們學習到高斯分布的均值和方差之后,就可以學習所有可能動作的概率分布,以及我們從這個分布中抽樣出來的策略。原理很簡單。
7. 勇敢者的下一步
因為一些概念的缺失,使得上面講的算法稱不上最好的。讓人覺得有意思的是,在概念上,最優秀的機器人和游戲算法與我們討論的那些相隔并不遙遠。
并行:A3C是最廣泛使用的方法。它在actor critic中加入一個異步步驟,允許算法并行運行,使得解決一些有趣問題所花費的時間處于可接受范圍。進化式算法的并行能力更強,其性能令人鼓舞。
課程式學習:在很多情況下,幾乎不可能在隨機動作中獲得獎勵。由于學不到有用的東西,讓探索階段很難搞。在這種情況下,我們可以簡化問題,先解決容易的,再用基本模型對付越來越復雜的場景。
記憶:例如用LSTM,我們能記住過去發生的事情,并在游戲進程中一步步做出決策。
基于模型的RL:在算法進行學習時,有多種方法可以建立一個世界模型。因此,它們可以基于運作簡單而又回報很高的動作,推測出世界運行的規則。AlphaZero包括一個非常清晰的含有計劃的模型,這篇論文讓我覺得十分振奮。
總結就到這里,我希望內容是充實、有趣的!
本文為 AI 研習社編譯的技術博客,原標題 :Reinforcement Learning from scratch
作者:Emmanuel Ameisen
翻譯:AI小山
原文鏈接:https://blog.insightdatascience.com/reinforcement-learning-from-scratch-819b65f074d8
本文來源于人人都是產品經理合作媒體 @雷鋒網,翻譯@AI小山
題圖來自Unsplash,基于CC0協議。
- 目前還沒評論,等你發揮!