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