7日强化学习初体验
最近有幸参加了百度飞桨paddlepaddle开设的“强化学习7日打卡营-世界冠军带你从零实践”课程。通过课程加实战的方式顺利完成了对于强化学习的理论理解,并且在百度的AIstudio上使用PARL框架完成了许多动手实践。下面将就课程笔记、实践心得、实用资料。
课程笔记
本人一直保持着手写笔记的习惯,更加方便作图和补充,笔记如图所示。
整个课程主要的框架梳理如下:
1、基于表格的RL:① Sarsa(on-policy,每个更新时已知晓下一步动作,使用下一部动作的收益值更新)② Q-Learning(off-policy,更新时不管下一步动作,直接选择当前状态下发生动作的最大收益)。
2、基于神经网络的RL:DQN(使用神经网络来解决状态不可数的问题,两大创新:① 经验回放;②固定Q-target)。
3、基于策略梯度的RL:Policy Gradient(直接输出动作的概率而不是reward)
4、连续动作空间上的RL:DDPG(分别有Actor(策略网络)、Critic(Q网络),Actor根据评分来进行动作,Critic给动作打分尽量使分数与环境一致)。
实践心得
在训练营中,我们进行了一定次数的实战代码练习,总体而言,强化学习部分的代码还是比较清晰。
基于PARL框架的代码结构总结如下:
1、train:最外层,定义参数搭建好模型后,进行不停地训练。主要分为:训练函数run_episode()和评估函数evaluate()。
2、agent:进行探索和参数的更新训练。主要探索动作的生成函数有:sample()和predict();参数更新训练的函数是learn()。
3、algorithm:对于神经网络的loss函数、参数的更新方式进行一些定义。主要函数是learn()。
4、model:对于使用神经网络的算法,用来对于神经网络的结构进行定义。
除了编写代码,在这短短的7天里,最让人头秃的就是调参了,调参这件事一开始真让人摸不着头脑,但在经过一番折腾之后,又让人有柳暗花明之感,在此记录一些粗浅的理解:
1、注意learning rate的选取,一般来讲从1e-3开始尝试增倍或减倍。如果代码运行过程中存在开始效果显著,到中半段突然变差,可能是由于学习率太高所致(过拟合?),此时可能考虑降低学习率训练。
2、对于神经网络的输入,可能可以根据实际问题进行分析理解来调整,而不是一味地让他自己学习。比如之前看到Policy Gradient应用在VRP中的文章,首先使用了attention机制对输入进行了处理,从而获得更好的输出效果。
3、开局还是靠手气,同样的配置效果也可能天差地别。
4、对于不同问题的神经网络层次结构如何构建,我现在依然一脸懵,神经元的个数、网络层数和需要用的激活函数感觉都很虚幻。
实用资料
1、老师倾力推荐
2、本次课程的代码资料
https://github.com/PaddlePaddle/PARL/tree/develop/examples/tutorials
3、b站莫烦python的系列小视频,超快速成,理论+代码。