赞
踩
说在前面
本文只讲述强化学习常见算法的实现流程, 不涉及原理推倒, 原理上的东西, 推荐看李宏毅老师的强化学习课程。
本文包括:
Nature DQN, Double DQN, Prioritized Replay DQN, Dueling DQN, Policy Gradient, Actor-Critic, DDPG, PPO算法的流程。
本文流程是基于莫凡的RL代码进行梳理。
(建议同时打开两个页面,一边看流程图, 一边看流程说明)
Nature DQN
1、将环境信息s输入到eval网络, 输出为action的Q值,选择最大Q值对应的action, 或者随机生成一个action(所谓的探索),将action输入环境, 得到奖励r和下一个环境信息s_, 存储当前环境s, 选择的action, 得到的奖励r这4个信息, 然后再将s_输入到eval网络, 循环步骤1, 直到存储了一定量的[(s, a, r, s_), …], 注意这个过程中eval网络没有更新。
2、从存储的[(s, a, r, s_), …]中sample出一部分(s, a, r, s_) ,将sample出来的多个s做为batch输入到eval 网络, 得到batch的action的Q值q_eval, 然后根据sample出来的action选出其在q_eval中对应的Q值q_action_eval(对应gather过程)。
3、将sample出来的多个s_做为batch输入到target网络(eval与target有相同的网络结构), 得到batch的action的Q值q_next, 取q_next中最大的Q值(dim=1)并乘以一个系数gamma, 然后再加上sample出来的奖励r, 得到q_target。
4、计算loss:loss 为第2步的结果q_action_eval与第3步的结果q_target的MSE, 然后根据loss反向传播更新eval网络。
5、循环1到4步骤, 每过一定的步数后,将eval网络的权重更新到target网络上。
Double DQN
Double DQN 大部分和Nature DQN是一样的, 只是在计算q_target的时候不一样:
Nature DQN计算q_target时, 直接将sample的s_输入到target网络, 得到动作的Q值, 选出最大Q值。
而Double DQN 计算q_target,是先将sample的s_输入到target网络, 得到动作的Q值q_next, 同时将sample的s_输入到eval网络,得到动作的Q值q_eval`, 选出其最大Q值对应的动作, 再通过这个动作找到对应q_next
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。