來源:知乎問答
https://www.zhihu.com/question/277325426
文章僅作學術分享,著作權歸屬原作者,如涉侵權請聯繫刪除!
什麼名字可以吸粉(阿里巴巴 算法工程師)
回答:
做了近兩年的RL,提供一個漸進式的學術和項目的學習路線,以及學習工具 :)
Summary: 1-10是基礎知識,11是用於學習和實踐的開源項目,12-15是RL裡學術topic。
1. 區分強化學習/有監督學習/無監督學習
- 這是三種不同的訓練方式,核心區別在於loss的設計。
- 三者可用於同一 task,就像錘子和砍刀都可以用於砸釘子。
- task 選用哪一種工具,取決於獲取 loss 所需數據的性價比。比如風格轉移,使用Discriminator 判斷 sample 是否屬於目標域,顯然優於一一標記數據集後進行有監督學習。
2. 區分 Return(s,a) 和 reward(s,a)
- reward(s,a) 是 environment 在狀態s下,對行為a的單步獎勵值。
- Return(s,a) 是 在狀態s下,對往後n步的獎勵值的組合。
-- n {0, 1, .... }
-- 組合方式常用discounting, 詳見 Sutton 書 3.3章。
3. 區分 Return,Q , V (value)和A(Advantage)
- Q(s,a) == Return(s,a)
-
-
-- 用A值更新policy會更穩定
4. 區分 policy 和 Q/V/A
- 在狀態 s 下,policy 選出用於與環境交互的行為 a。
- policy 選擇行為 a 的依據是 Q(s,a) / V(s') ( 在狀態 s 下執行 a 後轉移到狀態 s')
--- policy 1: argmax(Q(s,a))
--- policy 2: sample from distribution
- Q(s,a) / A(s,a) / V(s') 的更新依賴於policy
5. 區分MC, DP, n-steps TD, GAE
-- DP 是已知 s,a->s'的狀態轉移概率,直接計算被估計值
-- MC 和 TD 都是通過採樣估計值
-- MC 估計的樣本全部來自採樣,n-step TD 估計在第n步時使用估計值(有偏)
-- GAE 是對 n-steps TD 估計 Advantage值 的優化,將不同n值的TD 估計以decay的方式糅合在一起
6. 區分 policy-based 和 value-based
- 上述 policy 1 中的policy是固定的,因此為 value-based。
- 上述 policy 2 需要更新policy的分布,因此為 policy-based。
7. 區分離散和連續
- 理論上,在確定的 policy 下( eg, max ),可採樣估計出所有的 Q/V, eg, Q-learning
--- 離散 environments: grid world (github上很多,後續我也會開源一個 : )
- 實際上,當狀態空間連續(eg, Atari),或狀態和行為空間均連續(eg, Mujoco)時,估計所有 Q/V成本過高,無法實現,因此引入DNN進行近似(DQN, DDPG)
--- 連續 environments: open AI gym
8. 區分online和offline
- online是線上訓練,即便使用模型,邊訓練模型。
- offline是線下訓練,即使用訓練好的模型。
9. on-policy和off-police
- on-policy指,計算Return時所採用的sample,均由policy採樣所得。
- off-police指,計算Return時所採用的sample,並非由policy採樣所得。
- 對比Q-learning(off-police)和SARSA(on-policy)可以更直觀地看出二者的差異。
10. 區分 model-free 和 model-based
- 此處 model 指 environment。
- 顯然,上述所有內容,均將environment視為黑盒,故為 model-free - 易得,學習 environment (比如 s,a 到 s' 的轉移規則)的算法屬於 model-based。
11. OpenAI baseline
- 掌握了1-9的基礎知識後,就可以逐個學習baseline裡的算法啦~
- RL的基礎算法均有被baseline實現,可以邊看paper邊看code,有利於更快地掌握~
- 以後我會補充上baseline的代碼解讀~
12. 理解 exploration
重要,待補充
13. 理解 tradeoff variance and bias
重要,待補充
14. 理解 POMDP
見:花瀟:POMDP 基礎及其在 Crowd 場景中應用
15. 理解 multi-agents
重要,待補充
半情調(中國科學院大學 計算機技術碩士)回答:
以前整理過強化學習的資料,後來找不到文檔了,這次重新整理一下,可能不如以前完整了,後續想到再補充吧,也歡迎評論區補充。1.莫煩
莫煩的視頻通俗易懂,深入淺出,沒有複雜的公式推導,有小demo入門,代碼講解的比較清晰。如果英文不好編程能力不強的話,莫煩的視頻入門真的真的很適合。
莫煩
Python
2.David Silver強化學習視頻
這個課一定要認真仔細看,做好筆記,最好是有強化學習基礎知識,要不然很多地方聽不太懂。我之前聽過計算所前瞻實驗室的強化學習課程,就是參考這個視頻講的,這個視頻被大多數老師和研究生們認可,算是比較權威了感覺。
這門課的中文筆記,在強化學習知識大講堂專欄中有葉強的文章,筆記寫的比較好。
【強化學習】Reinforcement Learning Course by David Silver_嗶哩嗶哩 (゜-゜)つロ 乾杯~-bilibili
3.伯克利大學CS 294深度強化學習
這個深度強化學習的視頻,在B站上有中文字幕了,還記得我研一看的時候,沒有中文字幕,因為英語不太好,理解起來就比較難。筆記在網上搜就可以了。
【獨家】【中字】2018 年秋季伯克利大學CS 294-112 《深度強化學習課程》 @雷鋒字幕組譯製_嗶哩嗶哩 (゜-゜)つロ 乾杯~-bilibili
4.臺灣大學李宏毅深度強化學習課程
李宏毅的課講的還不錯,就是有點口音,聽不大習慣。哈哈,聽兩節就適應了。
李宏毅深度強化學習(國語)課程(2018)_嗶哩嗶哩 (゜-゜)つロ 乾杯~-bilibili
5.斯坦福課程CS234
這個我沒看過,也是強化學習的視頻,就放在這裡了。
斯坦福課程:強化學習(2019) by Emma Brunskill_嗶哩嗶哩 (゜-゜)つロ 乾杯~-bilibili
除此之外,還可以去清華、中科院等大學或者研究所裡蹭課,自己老師當面講的,比較好理解,還能互動。
1.OpenAI Gym
目前強化學習編程實戰常用的環境就是OpenAI的gym庫了,支持Python語言編程。OpenAI Gym是一款用於研發和比較強化學習算法的工具包,它支持訓練智能體(agent)做任何事——從行走到玩Pong或圍棋之類的遊戲都在範圍中。
MountainCar-v0https://gym.openai.com/
2.Gym Retro
大約18年,OpenAI 發布了完整版遊戲強化學習研究平臺——Gym Retro。遊戲數量從大約 70 個雅達利和 30 個世嘉遊戲增加到了1000多個遊戲,其中包括對Game boy等各種模擬器的支持。此外,OpenAI 還將發布用於向 Gym 平臺添加新遊戲的工具。
openai/retro
3.Gym-Duckietown
Gym-Duckietown小黃鴨是在OpenAI Gym環境中開發了的自動駕駛模擬器。
https://github.com/duckietown/gym-duckietown
4.Torcs-Kears
Ben Lau使用DDPG方法在Torcs仿真器中實現自動駕駛,應用的Keras框架,大約300行代碼,可作為自動駕駛方向的強化學習入門實驗。自動駕駛方向研究強化學習的基本上都跑過這個實驗吧,17、18年根據這篇文章改進的論文也比較多。
Torcshttps://yanpanlau.github.io/2016/10/11/Torcs-Keras.html
中文翻譯:https://www.jianshu.com/p/a3432c0e1ef2
代碼:https://github.com/yanpanlau/DDPG-Keras-Torcs
自動駕駛相關的比較多,還有個AirSim也可以用來學習。
https://github.com/microsoft/airsim
5.桌球遊戲
這是應用強化學習的策略梯度算法的桌球遊戲,Andrej Karpathy通過130行代碼實現的,幫助理解強化學習算法。
這個非常適合作為強化學習的入門Demo!!!!代碼附在下面,代碼沒有坑需要踩,直接運行即可,訓練一段時間就能看到直觀的效果。
Deep Reinforcement Learning: Pong from Pixels
代碼:
https://github.com/llSourcell/Policy_Gradients_to_beat_Pong
6.小鳥FlappyBird遊戲
該項目通過卷積神經網絡+Q-learning算法,利用Keras框架共210行代碼實現了讓程序自己學習如何玩耍FlappyBird。
新手向——使用Keras+卷積神經網絡玩小鳥
強化學習的書籍,英文版的是sutton的那本Reinforcement learning: an introduction,寫的非常全面清晰,早就出了第二版,github上也有開源的項目去實現書中的代碼(連結已插入)這本書在強化學習書籍中的地位和David Silver視頻的地位一樣。但我不想一上來就推薦英文書,因為對英語不好的同學不友好,容易勸退(雖然我知道知乎上大佬很多很多)。不過這本書出了中文版,我們學校圖書館就有,大家也可以買一本看。
另外還有一本非常好的書,是郭憲老師寫的,多次推薦過了,《深入淺出強化學習:原理入門》,這本書可以結合著郭憲老師,知乎名「天津包子餡兒」的博客看。這本書真是我的入門書,來來回回翻看了少說也有三遍,有的算法看了四五遍。強化學習確實挺難理解的,有些公式需要反覆琢磨。
郭憲老師最近出了《深入淺出強化學習:原理入門》的姊妹篇《深入淺出強化學習:編程實戰》。大家看實戰書的時候,根據書中的代碼親自動手編程,並修改程序中的超參數,根據運行結果不斷體會算法原理。
其他的強化學習的書籍也買過,為什麼看這麼多呢,就是覺得有些地方這本書寫得好,有些地方那本書寫的深,多看些幫助理解罷了。
差點忘了,我第一次看到強化學習,還是在周志華老師的西瓜書中,西瓜小例子和多臂賭博機,也建議讀一下。
強化學習的論文自16/17年起,就非常非常多,自動駕駛、機械臂、遊戲等領域都有不少論文。下面羅列的這些都是比較經典的。只列出題目,可以去谷歌學術搜索,從鏡像進去就行。