MMP,加拿大多伦多华人网这个华人老板坑了不知道多少毕业留学生

MMP被坑到无锡来了_无锡吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:596,815贴子:
MMP被坑到无锡来了收藏
哈哈咋了?
来见网友,网友见到你嫌你丑跑了
果真嘛卖批啊,只是然并卵
估计是来挣钱被坑了
来我们街道做书记吧
来我们学院做技师吧
这是一个未来18级大号在给你暖贴,请你态度放尊重点,不许发这种没礼貌的表情
这是一个未来18级大号在给你暖贴,请你态度放尊重点,不许发这种没礼貌的表情
发生了什么
兄弟 。怎么啦
兄弟怎么了我也是不如我们组队吧
来我工地烧大锅饭吧
服务员做吗?八佰伴七楼多伦多。底薪2800还有奖金提成包吃包住
想不想学们手艺,学理发
年纪还小,社会阅历不足,不听家人劝告
这城市风很大,孤独的人总是晚回家
梅村,新友南路,好熟悉的地方,在梅村待了7年
在梅村啊 是不是感觉很近
还有饭吃比我好
来我工地烧大锅饭吧
梅村的。马上到梅村 等会一起三五瓶
坑到无锡,啥情况?
天呐。你和我撞衫了
说出你的故事
登录百度帐号加拿大留学生日记
【 liuxue86.com - 日记&经验 】
  下面是整理的生日记,欢迎阅读!
  多伦多真是个繁华的城市,好像国内的大城市一样,有着喧嚣,拥挤的人群。每次去的感受几乎都不一样,也许是因为不同的季节。
  上一次去是,街道布置得很漂亮,节日的气氛感觉很浓,所以很温馨很亲切。这次去是开春初夏的季节,阳光不是那么的强烈,满眼望去的绿色,给平凡的旅途也增添了不少色彩。其实之前已经去过很多次多伦多,可是当车驶进多伦多市区的一刹那,心中总会有按捺不住的兴奋和喜悦。也许在渥太华呆久了,人也随着安静下来,节奏步伐变的不快不慢,学习生活过的倒也悠闲。而多伦多的快节奏却也带动了我这颗平静的心。
  多伦多的华人不算少,几乎走到哪里都可以看到中国人的身影,这也是使我感觉亲切的原因之一。走在QUEEN街上,每到一家店面,都会有华人店员热情的走上来迎接,偶尔还会说上几句CHINESE。其实近几年来,的学生越来越多,不过出国的目的大有不同。问过的朋友当中,有的想毕业回国的,有的想转往发展的,有的想继续留在攻读MASTER,PHD的,还有的则准备,开始自己的创业之路。而选择留在加拿大的朋友也有不少来到了多伦多开始自己新的工作生活。
  多伦多本身就是一个多元化的城市,有着来自不同国家的朋友,也充满了挑战和竞争。但是多伦多的工作机遇比小城市要大的多,加上华人比例的扩大,在多伦多施展自己的才华,开展工作是一个很好的选择。有一个朋友,在5月份毕业后很快的在多伦多找到了一个文员的工作,欣喜的告诉我了这个消息,便带着她满腔的憧憬踏上了去多伦多的路。
  可是有时候在霓虹灯满漾的街道下,我又迷惑不已。多伦多确实是一个充满着机遇和活力的地方,但这里也是使小沉迷于高消费和娱乐活动中的一个危险地带。一不小心,就会踏进了那一个小圈子。在那里,有着无数的娱乐活动和多家名牌商店,盲目的攀比使留学生成了LV,GUCCI店里的常客。那天无意走进LV的店门,发现有不少留学生的面孔,她们花钱的&大方&程度不由使我一惊:几千加币的包在她们眼力便是金钱的替代品,是身份的象征。   多伦多一直带给我无限的期望,也使我深思。有时候偶尔也会想转到多伦多读书,但是也只是个想法。在多伦多灯繁华的外表下,唯有好好攻读自己的学位,坚定自己的理念才会是一条实际的出路。(媛媛)
  推荐阅读:
  以上内容由出国留学网www.liuxue86.com整理提供,希望对您有所帮助!
  想了解更多日记&经验网的资讯,请访问:
本文来源:
日本的教育在亚洲算是不错,因此很多学生会选择去日本留学,那么日本人的哪些行为视为不礼貌呢?很多留学生比较关心这类问题,和出国留学网一起来看看吧!下面是小编整理的相关资讯,欢迎阅读。
去澳洲留学或者旅游的同学注意了!2018年的澳大利亚的出入境卡范本出来了,该怎么填写这两个小本本呢?和出国留学网一起来看看吧!下面是小编整理的相关资讯,欢迎阅读。2018年澳大利亚
没有一点点防备,开学季就这样到来了,不管是在中国大学还是在澳洲的大学,都会有迎新周。下面出国留学网来说说澳洲本科开学报到流程!以及给大家一些小建议。相信大家对”Orientatio
没有一点点防备,开学季就这样到来了,不管是在中国大学还是在澳洲的大学,都会有迎新周。下面出国留学网来说说迎新周该怎么玩儿!以及给大家一些小建议。现在,澳洲各大学的迎新周几乎都进入了
开学季,即将赴澳留学和准备赴澳留学的同学都很关心到澳洲后如何办理电话卡,办理什么样的套餐更适合。下面出国留学网就来说说澳洲留学办什么手机卡比较好。1.电话卡分类澳大利亚的手机电话卡
留学高级顾问
快速定制留学方案
立即免费定制「现场」孟津首届剪纸大赛上获奖贫困户的励志故事「现场」孟津首届剪纸大赛上获奖贫困户的励志故事大东休摩百家号小桥、流水,鸭欢鱼跃;广场、长椅,游人欢笑。李安国的剪纸作品《瀍河人家》,展现的是一片世外桃源般的美景。李安国来自横水镇寒亮村,是大赛获奖者中唯一的贫困户。其作品从283幅参赛作品中脱颖而出,获得奖项。2014年的一场车祸,险些夺走李安国的双腿。如今,他虽能勉强走路,却干不了力气活,一家子只能靠仅有的一亩多薄地过活。“咔嚓、咔嚓、咔嚓……”台上李安国接过红色证书和100元鼓励金,台下拍照声此起彼伏。“安国,真不赖。咱村出了一名剪纸大师。”李安国走下颁奖台,寒亮村党支部书记孙建西鼓励道。本文仅代表作者观点,不代表百度立场。系作者授权百家号发表,未经许可不得转载。大东休摩百家号最近更新:简介:互联网科技是第一生产力作者最新文章相关文章&p&就在昨天UC Berkeley的Horia Mania, Aurelia Guy和Benjamin Recht在arxiv上公布论文Simple random search provides a competitive approach to reinforcement learning:&a href=&https://link.zhihu.com/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&[] Simple random search provides a competitive approach to reinforcement learning&/a&。 &/p&&p&经过在各种openai gym的locomotion tasks上做实验,他们得出结论: random search+linear policy足以吊打各种fancy algorithm + neural network。&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-677a9ad6b5b41cfd7d788c96b4e49606_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&4032& data-rawheight=&3024& class=&origin_image zh-lightbox-thumb& width=&4032& data-original=&https://pic1.zhimg.com/v2-677a9ad6b5b41cfd7d788c96b4e49606_r.jpg&&&/figure&&p&上图中ARS表示augmented random search,可以看到ARS吊打了所有算法。&/p&&p&&br&&/p&&p&最后他们得出四个结论(我的大略翻译):&/p&&p&1 在发明复杂的算法前,应该先用最简单的方法来把baseline做好。&/p&&p&2 做evaluation要用大量的random seed。在用到仿真器的时候,很难证明一种算法比另一种算法更好,因为某个算法可能不小心用到了仿真器的某种性质,而到了另一个问题/仿真器这个性质可能就不存在了。&/p&&p&3
与其设计一个通用的算法,也许我们更应该设计针对某一问题的算法。&/p&&p&4 我们应该转移注意到model-based的方法,因为这类方法更加sample efficient。&/p&&p&&br&&/p&&p&不说了,我要去写退学申请了。&/p&
就在昨天UC Berkeley的Horia Mania, Aurelia Guy和Benjamin Recht在arxiv上公布论文Simple random search provides a competitive approach to reinforcement learning:
&figure&&img src=&https://pic4.zhimg.com/v2-dade2fa1c7fc8f974959_b.jpg& data-rawwidth=&565& data-rawheight=&321& class=&origin_image zh-lightbox-thumb& width=&565& data-original=&https://pic2.zhimg.com/v2-dade2fa1c7fc8f974959_r.jpg&&&/figure&&p&这篇论文是Ruslan的phd Chaplot写的,Chaplot是一个很nice的印度小哥,与他交流的时候很不错。他说当时做这个项目的时候,比较困难的就是收敛速度太慢,所以才会把game feature加入到里面。Chaplot最后拿到了Visual Doom AI Competition 2017 Full Deathmatch 1st place, 2016 2nd. &/p&&p&&br&&/p&&p&这篇论文使用了Q learning的方法,使用LSTM和CNN一起训练了一个action network(augmented DRQN)来执行action,一个普通的DQN来做navigation(exploration)。&/p&&p&&br&&/p&&h2&Model&/h2&&p&下图就是augmented DRQN,game feature就是k个输出,表示当前帧是否有敌人,health pack,武器,弹药,有k个特征。接着是LSTM,输出的是action score。为什么用LSTM的解释是为了加入时间信息更好做决策,如果只是用DQN,输入k帧,前k-1之间是相互独立的,训练出来的效果不好。enemy detection的accuracy不到70%。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-1ee3fb69e630b14a04b4b_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1193& data-rawheight=&498& class=&origin_image zh-lightbox-thumb& width=&1193& data-original=&https://pic4.zhimg.com/v2-1ee3fb69e630b14a04b4b_r.jpg&&&/figure&&p&这里的Loss是由game feature的cross-entropy和action score的MSE组成。&/p&&p&&br&&/p&&p&在LSTM这里,一共有8个step,但是更新的时候只会对后四帧进行更新。因为前面的四帧刚初始化的时候不太稳定,反而会影响效果。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-b16e07d97c9b4f1d464226f_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&601& data-rawheight=&309& class=&origin_image zh-lightbox-thumb& width=&601& data-original=&https://pic4.zhimg.com/v2-b16e07d97c9b4f1d464226f_r.jpg&&&/figure&&p&&br&&/p&&p&整个算法分成了navigation和action。大致流程如下:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&if no_enemy in Fame_cur or no ammo left
Navigation with network DQN
Action network running
&/code&&/pre&&/div&&p&&br&&/p&&h2&Training&/h2&&ul&&li&reward shaping: 根据NG的03年的论文进行改进,对reward进行手动设定(相比于inverse reinforcement来说)加入了这些reward以后,如果进行memory replay,就可以加快收敛速度。&/li&&/ul&&ol&&li&positive reward:捡东西,health pack,weapons,ammo&/li&&li&negative reward:lose health&/li&&li&negative reward:shooting,lose ammp&/li&&li&positive reward:distance traveled to avoid turning circle&/li&&/ol&&ul&&li&frame skip:为了减少计算量,进行k frame skip,前k帧不进行任何操作,第k+1帧进行训练。k的设置要合理,太低的话,计算量太大,太高的话动作重复太多,比如射击的时候重复太多,弹药就浪费了。一般是使用4比较合理。 &/li&&li&sequential update:使用足够长的序列进行更新,比如大于8帧的sample。&/li&&li&训练enemy detection网络的时候,加入dropout,可以使网络的accuracy从70%到90%。&/li&&li&图片的输入之后resize为108x60,为的是提供更大的视野(108度)。&/li&&li&参数设置:使用RMSProp,mini-batch=32, &img src=&http://www.zhihu.com/equation?tex=%5Cepsilon& alt=&\epsilon& eeimg=&1&& 从1到0.1, &img src=&http://www.zhihu.com/equation?tex=%5Cgamma& alt=&\gamma& eeimg=&1&& = 0.99.&/li&&/ul&&p&&br&&/p&&h2&Result&/h2&&figure&&img src=&https://pic1.zhimg.com/v2-b0bed18c4f0a33eeca2765fb45eba3e4_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&586& data-rawheight=&245& class=&origin_image zh-lightbox-thumb& width=&586& data-original=&https://pic1.zhimg.com/v2-b0bed18c4f0a33eeca2765fb45eba3e4_r.jpg&&&/figure&&p&&br&&/p&&p&另外,我看到了大佬田渊栋也有参加这个比赛,他们使用的是actor-critic model,mark一下,以后可以学习。&/p&&a href=&http://link.zhihu.com/?target=https%3A//openreview.net/pdf%3Fid%3DHk3mPK5gg& data-draft-node=&block& data-draft-type=&link-card& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&openreview.net/pdf?&/span&&span class=&invisible&&id=Hk3mPK5gg&/span&&span class=&ellipsis&&&/span&&/a&&p&&br&&/p&&p&论文:&/p&&a href=&http://link.zhihu.com/?target=http%3A//www.cs.cmu.edu/%7Edchaplot/papers/aaai17_fps_games.pdf& data-draft-node=&block& data-draft-type=&link-card& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&cs.cmu.edu/~dchaplot/pa&/span&&span class=&invisible&&pers/aaai17_fps_games.pdf&/span&&span class=&ellipsis&&&/span&&/a&&p&code:(PyTorch)&/p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/glample/Arnold& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic4.zhimg.com/v2-03452afe22c9ff6d5bdad58c29a4c5f7_ipico.jpg& data-image-width=&420& data-image-height=&420& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&glample/Arnold&/a&&p&&/p&
这篇论文是Ruslan的phd Chaplot写的,Chaplot是一个很nice的印度小哥,与他交流的时候很不错。他说当时做这个项目的时候,比较困难的就是收敛速度太慢,所以才会把game feature加入到里面。Chaplot最后拿到了Visual Doom AI Competition 2017 Full Deathmat…
&figure&&img src=&https://pic3.zhimg.com/v2-a5eeae46dbdc236cc1ab062acda6d63d_b.jpg& data-rawwidth=&607& data-rawheight=&335& class=&origin_image zh-lightbox-thumb& width=&607& data-original=&https://pic2.zhimg.com/v2-a5eeae46dbdc236cc1ab062acda6d63d_r.jpg&&&/figure&&h2&第二讲 MARL中经典算法的简单介绍&/h2&&p&在这一讲中,我们会介绍一下在MARL中常见的一些算法,并进行简单的归类与整理,同时简单地介绍下这些经典算法解决的是什么类型的问题,出发点是什么等等背景。并在之后的几讲中对提出算法的paper进行更详细的介绍,同时会在github上开个仓库 ,简单地实现一下这些经典算法。&/p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/wwxFromTju/MARL-101& data-draft-node=&block& data-draft-type=&link-card& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&github&/a&&h2&MAS背景回顾&/h2&&p&距离上次的第一讲已有些时间,这里就重新简单地介绍一下多智能体(MAS)的背景。如果用一句话简单地介绍MAS的话,那么其实可以这么说:考虑多个agent之间交互的系统。MAS很大部分是基于single agent进行数量上的扩展,并在扩展之后考虑agent之间交互的研究方向。&/p&&p&不严谨地说,single agent你可以理解成一个独立AI所应该具有的能力,比如计算机视觉(CV)中的:辨识一个物体是什么,辨识一张人脸是谁,这一类人类视觉的能力;或者比如自然语言处理(NLP)与语言方向的研究:理解一段话的含义,可以做阅读理解,能够听懂不同口音的语音的含义(身为福建人觉得这个很重要!)等等。这些方面其实都可以理解成一个独立的人类(AI)所具有的一项项skill。&/p&&p&还是不严谨地说,multiagent system呢,我认为是关注在多个agent直接的交互。这一点其实很有意义,在现实世界中,很多情况下将问题建模成多个agent更符合常理,同时也更自然。比如现在的无人车控制,如果你真考虑让无人车上路,那么你其实特别需要考虑是这些无人车之间怎么交互,一辆车如果突然刹车了对其他车的影响要怎么解决?怎么样合理规划路线,让道路不拥堵?如果是不停的有车离开,有车加入的ad-hoc形式的呢?这样的问题也可以考虑用single agent的角度来考虑,就是一个超级大脑来控制,但是single agent必然会带啦很多问题,比如单点故障,是否有相应的计算能力等等。而如果将每一辆车都看成一个agent,那么就自然很多了!&/p&&h2&MARL算法介绍&/h2&&p&在上一讲中,我简单地提到我对MAS的兴趣集中在MARL中,在MARL中的实验环境通常是分为一下几种:完全合作的任务,完全竞争的任务,混合着竞争与合作的任务&/p&&p&&br&&/p&&h2&完全合作的任务&/h2&&p&在完全合作的环境中,agents与环境进行交互与学习,在交互与学习的过程中,agents获得相同的reward信号,即如果它们合作做的很好,那么就告诉给它们正的reward,如果它们并没有合作,或者没有做的比较好的时候,就不给予reward,甚至给予负的reward(cost),更一般地说法:agent具有相同的奖励函数(如果有不同的reward,那么也可以将这些reward相加,那么就可以转化成这样同一个reward的性质了,目的就是最大化全局的reward)。&/p&&p&所以,在这类的环境中,学习目标当然是:最大化折扣累计回报了。即所有agent一起努力,将大家的reward最大化。因为agent之间的目标并不冲突,所以可以直接地将single agent的算法直接运用过来(注意一下,因为reward函数相同,所以这个思路很直接),那么用过来就会有一个建模的问题:我是应该single agent还是multiagent呢?&/p&&p&single agent就是将所有agent的action看成一个action的向量,所以这个single agent的学习目标是学习出一个policy能够在每个state下做出相应的action向量,让折扣累积收益最大。&/p&&p&multiagent的角度呢,就是将每个agent单独拿出来学习,每个agent决定一个action,从集中式的action向量拆分成一个个独立的action。这样的方法就是independent q-learning。&/p&&p&但是直接independent q-learning会带来一些效率与其他的问题,比如agent直接的action可能会相互影响,导致最终收敛到的policy并不是全局最优的policy。比如:最优的策略是所有agent采用相同的action,一旦有一个action不同就给予很大的惩罚,那么在学习探索的过程中,因为惩罚的存在,agent可能很难学到这个最优的policy。&/p&&p&之后这部分可能涉及的算法有:JAL,FMQ,Team-Q,Distributed-Q,OAL&/p&&p&&br&&/p&&h2&完全竞争的任务&/h2&&p&在完全竞争的环境中,可以很直观地理解为:每个agent都是只关心自己的reward,想要最大化自己的reward,并不考虑自己想要最大化自己的reward的action对于他人的影响。(有点像:我死后哪怕洪水滔天那种感觉)&/p&&p&一个比较常见的环境就是:两个agent在环境中交互,他们的reward互相为相反数,即 &img src=&http://www.zhihu.com/equation?tex=r_1+%3D+-+r2& alt=&r_1 = - r2& eeimg=&1&& 。在这样的环境中,最大化自己的reward就是最效果对手的reward,所以agent间不能存在合作与竞争的可能,这样的环境很常见,很多双人的棋类的游戏的reward经常就这样进行设计,比如围棋,alphago的目的就是最大化自己的胜率,最小化对手的胜率。&/p&&p&在这种环境中做planing的话,一种很经典的做法就是冯诺伊曼的minimax的算法,这里就不展开来讲,但是我们可以把这个思想扩展到MARL中agent的学习过程,比如minimax Q-learning:&img src=&http://www.zhihu.com/equation?tex=+Q_1+%3D+max_%7Ba_1%7Dmin_%7Ba_2%7DQ%28s%2C+a_1%2C+a_2%29+& alt=& Q_1 = max_{a_1}min_{a_2}Q(s, a_1, a_2) & eeimg=&1&&&/p&&p&这个任务中,我们只会介绍minimax Q-leanring,因为很多在混合着竞争与合作的任务中算法的思想是可以迁移到完全竞争的环境中的&/p&&p&&br&&/p&&h2&混合着竞争与合作的任务&/h2&&p&这是我觉得最有趣的实验环境,在这个环境中,agent依然是独立获得自己的reward,但是reward的设计非常有意思,当每个agent只考虑最大化自己的reward时,反而可能会使得自己的reward与另外agent的reward陷入更差的情况。以囚徒困境来讲: &/p&&figure&&img src=&https://pic4.zhimg.com/v2-a048a76dedf_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&476& data-rawheight=&204& class=&origin_image zh-lightbox-thumb& width=&476& data-original=&https://pic4.zhimg.com/v2-a048a76dedf_r.jpg&&&/figure&&p&当agent想要最大化自己的reward时,每个agent都会选择背叛-背叛,因为在这种情况下:当另外的agent选择合作时,我能获得5的reward,比3高;当另外的agent选择竞争时,我能获得1的reward,比0高,这也就是所谓的nash均衡。所以当两个agent都这么考虑的话,最终就是竞争-竞争,agent的reward都是1,但是其实我们观察局面,会发现可能存在一种更好的结果,那就是:合作-合作,这样的话,双方的reward都是3,3比1好,同时两个agent的total reward为6,比任意的情况都好。&/p&&p&但是很多情况下我们并不知道另外一个agent会是什么类型,环境的reward是什么类型,所以其实学习出Nash均衡的策略在这样的环境中是一种保守的选择,虽然没有合作-合作好,但是确保了自己的reward,从这个角度出发,有:Nash-Q。Nash-Q或许好,但是我们却希望能够在学习中尝试与对手合作,达成合作-合作的局面,如果不可以的话,最终再收敛到竞争-竞争的局面。&/p&&p&所以在这种情况下会有很多有趣的问题,我们也会介绍更多的算法:WoLF-IGA,WoLF-PHC,GIGA,GIGA-WoLF,CE-Q等等算法。&/p&
第二讲 MARL中经典算法的简单介绍在这一讲中,我们会介绍一下在MARL中常见的一些算法,并进行简单的归类与整理,同时简单地介绍下这些经典算法解决的是什么类型的问题,出发点是什么等等背景。并在之后的几讲中对提出算法的paper进行更详细的介绍,同时会在…
&figure&&img src=&https://pic1.zhimg.com/v2-157f347e24da933b0786e_b.jpg& data-rawwidth=&1600& data-rawheight=&1200& class=&origin_image zh-lightbox-thumb& width=&1600& data-original=&https://pic3.zhimg.com/v2-157f347e24da933b0786e_r.jpg&&&/figure&&p&写在前面:在我写这篇文章的时候,arxiv上有关使用subgoals辅助强化学习训练的文章如雨后春笋一般冒了出来,可能大家也认为这个是强化学习的一个突破的方向。&/p&&p&&br&&/p&&p&在我的上一篇专栏文章中,提到离散的reward会导致训练困难,训练困难的主要原因是agent难于在随机策略中获取reward时,会导致探索所得到的reward大多全为0,少量的reward不为0的trajectory也不足以训练出一个好的agent:&/p&&a href=&https://zhuanlan.zhihu.com/p/& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic4.zhimg.com/v2-927a9c0fd205c7e140eda619df8f414f_180x120.jpg& data-image-width=&1600& data-image-height=&1200& class=&internal&&普通的飞空圆盘:深度强化学习的弱点和局限&/a&&p&然而,Deepmind的大佬们在日在arxiv上发表了一篇文章:&/p&&p&&b&Learning by Playing – Solving Sparse Reward Tasks from Scratch&/b&&/p&&p&链接如下:&/p&&a href=&https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/.pdf& data-draft-node=&block& data-draft-type=&link-card& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&arxiv.org/pdf/&/span&&span class=&invisible&&7.pdf&/span&&span class=&ellipsis&&&/span&&/a&&p&该文章提出了名为SAC-X(Scheduled Auxiliary Control)的新的强化学习范式,专门针对难于训练的离散reward场景。该范式使用设计好的辅助reward,训练一些辅助的学习任务,通过完成这些辅助的任务,提升对环境的探索(explore)效率。&/p&&p&本文通过对机械臂操作的强化学习训练,证实了该方法的有效性。本文还附带了一个youtube视频地址,以展示他们的学习效果:&/p&&a href=&https://link.zhihu.com/?target=https%3A//www.youtube.com/watch%3Fv%3DmPKyvocNe_M%26feature%3Dyoutu.be& data-draft-node=&block& data-draft-type=&link-card& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&youtube.com/watch?&/span&&span class=&invisible&&v=mPKyvocNe_M&feature=youtu.be&/span&&span class=&ellipsis&&&/span&&/a&&p&这篇文章主要有如下几个要点:&/p&&p&1、每个状态-动作(state-action)的对都附带了一系列reward,其中包含辅助的reward和目标reward&/p&&p&2、针对每一个reward都会存在一个策略,称作Intention,是用来最大化对应reward的&/p&&p&3、有一个高层的调度器,通过选择执行的策略(Intention)来提升目标reward&/p&&p&4、学习是off-policy的,而且策略(Intention)之间的经验(experience)是共享的&/p&&p&&br&&/p&&p&接下来,我将分别介绍学习辅助策略(Intention)和学习调度器的算法,我们的目标是通过学习辅助策略,来更有效的探索离散reward情况下的主要的MDP&/p&&p&先写一下文章中的各个记号:&/p&&figure&&img src=&https://pic3.zhimg.com/v2-bf_b.jpg& data-size=&normal& data-rawwidth=&225& data-rawheight=&43& class=&content_image& width=&225&&&figcaption&辅助的MDP&/figcaption&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-6bfd03678bcb9e549b4c56ad65a5bf13_b.jpg& data-size=&normal& data-rawwidth=&34& data-rawheight=&28& class=&content_image& width=&34&&&figcaption&主任务&/figcaption&&/figure&&figure&&img src=&https://pic2.zhimg.com/v2-a5d1c45d1bb_b.jpg& data-size=&normal& data-rawwidth=&220& data-rawheight=&49& class=&content_image& width=&220&&&figcaption&任务全集&/figcaption&&/figure&&p&一、学习辅助策略(Intention)&/p&&p&对某个任务 &img src=&https://www.zhihu.com/equation?tex=%5Ctau& alt=&\tau& eeimg=&1&& 来说,Q函数如下定义:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-7add6af7e75f_b.jpg& data-size=&normal& data-rawwidth=&629& data-rawheight=&85& class=&origin_image zh-lightbox-thumb& width=&629& data-original=&https://pic2.zhimg.com/v2-7add6af7e75f_r.jpg&&&figcaption&需要注意的是这个公式不是Bellman equation&/figcaption&&/figure&&p&我们设定所有任务的总目标是找到决策策略参数 &img src=&https://www.zhihu.com/equation?tex=%5Ctheta& alt=&\theta& eeimg=&1&&(注意是决策策略参数,不是估值参数,也不是调度器参数) ,使得 &img src=&https://www.zhihu.com/equation?tex=L%28%5Ctheta%29& alt=&L(\theta)& eeimg=&1&& 最大:&/p&&figure&&img src=&https://pic1.zhimg.com/v2-43a7f668abdfaa9e087128_b.jpg& data-size=&normal& data-rawwidth=&662& data-rawheight=&224& class=&origin_image zh-lightbox-thumb& width=&662& data-original=&https://pic1.zhimg.com/v2-43a7f668abdfaa9e087128_r.jpg&&&figcaption&这两个公式也很好理解&/figcaption&&/figure&&p&同时我们向 &img src=&https://www.zhihu.com/equation?tex=L%28%5Ctheta%29& alt=&L(\theta)& eeimg=&1&& 中添加一个熵项,使得算法更倾向于探索,另外,我们将Q函数换成带有参数 &img src=&https://www.zhihu.com/equation?tex=%5Cphi& alt=&\phi& eeimg=&1&& 的函数 &img src=&https://www.zhihu.com/equation?tex=%5Chat%7BQ%7D_%5Ctau%5E%5Cpi%28s_t%2C+a%3B+%5Cphi%29& alt=&\hat{Q}_\tau^\pi(s_t, \phi)& eeimg=&1&& ,则 &img src=&https://www.zhihu.com/equation?tex=L%28%5Ctheta%29& alt=&L(\theta)& eeimg=&1&& 的梯度如下所示:&/p&&figure&&img src=&https://pic2.zhimg.com/v2-c290d3ded8d3ac984bc3_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&678& data-rawheight=&137& class=&origin_image zh-lightbox-thumb& width=&678& data-original=&https://pic4.zhimg.com/v2-c290d3ded8d3ac984bc3_r.jpg&&&/figure&&p&但是这个 &img src=&https://www.zhihu.com/equation?tex=L%28%5Ctheta%29& alt=&L(\theta)& eeimg=&1&& 是没法求导的,主要是因为action与参数 &img src=&https://www.zhihu.com/equation?tex=%5Ctheta& alt=&\theta& eeimg=&1&& 之间的关系没有定义,在这里,他们认为所有执行action的策略都是高斯策略(由于控制机器人手臂的动作空间是连续动作空间,因此采用高斯策略的模型),即:&/p&&p&&img src=&https://www.zhihu.com/equation?tex=%5Cpi_%5Ctheta%28a%7Cs_t%2C%5Ctau%29+%3D+N%28%5Cmu+_%5Ctheta%28s_t%29%2C%5Csigma_%5Ctheta%5E2%28s_t%29%29& alt=&\pi_\theta(a|s_t,\tau) = N(\mu _\theta(s_t),\sigma_\theta^2(s_t))& eeimg=&1&&&/p&&p&由于单纯的学习 &img src=&https://www.zhihu.com/equation?tex=%5Cmu+_%5Ctheta%28s_t%29& alt=&\mu _\theta(s_t)& eeimg=&1&&和 &img src=&https://www.zhihu.com/equation?tex=%5Csigma_%5Ctheta%28s_t%29& alt=&\sigma_\theta(s_t)& eeimg=&1&& 所得到的高斯策略方差大,同时在基于神经网络的学习策略中,采样会使得 &img src=&https://www.zhihu.com/equation?tex=%5Cmu+_%5Ctheta%28s_t%29& alt=&\mu _\theta(s_t)& eeimg=&1&&和 &img src=&https://www.zhihu.com/equation?tex=%5Csigma_%5Ctheta%28s_t%29& alt=&\sigma_\theta(s_t)& eeimg=&1&& 不可导,所以他们采用了reparameterization trick(重参数化)来使得这个目标能够求导。&/p&&p&类似的重参数化在VAE(变分自编码器)当中也出现过,在这里,我们设定:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-b0ad6f8c2b7dd_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&376& data-rawheight=&36& class=&content_image& width=&376&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-ecda0ae92f19a508f60df1_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&154& data-rawheight=&39& class=&content_image& width=&154&&&/figure&&p&这样,我们从 &img src=&https://www.zhihu.com/equation?tex=%5Cepsilon_a& alt=&\epsilon_a& eeimg=&1&& 当中采样,获得的 &img src=&https://www.zhihu.com/equation?tex=g_%5Ctheta& alt=&g_\theta& eeimg=&1&& 就相当于 &img src=&https://www.zhihu.com/equation?tex=%5Cpi_%5Ctheta%28a%7Cs_t%2C%5Ctau%29& alt=&\pi_\theta(a|s_t,\tau)& eeimg=&1&& ,于是有:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-85d7bfadbb29cc7da2c0311dc3dcb111_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&668& data-rawheight=&336& class=&origin_image zh-lightbox-thumb& width=&668& data-original=&https://pic2.zhimg.com/v2-85d7bfadbb29cc7da2c0311dc3dcb111_r.jpg&&&/figure&&p&这样就可以进行梯度下降的优化了。&/p&&p&二、学习调度器&/p&&p& 设&img src=&https://www.zhihu.com/equation?tex=%5Cxi& alt=&\xi& eeimg=&1&&为调度器可以在目标之前切换的时间段,设H为所有可能切换的目标数量,则主任务获取的reward为:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-ee1ab258df2e3a50b16f46_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&605& data-rawheight=&169& class=&origin_image zh-lightbox-thumb& width=&605& data-original=&https://pic3.zhimg.com/v2-ee1ab258df2e3a50b16f46_r.jpg&&&/figure&&p&设定调度策略为:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-b522aed007dd9f1d1caded_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&164& data-rawheight=&55& class=&content_image& width=&164&&&/figure&&p&我们在调度器加入之后,算法总体的决策策略为:&/p&&figure&&img src=&https://pic1.zhimg.com/v2-199f7affb8926efd7de16b_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&650& data-rawheight=&75& class=&origin_image zh-lightbox-thumb& width=&650& data-original=&https://pic4.zhimg.com/v2-199f7affb8926efd7de16b_r.jpg&&&/figure&&p&我们的优化目标为:&/p&&figure&&img src=&https://pic1.zhimg.com/v2-e562dfe4dc68_b.jpg& data-size=&normal& data-rawwidth=&658& data-rawheight=&76& class=&origin_image zh-lightbox-thumb& width=&658& data-original=&https://pic1.zhimg.com/v2-e562dfe4dc68_r.jpg&&&figcaption&以上这些公式都是很简单的公式,只是标号繁杂,需要注意分辨&/figcaption&&/figure&&p&这里,需要注意的是,优化调度器时,我们会使决策策略参数 &img src=&https://www.zhihu.com/equation?tex=%5Ctheta& alt=&\theta& eeimg=&1&& 保持不变&/p&&p&和优化决策策略不同的是,我们必须让调度器能够尽快地适应收集到的经验的变化,这里我们就不能使用神经网络之类的模型,因为神经网络优化很慢。设我们的最优调度器为:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-c75ca18f36fc3b53b466979cafaa9723_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&506& data-rawheight=&81& class=&origin_image zh-lightbox-thumb& width=&506& data-original=&https://pic4.zhimg.com/v2-c75ca18f36fc3b53b466979cafaa9723_r.jpg&&&/figure&&p&则方程(8)可以通过玻尔兹曼分布来近似:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-79ec870ecd1f3eaa8e0c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&660& data-rawheight=&122& class=&origin_image zh-lightbox-thumb& width=&660& data-original=&https://pic1.zhimg.com/v2-79ec870ecd1f3eaa8e0c_r.jpg&&&/figure&&p&&img src=&https://www.zhihu.com/equation?tex=%5Ceta& alt=&\eta& eeimg=&1&& 是温度参数,温度高的话,算法趋向于尝试随机的策略,温度低的话算法趋向于选择最优的策略,这里文章里有个小错误,他们说温度高算法趋向于最优策略。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-900d34b508bc59db59b03_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&662& data-rawheight=&157& class=&origin_image zh-lightbox-thumb& width=&662& data-original=&https://pic4.zhimg.com/v2-900d34b508bc59db59b03_r.jpg&&&/figure&&p&最后,讲一下Q函数的获取策略:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-70e6ad2d9ef05a416c60c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&565& data-rawheight=&121& class=&origin_image zh-lightbox-thumb& width=&565& data-original=&https://pic1.zhimg.com/v2-70e6ad2d9ef05a416c60c_r.jpg&&&/figure&&p&至少50次的蒙特卡洛模拟得到的。&/p&&p&使用方程(9)描述的优化策略,和方程(11)描述的调度策略,我们可以获取总体决策策略方程(7)&/p&&p&作者使用了Retrace算法来进行优化,我的上一篇文章&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&星际&强化学习:虫群式的强化学习框架&/a&使用的优化算法就是基于retrace的。&/p&&p&具体引用信息:&/p&&p&Munos, Remi, Stepleton, Tom, Harutyunyan, Anna, and Bellemare, ?Marc G. Safe and efficient off-policy reinforcement learning. In Neural Information Processing Systems (NIPS), 2016. &/p&&p&优化的方程:&/p&&figure&&img src=&https://pic1.zhimg.com/v2-feea0ebe622a_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&665& data-rawheight=&318& class=&origin_image zh-lightbox-thumb& width=&665& data-original=&https://pic3.zhimg.com/v2-feea0ebe622a_r.jpg&&&/figure&&p&这里我对此不多加说明,感兴趣的读者可以参阅我上一篇文章&/p&&p&至于神经网络的架构,如下图所示:&/p&&figure&&img src=&https://pic7.zhimg.com/v2-3e632bfcf1b61c6905054_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&685& data-rawheight=&533& class=&origin_image zh-lightbox-thumb& width=&685& data-original=&https://pic1.zhimg.com/v2-3e632bfcf1b61c6905054_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-bad8a0e124c61a1be6f175d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&677& data-rawheight=&486& class=&origin_image zh-lightbox-thumb& width=&677& data-original=&https://pic2.zhimg.com/v2-bad8a0e124c61a1be6f175d_r.jpg&&&/figure&&p&应该也不用过多地解释。&/p&&p&&br&&/p&&p&最后我们看一下实验结果:&/p&&p&作者提出的算法在机械臂的控制场景下有很好的表现,尤其是在最困难的任务:把物体放入盒子中,作者提出的算法是唯一有效果的算法:&/p&&figure&&img src=&https://pic2.zhimg.com/v2-3ea5d219ab198bfbd44c32da6e39c92c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&680& data-rawheight=&457& class=&origin_image zh-lightbox-thumb& width=&680& data-original=&https://pic1.zhimg.com/v2-3ea5d219ab198bfbd44c32da6e39c92c_r.jpg&&&/figure&&figure&&img src=&https://pic2.zhimg.com/v2-ebe850e6e3e258bbea86be_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&685& data-rawheight=&678& class=&origin_image zh-lightbox-thumb& width=&685& data-original=&https://pic3.zhimg.com/v2-ebe850e6e3e258bbea86be_r.jpg&&&/figure&&p&&br&&/p&&p&&b&评论&/b&:这篇文章的工作利用了辅助学习目标,通过调度器调度在不同辅助目标上学习的策略,来增加对environment探索的效率,最终提升强化学习算法的性能。虽然这个算法看上去很厉害,只需要sparse的reward设置就能完成训练,但是辅助目标的训练是需要一定先验知识的,作者宣称辅助目标的选取非常容易,但是在SI中作者对辅助目标也是做了不少类似于特征工程的处理的。&/p&&p&另外我感觉这篇文章还是处于草稿状态,很多地方逻辑并不很通顺,也有一些小的错误。同时文章里面符号复杂,这导致我看的很累,最终写的文章也很粗糙,还希望大家见谅。&/p&&p&不过这篇文章的实验还是相当扎实的,文章的idea比较新颖,调度器直接用玻尔兹曼分布来建模,也是我一开始没想到的。在正确选取辅助目标和辅助reward的情况下,该算法应当有很好的效果。&/p&&p&&br&&/p&&p&这一期讲了一篇和星际争霸没有太多关系的文章,下一期可能会考虑讲一下星际争霸运营相关的文章综述或者AAAI18年的best student paper,是做星际微操的,敬请大家期待。&/p&
写在前面:在我写这篇文章的时候,arxiv上有关使用subgoals辅助强化学习训练的文章如雨后春笋一般冒了出来,可能大家也认为这个是强化学习的一个突破的方向。 在我的上一篇专栏文章中,提到离散的reward会导致训练困难,训练困难的主要原因是agent难于在随…
&figure&&img src=&https://pic3.zhimg.com/v2-9af2d4ca882b46b75dee1_b.jpg& data-rawwidth=&704& data-rawheight=&381& class=&origin_image zh-lightbox-thumb& width=&704& data-original=&https://pic2.zhimg.com/v2-9af2d4ca882b46b75dee1_r.jpg&&&/figure&&p&更新:&/p&&p&Deepmind在2018年ICLR会议上发表(水)了一篇文章:&/p&&p&&i&DISTRIBUTED PRIORITIZED EXPERIENCE REPLAY&/i&&/p&&a href=&http://link.zhihu.com/?target=https%3A//arxiv.org/abs/& data-draft-node=&block& data-draft-type=&link-card& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&[] Distributed Prioritized Experience Replay&/a&&p&这篇文章的分布式学习架构的核心思想与IMPALA架构思想非常类似,但是似乎除了提出了这个架构,做了很多实验之外也没有什么新的东西,大家可以去看一看~&/p&&p&&br&&/p&&p&-----------------------------------------分割线--------------------------------------------&/p&&p&&br&&/p&&p&大家好,从这一期开始我将开启一个新的专题:&b&星际&强化学习&/b&。在该专题中,我将和大家一起阅读一些星际相关的强化学习文献,并且对文章内容进行分析与评述。&/p&&p&这一期阅读的文献是Deepmind在2018年2月发布在Arxiv上的强化学习文献:&/p&&p&&i&IMPALA: Scalable Distributed Deep-RL with Importance Weighted Actor-Learner Architectures&/i&&/p&&p&文献链接如下:&/p&&a href=&http://link.zhihu.com/?target=https%3A//arxiv.org/abs/& data-draft-node=&block& data-draft-type=&link-card& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Scalable Distributed Deep-RL with Importance Weighted Actor-Learner Architectures&/a&&p&在这篇文章中,作者发展了新的异步强化学习框架,并且使用V-trace表示Critic函数,弥合了off-policy算法中执行策略(behavior strategy)与目标策略(target policy)之间的空缺。&/p&&p&由于该异步框架并不像经典的A3C算法那样,由分布式的actor学习策略参数,并且阶段性地与中央服务器分享梯度,而是由分布式的actor收集经验,将收集到的经验传回中央服务器,由中央服务器进行学习,并且由中央服务器周期性地推送参数更新到各个分布式的actor上。&/p&&p&这种行为非常类似虫群的组织模式:一个主宰收集所有虫族个体的经验信息,并且分析,改变策略,并且最终将改变后的策略更新到每个虫族个体上。因此我将其称为“虫群式的强化学习框架”。&/p&&p&另外,该文章发表了DMLAB-30多任务强化学习环境,在该强化学习环境下,IMPALA算法有非常优秀的表现。&/p&&p&接下来我将分别从新的分布式强化学习框架和新的值函数更新算法V-trace两个方面解读这篇文献。&/p&&p&&br&&/p&&p&一、强伸缩性分布式强化学习框架:IMPALA&/p&&p&如果读者做过一些强化学习的训练实验,应当会知道,制约强化学习效果的一个很重要的因素是强化学习从环境中采样的效率太低。以星际争霸II的环境举例,linux下启动一次星际争霸环境或者刷新一次星际争霸环境需要3到4秒的时间,在不打开星际争霸图形渲染的情况下,最高加速的速度约为16倍速。这样计算下来训练一个eposide大约需要5到10秒的时间,然而训练出一个强化学习模型,需要上万甚至上十万个eposide的训练,这个时间是不可接受的。&/p&&p&因此在2016年,deepmind发表了大名鼎鼎的A3C算法[1]。A3C算法使用多个分布式actor来学习模型参数。每个actor会周期性地暂停学习,将它们已经计算得出的梯度信息分享至中央参数服务器,而后者会对此进行更新。&/p&&p&A3C算法通过多个actor同时学习策略并异步更新参数的方式,极大的提升了采样效率。但是A3C算法一般来说对GPU的利用效率不高。一般的服务器会有一个或者几个GPU,但是CPU的数目可能达到几十甚至上百个。由于A3C算法中每一个分布式的Actor都需要进行参数的学习,而为每一个actor都配备一块GPU很显然是不现实的,所以A3C算法一般只能使用cpu进行训练。&/p&&p&为了提升GPU的使用效率,并且利用分布式学习效率高的优点,2016年Babaeizadeh等人发表了GA3C的文献[2],宣称其可以有效利用GPU。&/p&&p&GA3C由三个部分组成:Agent, Predictor, Trainer。&/p&&p&Agent:只是与环境(environment)交互的接口,每当执行一个action之前,Agent都要和Predictor进行一次交互,请求获取该state对应的action,执行完毕action之后,再将收集到的轨迹和reward发送给Trainer执行训练。&/p&&p&Predictor:运行模型,获得action推送的state数据,返回该state下执行的action&/p&&p&Trainer:训练模型,获取action推送的轨迹数据与reward数据,训练模型。&/p&&p&这样一个框架与本篇文章介绍的IMPALA框架已经非常类似了,所不同的一点在于,IMPALA算法中,Agent与Predictor合为一体,由分布式的actor直接执行策略生成轨迹,并且将收集到的轨迹传回训练服务器进行训练。&/p&&p&另外,GA3C系统训练不稳定,而这个缺点在本文中使用V-trace算法得以解决。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-e80f019a257dff81be600ab_b.jpg& data-size=&normal& data-rawwidth=&900& data-rawheight=&649& class=&origin_image zh-lightbox-thumb& width=&900& data-original=&https://pic4.zhimg.com/v2-e80f019a257dff81be600ab_r.jpg&&&figcaption&IMPALA框架的训练机制,actor向learner传递Observation,Learner向actor传递训练好的参数&/figcaption&&/figure&&p&该框架的加速效果非常明显,而且有很高的伸缩性,新的actor服务器可以很容易地加入到训练的过程中。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-47bfc84ea253c34e58dfd6_b.jpg& data-size=&normal& data-rawwidth=&1531& data-rawheight=&595& class=&origin_image zh-lightbox-thumb& width=&1531& data-original=&https://pic4.zhimg.com/v2-47bfc84ea253c34e58dfd6_r.jpg&&&figcaption&该算法的吞吐量以及计算效率高于其他对比算法&/figcaption&&/figure&&p&二、新的值函数V-trace&/p&&p&V-trace的更新策略如下:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-32b8d458d01bdfaf0939fb_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&575& data-rawheight=&99& class=&origin_image zh-lightbox-thumb& width=&575& data-original=&https://pic4.zhimg.com/v2-32b8d458d01bdfaf0939fb_r.jpg&&&/figure&&p&其中:&/p&&figure&&img src=&https://pic3.zhimg.com/v2-90ca6fbe6e30b74fa97c3c1ddda39b5a_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&417& data-rawheight=&47& class=&content_image& width=&417&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-faabbfe6fa1c4c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&277& data-rawheight=&63& class=&content_image& width=&277&&&/figure&&p&&img src=&http://www.zhihu.com/equation?tex=c_i%5Coverset%7Bdef%7D%7B%3D%7D+%5Cmin%28%5Cbar+c%2C+%5Cfrac%7B%5Cpi%28a_i%7Cx_i%29%7D%7B%5Cmu%28a_i%7Cx_i%29%7D%29& alt=&c_i\overset{def}{=} \min(\bar c, \frac{\pi(a_i|x_i)}{\mu(a_i|x_i)})& eeimg=&1&&&/p&&p&(我不知道知乎编辑器怎么居中,大家将就看吧)&/p&&p&&br&&/p&&p&这里可能很多人看不懂,我为大家从源头解释一下:&/p&&p&在On-policy场景,根据Bellman公式,值函数的更新策略可以如下表示:&/p&&figure&&img src=&https://pic2.zhimg.com/v2-707af17db07d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&636& data-rawheight=&66& class=&origin_image zh-lightbox-thumb& width=&636& data-original=&https://pic2.zhimg.com/v2-707af17db07d_r.jpg&&&/figure&&p&在off-policy场景,由于目标策略(target policy)与执行策略(behavior policy)之间的差异,因此我们需要Importance Sampling来修正这个差异,Importance Sampling的值是: &img src=&http://www.zhihu.com/equation?tex=%5Cprod_%7Bi%3Ds%7D%5E%7Bt-1%7D%5Cfrac%7B%5Cpi%28a_i%7Cx_i%29%7D%7B%5Cmu%28a_i%7Cx_i%29%7D& alt=&\prod_{i=s}^{t-1}\frac{\pi(a_i|x_i)}{\mu(a_i|x_i)}& eeimg=&1&& 。&/p&&p&于是我们有:&/p&&p&&img src=&http://www.zhihu.com/equation?tex=v_s%3DV%28x_s%29%2B%5Csum_%7Bt%3Ds%7D%5E%7Bs%2Bn-1%7D%5Cgamma%5E%7Bt-s%7D%28%5Cprod_%7Bi-s%7D%5E%7Bt-1%7D%5Cfrac%7B%5Cpi%28a_i%7Cx_i%29%7D%7B%5Cmu%28a_i%7Cx_i%29%7D%29%28r_t%2B%5Cgamma+V%28x_%7Bt%2B1%7D%29-V%28x_t%29%29& alt=&v_s=V(x_s)+\sum_{t=s}^{s+n-1}\gamma^{t-s}(\prod_{i-s}^{t-1}\frac{\pi(a_i|x_i)}{\mu(a_i|x_i)})(r_t+\gamma V(x_{t+1})-V(x_t))& eeimg=&1&&&/p&&p&然而在传统Importance Sampling中,方差容易不稳定[3],在这篇文章中,为了保证方差稳定,将Importance Sampling截断到c的平均值,于是就使用 &img src=&http://www.zhihu.com/equation?tex=c_i%5Coverset%7Bdef%7D%7B%3D%7D+%5Cmin%28%5Cbar+c%2C+%5Cfrac%7B%5Cpi%28a_i%7Cx_i%29%7D%7B%5Cmu%28a_i%7Cx_i%29%7D%29& alt=&c_i\overset{def}{=} \min(\bar c, \frac{\pi(a_i|x_i)}{\mu(a_i|x_i)})& eeimg=&1&& 来代替其中的importance sampling。&/p&&p&查看我们得到的公式,与原公式对比,发现还缺少一个 &img src=&http://www.zhihu.com/equation?tex=%5Crho_t& alt=&\rho_t& eeimg=&1&& ,这个 &img src=&http://www.zhihu.com/equation?tex=%5Crho_t& alt=&\rho_t& eeimg=&1&& 定义了V-trace的不动点,原公式的不动点为这样的一个值函数 &img src=&http://www.zhihu.com/equation?tex=V%5E%7B%5Cpi_%5Cbar%7Bp%7D%7D& alt=&V^{\pi_\bar{p}}& eeimg=&1&& ,该值函数所对应的策略为:&/p&&figure&&img src=&https://pic2.zhimg.com/v2-d12e8ef9eb06440fff181d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&584& data-rawheight=&101& class=&origin_image zh-lightbox-thumb& width=&584& data-original=&https://pic2.zhimg.com/v2-d12e8ef9eb06440fff181d_r.jpg&&&/figure&&p&如果考虑 &img src=&http://www.zhihu.com/equation?tex=%5Cbar%7B%5Crho%7D& alt=&\bar{\rho}& eeimg=&1&& 是无穷大的情况,那么可以得知:&/p&&p&&img src=&http://www.zhihu.com/equation?tex=%EF%BC%883%EF%BC%89%3D%5Cfrac%7B%5Cpi%28a%7Cx%29%7D%7B%5Csum_%7Bb%5Cin+A%7D%5Cpi%28b%7Cx%29%7D%3D%5Cpi%28a%7Cx%29& alt=&(3)=\frac{\pi(a|x)}{\sum_{b\in A}\pi(b|x)}=\pi(a|x)& eeimg=&1&&&/p&&p&这就是目标策略。&/p&&p&但是当我们的 &img src=&http://www.zhihu.com/equation?tex=%5Cbar%7B%5Crho%7D& alt=&\bar{\rho}& eeimg=&1&& 并非无穷大的时候,所生成的策略 &img src=&http://www.zhihu.com/equation?tex=%5Cpi_%5Cbar%7Bp%7D& alt=&\pi_\bar{p}& eeimg=&1&& 则是在目标策略与执行策略之间的。 这样就弥合了两个策略之间的差异。&/p&&p&&br&&/p&&p&讨论完了V-trace的组成,剩下的具体算法就没有什么新奇的地方了,参数更新的策略如下:&/p&&p&值函数按如下方向更新:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-eba72acda86af7e25c470e5f_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&323& data-rawheight=&51& class=&content_image& width=&323&&&/figure&&p&策略函数按如下方向更新:&/p&&figure&&img src=&https://pic3.zhimg.com/v2-87a410c9ad86d34500cfb_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&513& data-rawheight=&64& class=&origin_image zh-lightbox-thumb& width=&513& data-original=&https://pic3.zhimg.com/v2-87a410c9ad86d34500cfb_r.jpg&&&/figure&&p&为了防止过早收敛,算法不能达到最优解,需要加上一个熵奖励(entropy bonus)&/p&&figure&&img src=&https://pic1.zhimg.com/v2-8f49f23a99bb84e29bb4_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&375& data-rawheight=&76& class=&content_image& width=&375&&&/figure&&p&最后,按照上述策略更新就可以了。&/p&&p&&br&&/p&&p&另外,本文提出了DMLAB-30这个多任务的机器学习环境,IMPALA框架非常适合多任务的学习,在该环境中表现的很好。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-6dfbcefc1114a8dff8e10_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&656& data-rawheight=&596& class=&origin_image zh-lightbox-thumb& width=&656& data-original=&https://pic1.zhimg.com/v2-6dfbcefc1114a8dff8e10_r.jpg&&&/figure&&p&即使是在经典的Atari游戏的训练场景中,IMPALA也有超越以前算法的表现&/p&&figure&&img src=&https://pic2.zhimg.com/v2-dd8f26bfc636d18e39475_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&674& data-rawheight=&353& class=&origin_image zh-lightbox-thumb& width=&674& data-original=&https://pic2.zhimg.com/v2-dd8f26bfc636d18e39475_r.jpg&&&/figure&&p&三、总结&/p&&p&这篇文章改进了一个架构,提出了一个算法,开源了一个学习环境。&/p&&p&IMPALA架构非常适合于,星际这种,每一帧渲染计算和重启需要耗时超长的环境&/p&&p&V-trace算法配合IMPALA架构使用,减少了框架的不稳定度。&/p&&p&DMLAB-30——呃这个环境我没用过,不过也是对强化学习社区的一个很好的贡献。&/p&&p&最后,期望Deepmind能给我们带来更多的优秀文章~&/p&&p&[1] &a href=&http://link.zhihu.com/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&[] Asynchronous Methods for Deep Reinforcement Learning&/a&&/p&&p&[2] &a href=&http://link.zhihu.com/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&[] Safe and Efficient Off-Policy Reinforcement Learning&/a&&/p&&p&[3]Mahmood, A. R. and Sutton, R. S. (2015). Off-policy learning based on weighted importance sampling with linear computational complexity. In Conference on Uncertainty in Artificial Intelligence.&/p&
更新:Deepmind在2018年ICLR会议上发表(水)了一篇文章:DISTRIBUTED PRIORITIZED EXPERIENCE REPLAY这篇文章的分布式学习架构的核心思想与IMPALA架构思想非常类似,但是似乎除了提出了这…
&figure&&img src=&https://pic1.zhimg.com/v2-ee88c7c273e689b71b0b_b.jpg& data-rawwidth=&450& data-rawheight=&334& class=&origin_image zh-lightbox-thumb& width=&450& data-original=&https://pic4.zhimg.com/v2-ee88c7c273e689b71b0b_r.jpg&&&/figure&&p&&b&前言&/b&:本文可能有些标题党,并不是真的要完全劝退大家,Alex的本意是希望大家更加冷静地看待目前DRL研究的进展,避免重复踩坑。评论区里有提到因为困难才有做的价值,还有机器人、控制论背景的朋友提到他觉得drl can do anything如果你有正确的超参数,这些意见也很值得大家参考。&/p&&p&今天在学校又双叒叕提到了&i&Deep Reinforcement Learning That Matters&/i&这篇打响DRL(Deep Reinforcement Learning, 深度强化学习)劝退第一枪的文章后,回来以后久违刷了一下推特,看到了这篇爆文&a href=&http://link.zhihu.com/?target=https%3A//www.alexirpan.com//rl-hard.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Deep Reinforcement Learning Doesn't Work Yet&/a&,或可直译为&i&深度强化学习还玩不转&/i&或意译为&i&深度强化学习远不能即插即玩&/i&。&/p&&p&看完以后很多从自己去年七月入坑以来隐隐约约的困惑都得到了解答。读完大有如不见此文,万古如长夜之感。心里激动,一时难以自抑。知乎上深度强化学习的内容比较少,最好的私以为是&a href=&https://zhuanlan.zhihu.com/intelligentunit& class=&internal&&智能单元&/a&,此外还有许多零散的论文介绍、课程笔记、问答等等,但好像没人提过这篇文章。这篇文章是我入坑以来看到的深度强化学习方面最好的阶段性总结,强烈建议应该作为深度强化学习的第一课,看完以后大家再慎重考虑到底要不要入坑。&/p&&p&先看一下作者的背景。作者叫Alex Irpan,现为谷歌大脑机器人团队的软件工程师。他从伯克利拿到的计算机科学本科学位,本科的时候曾经在伯克利人工智能实验室(Berkeley AI Research (BAIR) Lab)进行本科科研,导师是DRL大牛Pieter Abbeel,他还和John Schulman工作过。&/p&&p&这篇文章一上来就指出深度强化学习是个大坑。它的成功案例其实不算非常多,但每个都太有名了,例如用Deep Q Network(DQN)在Atari games上用原始像素图片作为状态达到甚至超越人类专家的表现、通过左右互搏(self-play)等方式在围棋上碾压人类、大大降低了谷歌能源中心的能耗等等。造成的结果就是没有从事过深度强化学习的研究人员对它产生了很大的错觉,高估了它的能力,低估了它的难度。&/p&&p&强化学习本身是一个非常通用的人工智能范式,在直觉上让人觉得非常适合用来模拟各种时序决策任务,如语音、文本类任务。当它和深度神经网络这种只要给我足够层和足够多的神经元,可以逼近任何函数的非线性函数近似模型结合在一起感觉要上天啊,无怪乎DeepMind经常号称人工智能=深度学习+强化学习。&/p&&p&然而Alex告诉我们别急,让我们先来审视一些问题:&/p&&ol&&li&&b&它的样本利用率非常低&/b&。换言之为了让模型的表现达到一定高度需要极为大量的训练样本。&/li&&li&&b&最终表现很多时候不够好&/b&。在很多任务上用非强化学习甚至非学习的其它方法,如基于模型的控制(model based control),线性二次型调节器(Linear Quadratic Regulator)等等可以获得好得多的表现。最气人的是这些模型很多时候样本利用率还高。当然这些模型有的时候会有一些假设比如有训练好的模型可以模仿,比如可以进行蒙特卡洛树搜索等等。&/li&&li&&b&DRL成功的关键离不开一个好的奖励函数(reward function),然而这种奖励函数往往很难设计&/b&。在&i&Deep Reinforcement Learning That Matters&/i&作者提到有时候把奖励乘以一个常数模型表现就会有天和地的区别。但奖励函数的坑爹之处还不止如此。奖励函数的设计需要保证:&/li&&ol&&li&加入了合适的先验,良好的定义了问题和在一切可能状态下的对应动作。坑爹的是模型很多时候会找到作弊的手段。Alex举的一个例子是有一个任务需要把红色的乐高积木放到蓝色的乐高积木上面,奖励函数的值基于红色乐高积木底部的高度而定。结果一个模型直接把红色乐高积木翻了一个底朝天。仔啊,你咋学坏了,阿爸对你很失望啊。&/li&&li&奖励函数的值太过稀疏。换言之大部分情况下奖励函数在一个状态返回的值都是0。这就和我们人学习也需要鼓励,学太久都没什么回报就容易气馁。都说21世纪是生物的世纪,怎么我还没感觉到呢?21世纪才刚开始呢。我等不到了啊啊啊啊啊。&/li&&li&有的时候在奖励函数上下太多功夫会引入新的偏见(bias)。&/li&&li&要找到一个大家都使用而又具有好的性质的奖励函数。这里Alex没很深入地讨论,但链接了一篇陶神(Terence Tao)的博客,大家有兴趣可以去看下。&/li&&/ol&&li&&b&局部最优/探索和剥削(exploration vs. exploitation)的不当应用&/b&。Alex举的一个例子是有一个连续控制的环境里,一个类似马的四足机器人在跑步,结果模型不小心多看到了马四脚朝天一顿乱踹后结果较好的情况,于是你只能看到四脚朝天的马了。&/li&&li&&b&对环境的过拟合&/b&。DRL少有在多个环境上玩得转的。你训练好的DQN在一个Atari game上work了,换一个可能就完全不work。即便你想要做迁移学习,也没有任何保障你能成功。&/li&&li&&b&不稳定性&/b&。&/li&&ol&&li&读DRL论文的时候会发现有时候作者们会给出一个模型表现随着尝试random seed数量下降的图,几乎所有图里模型表现最终都会降到0。相比之下在监督学习里不同的超参数或多或少都会表现出训练带来的变化,而DRL里运气不好可能很长时间你模型表现的曲线都没有任何变化,因为完全不work。&/li&&li&即便知道了超参数和随机种子,你的实现只要稍有差别,模型的表现就可以千差万别。这可能就是&i&Deep Reinforcement Learning That Matters&/i&一文里John Schulman两篇不同文章里同一个算法在同一个任务上表现截然不同的原因。&/li&&li&即便一切都很顺利,从我个人的经验和之前同某DRL研究人员的交流来看只要时间一长你的模型表现就可能突然从很好变成完全不work。原因我不是完全确定,可能和过拟合和variance过大有关。&/li&&/ol&&/ol&&p&特别是上述第六点,几乎是灾难性的。作者提到自己实习的时候一开始实现Normalized Advantage Function (NAF),为了找出Theano本身的bugs花了六周,这还是在NAF作者就在他旁边可以供他骚扰的情况下的结果。原因就是DRL的算法很多时候在没找好超参数的情况下就是不work的,所以你很难判断自己的代码到底有没有bug还是运气不好。&/p&&p&作者也回顾了DRL成功的案例,他认为DRL成功的案例其实非常少,大体包括:&/p&&ol&&li&各类游戏:Atari Games, Alpha Go/Alpha Zero/Dota2 1v1/超级马里奥/日本将棋,其实还应该有DRL最早的成功案例,93年的西洋双陆棋(backgammon)。&/li&&li&DeepMind的跑酷机器人。&/li&&li&为Google的能源中心节能。&/li&&li&Google的AutoML。&/li&&/ol&&p&作者认为从这些案例里获得的经验教训是DRL可能在有以下条件的情况下更可能有好的表现,条件越多越好:&/p&&ol&&li&数据获取非常容易,非常cheap。&/li&&li&不要急着一上来就攻坚克难,可以从简化的问题入手。&/li&&li&可以进行左右互搏。&/li&&li&奖励函数容易定义。&/li&&li&奖励信号非常多,反馈及时。&/li&&/ol&&p&他也指出了一些未来潜在的发展方向和可能性:&/p&&ol&&li&&b&局部最优或许已经足够好&/b&。未来某些研究可能会指出我们不必过于担心大部分情况下的局部最优。因为他们比起全局最优并没有差很多。&/li&&li&&b&硬件为王&/b&。在硬件足够强的情况下我们或许就不用那么在乎样本利用率了,凡事硬刚就可以有足够好的表现。各种遗传算法玩起来。&/li&&li&&b&人为添加一些监督信号&/b&。在环境奖励出现频次太低的情况下可以引入自我激励(intrinsic reward)或者添加一些辅助任务,比如DeepMind就很喜欢这套,之前还写了一篇&a href=&http://link.zhihu.com/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Reinforcement Learning with Unsupervised Auxiliary Tasks&/a&。LeCun不是嫌蛋糕上的樱桃太少吗,让我们多给他点樱桃吧!&/li&&li&&b&更多融合基于模型的学习从而提高样本使用率&/b&。这方面的尝试其实已经有很多了,具体可以去看Alex提到的那些工作。但还远不够成熟。&/li&&li&&b&仅仅把DRL用于fine-tuning&/b&。比如最初Alpha Go就是以监督学习为主,以强化学习为辅。&/li&&li&&b&自动学习奖励函数&/b&。这涉及到inverse reinforcement learning和imitation learning。&/li&&li&&b&迁移学习和强化学习的进一步结合&/b&。&/li&&li&&b&好的先验&/b&。&/li&&li&&b&有的时候复杂的任务反而更容易学习&/b&。Alex提到的例子是DeepMind经常喜欢让模型学习很多同一环境的变种来减小对环境的过拟合。我觉得这也涉及curriculum learning,即从简单的任务开始逐步加深难度。可以说是层层递进的迁移学习。另外一个可能的解释是很多时候人觉得困难的任务和机器觉得困难的任务是相反的。比如人觉得倒水很简单,你让机器人用学习的路子去学倒水就可以很难。但反过来人觉得下围棋很简单而机器学习模型却在下围棋上把人击败了。&/li&&/ol&&p&最后Alex总体还是非常乐观的。他说尽管现在有很多困难,使得DRL或许还不是一个强壮(robust)到所有人都可以轻易加入的研究领域并且很多时候一些问题用DRL远没有监督学习简单和表现好,但或许过几年你再回来DRL就work了也未知啊。这还是很振奋人心的。田渊栋老师也表达过类似的想法,觉得正因为这个领域还不够成熟所以还有很多机会。他们都是了不起的研究人员。&/p&&p&看到这篇文章我总体是非常激动的。但实话说也有些遗憾,如果去年暑假就有这篇文章的话也许我就会再慎重考虑一下到底要不要在实验室没有积累自己又离毕业和申请不远的情况下开始这样一个主题了。这是一个教训,就是开始一个领域前要对这个领域要有充分的了解,之前零零散散在网上也有了一点相关的声音,比如Karpathy就提到他在实现vanilla policy gradient的时候也遇到了很多困难。&/p&&blockquote&If it makes you feel any better, I’ve been doing this for a while and it took me last ~6 weeks to get a from-scratch policy gradients implementation to work 50% of the time on a bunch of RL problems. And I also have a GPU cluster available to me, and a number of friends I get lunch with every day who’ve been in the area for the last few years.&br&&br&Also, what we know about good CNN design from supervised learning land doesn’t seem to apply to reinforcement learning land, because you’re mostly bottlenecked by credit assignment / supervision bitrate, not by a lack of a powerful representation. Your ResNets, batchnorms, or very deep networks have no power here.&br&&br&[Supervised learning] wants to work. Even if you screw something up you’ll usually get something non-random back. RL must be forced to work. If you screw something up or don’t tune something well enough you’re exceedingly likely to get a policy that is even worse than random. And even if it’s all well tuned you’ll get a bad policy 30% of the time, just because.&br&&br&Long story short your failure is more due to the difficulty of deep RL, and much less due to the difficulty of “designing neural networks”.&/blockquote&&p&来源:&a href=&http://link.zhihu.com/?target=https%3A//news.ycombinator.com/item%3Fid%3D& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&If it makes you feel any better, I've been doing this for a while and it took me...&/a&&/p&&p&但我一开始并没有注意到。其实导师也一直有提到说他觉得我的project比较有风险,特别是他觉得现在除了Berkeley, OpenAI,DeepMind之外很少有DRL做的不错的实验室,这本身就表明这个方向可能有一些无形的门槛。现在我觉得这些可能包括计算资源和设备(机器人),对相关trick和坑了然于胸的相对资深的研究人员等等。客观上这些地方的人综合水平和工程能力也是强的让人发指,直接竞争非常困难。虽然我自己比较弱,但这些对于打算进入DRL的同学们都需要慎重考虑一下。&/p&&p&最后的最后还是要强推Alex的这篇文章,他列的这些点很多DRL的研究人员可能已经非常了解了,但之前没有人这样完整、有组织地介绍一遍。对于想要做DRL的同学们来说实在是福音。拙作是看完他文章后第一时间的感想和概括,对于我不够了解的有些地方就一笔带过了,或者表述也不够准确。原文很长,我在对大部分内容比较熟悉的情况下看了一个半小时,但也很有意思,还是强烈推荐。&/p&
前言:本文可能有些标题党,并不是真的要完全劝退大家,Alex的本意是希望大家更加冷静地看待目前DRL研究的进展,避免重复踩坑。评论区里有提到因为困难才有做的价值,还有机器人、控制论背景的朋友提到他觉得drl can do anything如果你有正确的超参数,这些…
&figure&&img src=&https://pic1.zhimg.com/v2-62da148fac79e8ca0463f_b.jpg& data-rawwidth=&1005& data-rawheight=&485& class=&origin_image zh-lightbox-thumb& width=&1005& data-original=&https://pic4.zhimg.com/v2-62da148fac79e8ca0463f_r.jpg&&&/figure&&blockquote&夏乙 编译自 Medium&br&量子位 出品 | 公众号 QbitAI&/blockquote&&figure&&img src=&https://pic3.zhimg.com/v2-98f278e684cd35de003f08fbc3a33221_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&940& data-rawheight=&301& class=&origin_image zh-lightbox-thumb& width=&940& data-original=&https://pic3.zhimg.com/v2-98f278e684cd35de003f08fbc3a33221_r.jpg&&&/figure&&p&英伟达Tesla K80 GPU,2599美元一块,还很难买到;搭载K80的AWS EC2 P2实例,用起来也很肉疼。&/p&&p&高大上的GPU,不花钱也能用上。Google的一项免费云端机器学习服务,最近也用上了Tesla K80。&/p&&p&这么好的羊毛,当然要薅起来啊!&/p&&p&这项资本主义社会的伟大创造,就是Google Colab,全名Colaboratory。你可以用它来提高Python技能,也可以用Keras、TensorFlow、PyTorch、OpenCV等等流行的深度学习库来练练手,开发深度学习应用。&/p&&p&地址在这里,Google还贴心地写了中文版简介:&a href=&https://link.zhihu.com/?target=https%3A//colab.research.google.com/notebook& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&colab.research.google.com&/span&&span class=&invisible&&/notebook&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&即便如此,据说还有人不会用?&/p&&p&号称喜欢训练深度神经网络的作者fuat,就详详细细的写了一份Google Colab免费GPU试用指南~&/p&&h2&&b&准备工作&/b&&/h2&&h2&&b&在Google Drive上创建文件夹&/b&&/h2&&figure&&img src=&https://pic4.zhimg.com/v2-ee8d8b2dedc2bfcdbf3efd_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&320& data-rawheight=&326& class=&content_image& width=&320&&&/figure&&p&Colab用的数据都存储在Google Drive云端硬盘上,所以,我们需要先指定要在Google Drive上用的文件夹。&/p&&p&比如说,可以在Google Drive上创建一个“app”文件夹,或者其他什么名字,也可以选择Colab笔记本默认的文件夹。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-590ab9d223bda06ac738edccd48d7625_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&928& data-rawheight=&472& class=&origin_image zh-lightbox-thumb& width=&928& data-original=&https://pic3.zhimg.com/v2-590ab9d223bda06ac738edccd48d7625_r.jpg&&&/figure&&h2&&b&新建Colab笔记本&/b&&/h2&&p&在刚刚创建的app文件夹里点击右键,选择“More”,然后从菜单里选择“Colaboratory”,这样就新建出了一个Colab笔记本。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-f81c533fdb3b41f0b24e66_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&903& data-rawheight=&619& class=&origin_image zh-lightbox-thumb& width=&903& data-original=&https://pic2.zhimg.com/v2-f81c533fdb3b41f0b24e66_r.jpg&&&/figure&&p&点击笔记本的名字,可以重命名。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-123baedac465b324e74de1c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&391& data-rawheight=&95& class=&content_image& width=&391&&&/figure&&h2&&b&设置免费GPU&/b&&/h2&&p&这一步,要改变笔记本所用的默认硬件。在笔记本里点Edit&Notebook settings(编辑&笔记本设置),或者Runtime&Change runtime type(运行时&改变运行时类型),然后在Hardware accelerator(硬件加速器)一栏选择GPU。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-bcfca7ef8fc63c77b889e599_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&370& data-rawheight=&284& class=&content_image& width=&370&&&/figure&&p&然后,Google Colab就可以用了。&/p&&h2&&b&用Colab运行基本Python代码&/b&&/h2&&figure&&img src=&https://pic3.zhimg.com/v2-efb8df491ec313d1c0dc143bcef95e87_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&596& data-rawheight=&196& class=&origin_image zh-lightbox-thumb& width=&596& data-original=&https://pic3.zhimg.com/v2-efb8df491ec313d1c0dc143bcef95e87_r.jpg&&&/figure&&p&我们来运行一些Python Numpy教程里的基本数据类型代码。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-e02f8f1ce1a31a18b1207ff9_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&524& data-rawheight=&311& class=&origin_image zh-lightbox-thumb& width=&524& data-original=&https://pic1.zhimg.com/v2-e02f8f1ce1a31a18b1207ff9_r.jpg&&&/figure&&p&这些代码来自斯坦福大学卷积神经网络与视觉识别课程(CS231n)的Python Numpy教程,&br&地址:&a href=&https://link.zhihu.com/?target=http%3A//cs231n.github.io/python-numpy-tutorial/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&cs231n.github.io/python&/span&&span class=&invisible&&-numpy-tutorial/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&运行结果如你所料。&/p&&h2&&b&用Colab运行.py文件&/b&&/h2&&p&先运行下面这些代码,来安装必要的库、执行授权。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&!apt-get install -y -qq software-properties-common python-software-properties module-init-tools
!add-apt-repository -y ppa:alessandro-strada/ppa 2&&1 & /dev/null
!apt-get update -qq 2&&1 & /dev/null
!apt-get -y install -qq google-drive-ocamlfuse fuse
from google.colab import auth
auth.authenticate_user()
from oauth2client.client import GoogleCredentials
creds = GoogleCredentials.get_application_default()
import getpass
!google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret} & /dev/null 2&&1 | grep URL
vcode = getpass.getpass()
!echo {vcode} | google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret}
&/code&&/pre&&/div&&p&运行的时候应该会看到下图所示的结果:&/p&&figure&&img src=&https://pic1.zhimg.com/v2-78b1173a35abccb3f6a19a76a78305e3_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&845& data-rawheight=&268& class=&origin_image zh-lightbox-thumb& width=&845& data-original=&https://pic1.zhimg.com/v2-78b1173a35abccb3f6a19a76a78305e3_r.jpg&&&/figure&&p&看见那个链接之后,点击它,复制验证码并粘贴到文本框里。&/p&&p&授权完成后,就可以挂载Google Drive了:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&!mkdir -p drive
!google-drive-ocamlfuse drive
&/code&&/pre&&/div&&p&安装Keras:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&!pip install -q keras
&/code&&/pre&&/div&&p&将mnist_cnn.py文件上传到位于Google云端硬盘上的应用文件夹:&/p&&figure&&img src=&https://pic1.zhimg.com/v2-6228cba07c9ef362b920fe_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&478& data-rawheight=&283& class=&origin_image zh-lightbox-thumb& width=&478& data-original=&https://pic1.zhimg.com/v2-6228cba07c9ef362b920fe_r.jpg&&&/figure&&p&运行下面的代码,用MNIST数据集训练一个简单的卷积神经网络:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&!python3 drive/app/mnist_cnn.py
&/code&&/pre&&/div&&figure&&img src=&https://pic1.zhimg.com/v2-d2c5e2e1e73a4bc9794f_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1080& data-rawheight=&575& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic1.zhimg.com/v2-d2c5e2e1e73a4bc9794f_r.jpg&&&/figure&&p&从结果中可以看到,每个epoch只需要11秒。&/p&&h2&&b&下载泰坦尼克数据集(.csv File),显示前5行&/b&&/h2&&p&想按照链接下载.csv文件到app文件夹,只需运行:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&!wget https://raw.githubusercontent.com/vincentarelbundock/Rdatasets/master/csv/datasets/Titanic.csv -P drive/app
&/code&&/pre&&/div&&p&也可以直接将.csv文件上传到app文件夹:&/p&&figure&&img src=&https://pic2.zhimg.com/v2-32cbee630f735b8fffbeb04_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&948& data-rawheight=&237& class=&origin_image zh-lightbox-thumb& width=&948& data-original=&https://pic2.zhimg.com/v2-32cbee630f735b8fffbeb04_r.jpg&&&/figure&&p&然后读取app文件夹中的.csv文件,显示前5行:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&import pandas as pd
titanic = pd.read_csv(“drive/app/Titanic.csv”)
titanic.head(5)
&/code&&/pre&&/div&&figure&&img src=&https://pic3.zhimg.com/v2-7ec5e0aeb6ad_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&773& data-rawheight=&277& class=&origin_image zh-lightbox-thumb& width=&773& data-original=&https://pic3.zhimg.com/v2-7ec5e0aeb6ad_r.jpg&&&/figure&&h2&&b&Tips&/b&&/h2&&h2&&b&1. 如何安装库?&/b&&/h2&&p&安装Keras:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&!pip install -q keras
import keras
&/code&&/pre&&/div&&p&安装PyTorch:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&!pip install -q http://download.pytorch.org/whl/cu75/torch-0.2.0.post3-cp27-cp27mu-manylinux1_x86_64.whl torchvision
import torch
&/code&&/pre&&/div&&p&安装OpenCV:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&!apt-get -qq install -y libsm6 libxext6 && pip install -q -U opencv-python
import cv2
&/code&&/pre&&/div&&p&安装XGBoost:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&!pip install -q xgboost==0.4a30
import xgboost
&/code&&/pre&&/div&&p&安装GraphViz:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&!apt-get -qq install -y graphviz && pip install -q pydot
import pydot
&/code&&/pre&&/div&&p&安装7zip Reader:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&!apt-get -qq install -y libarchive-dev && pip install -q -U libarchive
import libarchive
&/code&&/pre&&/div&&p&安装其他库:&/p&&p&用&code&!pip install&/code&或者&code&!apt-get install&/code&命令。&/p&&h2&&b&2. GPU在干活么?&/b&&/h2&&p&要查看你在Colab里是不是真的在用GPU,可以运行以下代码来交叉检查:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&import tensorflow as tf
tf.test.gpu_device_name()
&/code&&/pre&&/div&&figure&&img src=&https://pic3.zhimg.com/v2-acbfa4aa1ae9b33cae0fd24d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&463& data-rawheight=&145& class=&origin_image zh-lightbox-thumb& width=&463& data-original=&https://pic3.zhimg.com/v2-acbfa4aa1ae9b33cae0fd24d_r.jpg&&&/figure&&p&如果显示上图左侧的结果,就是在用CPU,显示右侧结果就是在用GPU。&/p&&h2&&b&3. 我在用哪个GPU?&/b&&/h2&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&from tensorflow.python.client import device_lib
device_lib.list_local_devices()
&/code&&/pre&&/div&&p&其实现在,Colab只提供Tesla K80,所以你会看到下图这样的结果:&/p&&figure&&img src=&https://pic1.zhimg.com/v2-7ce081aafb7c0cffc369023_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&813& data-rawheight=&275& class=&origin_image zh-lightbox-thumb& width=&813& data-original=&https://pic1.zhimg.com/v2-7ce081aafb7c0cffc369023_r.jpg&&&/figure&&h2&&b&4. RAM有多大?&/b&&/h2&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&!cat /proc/meminfo
&/code&&/pre&&/div&&figure&&img src=&https://pic2.zhimg.com/v2-dc1b8c1ef6ed28c20f563d8d40901cee_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&242& data-rawheight=&215& class=&content_image& width=&242&&&/figure&&h2&&b&5. CPU呢?&/b&&/h2&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&!cat /proc/cpuinfo
&/code&&/pre&&/div&&figure&&img src=&https://pic3.zhimg.com/v2-e32bac8c1c1b7fbd8781a5_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1000& data-rawheight=&405& class=&origin_image zh-lightbox-thumb& width=&1000& data-original=&https://pic3.zhimg.com/v2-e32bac8c1c1b7fbd8781a5_r.jpg&&&/figure&&h2&&b&总结一下吧&/b&&/h2&&p&好好学习,认真薅毛。&/p&&p&量子位温馨提示:自备梯子。&/p&&p&&a href=&https://link.zhihu.com/?target=https%3A//medium.com/deep-learning-turkey/google-colab-free-gpu-tutorial-ef5d& class=& exter

我要回帖

更多关于 多伦多华人比例 的文章

 

随机推荐