来源:知乎问答
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入门,代码讲解的比较清晰。如果英文不好编程能力不强的话,莫烦的视频入门真的真的很适合。
莫烦
2.David Silver强化学习视频
这个课一定要认真仔细看,做好笔记,最好是有强化学习基础知识,要不然很多地方听不太懂。我之前听过计算所前瞻实验室的强化学习课程,就是参考这个视频讲的,这个视频被大多数老师和研究生们认可,算是比较权威了感觉。
这门课的中文笔记,在强化学习知识大讲堂专栏中有叶强的文章,笔记写的比较好。
【强化学习】Reinforcement Learning Course by David Silver_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili www.bilibili.com
3.伯克利大学CS 294深度强化学习
这个深度强化学习的视频,在B站上有中文字幕了,还记得我研一看的时候,没有中文字幕,因为英语不太好,理解起来就比较难。笔记在网上搜就可以了。
【独家】【中字】2018 年秋季伯克利大学CS 294-112 《深度强化学习课程》 @雷锋字幕组译制_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili www.bilibili.com
4.台湾大学李宏毅深度强化学习课程
李宏毅的课讲的还不错,就是有点口音,听不大习惯。哈哈,听两节就适应了。
李宏毅深度强化学习(国语)课程(2018)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili www.bilibili.com
5.斯坦福课程CS234
这个我没看过,也是强化学习的视频,就放在这里了。
斯坦福课程:强化学习(2019) by Emma Brunskill_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili www.bilibili.com
除此之外,还可以去清华、中科院等大学或者研究所里蹭课,自己老师当面讲的,比较好理解,还能互动。
1.OpenAI Gym
目前强化学习编程实战常用的环境就是OpenAI的gym库了,支持Python语言编程。OpenAI Gym是一款用于研发和比较强化学习算法的工具包,它支持训练智能体(agent)做任何事——从行走到玩Pong或围棋之类的游戏都在范围中。
MountainCar-v0https://gym.openai.com/ gym.openai.com
2.Gym Retro
大约18年,OpenAI 发布了完整版游戏强化学习研究平台——Gym Retro。游戏数量从大约 70 个雅达利和 30 个世嘉游戏增加到了1000多个游戏,其中包括对Game boy等各种模拟器的支持。此外,OpenAI 还将发布用于向 Gym 平台添加新游戏的工具。
3.Gym-Duckietown
Gym-Duckietown小黄鸭是在OpenAI Gym环境中开发了的自动驾驶模拟器。
https://github.com/duckietown/gym-duckietown github.com
4.Torcs-Kears
Ben Lau使用DDPG方法在Torcs仿真器中实现自动驾驶,应用的Keras框架,大约300行代码,可作为自动驾驶方向的强化学习入门实验。自动驾驶方向研究强化学习的基本上都跑过这个实验吧,17、18年根据这篇文章改进的论文也比较多。
Torcshttps://yanpanlau.github.io/2016/10/11/Torcs-Keras.html yanpanlau.github.io
中文翻译: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 karpathy.github.io
代码:
https://github.com/llSourcell/Policy_Gradients_to_beat_Pong
6.小鸟FlappyBird游戏
该项目通过卷积神经网络+Q-learning算法,利用Keras框架共210行代码实现了让程序自己学习如何玩耍FlappyBird。
新手向——使用Keras+卷积神经网络玩小鸟 www.jianshu.com
强化学习的书籍,英文版的是sutton的那本Reinforcement learning: an introduction,写的非常全面清晰,早就出了第二版,github上也有开源的项目去实现书中的代码(链接已插入)这本书在强化学习书籍中的地位和David Silver视频的地位一样。但我不想一上来就推荐英文书,因为对英语不好的同学不友好,容易劝退(虽然我知道知乎上大佬很多很多)。不过这本书出了中文版,我们学校图书馆就有,大家也可以买一本看。
另外还有一本非常好的书,是郭宪老师写的,多次推荐过了,《深入浅出强化学习:原理入门》,这本书可以结合着郭宪老师,知乎名“天津包子馅儿”的博客看。这本书真是我的入门书,来来回回翻看了少说也有三遍,有的算法看了四五遍。强化学习确实挺难理解的,有些公式需要反复琢磨。
郭宪老师最近出了《深入浅出强化学习:原理入门》的姊妹篇《深入浅出强化学习:编程实战》。大家看实战书的时候,根据书中的代码亲自动手编程,并修改程序中的超参数,根据运行结果不断体会算法原理。
其他的强化学习的书籍也买过,为什么看这么多呢,就是觉得有些地方这本书写得好,有些地方那本书写的深,多看些帮助理解罢了。
差点忘了,我第一次看到强化学习,还是在周志华老师的西瓜书中,西瓜小例子和多臂赌博机,也建议读一下。
强化学习的论文自16/17年起,就非常非常多,自动驾驶、机械臂、游戏等领域都有不少论文。下面罗列的这些都是比较经典的。只列出题目,可以去谷歌学术搜索,从镜像进去就行。