(六)深度Q网络
??前言:深度Q網絡,又叫DQN
??傳統的強化學習中存儲狀態價值或者Q函數都是使用的表格(比如之前的Q表格),學名叫查找表(lookup table)。這個有什么問題嗎?一個大問題就是只有離散情況(可窮盡)能夠被存在于表格中。對于==連續的狀態空間怎么辦呢?==最氣人的就是,現實中還總是連續的狀態空間。這個時候就不能夠用表格對價值函數進行存儲。這時候需要價值函數近似來解決這個問題。
??價值函數近似(value function approximation):為了在連續的狀態和動作空間中計算Q函數,使用另一個函數來金希表示,成為價值函數近似。
??這個價值函數近似有多種形式,其中一種我們比較關注的就是用神經網絡來表示。它的輸出會是一個實數,稱這個神經網絡為Q網絡(Q-network)。深度Q網絡指的就是這個神經網絡用到了深度學習的相關內容,是基于深度學習的Q學習算法。
??DQN本身是基于價值的方法,在這兒回顧一下兩種價值函數:狀態價值函數和動作價值函數。
??對于狀態價值函數來講,它是直接對策略進行更新。它本身就像一個評論家一樣(后面會再次出現這樣的說法),對同一個狀態經過不同策略后的價值進行判斷,選擇價值高的對應的策略進行更新。具體實現的時候兩種形式:MC和TD
??從MC+網絡介紹state-value function
??如果使用網絡化的角度看待,把這個策略計算價值函數認定為一個網絡,輸入是狀態,輸出是狀態的價值。對于MC來說,可以獲取真實軌跡值,設為G(a)。而網絡會有一個輸出,二者指向的東西相同,但因為網絡的原因有一定差值。那么只要改進網絡讓輸出向G靠齊就可以了,這個問題逐漸變成了一個采樣回歸訓練參數的問題了。
??不過回想一下,為什么這個可以抽象為一個回歸問題?原因在于MC的特殊性,有了一個真實G,這就相當于一個標簽,可以反向讓網絡進行訓練,類似于監督學習。
??從TD+網絡介紹state-value function
??從之前對于TD的了解中知道,TD只發生在兩個連續狀態之間,它的迭代關系滿足下面的等式:
??現在已經把V當成一個網絡去看待了,那怎么去訓練這個網絡呢?采用的是這樣的方法:根據上面那個式子做一下變形,讓兩個V做差,理論上應該等于單步的獎勵。狀態s(t)和s(t+1)已知,帶入網絡中會得到兩個V值,做減法會得到一個數,這個數會逼近r。并且可以通過訓練達到這個目的,這就類似于監督學習的網絡訓練了。
??那一個問題就是:TD和MC有什么區別嗎?
&?emsp;其實MC最大的一個問題就是方差比較大,因為游戲本身也有隨機性,同樣是s(a)最后的G(a)還可能不同,或者換種思路解釋就是G因為是總回報,因為隨機性后面的軌跡不一定相同,自然回報也就差距比較大。相比下TD單步,差距就會小很多。但TD也有自己的缺點,TD的V是通過網絡計算的,這本身就是估計值,網絡不好的時候估計值的誤差也會比較大。
??有個例子,在李宏毅老師的課程上就講了。當時第一遍沒聽懂,現在復盤后才明白。這個例子說明了對于同一個問題,MC和TD估計出的結果可能不一樣。
??有8個回合,有狀態變化和獎勵給出。
??對于s(b)來說,8個回合都有,其中有6個回合有獎勵,所以它的獎勵期望就是6/8=3/4。
&?emsp;現在的問題是s(a)的期望是多少呢?
??先用MC來算,最后均值統計,就是0/8=0
??再用TD來算,S(a)和S(b)之間有狀態切換,用TD算時會有下面這個等式成立:
??有兩個數據已知V(s(b))之前算的3/4,狀態切換時獎勵為0,所以S(a)的期望應該是3/4。最終的結果就不一樣了。當然從各自的角度出發,計算都是正確的。只是兩種方法對于狀態的看待標準不同,MC看到S(a)變成S(b)的那條軌跡時,看到r為0。這條軌跡會認為S(b)的期望也為0。其實后面還有很多組軌跡。所以不同的方法做了不同的假設,運算結果也會不同。
動作價值函數也是一樣的啦。因為后面還會介紹到DQN,那里也涉及Q函數,再此就不再贅述了。
??在DQN中有三個技巧會被用到,下面來簡單介紹一下目標網絡、探索、經驗回放
??1)目標網絡
??看到這個名詞,應該有兩個問題:
???? (1)啥是目標網絡?
???? (2)目標網絡可以干啥?
??Q函數,了解到有下面這個等式成立:
??這個看上去和價值狀態的TD+網絡的單步更新很像,這里只是換成了Q函數。不過換湯不換藥,訓練的目的還是讓差值盡可能接近r。等式左邊是輸出,右邊是目標。要清晰的意識到只有一個模型,只不過是兩組輸入。對于一個模型來說,左右都發生變動(Q值重新計算),特別是模型目標在變,這樣的模型不好訓練。
??一種思路是把其中一個網絡固定住(通常是右邊的),訓練時只更新左邊Q網絡的參數。因為保持右邊的目標不動,所以被稱為目標網絡。右邊的目標網絡不動,只調整左邊的參數,就變成了一個回歸問題。
??不過通常實現的時候還是會偶爾更新下右邊的網絡,這樣精度會高。不過右邊的網絡更新頻率遠遠小于左邊,而且兩邊不可以同時進行更新。并且每次目標網絡變了之后都需要進行整體的重新訓練。整體計算流程圖如下:
??2)探索
??其實之前已經介紹過探索了。使用Q函數時,執行的動作完全取決于Q函數。那么如果Q函數不夠好的話,就會比較被動。這個時候更激進一點兒選擇一些新策略反而可能效果更好。如果沒有好的探索的話,智能體就會按照之前的Q函數選擇動作。舉個貪吃蛇的例子,如果蛇向上運動時得分。沒有探索的情況下,貪吃蛇就會認定向上走就會得分。那么最后的效果就是不停向上去,最后撞壁。所以需要有探索的機制,雖然之前的策略,動作a好像不錯,但也嘗試一下新策略。要在探索和利用之間找到平衡,也就是探索-利用窘境(exploration-exploration dilemma)
??探索的常見方法有兩個:
??(1)ε-貪心
??(2)玻爾茲曼探索(Boltzmann exploration)
??ε-貪心之前已經介紹過了,這里主要介紹一下后者。其實這個思路就是嘗試一些Q值比較差的動作。策略梯度中,網絡的輸出是一個概率分布,然后根據概率分布去做采樣。也可以從Q值去定義一個概率分布,可能Q值有正有負,不過可以概率化再歸一化。概率的計算是下面這個等式:
??再詳細一點兒的東西,我也不了解了。如果后續有需要的話會再來補充的哈
??3)經驗回放
??當智能體去和環境按照某種策略做交互時會產生數據,把這種數據保存下來是有價值的。經驗回放就是構建一個回放緩沖區(又叫回放內存)。它最重要的一點是會保存不同策略的數據。而且只有在裝滿的時候會扔掉一些舊數據。??一般情況下回放緩沖區內存儲的會有多種策略的數據。
??那現在有一個問題是:有了數據緩沖區后,如何訓練Q的模型/怎么估計Q函數呢?
&?emsp;其實整個流程和神經網絡的訓練很像了,從緩沖區里取數據,可能是一個batch。利用經驗來更新Q函數:
??而且當這么做的時候,就變成了一個異策略的做法。因為本來是想找Π的,但是數據中還有其他策略的。利用其他策略更新當前策略符合異策略的思想。
??把數據保存有什么優點呢?
??其實RL的DQN中,最花時間的步驟是和環境做互動。訓練網絡反而很快。利用存儲區就可以減少和環境互動的次數,加快訓練次數。
??還可能有的人會有問題:要觀察策略A的值,其中混雜了策略B的值會不會有問題?
&?emsp;其實沒關系的,存儲區存儲的只是經驗(一小段),而不是軌跡。不會產生影響(解釋的可能不透徹,但目前還沒找到好的說法~)
??說了這么多,終于可以介紹我們的主角——DQN
??其實把前面所有的東西串起來就組成了DQN,初始化兩個網絡Q(其中一個是目標網絡),智能體和環境做互動。由Q函數決定每次的動作,但不絕對,還要包含探索機制(以上介紹的兩種探索方法)。每收到一筆數據都放到數據緩存中,根據數據去算目標(目標網絡來算):
??讓y和Q盡可能接近,就是回歸問題。偶爾用Q更新下目標網絡Q bar。整體的算法流程圖如下:
??講了DQN,講了Q學習,有什么不同呢?
??完結,撒花~ 哦原來還有課后題:
??因為第八章的內容不多,而且直接相關。所以就統一寫在后面了,第八章的題目是:針對連續動作的深度Q網絡。
??上面討論的主要是針對連續狀態空間,但一旦狀態確定,生成的動作還是離散的。那為什么連續動作難以求解呢? 回想下之前的動作是如何確定的:
??在DQN中,當估計出一個Q函數后,要尋找到一個a讓Q(s,a)最大,對于a的處理是按照下面這個等式完成的:
??對于這個式子,如果a是離散的,那么就可以窮舉。哪怕多,只是花時間就可以解決。但如果a是連續的,那就代表有無窮多動作。所以,在連續動作情況下不能使用這個等式來求解a。
??那如何用DQN解決連續動作呢? 書中提出了四個方案:
??方案一:采樣
??雖然a有無窮多個,但可以采樣部分數據。然后以這組數據來代替整體的a
??方案二:迭代梯度上升
??把a作為參數,把最大化Q函數變成一個優化問題,不斷迭代得到結果。不過這種方法未必能找到真正的最大值,可能陷入局部最優。而且迅速量也會很大。
??方案三:設計網絡
??這種方案的思想在于修改網絡結構,特別設計Q函數來使得解argmax問題變容易。網絡結構圖如下:
??這個網絡結構,使狀態s經過網絡的輸出變成了三部分。并且用新的表達式來表示Q(s,a):
??按照等式如果想最大化Q,那么前一個項絕對值應該盡可能小(因為正定性,前面一項是負的)。最極端的情況就是a等于μ(s)。所以如果知道了μ(s)那么就可以確定最優的a了。
??方案四:不使用DQN
??這種方法有點兒無賴的嫌疑了,但確實很聰明。既然DQN處理連續動作麻煩。就不用DQN了,那用什么呢?將基于策略的方法PPO和基于價值的方法DQN結合在一起就形成演員-評論員方法:
??這一章也有一些習題:
因作者水平有限,如有錯誤之處,請在下方評論區指正,謝謝!
總結
- 上一篇: ubuntu系统debootstrap的
- 下一篇: 纯干货:Linux抓包命令集锦(tcpd