DRL-FlappyBird

在github上分析了一个FlappyBird的DQN项目,把项目逻辑记录下来,加深DQN的理解。
PS: 跟踪到原始的github项目,可以找到几篇很经典的文献,有助于加深理解

flowchart

图中矩形框标识数据内容,关键的几个模块
1. Environment
算法目标环境,此处就是flappy bird游戏,这个模块接受算法给出的action,返回reward。这个reward可以看作一个短期收益,根据游戏规则对action导致的结果给出收益。比如导致游戏失败,返回-1,否则返回0.1。
2. Memory
记忆库,像cache一样,记录历史记录,每个记录是四元组(当前状态,动作,收益,下一个状态),其中下一状态是指当前状态下,动作生效后进入的状态。
3. TargetNet
这个网络本身是不进行训练的,但是每T轮后,会从另一个模块QNet复制网络参数。这个网络接受当前状态,生成所有action的未来期望收益,游戏就是选择期望最大的那个action,施加到environment上。
4. QNet
和TargetNet网络结构一样,每间隔N轮后,从memory中随机抽取若干历史记录,进行训练,更新参数。T轮后,QNet会把参数复制TargetNet,因此TargetNet在T轮内网络参数是不变的,保证一段时间内算法输出是“稳定的”。 训练中,输入的是当前状态,QNet会预测在”current_state”下,所有action的期望收益,抽取”current_state”对应的”action”的收益,和”current_state”对应的”reward”计算loss。
PS:根据代码,从memory中随机抽取的历史数据,送入QNet做训练前,会把记录中”next_state”送入targetNet,利用targetNet预测结果修正记录中的reward

上图中包括三个循环
1. LOOP A
逐帧控制game sprite
2. LOOP B
存储历史记录
3. LOOP C
训练更新QNet

强化学习流程中几个重要概念
* 状态state
环境的一个瞬时值,上述FlappyBird中,状态时四帧的二值图拼成的四元组,作为卷积网络的输入;如果时棋牌游戏,状态可以是当前棋子在棋盘上的位置;如果是即时战略游戏,状态可以一个多维向量,包括敌我资源,兵力等;如果是机械臂控制,状态可以是机械臂旋转角度和速度。

  • 动作action
    控制目标可采取的选择,既为action。上述FlappyBird中,bird只有“不煽动翅膀”和“煽动翅膀”两个action;机械臂控制中,可能的选择是”旋转方向”和”旋转速度”;棋牌和策略游戏中的选择就可能很多了。

  • 收益reward
    控制目标处于某个状态中,就对应着一定的收益(或奖励)。比如FlappyBird中,当前状态对应的是game over,收益就要是负的,其他情况下没有明确的优劣,可以给出一个正的微小量作为奖励。

  • Q值
    Q值也是收益,但相对于前面的reward,Q值被定义为状态的期望收益:控制目标处于状态时,它的期望收益是从这个状态出发,经历所有可能状态,到达某个最终状态的收益期望。显然Q值是一个长期版reward,除非是很简单的问题,否则很难直接给出。Q值的计算是强化学习的核心问题,有兴趣的可搜一下bellman equation深入了解。深度学习的出现,让Q值计算有了新的思路,比如上述FlappyBird中,直接通过把游戏帧像素数据送入卷积网络QNet,直接给出所有action的Q值

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值