强化学习七日打卡营终极复现之flappy bird
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相关推荐
- 飞桨PaddlePaddle深度学习七日打卡营结营体会(小白菜只想混算力康康证书)
我是真的纯纯小白菜了,没法像大佬们一样技术心得体会了... 这是我第一次接触飞桨,第一次报飞桨的打卡营 我就 搞个 纯纯的体验版心得体会?(毕竟我就想看看证书啥样再混个算力 咋上路的 被大佬给我丢了个 ...
- 百度飞桨PaddlePaddle图像分割七日打卡营 class4 deeplab实现
百度飞桨PaddlePaddle图像分割七日打卡营 class4 deeplab实现 deeplab.py import numpy as np import paddle.fluid as flui ...
- 图神经网络七日打卡营 Day 01 什么是非欧空间
都说 图神经网络是 基于 非欧空间 数据的 学习,那什么是 非欧空间呢?答案:欧式空间可以理解为一个排列组合完整的方阵,非欧式空间理解为解散了的方阵. 在过去的十年中,神经网络取得了巨大的成功. 但是 ...
- 百度NeurIPS全球顶会冠军团队,带你7日从零实践强化学习
如今,强化学习不仅成了学术界的宠儿,相关研究论文在各大顶会中的比例飞速上升:也在不断挑战冠军,突破记录,成为了AI开发的热门领域,比如击败围棋世界冠军的Alpha Go,就引起了大家对AI的广泛关注. ...
- 深度强化学习之迷宫DQN(NIPS 2015版)实践笔记——入门提升篇
1. 背景 在「强化学习」(RL)领域,早期大部分成功的算法都依赖于人工提取特征,并结合线性的值函数或策略表示,算法的表现很大程度上取决于特征提取的质量,隐匿于机器学习中.近年来,「深度学习」(DL) ...
- 四天人工智能 python入门体验课_百度深度学习7天打卡营,用Python+AI识别“青你2”小姐姐的高颜值...
原标题:百度深度学习7天打卡营,用Python+AI识别"青你2"小姐姐的高颜值 "淡黄的长裙,蓬松的头发",一夜之间洗脑全网,小姐姐们实在太让人上头了! 导师 ...
- PaddleHub百度飞桨【Python小白逆袭大神】七天打卡营心得
第一次接触百度的paddlehub,之前有参加过CV疫情的打卡营,但是没坚持把作业做下来.这次参加打卡营吧几次作业都跟下来了.因为作者本人是做计算机视觉方向的,python之前使用的多为OpeanCV ...
- 【强化学习实战】基于gym和tensorflow的强化学习算法实现
[新智元导读]知乎专栏强化学习大讲堂作者郭宪博士开讲<强化学习从入门到进阶>,我们为您节选了其中的第二节<基于gym和tensorflow的强化学习算法实现>,希望对您有所帮助 ...
- 强化学习6大前沿算法复现 | 乘风破浪,热情不减
点击左上方蓝字关注我们 学习成就梦想,AI遇见未来.作为国内AI行业的重要一员,百度不仅在人工智能的研究应用上做出了巨大贡献,还致力于培养和选拔最具核心竞争力的AI人才. 强化学习作为人工智能的热门研 ...
最新文章
- 网页授权有时候获取不到openid 的坑
- C#全屏随机位置显示图片的小程序
- 2018-2019-1 20165315 实验三 实时系统
- 过来人告诉你Python应该这么学
- java 多线程 day06 threadLocal
- 搞懂静态代码分析,看这文就够了!
- 如何使用代码给菜单增加图标
- 单身狗应该怎么过七夕节?
- aes sm1 对比_加密算法比较3DES AES RSA ECC MD5 SHA1等
- Android 线程状态
- javaEE常用开源框架的认识及概述,带你深入探索Java开发世界
- SQL Server 2019重新安装失败的处理方法
- php怎么将农历转换成公历,阳历到农历转换的一个PHP类
- unplugin插件
- 如何把pdf文件转换成eps文件
- JAVA中的糕富帅技术——反射(一)
- 编写强力黑白棋的历程
- 鸿蒙除开踏青时,鸿蒙初开踏青时 转载
- 计算机专业表白文案,521表白文案 2020简短深情的表白句子
- 28.文本处理三剑客grep,sed,awk