dqn系列梳理_DQN是学习归纳出了策略,还是仅仅是memorize了大量的episodes?
想要回答這個問題,就得追究什么才稱得上“策略”?什么是“學習、歸納”?學習歸納和“memorize”又有什么不同?
現在的我大概沒辦法直接回答這些問題。但我可以分享一點我對于DQN的理解,尤其是,比較以前的RL算法,DQN想要解決什么問題。
一言以蔽之: DQN exploits correlations between states.
還記得GridWorld么?假設有一個agent在3x3格子間行走,有時能得到獎勵。用RL的角度來看,每個格子都是一個獨立的state,運用最簡單的Q Learning,我們可以學習每個格子的Value。假設這個小地圖里,只有一格是有獎勵10的。訓練一個agent學習這份地圖,需要用Q Learning來把這個獎勵訊號傳達給之前的state(credit assignment)。
如果我們給每個格子隨意編號,那么Q learning的過程可能看上去就是:到達格子0!獎勵10!好棒!再來一局!走,走,走,……到達格子1875!馬上要到格子0要拿獎勵了我好雞凍,加分加分!這樣,我們就把格子0處的獎勵訊號傳達給了之前的格子1875。最后,所有可能達到格子0的格子們都得到了一點加分,如果我們循著這個加分路徑走下去,就能到達格子0。這條路徑,簡單來說,就是agent學習到的策略。
運用這樣一個算法,我們可以discretize(離散化)很多可能的狀態,比如,假設有100x100像素的畫面,每個像素可能是黑(0)或者白(1),那么通過離散化,我們可以得到2^(100x100)=2^10000個狀態。接著,我們可以運用Q learning來explore獎勵訊號,并且把它credit assign到我們拿到獎勵的路徑上。
但這樣做是有很大問題的。因為在agent的一局探索中,每一個格子/狀態,只能把值傳遞給其最近的格子/狀態。即使是在簡單的10x10grid world上,agent也需要不斷地探索、重啟,才能把credit assign到之前的路徑。推薦使用Stanford ReinforceJS 來visualize這個過程。當格子/狀態的數量太多,所需要的訓練時間也太多。
造成這個問題的原因是:我們arbitrary地將狀態離散化了,我們忽略了states之間的關聯。試想,假設我們用RL做自動駕駛。狀態是6x10的像素圖片,紅燈是圖像中間的一片1。現在agent剛剛得到一個經驗,在以下狀態(紅燈),開車前行,會被懲罰。
0000000000
0000000000
0001110000
0000000000
0000000000
0000000000
那么我們希望,在相似的狀態中(簡單例子如下圖),agent應該也能意識到,開車前行,會被懲罰。
0000000000
0000000000
0000111000
0000000000
0000000000
0000000000
如果我們使用了簡單的Q Learning和離散化,那么上下兩個狀態完全不相關。想要得到這樣的泛化能力,只有agent不斷嘗試、探索,直到它遇到這個新狀態,被懲罰,才會得到教訓。而使用Deep Learning架構,我們可以從raw state中抽取representation信息。比如在這個例子中,一個訓練得當的DQN應該可以讀入狀態1,輸出(1,0,0,……)。即使沒見過狀態2,神經網也應該能輸出類似(0.8, 0.1,……)。某種意義上說,它能發現到上下兩個狀態的關聯。因此,即使我們還沒有到達過后面的狀態,神經網絡可以從一個見過的,類似的狀態中generalize(泛化),給出一個稍微好一些的q estimation。
引入DQN的泛化能力,但也造成了一些的問題。比如,如果agent update gradient時光顧著自己上次一回的經歷,有可能會造成agent bias towards explored states。因此有了experience replay。
另外,最近一些Deep RL的research專注于研究如何抽取很好的state representation。如何做到?簡單來說,就是使神經網絡抽取的representation可以被用來做些其他的活計(auxiliary task)。總的來說,這些研究都是希望神經網絡可以從一個狀態中抽取好的representation,來更好泛化。
總結
以上是生活随笔為你收集整理的dqn系列梳理_DQN是学习归纳出了策略,还是仅仅是memorize了大量的episodes?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ KMP算法完整实现
- 下一篇: h5点击后字体加粗出现下边框_人力资源管