深度学习入门 | 三岁在飞桨带你入门深度学习—Carpoel,利用PARL复现基于神经网络与DQN算法(真的是0基础)

原创
2020/07/17 20:17
阅读数 18

大家好,这里是三岁,众所周知三岁是编程届小白,为了给大家贡献一个“爬山”的模板,三岁利用最基础的深度学习“hello world”项目给大家解析,及做示范。
三岁老规矩,白话,简单,入门,基础
如果有什么不准确,不正确的地方希望大家可以提出来!

以下为一些参考资料及相关协助作品,希望大家可以结合使用:
B站视频地址:https://www.bilibili.com/video/bv1v54y1v7Qf
AI studio文章地址:https://ai.baidu.com/forum/topic/show/962531
csdn文章地址:https://editor.csdn.net/md?articleId=107393006
三岁推文地址:https://mp.weixin.qq.com/s/6-6RR0XuvTNuXKhX7fFXaQ
参考论文:https://www.nature.com/articles/nature14236
DQNgithub地址:https://github.com/PaddlePaddle/PARL/tree/develop/examples
参考视频:https://www.bilibili.com/video/BV1yv411i7xd?p=12
Carpoel参考资料:https://gym.openai.com/envs/CartPole-v1/
PARL官方地址:https://github.com/PaddlePaddle/PARL
参考视频:

<p>世界冠军带你从零实践强化学习</p> </div> <p/> <p>那么我们接下来就开始爬山吧,记得唱着小白船然后录像呦,三岁会帮你调整一下jio的位置的【滑稽】</p> <h3><a id="_21"/>环境及所需内容描述</h3> <p><strong>小车的故事——Carpoel</strong><br/> <strong>Carpoel</strong>是我们深度学习的一个基础项目,类似于计算机编程中的“hello world”<br/> 我们先康康什么是Carpoel吧<br/> <img src="https://img-blog.csdnimg.cn/20200716212957656.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTYyMzA5Mw==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"/><br/> (这个是之前跑数据时候的一个截图)</p> <p>下面黑色的应该是一辆<strong>黑色的劳斯莱斯</strong>,但是太黑了你看不出来。<br/> 上面是要运送的一截<strong>光头强刚刚砍伐的大树</strong>(保护环境,珍惜绿水青山,此处静静只是想举个腻子)<br/> 大树只是垂直放置,重心在大树中间,随着小车的移动重心在惯性的因素下开始移动,<br/> 如果<strong>倾斜的角度大于12°</strong>或者<strong>移动2.4个</strong>单位该局结束。</p> <p>emmm,简化一下就是 树木只要移动小于12°,或者超过2.4个单位即为成功。</p> <p>官方文档:(此处为15°,下文代码等都是12°)<br/> <img src="https://img-blog.csdnimg.cn/20200716213954605.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTYyMzA5Mw==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"/></p> <p>官网视频查看:<br/> </p> <div class="csdn-video-box"> <iframe id="qyRIE9Uy-1594907885869" src="https://player.bilibili.com/player.html?aid=838865627" allowfullscreen="true" data-mediaembed="bilibili"/> <p>Carpoel视频</p> </div> <p/> <h4><a id="PARL_41"/>这里面还涉及到一个神奇的PARL</h4> <p>PARL是何方神圣呢?<br/> 通过三岁对官方文档的品读(copy)得到以下结论:<br/> <img src="https://img-blog.csdnimg.cn/20200716220246844.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTYyMzA5Mw==,size_16,color_FFFFFF,t_70" alt="1"/></p> <ul><li>PARL主要是<strong>基于Model、Algorithm、Agent三个代码块来实现</strong>,其中Model和Agent是用户自定义操作。</li><li>Model:<strong>是网络结构</strong>:要三层网络还是四层网络都是在Model中去定义(下文是三层的网络结构)</li><li>Agent:<strong>是PARL与环境的一个接口</strong>,通过对模板的修改即可运用到各个不同的环境中去。</li><li>至于Algorithm是内部已经封装好了的,直接加入参数运行即可,主要是<strong>算法的模块</strong>的展现</li></ul> <p><strong>官方表达</strong>:<br/> <img src="https://img-blog.csdnimg.cn/20200717140954204.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTYyMzA5Mw==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"/></p> <h3><a id="Carpoelhello_world__53"/>为什么说Carpoel是深度学习届的hello world ?</h3> <ul><li>1.所有的算法都可以通过这个模型来查看是否是收敛的</li><li>2.内容简单,训练时间相对较短,对选手的能力水平要求不是很高</li><li>(要求高的三岁也弄不来,关键是不会啊!)</li><li>3.这方面的代码可读性比较好,问题、异常处理较为方便。</li></ul> <h3><a id="_60"/>环境配置</h3> <pre><code> pip install gym pip install paddlepaddle==1.6.3 pip install parl==1.3.1 # 添加百度源 # python -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple # pip install parl==1.3.1 -i https://mirror.baidu.com/pypi/simple </code></pre> <p>在里面涉及到了 飞桨环境,建议加上百度源具体安装参考如下:<br/> <a href="https://www.paddlepaddle.org.cn/install/quick">百度 飞桨安装及使用说明(PAR说明):https://www. paddlepaddle.org.cn/install/quick</a></p> <h3><a id="_70"/>源代码</h3> <p>注:代码源于百度 飞桨强化学习7天打卡营</p> <p><a href="https://mp.weixin.qq.com/s/Yrt7iR597gXP703j9al7lA">代码地址:https://mp.weixin.qq.com/s/Yrt7iR597gXP703j9al7lA</a></p> <p>csdn只能够显示68行,只有一部分,不好看,如果分开来怕有些看不懂会乱掉,我统一放在三岁的公众号里面,希望大家移步查看,如有不便多多包涵!</p> <h3><a id="_77"/>代码解析</h3> <p><img src="https://img-blog.csdnimg.cn/20200717112339737.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTYyMzA5Mw==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"/><br/> 以上是主函数,也是这串代码的一个整体思路。<br/> 看一下各个代码的作用吧!</p> <p><img src="https://img-blog.csdnimg.cn/20200717123800538.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTYyMzA5Mw==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"/><br/> 在这里面把一个代码主函数(代码中没有明确main()函数)流程进行一定的解析<br/> <img src="https://img-blog.csdnimg.cn/20200717124528890.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTYyMzA5Mw==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"/><br/> <img src="https://img-blog.csdnimg.cn/20200717124713692.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTYyMzA5Mw==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"/><br/> <img src="https://img-blog.csdnimg.cn/20200717125233488.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTYyMzA5Mw==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"/><br/> 训练一轮:<br/> <img src="https://img-blog.csdnimg.cn/20200717125708558.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTYyMzA5Mw==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"/><br/> 训练一组(5轮):<br/> <img src="https://img-blog.csdnimg.cn/20200717130335485.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTYyMzA5Mw==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"/><br/> 结果查看:<br/> <img src="https://img-blog.csdnimg.cn/20200717143146958.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTYyMzA5Mw==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"/></p> <h3><a id="DQN___93"/>DQN算法 —— 白话</h3> <h5><a id="_94"/>优势</h5> <p>DQN算法较普通算法在<strong>经验回放</strong>和<strong>固定Q目标</strong>有了较大的改进</p> <ul><li> <p><strong>1、经验回放</strong>:他充分<strong>利用了off-colicp的优势</strong>,通过训练把结果(成绩)存入Q表格,然后随机从表格中取出一条结果进行优化。这样子一方面可以:<strong>减少样本之间的关联性</strong>另一方面:<strong>提高样本的利用率</strong><br/> 注:训练结果会存进Q表格,当Q表格满了以后,存进来的数据会把最早存进去的数据“挤出去”(弹出)<br/> <img src="https://img-blog.csdnimg.cn/20200717182128971.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTYyMzA5Mw==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"/></p> </li><li> <p><strong>2、固定Q目标</strong>他解决了<strong>算法更新不平稳</strong>的问题。<br/> 和<strong>监督学习做比较</strong>,监督学习的最终值要逼近实际结果,这个结果是固定的,但是我们的DQN却不是,他的<strong>目标值是经过神经网络以后的一个值</strong>,那么这个值是变动的不好拟合,怎么办,DQN团队想到了一个很好的办法,让<strong>这个值在一定时间里面保持不变</strong>,这样子这个目标就可以确定了,然后目标值更新以后更加接近实际结果,可以更好的进行训练。</p> </li></ul> <p>举个例子:以打靶为例,<strong>监督学习</strong>就像是<strong>打固定靶</strong>,他的结果是固定的,,但是<strong>DQN就是打移动靶</strong>,每一个时间段都是移动的,只能够把时间线拉长,分解成无数个时间段,每个时间段的值都是固定的。这样子就可以解决变动的不好处理的问题。</p> <h3><a id="___106"/>深度学习 — 白话</h3> <p>三岁又来逼逼赖赖啦,三岁白话深度学习:<br/> 深度学习:就是人们利用机器<strong>模拟人类对事物认知的方式来解决预测</strong>一些东西,对于机器他们只是通过构建的模型进行跑数据,进行数据的分析处理,然而我们把数据进行实例化,把抽象数据定义成一些实际化的东西,这样子便可以产生一些我们可以用的东西。</p> <p>他利用了“奖励”引导的机制在里面,机器会尽可能的拿到跟多的奖励以获取更好的结果,有些时候会受到时间影响,比如股票的值可能受到很久以后的一个值的影响,但是这个值实际上并无意义,于是加入了一个“<strong>衰减因子</strong>”*他位于0-1之间,利用他自身多少倍的值来削弱某一个长期无意义值的影响。</p> <h3><a id="_112"/>运行经历</h3> <p>这一串代码是从课件上copy下来的,所以里面的参数及数据都是已经调整好了的,但是在线下跑数据发现每一次跑也并非到最后都是200也就是<strong>每一次的结果都是不一定的</strong>,然后我开了显示模式,里面的测试画面和结果会被显示和打印,前面的速度会比后面的快,因为分数低时间自然就短了。<br/> 更据这段时间对深度学习的学习,基本上代码运行没有问题后那么调整几个超参基本上可以得到一个比较好的拟合效果。</p> <h3><a id="_117"/>心得体会</h3> <p>本次“爬山”,发现之前的一些盲点在本次有了解决,,之前对深度学习、PARL、算法等都有了最新的认识,虽然还是那个小白但是认识提上去了,以后还是可以更加努力的去奋斗的,这就是传说中的回头看的时候就知道自己以前是多么的无知了。</p> <h4><a id="_120"/>爬完山拍完视频记得去公安机关呦~~~</h4> <p>希望这个“爬山”视频能够给大家一定的参考,如有不对或者有缺失的地方希望大家多多提出来,留言,私聊都ok,希望大家可以一起学习,一起提高,这里是小白三岁,感谢你的支持,不要忘记点赞、留言、收藏、关注呦~~~</p> <p>那个那个那个,对就是你,说你呢,你那个jio的位置不对,拍出来照片不好看,我来帮你挪一下!!!</p>

本文同步分享在 博客“三岁学编程”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部