以下是关于强化学习的开源代码入门指南:
例如,在当前智能体处于 s1 状态时,会在表中找最大 Q 值对应的行动。获取 Q(s1,下)乘上衰减值 gamma(如 0.9)并加上到达下一个状态时的奖励 R,作为现实中 Q(s1,下)的值(即“Q 现实”),之前根据 Q 表得到的 Q(s1,下)是“Q 估计”。有了“Q 现实”和“Q 估计”,可按公式更新 Q(s1,下)的值。公式中,α是学习率,γ是对未来 reward 的衰减值。启动程序训练 100 次后可较好地进行游戏。
1.如果和我一样一点基础也没有,并且概率论和线性代数的知识差不多都忘完了,那么可以去看一下相关课程学习一下,如果不关注公式啥的,这一步可以先忽略,大约周末一天时间就可以搞定;2.然后如果对机器学习也一点基础都没有的话,可以先看吴恩达的课程,有个大致的理解,然后去看李宏毅的课程作为补充,如果单纯的想入门学习强化学习,那么只需要看前几节讲完神经网络那里就差不多了,这个视频课程估计要看25小时左右;3.学完之后可以跟着《动手学深度学习https://hrl.boyuai.com/》一起动手学习一下我们上面学到的概念,写写代码,如果只是入门的话看前五章就好了,本篇文章的很多资料也是整理自这本书,大约10小时左右;4.接下来可以看看B站王树森的深度学习的课程,可以先看前几节学习一下强化学习的基础知识点,大约5小时左右;5.到这个阶段估计还是懵的,需要去上手做点项目,那么可以看《动手学强化学习》这本书,已经开源了https://hrl.boyuai.com/,只看到DQN的部分,大约十几小时。
|Num|Observation|Min|Max||-|-|-|-||0|Cart位置|-4.8|4.8||1|Cart速度|-Inf|Inf||2|Pole角度|~ -0.418 rad(-24°)|~ 0.418 rad(24°)||3|Pole角速度|-Inf|Inf|行动也只有两个,向左或向右,所以我们的模型也可以构建的很简单。下面来看看具体的代码,代码也是用chatgpt生成的,我稍微改了一下。我们的DQN的网络模型采用一层128个神经元的全连接并以ReLU作为激活函数,由于游戏不是很复杂所以选用简单的两层网络结构就行了:我们还需要一个缓存区来存放从环境中采样的数据:然后就是我们的训练函数,批量从缓存区获取数据,使用DQN算法进行训练:最后就是我们的主循环函数了,在每个episode中,我们选择一个动作(使用ε-greedy策略),执行该动作,并将结果存储在replay buffer中:训练完之后使用保存好的model.pth参数,就可以实际使用起来了:
比如当前智能体(agent)在s1这个状态上,下一步该做什么行动就会去这个表里面找哪个Q值最大,发现向下行动是最大的,那么就会往下走,这个时候我们获取到Q(s1,下)乘上一个衰减值gamma(比如是0.9)并加上到达下一个状态时所获取的奖励R,把这个值作为现实中Q(s1,下)的值,也就是‘Q现实’,之前的根据Q表得到的Q(s1,下)是Q表估计的值,也就是‘Q估计’,有了Q现实和Q估计,就可以更新Q(s1,下)的值,公式如下:上面公式中就是Q现实,α是学习率,来决定这次的误差有多少是要被学习的,alpha是一个小于1的数,γ是对未来reward的衰减值,我们在上面介绍过。那么有了这个公式在加上我们每一步中得到的四元组就可以不停的更新我们的Q表,数据中的S和A是给定的条件,R和S'皆由环境采样得到。Q-learning算法的具体流程如下:初始化Q(s,a)for序列e = 1 -> E do:用ε -Greedy策略根据Q选择当前状态s下的动作a得到环境反馈的r,s‘得到初始状态sfor时间步t = 1-> T do:End forEnd for下面代码是chatgpt4生成的,我小改了一下:启动我们的程序训练100次之后可以发现其实可以很好的进行游戏了: