DQN是學習歸納出了策略,還是僅僅是"memorize"了大量的episodes?
從統計來的模型本來就可以理解為一種加了泛化能力的信息壓縮,deep learning方法尤其如此,無論人臉識別語音識別還是dqn。
如果這種泛化能力是零,那就是純記憶。但是實際上不會這麼慘,deep的各種結構設計就是在通過結構提現先驗規則,保證泛化能力。
其實即使不deep,難道就不是在記憶嗎,難道非參方法不也是記住所有樣本,然後加先驗泛化嗎?個人覺得是memorize加在explore過的區域附近的泛化吧。在沒有explore過的地方再deep再牛逼的演算法也不大可能泛化。用個supervised learning的例子,你要擬合y=x1*x2,假如你的training data的 input是在0到10之間,你的neural network再厲害也不大可能預測到1000*1000是多少。
這個問題需要一個量化的解答。像在supervised learning會做k-fold交叉驗證,但是由於增強學習採樣的不均勻性太強簡單的k-fold是行不通的,要考慮一些改進。
很明顯,只是記憶了狀態到行動的映射,只不過因為用到的統計方法,具有一定泛化能力。總的來說,還完全處於「憑感覺做決定」的階段,要想處理需要複雜決策的任務,model based rl是必經之路。
記憶是一定的,但是這種記憶方式和直接的記錄不同,他刻畫了樣本邊界,也就有泛化能力和一定程度的穩定性
想要回答這個問題,就得追究什麼才稱得上「策略」?什麼是「學習、歸納」?學習歸納和「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,來更好泛化。
寫代碼的時候給錯過標籤,然後死活不收斂,改回來就收斂了,所以你說呢?
推薦閱讀:
※請問在強化學習的Qlearning中,如果狀態-動作很多的話,該如何處理?
※有研究強化學習方向的大神嘛?關於multi-agent和inverse RL兩個方向哪個比較好
※強化學習中on-policy 與off-policy有什麼區別?
※周志華老師《機器學習》圖16.13 Q-Learning 演算法是否有問題?
※CS294 深度增強學習 這門課的質量是不是不大好?