7天的实战很快就过去了,在调参调到怀疑人生时,“标准答案”却出奇的简单,另外每次训练时间都非常长,要是有加快训练的方法就好了。最后有一个终极复现可以自由发挥,这就来实现曾经想玩的flappy bird。

这里是目录

  • 原理
    • 基本概念
    • Q学习
  • 环境
  • 实现过程
    • 模型选取
    • 图像预处理
    • 调试与优化
  • 总结与展望

原理

基本概念

强化学习是一种在与环境交互过程中学习的方法。

通过动作施加影响
动作的收益
反馈环境的变化
智能主体
环境

比如在日常生活中,

  • 前方有一棵树(环境)
  • 人向前走了一步(动作)
  • 撞到了树(环境变化)
  • 并且觉得痛(收益)
  • 下次碰到树换个方向走(更新策略)

强化学习的问题定义
给定马尔可夫决策过程MDP= { S , A , P r , R , γ } \{S,A,Pr,R,\gamma\} {S,A,Pr,R,γ},寻找一个最优策略 π ∗ \pi^* π∗,对任意 s ∈ S s\in S s∈S,使得价值 V π ∗ ( s ) 值 最 大 V_{\pi^*}(s)值最大 Vπ∗​(s)值最大。

Q学习

Q学习是基于价值的方法,即对价值函数进行建模和估计,以此为依据制定策略。它使用一个Q表格来记录不同状态下不同动作的价值。决策时根据状态选择价值最高的动作。
Q学习也是基于时序差分的方法 ,即基于时序差分进行价值函数更新。
具体过程如下

当状态数非常多甚至连续分布时,有些状态很难采样到,也不可能用一张表来记录q函数。
这时候可以使用值函数近似(将q函数参数化),用一个非线性模型来拟合它,比如说神经网络,DQN就是这样一种算法。

环境

深度学习框架

  • PaddlePaddle
  • PARL

Flappy Bird GYM环境

  • PyGame Learning Environment (PLE)
  • OpenAI PLE environment (gym-ple)

实现过程

模型选取

根据所学知识,有DQN和PG两个方案,在PARL仓库给的例子中有雅达利游戏DQN的例子,便以它为基础修改和改进。模型为4层卷积池化加输出层。

图像预处理

原始图像是288×512×3的图像:

使用OpenCv库将其变为80×80的灰度图像:

最后进行归一化,所有像素除以255。

调试与优化

最开始把每次动作后环境返回的1帧图像作为输入,跑了一晚上都没有收敛,猜测是一帧图像不足以表现当前状态,比如说测不出速度和加速度。刚开始图像预处理没有归一化也可能是一个原因。
游戏环境是输入一个动作,运行1帧,为了得到多帧图像,可以将一个动作作用多次,这里用的4次,即一个动作作用4次,得到4帧图像作为状态。
刚开始由于回放经验池设的较大,跑到中途崩溃了,断续跑了总共不到1000个episode,就得到了比较不错的效果,最长一次测试跑了将近4分钟。

奇怪的是,后面的测试小鸟都在同一个地方失利:
这里我觉得模型根据经验做出了正确的动作,但是心有余而力不足,限于“手速”,而飞不上去。于是改小动作作用帧数,改为3之后,仍不能避免这个问题,还出现了一些极限操作:
猜测由于在极限上升上的失利,模型偏向于将状态转移到安全的极限下降。
为了进一步减小动作作用帧数,同时不减少状态帧数,需要分离这两个超参数,前者称为“跳帧”,后者称为“环境长度”,跳帧可以沿用之前写的代码,状态帧数则使用一个数组记录每个episode所有原始状态,每次取最后”环境长度“个原始状态作为状态。
减小跳帧后训练速度和效果都没有达到之前的水平,这里我想到先用跳帧4训练,然后改为跳帧1微调。
20000步左右,跳帧4模型给出了一次4分多钟的测试结果,最后一个障碍前,小鸟选择了直接放弃:
模型大概在说:“我能怎么办?我也很绝望啊。”
跳帧1的微调仍然非常慢,训练了80000多步,模型可以给出稳定30s以上的测试结果,可惜的是,最后仍不能通过这个极限上升障碍。

总结与展望

总的来说DQN在图像输入的flappy bird环境下表现非常不错,在动作间隔和环境长度设为4时表现最好。对于最后一个不能越过的极限上升障碍,在增加训练时间和增大探索概率重新训练后仍然不能通过,大概率是游戏环境问题,查看源码,得到管道间隔100,最大高度差168,x方向速度为4,有大约25帧时间用来上升,每次点击加速度为9,小鸟上升速度个位置,但是每次点击会让速度变为0,所以最多只能以速度8匀速上升,用环境自带的getGameState()函数测得,两个管道内间距为85,这段距离大约能上升170个单位,可谓是极限操作,即只有完美操作才有可能通过。
另外,“你已经是一个成熟的AI了,要学会自己确定超参数了”,让模型自适应步长,输出跳帧数,可以让模型不受“手速”限制,同时加快预测速度,为此需要加上一项速度奖励,即与通过每个障碍用的操作次数负相关的奖励。

预留的github地址:https://github.com/bnpzsx/DRL-FlappyBird

强化学习七日打卡营终极复现之flappy bird相关推荐

  1. 飞桨PaddlePaddle深度学习七日打卡营结营体会(小白菜只想混算力康康证书)

    我是真的纯纯小白菜了,没法像大佬们一样技术心得体会了... 这是我第一次接触飞桨,第一次报飞桨的打卡营 我就 搞个 纯纯的体验版心得体会?(毕竟我就想看看证书啥样再混个算力 咋上路的 被大佬给我丢了个 ...

  2. 百度飞桨PaddlePaddle图像分割七日打卡营 class4 deeplab实现

    百度飞桨PaddlePaddle图像分割七日打卡营 class4 deeplab实现 deeplab.py import numpy as np import paddle.fluid as flui ...

  3. 图神经网络七日打卡营 Day 01 什么是非欧空间

    都说 图神经网络是 基于 非欧空间 数据的 学习,那什么是 非欧空间呢?答案:欧式空间可以理解为一个排列组合完整的方阵,非欧式空间理解为解散了的方阵. 在过去的十年中,神经网络取得了巨大的成功. 但是 ...

  4. 百度NeurIPS全球顶会冠军团队,带你7日从零实践强化学习

    如今,强化学习不仅成了学术界的宠儿,相关研究论文在各大顶会中的比例飞速上升:也在不断挑战冠军,突破记录,成为了AI开发的热门领域,比如击败围棋世界冠军的Alpha Go,就引起了大家对AI的广泛关注. ...

  5. 深度强化学习之迷宫DQN(NIPS 2015版)实践笔记——入门提升篇

    1. 背景 在「强化学习」(RL)领域,早期大部分成功的算法都依赖于人工提取特征,并结合线性的值函数或策略表示,算法的表现很大程度上取决于特征提取的质量,隐匿于机器学习中.近年来,「深度学习」(DL) ...

  6. 四天人工智能 python入门体验课_百度深度学习7天打卡营,用Python+AI识别“青你2”小姐姐的高颜值...

    原标题:百度深度学习7天打卡营,用Python+AI识别"青你2"小姐姐的高颜值 "淡黄的长裙,蓬松的头发",一夜之间洗脑全网,小姐姐们实在太让人上头了! 导师 ...

  7. PaddleHub百度飞桨【Python小白逆袭大神】七天打卡营心得

    第一次接触百度的paddlehub,之前有参加过CV疫情的打卡营,但是没坚持把作业做下来.这次参加打卡营吧几次作业都跟下来了.因为作者本人是做计算机视觉方向的,python之前使用的多为OpeanCV ...

  8. 【强化学习实战】基于gym和tensorflow的强化学习算法实现

    [新智元导读]知乎专栏强化学习大讲堂作者郭宪博士开讲<强化学习从入门到进阶>,我们为您节选了其中的第二节<基于gym和tensorflow的强化学习算法实现>,希望对您有所帮助 ...

  9. 强化学习6大前沿算法复现 | 乘风破浪,热情不减

    点击左上方蓝字关注我们 学习成就梦想,AI遇见未来.作为国内AI行业的重要一员,百度不仅在人工智能的研究应用上做出了巨大贡献,还致力于培养和选拔最具核心竞争力的AI人才. 强化学习作为人工智能的热门研 ...

最新文章

  1. 网页授权有时候获取不到openid 的坑
  2. C#全屏随机位置显示图片的小程序
  3. 2018-2019-1 20165315 实验三 实时系统
  4. 过来人告诉你Python应该这么学
  5. java 多线程 day06 threadLocal
  6. 搞懂静态代码分析,看这文就够了!
  7. 如何使用代码给菜单增加图标
  8. 单身狗应该怎么过七夕节?
  9. aes sm1 对比_加密算法比较3DES AES RSA ECC MD5 SHA1等
  10. Android 线程状态
  11. javaEE常用开源框架的认识及概述,带你深入探索Java开发世界
  12. SQL Server 2019重新安装失败的处理方法
  13. php怎么将农历转换成公历,阳历到农历转换的一个PHP类
  14. unplugin插件
  15. 如何把pdf文件转换成eps文件
  16. JAVA中的糕富帅技术——反射(一)
  17. 编写强力黑白棋的历程
  18. 鸿蒙除开踏青时,鸿蒙初开踏青时 转载
  19. 计算机专业表白文案,521表白文案 2020简短深情的表白句子
  20. 28.文本处理三剑客grep,sed,awk

热门文章

  1. android 距离传感器 api,Android传感器API之:近距离感应Proximity功能源码
  2. 第十九篇 -- 学习第十八天打卡20190708
  3. 网易邮箱无法验证服务器身份,我的网易邮箱163无法验证是怎么回事?
  4. OpenCV图像拼接和图像融合技术
  5. 明日之后到底要不要加营地?不加营地能玩吗?
  6. 1.Lunix系统安装及重置root密码
  7. fps php,帧率60帧是什么意思
  8. 新兴职业背后的认知逻辑
  9. SSO场景系列:实现Microsoft AD到阿里云的单点登录
  10. 左右滑屏设置_android手势滑屏及左右滑屏