求问啊,木星体积的中子星又叫做什么星有可能存在吗

木星的体积比太阳大吗能不能附上体积和质量的排列(9大行星加上太阳)楼下不要答非所问我们科学老师说质量太阳最大体积木星最大
木星的体积比太阳大吗能不能附上体积和质量的排列(9大行星加上太阳)楼下不要答非所问我们科学老师说质量太阳最大体积木星最大我只是想求证
木星不可能比太阳大,要不它早成了一个恒星了!按体积由大到小排序为太阳、木星、土星、天王星、海王星、地球、金星、火星、水星、冥王星.按质量、大小、化学组成以及和太阳之间的距离等标准,大致可以分为三类:类地行星〈水星、金星、地球、火星〉;巨行星〈木星、土星〉;远日行星〈天王星、海王星、冥王星〉.
与《木星的体积比太阳大吗能不能附上体积和质量的排列(9大行星加上太阳)楼下不要答非所问我们科学老师说质量太阳最大体积木星最大》相关的作业问题
^表示次方 太阳质量为:(6×10^13)×(3.3×10^5) =(6×3.3)×(10^13×10^5) =19.8×10^8 =1.98×10^19亿吨 即太阳的质量为1.98×10^19亿吨
你所说的下午应该指的是比较接近傍晚的下午吧.早上和傍晚的太阳显得比中午的大是由于视觉错觉现象造成的.早晚的太阳高度较低,接近地面的一些物体如树木啊,楼房啊,有这些物体在周围衬托就显得太阳较大,而中午的太阳很高,周围没有什么东西只是空空的天空,看起来就显得太阳较小了.这只不过是人眼的错觉,实际无论什么时间太阳的大小是一样
这也只是天文学家的一种猜测,有待证实.但科学发展到现在,人类对宇宙的探索也很有限,宇宙深处的很多秘密还未解开.
由近到远分别是:水星、金星、地球、火星、木星、土星、天王星、海王星、冥王星体积由大到小分别是:木星、土星、天王星、海王星、地球、金星、火星、水星、冥王星
不对,太阳体积是月球的倍(),因为月球的体积为地球的四十九分之一.
当然是太阳更大喽.无论从表面积、体积还是质量上说,太阳都比木星大.太阳的表面面积 609 平方公里,而木星表面积则只有平方公里.哎,木星的表面积百度网上没得查,我自己还算了半天呢.
当然是太阳 银河系里面最大的就是太阳
当然是太阳了 还应说吗太阳的直径为139万千米 木星直径约为14.3万千米 在行星当中,木星的体积最大,超过地球的一千多倍,但是和太阳比起来,木星的体积却只是太阳的千分之 第一个来滴 请采纳答案 谢谢
当然木卫上看木星大.木卫离木星是在太近了.
1.木星达到太阳体积的三分之一就可以成为最小的恒星,目前木星的直径约为太阳的1/110.如果一个恒星星系中有两个恒星会形成双子式运动,根据杠杆原理可以找出他们的旋转轴心.2.会对太阳系的恒星运转轨道、运转速度、自转情况产生一些影响,具体情况可以根据各星球质量比进行测算.3.这个假设...不成立,其实,目前的各个行星的运
老大,你哪来的消息“质量比地球小很多”太阳的概况 组成成分 太阳是由炽热的气体组成的球状天体,主要成分是氢和氦. 表面温度 约 5500 摄氏度 体积 1.41×1018千米3(约为地球体积的130万倍) 质量 1.989×1027吨(为地球质量的33万多倍)
其实这个答案我不知道,但是很容易在百度上找到:方法么,百度百科输入大犬座vy,然后就搞定了.下面摘录百度百科的资料:大犬座VY (VYCMa ,全名称为VY Canis Majoris)是一颗位于大犬座的红色的特超巨星,距离地球5000光年,视星等7.95.据推测,其质量约为30~40倍太阳质量,直径约有1800~21
太阳的体积是地球的130万倍.木星的体积是地球的1316倍.显然是太阳大多了.太阳是50亿年前由星积云瓦解后的一团小云塌缩而成的.它的寿命约为100亿年.太阳现在有46亿岁了,属中年.
130万倍 太阳的直径为139万千米,为地球的109倍,是月球的400倍.太阳的体积是地球的130万倍,质量为地球的33万倍,平均密度是1.4克/厘米3.
尽信书不如无书,书也是人写的,那本书的作者这样认为不代表他是对的.以木星的质量,还远远不足成为一颗恒星,人类发现了很多太阳系外的行星,很多体积比木星还大得多,也没变成恒星.不仅很多天文学家说木星是行星,全世界有点儿天文知识,并且不傻的人都说木星是行星.——————————————————————————————————
宇宙中最大的恒星 “哈勃”空间望远镜日前再获重要发现,观测到了迄今为止宇宙中最大且最重的恒星. 这颗超级恒星的直径超过太阳的114倍,是一个双星系统的一部分,其“同伴”的要小的多.该恒星的质量为太阳的150倍.专家们支持,这是人类历史上首次观测到如此巨大的恒星系统.按照目前流行的理论,恒星的质量很难超过太阳的100倍.
什么叫做行星?就是其质量没有达到能够使中心的的物质引起聚变,生成更重的原子核的天体.根据计算,一个天体又能引发氢聚变,其质量要大于80个木星质量,所以,而12倍以上的天体虽然不能引发聚变,但其结构类似于恒星/view/26086.htm,称为褐矮星所以,行星的质量小于12倍木星质量
美国天文学家新近发现的三颗红色且明亮的恒星,目前已经被确认为迄今为止所观测到的最大恒星.天文学家的研究报告指出,被发现的这三颗恒星的直径超过10亿公里,周长为太阳的1500倍.如果这三颗恒星取替太阳的位置的话,那么它们的热量足以“吞没”地球;它们的外层空间甚至可延伸到木星和土星的轨道之间.与这三颗大型恒星相比,广为人知
当然是太阳大啦 太阳是一颗普通的恒星,目前在赫-罗图上度过了主序生涯的一半左右.它是一个质量为1989.1亿亿亿吨(约为地球质量的33万倍)、直径139.2万km(约为地球直径的109倍)的热气体(严格说是等离子体)球.其平均密度为水的1.4倍,但这一平均密度隐含着很宽的密度范围,从超高密的核心到稀薄的外层.作为一颗恒最后一次更新,我重新整理了一下,填了一下上次的坑,把那两个坑爹的几何做图题的答案放上来。&br&借此也想说明一下:&b&不要找我要教程。&/b&&br&
知乎作为一个讨论和分享的平台,这是我觉得知乎不同于贴吧最大的一点。学习也是需要投资的,如果你花了钱买了我推荐的教程觉得我在瞎扯淡,你可以打我,但请不要在私信和我要教程了,你要真想学的话,花点钱没错。&br&………………………………………………………………………&br&&br&都让开,我来答 &br&CAD:华东区CAD竞赛一等奖 &br&PS:这是作品 (第一张已删除)&br&&img src=&/1e3a7def139_b.jpg& data-rawheight=&3063& data-rawwidth=&2641& class=&origin_image zh-lightbox-thumb& width=&2641& data-original=&/1e3a7def139_r.jpg&&&br&&img src=&/224db5c7a98bba3f4e68f954f9120098_b.jpg& data-rawheight=&680& data-rawwidth=&1080& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&/224db5c7a98bba3f4e68f954f9120098_r.jpg&&&br&&img src=&/ecce355ea9dc4a13ee5ad39543acf4a1_b.jpg& data-rawheight=&715& data-rawwidth=&1080& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&/ecce355ea9dc4a13ee5ad39543acf4a1_r.jpg&&&br&&img src=&/35f7f861bd8a55a08ef05ae5ae456718_b.jpg& data-rawheight=&456& data-rawwidth=&1080& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&/35f7f861bd8a55a08ef05ae5ae456718_r.jpg&&&br&&br&&br&
至于题主问的其它软件,玩过一些,但不精通,所以我重点说PS和CAD &br&
我走过的弯路也不希望大家再走了,&b&我先说一段屁话,不想浪费时间可直接跳过&/b& 。&br&
首先,兴趣很关键,又要用那句老话:“兴趣是最好的老师”,没有兴趣,你只是按部就班的去记忆命令,机械式的学习是很痛苦的。就拿CAD来说,做为机械狗,我是很享受用CAD来画图的,画过手工图都知道,CAD简直让人爽到爆。PS这种富有创造性的软件更不用说了,当你创造出一幅作品的时候,感觉整个世界都完美了。找到兴趣点,并且爱上它,你要以一种老子在上你的心态来学习,而不是劳资被强暴了的心态学习,总之兴趣很重要。当然这个在学习过程中可以慢慢培养&br&
其次就是要静下心来,慢一点。为什么这么说呢?我同学学CAD的时候,就想图快,填鸭式的硬塞,结果呢?消化不良,他学到头快炸了,学的太猛了,以至于看到CAD就头疼。用他的话说就是感觉被CAD强奸了。所以首先你的学会享受学习,你才能学好。这就要求两点,一要慢,二还是要慢,太快你吃不消,还得再来一遍,还不如慢慢的一遍过。 &br&
所以调整好心态,那就开撸吧。 &br&&b&好吧!以下是具体方法,手机党没发加粗大家跳到这就认真看,再说一遍,认真看。&/b&&br&
不行,我还要在吐槽一下教程问题→_→,我们图书馆的一些CAD的教程简直就是帮助文件选择性的复制了一下,太特么不要脸了,搞得劳资都想出书了,所以在这里郑重负责任的推荐一些教程 &br&CAD的大家看侯老师CAD教程,这是基础的,你大概一两天就学完了,此时你对CAD已经掌握基本工具了,你需要的是练习,做为机械狗,抄图是最好的练习方式,建筑大神不知道,不敢乱讲。还要再高级一点,但布局,流程等等你还无法做到规范,你只是会画图,再往后一点打印什么的你还不会。那就晋级,那我推荐你我们董祥国老师的CAD教程(这不是打广告,我们老师的真心良心之作,就拿更改中心线的长度来符合GB这一知识点来说,水的教程基本上不会教。不过我们董大爷的书就是没有视频和源文件,所以学起来比较吃力,最好有一点基础再看)附带封面,真的不是打广告&br&08版的&br&&img src=&/a9ccba9e9ca088ac6ffce77a2f5d2ecc_b.jpg& data-rawheight=&500& data-rawwidth=&357& class=&content_image& width=&357&&&br&&img src=&/cbb58ac2a5e493db92ce80e_b.jpg& data-rawheight=&365& data-rawwidth=&256& class=&content_image& width=&256&&&br&14版的&br&
学完这两个,恭喜你,你已是CAD大神,各种抄图画图已难不倒你了。从布局,画图,到打印输出的标准流程你已经掌握了,至此,你已学会CAD了。&br&&b&补充两个Tips&/b&:1:要学着用F1,就是帮助文件,不懂的就F1,实在不行的话就上网查,
问人会学到一些实用的技巧。&br&
2:熟能生巧,练习很重要。最好的练习方式就是抄一些好的图纸。&br&&b&如果你只是想学习来画图,那下面的你就不用看了。可跳到PS学习继续看。如果你还想提高逼格,学点奇淫巧技装装逼,请关注我的另一个答案&/b&&br&&a href=&/question//answer/& class=&internal&&在CAD中哪些好用的技巧让你相见恨晚? - 知乎用户的回答&/a&&br&但如果你还想更进一步,参加CAD竟赛,那有一个坑爹的几何作图,比如这样的&br&&img src=&/55edda9bbe6231412cbd58cc44d0ce9d_b.jpg& data-rawheight=&499& data-rawwidth=&571& class=&origin_image zh-lightbox-thumb& width=&571& data-original=&/55edda9bbe6231412cbd58cc44d0ce9d_r.jpg&&&img src=&/fe9f67ee11065_b.jpg& data-rawheight=&556& data-rawwidth=&591& class=&origin_image zh-lightbox-thumb& width=&591& data-original=&/fe9f67ee11065_r.jpg&&&br&&br&&b&以下为答案,特来填坑&/b&&br&&img src=&/4d01ab2aa649da448765_b.jpg& data-rawheight=&402& data-rawwidth=&575& class=&origin_image zh-lightbox-thumb& width=&575& data-original=&/4d01ab2aa649da448765_r.jpg&&&br&&img src=&/833594fedbe354cc51588fce3a5d457d_b.jpg& data-rawheight=&393& data-rawwidth=&615& class=&origin_image zh-lightbox-thumb& width=&615& data-original=&/833594fedbe354cc51588fce3a5d457d_r.jpg&&&br&&br&&img src=&/efb389cef7c_b.jpg& data-rawheight=&360& data-rawwidth=&613& class=&origin_image zh-lightbox-thumb& width=&613& data-original=&/efb389cef7c_r.jpg&&&br&&br&&img src=&/5cea78d9ab8f87a5c4bcbe_b.jpg& data-rawheight=&331& data-rawwidth=&625& class=&origin_image zh-lightbox-thumb& width=&625& data-original=&/5cea78d9ab8f87a5c4bcbe_r.jpg&&&br&&br&&img src=&/907f8c86cb15fe2f30b979dad40ec4a0_b.jpg& data-rawheight=&341& data-rawwidth=&623& class=&origin_image zh-lightbox-thumb& width=&623& data-original=&/907f8c86cb15fe2f30b979dad40ec4a0_r.jpg&&&br&&img src=&/ca8012bcaced4cc72f68f_b.jpg& data-rawheight=&343& data-rawwidth=&625& class=&origin_image zh-lightbox-thumb& width=&625& data-original=&/ca8012bcaced4cc72f68f_r.jpg&&&br&&img src=&/e9829f6caafb70eb876e533_b.jpg& data-rawheight=&393& data-rawwidth=&629& class=&origin_image zh-lightbox-thumb& width=&629& data-original=&/e9829f6caafb70eb876e533_r.jpg&&&br&&br&&img src=&/1a7b5255662fadbda4f05d7_b.jpg& data-rawheight=&423& data-rawwidth=&633& class=&origin_image zh-lightbox-thumb& width=&633& data-original=&/1a7b5255662fadbda4f05d7_r.jpg&&&br&
这个时候靠的是技巧和你对几何知识的敏感度了,但还是有方法,就是练习,此时的练习就是CAD几何作图的练习,这个你在一些CAD论坛里面去搜。 这样是最难的,但随着CAD版本的提高,新增的约束,其实几何画图的技巧已经弱化了,也不必钻太深,所以一般不建议大家去练习了,你要是对CAD感兴趣,练练还是蛮爽的&br&&a href=&/question//answer/& class=&internal&&在CAD中哪些好用的技巧让你相见恨晚? - 知乎用户的回答&/a&&br&&b&下面是PS&/b&&br&
同样,教程很坑爹,这里推荐入门教程《敬伟PS教程》,这个讲到特别全,就是没重点,你能耐着性子看完的话,你也只会基础的,你还是干不了什么,但如果你不耐着性子看的话,你什么都干不了。骗你了,其实敬伟老师讲课很有趣的,不会无聊,无聊的教程我也不会推荐了,看完这个,你真的掌握了PS这个工具,对只是工具而已。好了,继续晋级,《李涛老师PS教程》,李涛老师讲的比较深入了,已经不是停留在工具层面上,而且讲课也更有趣,你会看的欲罢不能的,看完这个,用李涛老师的话来说,你已经是大神了,确实如此,就看你有没有认真看。至此,你对工具的掌握已经熟练了,就学会而言,已经达到。如果你还不满足,那就继续晋级,其实这个才是最难的,因为PS真的要创造点东西天赋还是很重要的,不过勤能补拙嘛,那就多练呗。练什么,此时你就要上网找一些经典的,你喜欢的作品来模仿,如果不会,那就去问人,问不到,那就先放着,继续练习别的,开始练习时建议一些有教程的,慢慢的就可以练一下没有教程的,再后来你会发现随便一幅图,看几眼你就知道怎么弄了。如果你真的有天赋,期间你已经创作出一些能看的作品了。&br&最后说一点,还是教程问题,看完上面两个教程,你还要练习,除了上网,比如站酷,花瓣,Ps联盟,其实Photoshop吧也还可以(记住不是Ps吧)一些基本的网站外,还可以看教程,但是国外的教程,国内的会把你越带越远,我看过一些,这里就不拿出来做反面教材了。老外玩这些东西真的很溜(而且外国的教程流到中国本身就已经是一种筛选了),会让你大开眼界,原来Ps还可以这么玩,我学Ps是为了摄影,所以研究的不深。大家学的话也不建议研究的太深(当然,你感兴趣则另当别论),关键还是你自己的创造力和艺术感的培养,而不是去折腾工具,&b&记住Ps只是工具,你的最终目的是提升自己的审美并创造出东西&/b&&br&还有一本公认经典《自学教程》好像两个姓李的出的,看过一点,这个改天上图,记不得了。&b& 就是这本,我看过,但没看完,感觉还不错&/b&&br&&img src=&/fab034ad2d7_b.jpg& data-rawheight=&385& data-rawwidth=&310& class=&content_image& width=&310&&&br&&b&tips:1:多看一些好的作品,培养审美力。&/b&&br&&b&
3.模仿很重要&/b&&br&&b&
2:练习很关键,熟能生巧。&/b&&br&&b&OK答完,那是不可能的,真正的干货还没吐呢!&/b& 通过上面你大概也能总结出怎么学软件了吧!&br&&b&1,教程不要多,要精,&/b&你没有时间看太多,所以你最好花时间来找教程,这个最好的方法就是问学过的人,论坛也好百度也好,花点时间准备准没错,不然一本坑爹的教程只会让你越走越远 。磨刀不误砍柴功。&br&&b&2,找到好教程就要用心学&/b&,不要蜻蜓点水,浅尝辄止,这样你什么都学不精,对软件来说就等于什么都没学会,浪费时间。&br&&b&3,做笔记,这真的很重要&/b&,比如我学CAD我会截图记住一些命令,快捷键,这样你就不会太心急,以后忘了方便查看,加深记忆 &br&&b&4,练习&/b&,很多人学了不去练习,过一久就忘了,你只有练习才能把学到东西内化成一种能力,像PS这样的就模仿好的作品,CAD你就给我抄图吧!啥也别说了 &br&&b&5,多看好作品&/b&,学会欣赏,才能创造&br&&b&6,最后也是最重要的一点&/b&,你学这个东西要嘛马上就能用起来,要嘛你喜欢,并且会长期从事,你再学。如果只是看到别人创作出吊炸天的作品震撼到你而一时冲动就去学,那我劝你打住,你学会了也未必创造得出神级作品,何况你不一定学得会。何必浪费时间。 &br&这六点,题主参考,学其他软件也大同小异了 &br&这是我做的笔记,大家也可以学一学如何做笔记,找一个适合自己的做笔记方法,仅供参考:记录一些命令,路径,重要的数据,快捷键,一些问题,自己的想法等等&br&&img src=&/8c4ef5bf98ac2ccfa06d792d_b.jpg& data-rawheight=&711& data-rawwidth=&1260& class=&origin_image zh-lightbox-thumb& width=&1260& data-original=&/8c4ef5bf98ac2ccfa06d792d_r.jpg&&&br&最后一点就是找教程,首先是网上搜,搜不到就上网盘搜,再搜不到就上淘宝买几块钱的事,但这些话显然不是我说的,我们要&b&支持正版,打击盗版&/b&,不然我直接把链接发出来了←_←←_←←_←←_← &br&请不要做伸手党
最后一次更新,我重新整理了一下,填了一下上次的坑,把那两个坑爹的几何做图题的答案放上来。 借此也想说明一下:不要找我要教程。 知乎作为一个讨论和分享的平台,这是我觉得知乎不同于贴吧最大的一点。学习也是需要投资的,如果你花了钱买了我推荐的教程…
【视频/课程】&br&&br&UPDATE:不再推荐Erik Meijer的FP101x。直接看Hutton的书就够了。&br&&a href=&///?target=https%3A//www.edx.org/course/introduction-functional-programming-delftx-fp101x-0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Introduction to Functional Programming&i class=&icon-external&&&/i&&/a&&br&Erik Meijer的公开课,内容很浅,覆盖基本Haskell语法,适合入门。用的教材是&a href=&///?target=http%3A//www.cs.nott.ac.uk/%7Egmh/book.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Programming in Haskell&i class=&icon-external&&&/i&&/a&。他还在Channel 9上录过一套Haskell教学视频,不过那些视频比较老了(口音一如既往有特色啊):&a href=&///?target=http%3A///Series/C9-Lectures-Erik-Meijer-Functional-Programming-Fundamentals/Lecture-Series-Erik-Meijer-Functional-Programming-Fundamentals-Chapter-1& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&C9 Lectures: Dr. Erik Meijer&i class=&icon-external&&&/i&&/a&&br&&br&以下课程难度更高,适合有一定Haskell基础者继续学习。&br&&a href=&///?target=https%3A//videoag.fsmpi.rwth-aachen.de/%3Fcourse%3D12ss-funkprog& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&videoag.fsmpi.rwth-aachen.de&/span&&span class=&invisible&&/?course=12ss-funkprog&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a& (亚琛工业大学的Haskell讲课视频,实现Haskell编译器可以看)&br&&a href=&///?target=https%3A//www.cs.uoregon.edu/research/summerschool/summer13/curriculum.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Oregon Programming Languages Summer School&i class=&icon-external&&&/i&&/a&(OPLSS13中Simon Peyton Jones的系列讲座“Adventures with types in Haskell”,着重介绍类型系统)&br&&a href=&///?target=http%3A//www.scs.stanford.edu/14sp-cs240h/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CS240h: Functional Systems in Haskell&i class=&icon-external&&&/i&&/a& (注重工程实践,范围与Real World Haskell相当)&br&&br&另外值得一看的还有&br&&a href=&///?target=https%3A///explore%3Fsort_by%3Ddesc%26q%3Dtag%253Ahaskell%26location%3D%26content%3Dskillscasts& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Explore our archive for haskell conference and community skillscast videos&i class=&icon-external&&&/i&&/a&(skills matter上有许多Haskell相关讲座的视频,值得一看。注册一个账号就可以在线看,vimeo需要科学上网)&br&&a href=&///?target=http%3A///Tags/functional%2Bprogramming& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Functional Programming&i class=&icon-external&&&/i&&/a& (Channel 9上有一些跟Functional Programming相关的有趣讲座)&br&&a href=&///?target=https%3A///drKraken/haskell-must-watch& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&drKraken/haskell-must-watch · GitHub&i class=&icon-external&&&/i&&/a&(一些Haskell相关视频的清单)&br&&br&【教材】&br&&br&&a href=&///?target=http%3A//www.cs.nott.ac.uk/%7Egmh/book.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Programming in Haskell&i class=&icon-external&&&/i&&/a&(FP101x教材)&br&&a href=&///?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Learn You a Haskell for Great Good!&i class=&icon-external&&&/i&&/a&(趣学指南)&br&&a href=&///?target=http%3A//www.cambridge.org/ch/academic/subjects/computer-science/programming-languages-and-applied-logic/thinking-functionally-haskell& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Thinking Functionally with Haskell&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A///Haskell-Functional-Programming-International-Computer/dp/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Haskell: The Craft of Functional Programming (3rd Edition) &i class=&icon-external&&&/i&&/a&&br&覆盖基本Haskell语法,适合入门。尤其推荐第一本,篇幅短,内容精炼,作为第一本Haskell书比趣学指南好。&br&&br&&a href=&///?target=http%3A//book.realworldhaskell.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Real World Haskell&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A//community.haskell.org/%7Esimonmar/pcph/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Parallel and Concurrent Programming in Haskell&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A///book& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Yesod Web Framework Book- Version 1.4&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Haskell Data Analysis Cookbook&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=https%3A///big-data-and-business-intelligence/haskell-financial-data-modeling-and-predictive-analytics& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Haskell Financial Data Modeling and Predictive Analytics&i class=&icon-external&&&/i&&/a&&br&注重工程实践。Real World Haskell的书覆盖面广,但是太旧,不少库和语言的变化没有包含;并行与并发编程、Yesod书这两本尤其推荐。&br&&br&&a href=&///?target=http%3A//www.cambridge.org/us/academic/subjects/computer-science/programming-languages-and-applied-logic/pearls-functional-algorithm-design& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Pearls of Functional Algorithm Design&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A///Purely-Functional-Structures-Chris-Okasaki/dp/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Purely Functional Data Structures&i class=&icon-external&&&/i&&/a&&br&纯函数式的数据结构和算法经典。Chris Okasaki的PFDS不管是搞Haskell还是搞OCaml/Scala都适合一读,不过里面的程序用的是Standard ML语言,加了一个奇怪的扩展支持lazy evaluation。&br&&br&&a href=&///?target=http%3A///en-us/um/people/simonpj/papers/pj-lester-book/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Simon Peyton Jones: book&i class=&icon-external&&&/i&&/a&(Implementing functional languages: a tutorial)&br&实现一门简单的惰性纯函数式语言的详尽教材。&br&&br&&a href=&///?target=http%3A//mitpress.mit.edu/books/basic-category-theory-computer-scientists& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Basic Category Theory for Computer Scientists&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A//www.cambridge.org/us/academic/subjects/mathematics/logic-categories-and-sets/conceptual-mathematics-first-introduction-categories-2nd-edition& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Conceptual Mathematics A First Introduction to Categories&i class=&icon-external&&&/i&&/a&&br&教范畴论的我能找到的最简单的书。Erik Meijer在今年可能开设一门范畴论的MOOC,教材采用后一本。(更新:Meijer没开课。。。。)&br&&br&【文档】&br&&br&&a href=&///?target=https%3A//www.haskell.org/onlinereport/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&The Haskell 98 Language Report&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=https%3A//www.haskell.org/onlinereport/haskell2010/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&haskell.org/onlinerepor&/span&&span class=&invisible&&t/haskell2010/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=https%3A//downloads.haskell.org/%7Eghc/latest/docs/html/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GHC Documentation&i class=&icon-external&&&/i&&/a&&br&&br&Haskell目前最新的语言标准是Haskell 2010。但ghc有许多重要的Haskell语言扩展,而ghc又几乎是唯一能在生产环境用的开源Haskell编译器。所以除了参考语言报告以外,掌握ghc的各种扩展和其他细节也十分重要。&br&&br&【论文】&br&&br&&a href=&///?target=http%3A//homepages.inf.ed.ac.uk/wadler/topics/monads.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Wadler: Monads&i class=&icon-external&&&/i&&/a&&br&着重推荐Monads for functional programming这篇。&br&&br&&a href=&///?target=http%3A///en-us/um/people/simonpj/papers/papers.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Simon Peyton Jones: papers&i class=&icon-external&&&/i&&/a&&br&你连SPJ的论文都看不完,还好意思说自己喜欢Haskell?(逃&br&&br&&a href=&///?target=https%3A//ghc.haskell.org/trac/ghc/wiki/ReadingList& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ReadingList&i class=&icon-external&&&/i&&/a&(GHC相关论文列表)&br&&a href=&///?target=https%3A//wiki.haskell.org/Research_papers& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Research papers&i class=&icon-external&&&/i&&/a&(Haskell与函数式编程论文列表)&br&&br&&a href=&///?target=http%3A//journals.cambridge.org/action/displayJournal%3Fjid%3DJFP& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Journal of Functional Programming&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A//dl.acm.org/event.cfm%3Fid%3DRE307& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Event: ICFP&i class=&icon-external&&&/i&&/a&&br&函数式编程的重量级期刊/会议。&br&&br&【博客】&br&&br&&a href=&///?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Inside 206-105&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Bartosz Milewski's Programming Cafe &i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Home&i class=&icon-external&&&/i&&/a&(Stephen Diehl博客)&br&&a href=&///?target=https%3A///school& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&School of Haskell&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A///reader/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&The Comonad.Reader&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=https%3A//ocharles.org.uk/blog/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ocharles.org.uk&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A//okmij.org/ftp/Haskell/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Haskell Programming&i class=&icon-external&&&/i&&/a&&br&&br&【库】&br&&br&&a href=&///?target=https%3A//hackage.haskell.org/packages/top& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Total downloads&i class=&icon-external&&&/i&&/a&&br&Hackage按照下载数排名的包列表。下载数靠前的包社区更常用、靠谱程度更高。&br&&br&【其他】&br&&br&&a href=&///?target=https%3A///domains/fp/intro& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Programming Problems and Competitions :: HackerRank&i class=&icon-external&&&/i&&/a& (刷题有助于入门)&br&&a href=&///?target=https%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Welcome to FP Haskell Center&i class=&icon-external&&&/i&&/a&(适合Haskell新人练手的云IDE)UPDATE:这个云IDE年底将会关闭。
【视频/课程】 UPDATE:不再推荐Erik Meijer的FP101x。直接看Hutton的书就够了。
Erik Meijer的公开课,内容很浅,覆盖基本Haskell语法,适合入门。用的教材是。他还在Channel 9上录过一套Ha…
&p&0. 质(素)数的孤独&/p&&p&意大利八〇后作家、粒子物理学博士保罗·乔尔达诺写了一本小说叫做《质数的孤独》。在小说中,马蒂亚是一个年轻的数学天才,他相信自己是质(素)数中的一个,而中学同学爱丽丝正是他的孪生质(素)数。他们都有痛苦的过往,同样孤独,同样无法拉近和其他人之间的距离。&br&&/p&&p&那么素数到底有多么孤独?&br&&/p&&p&1. 什么是孪生素数猜想?&br&&/p&&p&我们知道,素数是大于1的只能被1和它本身所整除的正整数,如2,3,5,7等等。即使我们只观察前面很少的一些素数,也可以感觉得到素数的分布非常的不规则。由素数定理,我们可以得到下面的关系&br&&/p&&img src=&/aab77d5f194dddb1cb0236d_b.jpg& data-rawwidth=&151& data-rawheight=&40& class=&content_image& width=&151&&&p&其中p代表的是素数,对数是以e为底。由此公式我们可以看出,在1到x之间的素数,每两个之间的距离,在平均的意义之下,为log x。而从另一个角度来看,除去2之外,所有的素数都是奇数,它们之间的距离至少为2。那么我们是否有无穷多的素数对(p,q)满足p+2=q呢?&/p&&p&1900年在巴黎举行的国际数学家大会上,Hilbert提出了23个问题,其中的第八题为黎曼猜想及哥德巴赫猜想和孪生素数猜想。孪生素数猜想表述为:&br&&/p&&p&存在无穷多个素数p,使得p+2也是素数。&/p&&p&这个问题可以理解为,把第n个素数记为p_n,则有&br&&/p&&img src=&/6f96fc75952feb6d890b53cd_b.jpg& data-rawwidth=&159& data-rawheight=&25& class=&content_image& width=&159&&&p&2. 孪生素数猜想与哥德巴赫猜想&/p&&p&尽管孪生素数猜想已经非常的出名,但是相比较起大家对哥德巴赫猜想的熟知程度,恐怕还是难以望其项背。&br&&/p&&p&孪生素数猜想与哥德巴赫猜想都涉及到两个素数,孪生素数猜想是说2可以表示成无穷多对素数的差,哥德巴赫猜想则是说任意偶数可以表示成两个素数的和。&br&&/p&&p&对于哥德巴赫猜想,我们知道陈景润著名的结果:&img src=&/feb81f9b619b4abf0c599cb81b9f8b1f_b.jpg& data-rawwidth=&81& data-rawheight=&14& class=&content_image& width=&81&&&/p&&p&其中n是一个充分大的偶数,p是一个素数,P_2是一个素因子个数不超过2个的数。这个结果也就是俗称的&1+2&。运用同样的技巧,我们可以得到这样的结果:&br&&/p&&img src=&/0617f10ebdf8f791d583abb_b.jpg& data-rawwidth=&80& data-rawheight=&15& class=&content_image& width=&80&&&p&也即有无穷多对(p,p+2)满足p是一个素数,p+2至多有2个素因子。&/p&&p&由此我们可以看出孪生素数猜想与哥德巴赫猜想之间存在一定的联系。而就在哥德巴赫猜想的研究并没有太大突破的时候,孪生素数猜想则取得了质变的进展。&br&&/p&&p&3. 孪生素数猜想与张益唐及其他&br&&/p&&p&在叙述张益唐的论文结果之前,不妨先来看一些之前的结果。&br&&/p&&p&Goldston,Pintz和Yildirim在2009年的文章[1]中证明了:&br&&/p&&img src=&/3c4e815a7eef_b.jpg& data-rawwidth=&152& data-rawheight=&33& class=&content_image& width=&152&&&p&也就是说,存在无穷多对素数对,使得两个素数之间的距离的阶是不超过log p_n的。而他们证明这个结论的方法也被称为GPY方法。紧接着在2010年,他们在论文[2]证明了:&/p&&img src=&/020c3d00a611908dfcdd3bf_b.jpg& data-rawwidth=&213& data-rawheight=&34& class=&content_image& width=&213&&&p&这些结果表明两个素数之间存在小的间隔,但是这个间隔并不是有限的,离2这个数还存在很大距离。而就在去年2013年,张益唐[4]做出了极其巨大的贡献,把这个间隔直接带到了有限的数——70,000,000,即&/p&&img src=&/04b347c96b3f828c41fb5acd_b.jpg& data-rawwidth=&202& data-rawheight=&25& class=&content_image& width=&202&&&p&虽然七千万比2还是大很多,但是,它至少是一个有限数,某种意义上来讲,有限数在本质上是一样的。&/p&&p&接下来,众多的数学工作者开始致力于减小这个数。在去年的11月,蒙特利尔大学的博士后Maynard[3]推进到600,即&br&&/p&&img src=&/fe244c7e31c5e1f71b564d_b.jpg& data-rawwidth=&175& data-rawheight=&25& class=&content_image& width=&175&&&p&4. 技术细节&/p&&p&这里简要说一下证明的思路,供有兴趣的朋友参考(基于Maynard的论文[3]并做了一定的简化)。&br&&/p&&p&取&br&&/p&&img src=&/6b38bd941cfa7_b.jpg& data-rawwidth=&135& data-rawheight=&17& class=&content_image& width=&135&&&p&为一个满足某些性质的集合。这个集合中有105个自然数,并且这些数的差最大为600。我们所要考虑的为&/p&&img src=&/70da4f2b38edc6f2f7b3bd6d5344431c_b.jpg& data-rawwidth=&285& data-rawheight=&50& class=&content_image& width=&285&&&p&其中N是很大的数,\chi_p这个函数为素数的特征函数(即自变量为素数则取1其余取0),w_n是一个与n有关且取正数的函数。&/p&&p&来进一步解释一下定义的这个求和。我们先取定一个n,那么n+h_i便得到了105个数。在这105个数当中,如果没有素数,括号里面的求和便是-1;如果有一个素数则为0;如果有两个素数则为1……再乘以w_n之后,只有当这105个数有不少于两个素数的时候才是正的。那么,如果我们求得S(N)为正数,则可以说明在N到2N之间至少存在一个n,使得n+h_i这105个数当中至少有两个数是素数。&br&&/p&&p&证明的难点在于得到所谓素数在算术级数中平均分布的“水平”(level of distribution),即&br&&/p&&img src=&/ece68cb87def5dfdd148377_b.jpg& data-rawwidth=&349& data-rawheight=&57& class=&content_image& width=&349&&&p&其中\theta是一个正数,\phi是欧拉函数,A是任意大的正数。在\theta小的时候,这个式子是成立的。意大利数学家Bombieri与苏联数学家Vinogradov各自独立的证明了\theta=1/2的时候,此式成立。而当\theta取到1的时候,这个式子是错的。如何打破1/2这个界限是张益唐取得突破的关键所在。他的思路是运用分解的方法,巧妙地证明了此式对某个大于1/2的\theta成立,进而得到了他的结果。&/p&&p&此外,如果我们假设如果此式对任意小于1的\theta都成立(这被称作Halberstam-Elliott猜想),Maynard[3]证明了&/p&&img src=&/dda8d8ab83ac822_b.jpg& data-rawwidth=&167& data-rawheight=&25& class=&content_image& width=&167&&&p&5. 扩展阅读:&br&&/p&&p&这里我必须要极力推荐香港浸会大学汤涛教授的文章《张益唐和北大数学78级》:&br&&/p&&p&&a href=&/?target=http%3A///wenda/index.php%3Fclass%3Ddiscuss%26action%3Dquestion_item%26questionid%3D3640& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&/wenda/index&/span&&span class=&invisible&&.php?class=discuss&action=question_item&questionid=3640&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&&/p&&p&文章很专业的介绍了孪生素数猜想以及张益唐的结果,并且很全面的介绍了张益唐本人。我的这篇文章比汤涛教授的文章差的太远,可能我只是多给出了一点点技术细节而已。我觉得我写这篇更大的意义在于推荐大家去看汤涛教授的文章。&br&&/p&&p&6. 参考文献&br&&/p&&p&[1] D. A. Goldston, J. Pintz and C. Y. Yildirim, Primes in Tuples I, Ann. Math. 170(2009), 819-862.&br&&/p&&p&[2] D. A. Goldston, J. Pintz and C. Y. Yildirim, Primes in Tuples II, Acta Math. 204(2010), 1-47.&br&&/p&&p&[3] J. Maynard, Small gaps between primes, &a href=&/?target=http%3A//arxiv.org/pdf/.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&arxiv.org/pdf/&/span&&span class=&invisible&&v2.pdf&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&&/p&&p&[4] Y. Zhang, Bounded gaps between primes, Ann. of Math.(2), to appear. &a href=&/?target=http%3A//sci-hub.org/pdfcache/1ae2df0a1cf9caf79c9c06f26817f13f.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&sci-hub.org/pdfcache/1a&/span&&span class=&invisible&&e2df0a1cf9caf79c9c06f26817f13f.pdf&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&
0. 质(素)数的孤独意大利八〇后作家、粒子物理学博士保罗·乔尔达诺写了一本小说叫做《质数的孤独》。在小说中,马蒂亚是一个年轻的数学天才,他相信自己是质(素)数中的一个,而中学同学爱丽丝正是他的孪生质(素)数。他们都有痛苦的过往,同样孤独,…
&img src=&/v2-171a7bae8c8d0d9ff1f32_b.jpg& data-rawwidth=&920& data-rawheight=&360& class=&origin_image zh-lightbox-thumb& width=&920& data-original=&/v2-171a7bae8c8d0d9ff1f32_r.jpg&&&p&原文:&a href=&/?target=https%3A//ujjwalkarn.me//intuitive-explanation-convnets/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&An Intuitive Explanation of Convolutional Neural Networks&i class=&icon-external&&&/i&&/a&&/p&&p&作者:&a href=&/?target=https%3A//ujjwalkarn.me/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Ujjwal Karn&i class=&icon-external&&&/i&&/a&&/p&&p&翻译:Kaiser(&a href=&/?target=http%3A///kaiser0730& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&王司图&i class=&icon-external&&&/i&&/a&)&/p&&p&动图+在线练习版本:&a href=&/?target=https%3A//jizhi.im/blog/post/intuitive_explanation_cnn& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&卷积:如何成为一个很厉害的神经网络 - 集智专栏&i class=&icon-external&&&/i&&/a&&/p&&br&&br&&br&&h2&前言&/h2&&ul&&li&如果你对神经网络还是完全陌生的,建议阅读&a href=&/?target=https%3A//jizhi.im/blog/post/nn_py_9& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&9行Python代码搭建神经网络&i class=&icon-external&&&/i&&/a&来掌握一些基本概念。&/li&&li&本文含有部分gif动图,有可能无法播放,也需要访问上面的“集智”链接查看。&/li&&li&作为奖品的战网点卡已全部送出,祝贺以下获奖用户:&/li&&ul&&li&&a href=&/people/liu-yang-81-87& class=&internal&&刘洋 - 知乎&/a&&br&&/li&&li&&a href=&/people/shower& class=&internal&&张震宇 - 知乎&/a&&br&&/li&&li&&a href=&/people/zhu-shi-61-39/& class=&internal&&竹石 - 知乎&/a&&br&&/li&&li&&a href=&/people/chen-hui-zhi-89& class=&internal&&Sanada Yukimura - 知乎&/a&&br&&/li&&li&&a href=&/?target=http%3A///u/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Andras丶- 微博 &i class=&icon-external&&&/i&&/a&&br&&/li&&/ul&&/ul&&br&&br&&br&&h2&什么是卷积神经网络?又为什么很重要?&/h2&&p&卷积神经网络(Convolutional Neural Networks, ConvNets or CNNs)是一种在图像识别与分类领域被证明特别有效的神经网络。卷积网络已经成功地识别人脸、物体、交通标志,应用在机器人和无人车等载具。&/p&&p&&img src=&/v2-f88d14494c0da_b.png& data-rawwidth=&1502& data-rawheight=&569& class=&origin_image zh-lightbox-thumb& width=&1502& data-original=&/v2-f88d14494c0da_r.png&&&i&图1&/i&&/p&&br&&br&&p&在上面的图1当中,卷积网络能够识别场景而系统可以自动推荐相关标签如“桥”、“铁路”、“网球”等。图2则展示了卷积网络识别日常事物如人、动物的例子。最近,卷积网络也已经在自然语言处理上显示出了威力(比如句子分类)。&br&&/p&&p&&img src=&/v2-4d9cd3e6a1b_b.png& data-rawwidth=&1326& data-rawheight=&494& class=&origin_image zh-lightbox-thumb& width=&1326& data-original=&/v2-4d9cd3e6a1b_r.png&&&i&图2&/i&&/p&&br&&br&&p&卷积网络,在今天的绝大多数机器学习应用中都是极重要的工具。但是,理解卷积网络并首次学着使用,这体验有时并不友好。本文的主旨在于帮助读者理解,卷积神经网络是如何作用于图片的。&/p&&p&在本文,多层感知机(Multi-Layer Perceptrons, MLP)也被记作全连接层(Fully Connected Layers)。&/p&&br&&br&&h2&LeNet架构(1990年代)&/h2&&p&LeNet是最早用于深度学习了领域的卷积神经网络之一。Yann LeCun的这一杰作LeNet5得名于他自1988年以来的系列成功迭代。彼时LeNet架构还主要被用于识别邮政编码等任务。&/p&&p&下面我们将直观地感受一下,LeNet是如何学习识别图像的。近几年已经出现了很多建立在LeNet之上的新架构,但是基本概念还是来自于LeNet,并且理解了LeNet再学其他的也会更简单。&/p&&p&&img src=&/v2-38f71f3d4d0baac609d1cc6fe6f22a74_b.png& data-rawwidth=&1493& data-rawheight=&356& class=&origin_image zh-lightbox-thumb& width=&1493& data-original=&/v2-38f71f3d4d0baac609d1cc6fe6f22a74_r.png&&&i&图3:简单的ConvNet&/i&&/p&&br&&br&&p&&strong&图3&/strong&的卷积神经网络与LeNet的原始架构十分接近,把图片分入四个类别:狗,猫,船,鸟(LeNet最早主要就是用来做这些)。如上图所示,当获得一张船图作为输入的时候,网络正确的给船的分类赋予了最高的概率(0.94)。输出层的各个概率相加应为1.&br&&/p&&p&&strong&图3&/strong&的卷积神经网络主要执行了四个操作:&/p&&ol&&li&卷积&/li&&li&非线性(ReLU)&/li&&li&池化或下采样&/li&&li&分类(全连接层)&/li&&/ol&&p&这些操作也是所有卷积神经网络的基石,所以理解好这些工作对于理解整个神经网络至关重要。接下来我们将尝试最直观地理解以上操作。&/p&&br&&br&&br&&br&&h2&图片是像素值的矩阵&/h2&&p&本质上来讲,每个图片都可以表示为像素值组成的矩阵:&/p&&p&&img src=&/v2-30687aad60eedacb71aafca_b.jpg& data-rawwidth=&384& data-rawheight=&383& class=&content_image& width=&384&&&i&图4:像素值矩阵&/i&&/p&&br&&br&&p&&b&通道&/b&是代指图片特定成分的习语。常见数码相机拍出来的照片有三个通道——红、绿、蓝-可以想象为是三个2d矩阵(每种颜色对应一个)叠在一起,每个矩阵的值都在0-255之间。&/p&&p&另一方面,&b&灰度&/b&图像只有单通道。本文为简单起见只考虑灰度图像,这样就是一个2d矩阵。矩阵中的每个像素值还是0到255——0表示黑,255表示白。&/p&&br&&br&&br&&br&&h2&卷积&/h2&&p&卷积网络是因为&b&“卷积”操作&/b&而得名的。卷积的根本目的是从输入图片中提取特征。卷积用一个小方阵的数据学习图像特征,可以保留像素之间的空间关系。这里不深入探讨卷积的数学原理,重在理解工作过程。&/p&&p&如上所述,每个图片都是像素值矩阵。考虑一个5x5的图像,其像素值为0和1,下面的绿色矩阵是灰度图的特例(常规灰度图的像素值取值0-255),同时考虑如下的3x3矩阵:&/p&&img src=&/v2-add89dece41af8f2af03e4_b.png& data-rawwidth=&768& data-rawheight=&324& class=&origin_image zh-lightbox-thumb& width=&768& data-original=&/v2-add89dece41af8f2af03e4_r.png&&&p&然后,5x5图像和3x3矩阵之间的卷积计算,可由下图的动画所表示:&br&&/p&&br&&img src=&/v2-ac1e9e1cf462e1ec8fe9a68_b.jpg& data-rawwidth=&526& data-rawheight=&384& class=&origin_image zh-lightbox-thumb& width=&526& data-original=&/v2-ac1e9e1cf462e1ec8fe9a68_r.jpg&&&p&&i&图5:卷积操作。输出矩阵叫卷积特征或特征映射&br&&/i&&/p&&br&&br&&p&想一想以上操作是如何完成的,我们在原始图片(绿色)上1像素、1像素地滑动橙色矩阵(也称'stride'),并且在每个位置上,我们都对两个矩阵的对应元素相乘后求和得到一个整数,这就是输出矩阵(粉色)的元素。注意,3x3矩阵每次只“看见”输入图片的一部分。&/p&&p&3x3矩阵也叫“&strong&滤波器&/strong&”、“核”或“特征探测器”,在原图上滑动滤波器、点乘矩阵所得的矩阵称为“卷积特征”、“激励映射”或“&strong&特征映射&/strong&”。这里的重点就是,理解滤波器对于原输入图片来说,是个特征探测器。&/p&&br&&p&对于同一张照片,不同的滤波器将会产生不同的特征映射。比如考虑下面这张输入图片:&/p&&p&&img src=&/v2-dbba2a167aec7a158d93b2_b.jpg& data-rawwidth=&1150& data-rawheight=&219& class=&origin_image zh-lightbox-thumb& width=&1150& data-original=&/v2-dbba2a167aec7a158d93b2_r.jpg&&下表可见各种不同卷积核对于上图的效果。只需调整滤波器的数值,我们就可以执行诸如边缘检测、锐化、模糊等效果——这说明不同的滤波器会从图片中探测到不同的特征,比如边缘、曲线等。&br&&/p&&img src=&/v2-034cc9c280_b.png& data-rawwidth=&658& data-rawheight=&1082& class=&origin_image zh-lightbox-thumb& width=&658& data-original=&/v2-034cc9c280_r.png&&&br&&p&另一种对卷积操作很好的理解方式就是观察&strong&图6&/strong&的动画:&/p&&p&(gif体积过大,无法上传)&/p&&br&&br&&p&一个滤波器(红框)在图片上滑动(卷积)产生特征映射。在同一个图片上,另一个滤波器(绿框)的卷积产生了不同的特征映射。须知,卷积操作捕捉的是原图的局部依赖性。另外,注意观察两个不同的滤波器怎样产生不同的特征映射。其实不管是图片,还是两个滤波器,本质上都不过是我们刚才看过的数值矩阵而已。&/p&&p&在实践当中,卷积神经网络在训练过程中学习滤波器的值,当然我们还是要在训练之前需要指定一些参数:滤波器的个数,滤波器尺寸、网络架构等等。滤波器越多,从图像中提取的特征就越多,模式识别能力就越强。&/p&&br&&p&特征映射的尺寸由三个参数控制,我们需要在卷积步骤之前就设定好:&br&&/p&&ul&&li&深度(Depth): 深度就是卷积操作中用到的滤波器个数。如&strong&图7&/strong&所示,我们对原始的船图用了三个不同的滤波器,从而产生了三个特征映射。你可以认为这三个特征映射也是堆叠的2d矩阵,所以这里特征映射的“深度”就是3。&/li&&/ul&&p&&img src=&/v2-d20c9c3a1298e5baa8793d_b.png& data-rawwidth=&802& data-rawheight=&402& class=&origin_image zh-lightbox-thumb& width=&802& data-original=&/v2-d20c9c3a1298e5baa8793d_r.png&&&i&图7&/i&&/p&&br&&br&&ul&&li&&p&步幅(Stride):步幅是每次滑过的像素数。当Stride=1的时候就是逐个像素地滑动。当Stride=2的时候每次就会滑过2个像素。步幅越大,特征映射越小。&/p&&/li&&li&&p&补零(Zero-padding):有时候在输入矩阵的边缘填补一圈0会很方便,这样我们就可以对图像矩阵的边缘像素也施加滤波器。补零的好处是让我们可以控制特征映射的尺寸。补零也叫宽卷积,不补零就叫窄卷积。&/p&&/li&&/ul&&br&&br&&br&&br&&h2&非线性&/h2&&p&如&strong&图3&/strong&所示,每个卷积操作之后,都有一个叫&strong&ReLU&/strong&的附加操作。ReLU的全称是纠正线性单元(Rectified Linear Unit),是一种非线性操作,其输出如下:&/p&&p&&img src=&/v2-c8afbf19afabcfccb1d0f27ac5f7eed0_b.png& data-rawwidth=&1071& data-rawheight=&336& class=&origin_image zh-lightbox-thumb& width=&1071& data-original=&/v2-c8afbf19afabcfccb1d0f27ac5f7eed0_r.png&&&i&图8:ReLU&/i&&/p&&br&&br&&p&ReLU是以像素为单位生效的,其将所有负值像素替换为0。ReLU的目的是向卷积网络中引入非线性,因为真实世界里大多数需要学习的问题都是非线性的(单纯的卷积操作时线性的——矩阵相乘、相加,所以才需要额外的计算引入非线性)。&/p&&p&图9可以帮助我们清晰地理解,ReLU应用在&strong&图6&/strong&得到的特征映射上,输出的新特征映射也叫“纠正”特征映射。(黑色被抹成了灰色)&/p&&p&&img src=&/v2-9feb833b3e855d9d282fceb_b.png& data-rawwidth=&1496& data-rawheight=&560& class=&origin_image zh-lightbox-thumb& width=&1496& data-original=&/v2-9feb833b3e855d9d282fceb_r.png&&&i&图9:ReLU&/i&&/p&&br&&p&其他非线性方程比如&strong&tanh&/strong&或&strong&sigmoid&/strong&也可以替代ReLU,但多数情况下ReLU的表现更好。&br&&/p&&br&&br&&br&&h2&池化&/h2&&p&空间池化(也叫亚采样或下采样)降低了每个特征映射的维度,但是保留了最重要的信息。空间池化可以有很多种形式:最大(Max),平均(Average),求和(Sum)等等。&/p&&p&以最大池化为例,我们定义了空间上的邻域(2x2的窗)并且从纠正特征映射中取出窗里最大的元素。除了取最大值以额外,我们也可以取平均值(平均池化)或者把窗里所有元素加起来。实际上,最大池化已经显示了最好的成效。&/p&&p&&strong&图10&/strong&显示了对纠正特征映射的最大池化操作(在卷积+ReLU之后),使用的是2x2的窗。&/p&&p&&img src=&/v2-bb34c4e42eb0e_b.png& data-rawwidth=&988& data-rawheight=&842& class=&origin_image zh-lightbox-thumb& width=&988& data-original=&/v2-bb34c4e42eb0e_r.png&&&i&图10:最大池化&/i&&/p&&br&&br&&p&我们以2格的步幅(Stride)滑动2x2的窗,并且取每个区域的最大值。&strong&图10&/strong&同样显示了池化可以减少特征映射的维度。&/p&&p&在&strong&图11&/strong&所示的网络中,池化操作分别应用于每个特征映射(注意正因如此,我们从三个输入映射得到了三个输出映射)。&/p&&p&&img src=&/v2-22eebe9b4d2bd571cc94e83_b.png& data-rawwidth=&802& data-rawheight=&439& class=&origin_image zh-lightbox-thumb& width=&802& data-original=&/v2-22eebe9b4d2bd571cc94e83_r.png&&&i&图11:对纠正特征映射应用池化&/i&&/p&&br&&br&&p&&strong&图12&/strong&即为池化操作施加在&strong&图9&/strong&所得纠正特征映射上的效果。&/p&&p&&img src=&/v2-b8e2a2e1f853c2c65befd_b.png& data-rawwidth=&1262& data-rawheight=&538& class=&origin_image zh-lightbox-thumb& width=&1262& data-original=&/v2-b8e2a2e1f853c2c65befd_r.png&&&i&图12:池化&/i&&/p&&br&&br&&p&池化的功能室逐步减少输入表征的空间尺寸。特别地,池化&/p&&ul&&li&使输入表征(特征维度)更小而易操作&/li&&li&减少网络中的参数与计算数量,从而遏制过拟合&/li&&li&增强网络对输入图像中的小变形、扭曲、平移的鲁棒性(输入里的微小扭曲不会改变池化输出——因为我们在局部邻域已经取了最大值/平均值)。&/li&&li&帮助我们获得不因尺寸而改变的等效图片表征。这非常有用,因为这样我们就可以探测到图片里的物体,不论那个物体在哪。&/li&&/ul&&p&截至目前:&/p&&p&&img src=&/v2-cfd915e11fa53fbeb7aa236_b.png& data-rawwidth=&1496& data-rawheight=&355& class=&origin_image zh-lightbox-thumb& width=&1496& data-original=&/v2-cfd915e11fa53fbeb7aa236_r.png&&&i&图13&/i&&/p&&br&&br&&p&至此我们已经了解了卷积、ReLU和池化是如何运转的,这些层对于所有的卷积神经网络都是最基础的单元。如&strong&图13&/strong&所示,我们有两组“卷积+ReLU+池化”层——其中第二组对第一组的输出施加了六个滤波器,产生了六个特征映射。ReLU分别作用域这六个特征映射,再对生成的纠正特征映射使用最大池化。&/p&&p&这些层合力提取出有用的特征,为网络引入了非线性并降低了维度,还使特征对尺寸和平移保持不变性。&/p&&p&第二个池化层的输出相当于全连接层的输入,我们将在下一节继续探讨。&/p&&br&&br&&br&&h2&全连接层&/h2&&p&全连接层(Fully Connected layer)就是使用了softmax激励函数作为输出层的多层感知机(Multi-Layer Perceptron),其他很多分类器如支持向量机也使用了softmax。“全连接”表示上一层的每一个神经元,都和下一层的每一个神经元是相互连接的。&/p&&p&卷积层和池化层呢个的输出代表了输入图像的高级特征,全连接层的目的就是用这些特征进行分类,类别基于训练集。比如图14所示的图像分类任务,有四种可能的类别。(注意,图14没有显示出所有的神经元节点)&/p&&br&&img src=&/v2-45a8c4c8a24c1b3a4ce7d8_b.png& data-rawwidth=&968& data-rawheight=&303& class=&origin_image zh-lightbox-thumb& width=&968& data-original=&/v2-45a8c4c8a24c1b3a4ce7d8_r.png&&&p&&i&图14:全连接层——每个节点都与相邻层的所有节点相连&/i&&/p&&p&除了分类以外,加入全连接层也是学习特征之间非线性组合的有效办法。卷积层和池化层提取出来的特征很好,但是如果考虑这些特征之间的组合,就更好了。&br&&/p&&p&全连接层的输出概率之和为1,这是由激励函数Softmax保证的。Softmax函数把任意实值的向量转变成元素取之0-1且和为1的向量。&/p&&br&&br&&br&&br&&h2&联合起来——反向传播训练&/h2&&p&综上,卷积+池化是特征提取器,全连接层是分类器。&/p&&p&注意&strong&图15&/strong&,因为输入图片是条船,所以目标概率对船是1,其他类别是0.&/p&&ul&&li&输入图像 = 船&/li&&li&目标向量 = [0, 0, 1 ,0]&/li&&/ul&&br&&img src=&/v2-73cc788cfc81dfeb007be_b.png& data-rawwidth=&1496& data-rawheight=&526& class=&origin_image zh-lightbox-thumb& width=&1496& data-original=&/v2-73cc788cfc81dfeb007be_r.png&&&p&&i&图15:训练卷积神经网络&/i&&/p&&br&&br&&p&卷积网络的训练过程可以概括如下:&br&&/p&&br&&li&&strong&Step 1:&/strong& 用随机数初始化所有的滤波器和参数/权重&/li&&ul&&li&&p&&strong&Step 2:&/strong& 网络将训练图片作为输入,执行前向步骤(卷积,ReLU,池化以及全连接层的前向传播)并计算每个类别的对应输出概率。&/p&&ul&&li&假设船图的输出概率是[0.2, 0.4, 0.1, 0.3]&/li&&li&因为第一个训练样本的权重都是随机的,所以这个输出概率也跟随机的差不多&/li&&/ul&&/li&&li&&p&&strong&Step 3:&/strong& 计算输出层的总误差(4类别之和)&/p&&ul&&li&&strong&总误差=∑12(目标概率-输出概率)2总误差=∑12(目标概率-输出概率)2&/strong&&/li&&/ul&&/li&&li&&p&&strong&Step 4:&/strong& 反向传播算法计算误差相对于所有权重的梯度,并用&em&梯度下降法&/em&更新所有的滤波器/权重和参数的值,以使输出误差最小化。&/p&&/li&&ul&&li&权重的调整程度与其对总误差的贡献成正比。&/li&&li&当同一图像再次被输入,这次的输出概率可能是[0.1, 0.1, 0.7, 0.1],与目标[0, 0, 1, 0]更接近了。&/li&&li&这说明我们的神经网络已经学习着分类特定图片了,学习的方式是调整权重/滤波器以降低输出误差。&/li&&li&如滤波器个数、滤波器尺寸、网络架构这些参数,是在Step 1之前就已经固定的,且不会在训练过程中改变——只有滤波矩阵和神经元突触权重会更新。&/li&&/ul&&/ul&&br&&p&以上步骤&em&训练&/em&了卷积网络——本质上就是优化所有的权重和参数,使其能够正确地分类训练集里的图片。&/p&&br&&p&当一个新的(前所未见的)的图片输入至卷积网络,网络会执行前向传播步骤并输出每个类别的概率(对于新图像,输出概率用的也是训练过的权重值)。如果我们的训练集足够大,网络就有望正确分类新图片,获得良好的泛化(generalization)能力。&/p&&br&&p&&strong&注意 1:&/strong& 以上步骤已被极大简化,且数学细节均以忽略,这是为了让训练过程更直观。&/p&&p&&strong&注意 2:&/strong& 上例中,我们用了两组卷积+池化层,其实这些操作可以在一个卷积网络内重复无数次。如今有些表现出众的卷积网络,都有数以十计的卷积+池化层!并且,不是每个卷积层后面都要跟个池化层。由&strong&图16&/strong&可见,我们可以有连续多组卷积+ReLU层,后面再加一个池化层。&/p&&br&&img src=&/v2-36df4a5bf0be915e0ed2ea085f69de32_b.png& data-rawwidth=&1212& data-rawheight=&588& class=&origin_image zh-lightbox-thumb& width=&1212& data-original=&/v2-36df4a5bf0be915e0ed2ea085f69de32_r.png&&&i&图16&/i&&br&&br&&br&&br&&h2&可视化卷积神经网络&/h2&&p&一般来说,卷积层越多,能学会的特征也就越复杂。比如在图像分类中,一个卷积神经网络的第一层学会了探测像素中的边缘,然后第二层用这些边缘再去探测简单的形状,其他层再用形状去探测高级特征,比如脸型,如&strong&图17&/strong&所示——这些特征是&a href=&/?target=http%3A//web.eecs.umich.edu/%7Ehonglak/icml09-ConvolutionalDeepBeliefNetworks.pdf& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Convolutional Deep Belief Network&i class=&icon-external&&&/i&&/a&学得的。这里只是一个简单的例子,实际上卷积滤波器可能会探测出一些没有意义的特征。&/p&&p&&img src=&/v2-da3e21e34ba34aaace0a49_b.png& data-rawwidth=&484& data-rawheight=&510& class=&origin_image zh-lightbox-thumb& width=&484& data-original=&/v2-da3e21e34ba34aaace0a49_r.png&&&i&图17:Convolutional Deep Belief Network学习的特征&/i&&/p&&br&&br&&p&Adam Harley做了一个非常惊艳的卷积神经网络可视化,这个网络是用MNIST手写数字数据库训练而来的。我强烈推荐大家&a href=&/?target=http%3A//scs.ryerson.ca/%7Eaharley/vis/conv/flat.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&玩一玩&i class=&icon-external&&&/i&&/a&,以便更深地理解卷积神经网络的细节。&/p&&p&如下我们将看到网络是如何识别输入数字&8&的。注意,&strong&图18&/strong&没有把ReLU过程单独显示出来。&/p&&p&&img src=&/v2-adbba7de0c0a0e52fe846c01fbc91ccb_b.png& data-rawwidth=&1496& data-rawheight=&847& class=&origin_image zh-lightbox-thumb& width=&1496& data-original=&/v2-adbba7de0c0a0e52fe846c01fbc91ccb_r.png&&&i&图18:可视化卷积神经网络&/i&&/p&&br&&br&&p&输入图像有1024个像素(32x32图片),第一个卷积层(Convolution Layer 1)有六个不同的5x5滤波器(Stride = 1)。由图可见,六个不同的滤波器产生了深度为6的特征映射。&/p&&p&Convolutional Layer 1 后面跟着Pooling Layer 1, 对六个特征映射分别进行2x2的最大池化(Stride = 2)。你可以在动态网页中的每个像素上活动鼠标指针,观察其在前一个卷积层里对应的4x4网格(如&strong&图19&/strong&)。不难发现,每个4x4网格里的最亮的像素(对应最大值)构成了池化层。&/p&&img src=&/v2-3ebea12f90798_b.png& data-rawwidth=&1496& data-rawheight=&358& class=&origin_image zh-lightbox-thumb& width=&1496& data-original=&/v2-3ebea12f90798_r.png&&&p&&i&图19:可视化池化操作&/i&&/p&&br&&br&&p&之后我们有三个全连接(FC)层:&/p&&ul&&li&&strong&FC 1:&/strong& 120神经元&/li&&li&&strong&FC 2:&/strong& 100神经元&/li&&li&&strong&FC 3:&/strong& 10神经元,对应10个数字——也即输出层&/li&&/ul&&p&在&strong&图20&/strong&,输出层10个节点中的每一个,都与第二个全连接层的100个节点相连(所以叫“全连接”)。&/p&&p&注意输出层里的唯一的亮点对应着8——这说明网络正确的识别了手写数字(越亮的节点代表越高的概率,比如这里8就拥有最高的概率)。&/p&&p&&img src=&/v2-bf695c6db7fedfea419b7_b.png& data-rawwidth=&1496& data-rawheight=&310& class=&origin_image zh-lightbox-thumb& width=&1496& data-original=&/v2-bf695c6db7fedfea419b7_r.png&&&i&图20:可视化全连接层&/i&&br&&/p&&br&&p&该可视化的3D版可见于&a href=&/?target=http%3A//scs.ryerson.ca/%7Eaharley/vis/conv/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&这里&i class=&icon-external&&&/i&&/a&。&br&&/p&&br&&br&&h2&其他卷积网络架构&/h2&&p&卷积神经网络始自1990年代起,我们已经认识了最早的LeNet,其他一些很有影响力的架构列举如下:&/p&&ul&&li&&p&1990s至2012:从90年代到2010年代早期,卷积神经网络都处于孵化阶段。随着数据量增大和计算能力提高,卷积神经网络能搞定的问题也越来越有意思了。&/p&&/li&&li&&p&AlexNet(2012):2012年,Alex Krizhevsky发布了&a href=&/?target=https%3A//papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&AlexNet&i class=&icon-external&&&/i&&/a&,是LeNet的更深、更宽版本,并且大比分赢得了当年的ImageNet大规模图像识别挑战赛(ILSVRC)。这是一次非常重要的大突破,现在普及的卷积神经网络应用都要感谢这一壮举。&/p&&/li&&li&&p&ZF Net(2013):2013年的ILSVRC赢家是Matthew Zeiler和Rob Fergus的卷积网络,被称作&a href=&/?target=http%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ZF Net&i class=&icon-external&&&/i&&/a&,这是调整过架构超参数的AlexNet改进型。&/p&&/li&&li&&p&GoogleNet(2014):2014的ILSVRC胜者是来自Google的&a href=&/?target=http%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Szegedy et al.&i class=&icon-external&&&/i&&/a&。其主要贡献是研发了&em&Inception Module&/em&,它大幅减少了网络中的参数数量(四百万,相比AlexNet的六千万)。&/p&&/li&&li&&p&VGGNet(2014):当年的ILSVRC亚军是&a href=&/?target=http%3A//www.robots.ox.ac.uk/%7Evgg/research/very_deep/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&VGGNet&i class=&icon-external&&&/i&&/a&,突出贡献是展示了网络的深度(层次数量)是良好表现的关键因素。&/p&&/li&&li&&p&ResNet(2015): Kaiming He研发的&a href=&/?target=http%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Residual Network&i class=&icon-external&&&/i&&/a&是2015年的ILSVRC冠军,也代表了卷积神经网络的最高水平,同时还是实践的默认选择(2016年5月)。&/p&&/li&&li&&p&DenseNet(2016年8月): 由Gao Huang发表,&a href=&/?target=http%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Densely Connected Convolutional Network&i class=&icon-external&&&/i&&/a&的每一层都直接与其他各层前向连接。DenseNet已经在五个高难度的物体识别基础集上,显式出非凡的进步。&/p&&/li&&/ul&&p&&strong&(翻译部分 完)&/strong&&/p&&br&&br&&p&经过本文和之前的&a href=&/?target=https%3A//jizhi.im/blog/post/nn_py_9& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&系列文章&i class=&icon-external&&&/i&&/a&,您应该已经掌握了卷积神经网络的基本原理。接下来我们尝试用流行的Python深度学习库&a href=&/?target=https%3A//keras-cn.readthedocs.io/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Keras&i class=&icon-external&&&/i&&/a&,动手实地搭建一个LeNet。&/p&&br&&p&实践是神经网络的唯一标准&/p&&br&&p&回顾LeNet的架构,补全第二组卷积+激励+池化,搭建出经典的LeNet网络。&/p&&p&提示:&/p&&ul&&li&第二组卷积层有16个滤波器,尺寸为8x8。&/li&&li&第二组激励层使用tanh函数&/li&&li&第二组最大池化层的尺寸和步幅均为3x3&/li&&/ul&&p&请在下方的Python开发环境中补全代码,并点击蓝色按钮【运行】检查答案是否正确。&/p&&p&&b&(需访问:&a href=&/?target=https%3A//jizhi.im/blog/post/intuitive_explanation_cnn& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&卷积:如何成为一个很厉害的神经网络 - 集智专栏&i class=&icon-external&&&/i&&/a&)&/b&&/p&&br&&p&如下图,第二组卷积+激励+池化层的参数设置有误,就会得到红色提示,并指出具体的错误所在。&/p&&img src=&/v2-f85c12d234d526e12cb9676_b.jpg& data-rawwidth=&1300& data-rawheight=&1815& class=&origin_image zh-lightbox-thumb& width=&1300& data-original=&/v2-f85c12d234d526e12cb9676_r.jpg&&
原文:作者:翻译:Kaiser()动图+在线练习版本: 前言如果你对神经网络还是完全陌生的,建议阅读来…
&p&正好前几天和 &a class=&member_mention& href=&///people/c2d3f56ac34de7d71cdcbc& data-hash=&c2d3f56ac34de7d71cdcbc& data-hovercard=&p$b$c2d3f56ac34de7d71cdcbc&&@雾雨魔理沙&/a& 也讨论过类似的问题。&/p&&p&&b&我们的处境是,我们已经站在了一个通向「写正确的程序」的路口,这条路看上去十分曲折,但里程碑已经显现,待我们去探索。&/b&&/p&&p&&b&因此,答案可能是某个支持 Dependent Type,支持 Programming/Proof by Refinement 的语言插上一大堆做 Term Unification / ATP 的插件……&/b&&/p&&p&&b&Dependent Type&/b&:允许程序员以简单直接的方式约定他想要写的程序应该满足的性质,并且可以以以下方式确保:&/p&&ul&&li&形式证明之,如&a href=&/p/& class=&internal&&我之前写的例子&/a&;&/li&&li&Property-based Testing,这个和形式证明相似,只不过是通过运行大量随机生成的测试案例检验性质是否满足;&/li&&li&传统的单元测试。&/li&&/ul&&p&三者的成本逐渐下降,正确性也逐渐下降,但是三者结合,便平衡正确性与成本。除证明测试外,Dependent Type 带来的强大类型描述能力也可以将入口细化,降低程序员出错的概率。&/p&&p&&b&Programming/Proof by Refinement&/b&:允许程序员以逐步细化的方式实现非常复杂的约束。比如 &a class=&member_mention& href=&///people/c2d3f56ac34de7d71cdcbc& data-hash=&c2d3f56ac34de7d71cdcbc& data-hovercard=&p$b$c2d3f56ac34de7d71cdcbc&&@雾雨魔理沙&/a& 那个 &a href=&///?target=https%3A///ThoughtWorksInc/DeepDarkFantasy& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&DeepDarkFantasy&i class=&icon-external&&&/i&&/a& 里面有这样一个类型非常吓人的函数:&/p&&div class=&highlight&&&pre&&code class=&language-haskell&&&span class=&nf&&hlam&/span& &span class=&ow&&::&/span& &span class=&n&&forall&/span& &span class=&n&&repr&/span& &span class=&n&&a&/span& &span class=&n&&b&/span& &span class=&n&&h&/span&&span class=&o&&.&/span& &span class=&kt&&DBI&/span& &span class=&n&&repr&/span& &span class=&ow&&=&&/span&
&span class=&p&&((&/span&&span class=&n&&forall&/span& &span class=&n&&k&/span&&span class=&o&&.&/span& &span class=&kt&&NT&/span& &span class=&p&&(&/span&&span class=&n&&repr&/span& &span class=&p&&(&/span&&span class=&n&&a&/span&&span class=&p&&,&/span& &span class=&n&&h&/span&&span class=&p&&))&/span& &span class=&n&&k&/span& &span class=&ow&&=&&/span& &span class=&n&&k&/span& &span class=&n&&a&/span&&span class=&p&&)&/span& &span class=&ow&&-&&/span& &span class=&p&&(&/span&&span class=&n&&repr&/span& &span class=&p&&(&/span&&span class=&n&&a&/span&&span class=&p&&,&/span& &span class=&n&&h&/span&&span class=&p&&))&/span& &span class=&n&&b&/span&&span class=&p&&)&/span& &span class=&ow&&-&&/span&
&span class=&n&&repr&/span& &span class=&n&&h&/span& &span class=&p&&(&/span&&span class=&n&&a&/span& &span class=&ow&&-&&/span& &span class=&n&&b&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&p&(ps. &a class=&member_mention& href=&///people/c2d3f56ac34de7d71cdcbc& data-hash=&c2d3f56ac34de7d71cdcbc& data-hovercard=&p$b$c2d3f56ac34de7d71cdcbc&&@雾雨魔理沙&/a& 说把 DDF 换成 Haskell 是她这辈子做过的最正确的决定 orz)&/p&&p&一般人看到这个估计都晕倒了吧,不过使用类似于 Coq 的 LTac,写出来并不算非常困难:&/p&&div class=&highlight&&&pre&&code class=&language-text&&-- TTS -- under design
{repr : Type -& T a, b, h : Type | DBI repr}
-& (({k : Type -& Type | NT (repr (a && h)) k} -& k a) -& repr (a && h) b)
-& repr h (a -& b)
-- this type is scary, but we have tactics
hlam = tactic {
(repr,a,b,h) &- intros 4
i_DBI_repr
apply i_DBI_repr.hoas
-- ... |- repr (a && h) a -& repr (a && h) b
-- ... |- repr (a && h) b
-- ... |- {k : Type -& Type | NT (repr (a && h)) k} -& k a
i_NT_reprah_k &- intro
-- ... |- k a
apply i_NT_reprah_k.conv
-- ... |- repr (a && h) a
&/code&&/pre&&/div&&p&在搭建的过程中通过一点点拆解复杂的目标,最终写出整个程序出来。上面的「Tactic」看着玄乎,实际上只是搭积木一样的过程而已。&/p&&p&Programming/Proof by Refinement 的过程实际上还可以和 Property-based testing 结合,比如如果某一步中出现的 goal 或者 assert 测试不过,那么就可以直接在交互界面显示出来,等等。&/p&&p&&b&Term Unification / ATP&/b&:如果 Programming/Proof by Refinement 还是觉得麻烦怎么办?别忘了上面的 Tactic 是一块块的积木,那么能不能写插件去自动地把积木拼上呢?如果结合现在发展迅猛的人工智能呢?&/p&&p&总上而言,我们离「写正确的程序」已经越来越近。如果说编程有未来的话,这个才是值得期待的未来。&/p&
正好前几天和
也讨论过类似的问题。我们的处境是,我们已经站在了一个通向「写正确的程序」的路口,这条路看上去十分曲折,但里程碑已经显现,待我们去探索。因此,答案可能是某个支持 Dependent Type,支持 Programming/Proof by Refinement …
&img src=&/v2-8ddaf11f8d30e316dc72e530dc496fd8_b.jpg& data-rawwidth=&1280& data-rawheight=&800& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&/v2-8ddaf11f8d30e316dc72e530dc496fd8_r.jpg&&&p&原文:&a href=&/?target=https%3A///technology-invention-and-more/how-to-build-a-simple-neural-network-in-9-lines-of-python-code-cc8f2.7np22hkhc& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&How to build a simple neural network in 9 lines of Python code&i class=&icon-external&&&/i&&/a&&/p&&p&作者:&a href=&/?target=https%3A///%40miloharper%3Fsource%3Dpost_header_lockup& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Milo Spencer-Harper&i class=&icon-external&&&/i&&/a&&/p&&p&翻译:Kaiser(&a href=&/?target=http%3A///kaiser0730& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&王司图&i class=&icon-external&&&/i&&/a&) &/p&&p&代码可调版本:&a href=&/?target=https%3A//jizhi.im/blog/post/nn_py_9& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&9行Python代码搭建神经网络 - 集智专栏&i class=&icon-external&&&/i&&/a&&br&&/p&&h2&前言&/h2&&p&在&a href=&/?target=https%3A//jizhi.im/blog/post/how_to_create_mind& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&上一篇&i class=&icon-external&&&/i&&/a&文章中,Milo给自己定下了两个小目标:&/p&&ol&&li&学习层次隐式马尔可夫模型&/li&&li&用Python搭建神经网络&/li&&/ol&&p&本文讲的就是他如何实现第二个目标。当然,这里的“用Python”指的就是不用那些现成的神经网络库比如Keras、Tensorflow等,否则连9行都不用了。&/p&&br&&h2&正文&/h2&&p&&img src=&/v2-67394baf6d8a0caa9e49efd0_b.png& data-rawwidth=&1326& data-rawheight=&806& class=&origin_image zh-lightbox-thumb& width=&1326& data-original=&/v2-67394baf6d8a0caa9e49efd0_r.png&&(Kaiser: 程序的输出结果可在&a href=&/?target=https%3A//jizhi.im/blog/post/nn_py_9& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&集智专栏&i class=&icon-external&&&/i&&/a&文章中点击&b&运行&/b&按钮在线执行,也可以自由编辑代码,重新定义神经网络。)&/p&&p& 本文我会解释这个神经网络是怎样炼成的,所以你也可以搭建你自己的神经网络。也会提供一个加长版、但是也更漂亮的源代码。&/p&&p&不过首先,什么是神经网络?人脑总共有超过千亿个神经元细胞,通过神经突触相互连接。如果一个神经元被足够强的输入所激活,那么它也会激活其他神经元,这个过程就叫“思考”。&/p&&p&我们可以在计算机上创建神经网络,来对这个过程进行建模,且并不需要模拟分子级的生物复杂性,只要观其大略即可。为了简化起见,我们只模拟一个神经元,含有三个输入和一个输出。&/p&&p&&img src=&/v2-65af197f1b_b.png& data-rawwidth=&800& data-rawheight=&800& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&/v2-65af197f1b_r.png&&我们将训练这个神经元来解决下面这个问题,前四个样本叫作“训练集”,你能求解出模式吗?&?&处应该是0还是1呢?&/p&&img src=&/v2-f30043daae2f7f33a8c5f5_b.png& data-rawwidth=&676& data-rawheight=&318& class=&origin_image zh-lightbox-thumb& width=&676& data-original=&/v2-f30043daae2f7f33a8c5f5_r.png&&&p&或许你已经发现了,输出总是与第一列的输入相等,所以?应该是1。&/p&&h3&训练过程&/h3&&p&问题虽然很简单,但是如何教会神经元来正确的回答这个问题呢?我们要给每个输入赋予一个权重,权重可能为正也可能为负。权重的绝对值,代表了输入对输出的决定权。在开始之前,我们先把权重设为随机数,再开始训练过程:&/p&&ol&&li&&p&从训练集样本读取输入,根据权重进行调整,再代入某个特殊的方程计算神经元的输出。&/p&&/li&&li&&p&计算误差,也就是神经元的实际输出和训练样本的期望输出之差。&/p&&/li&&li&&p&根据误差的方向,微调权重。&/p&&/li&&li&&p&重复10000次。&/p&&/li&&/ol&&p&最终神经元的权重会达到训练集的最优值。如果我们让神经元去思考一个新的形势,遵循相同过程,应该会得到一个不错的预测。&/p&&h3&计算神经元输出的方程&/h3&&p&你可能会好奇,计算神经元输出的人“特殊方程”是什么?首先我们取神经元输入的加权总和:&/p&&img src=&/equation?tex=%5Csum+weight_i+%5Ccdot+input_i+%3D+weight_1+%5Ccdot+input_1+%2B+weight_2+%5Ccdot+input_2+%2B+weight_3+%5Ccdot+input_3& alt=&\sum weight_i \cdot input_i = weight_1 \cdot input_1 + weight_2 \cdot input_2 + weight_3 \cdot input_3& eeimg=&1&&&p&接下来我们进行正规化,将结果限制在0和1之间。这里用到一个很方便的函数,叫Sigmoid函数:&/p&&img src=&/equation?tex=%5Cfrac%7B1%7D%7B1%2Be%5E%7B-x%7D%7D& alt=&\frac{1}{1+e^{-x}}& eeimg=&1&&&p&如果绘出图像,Sigmoid函数是S形的曲线:&/p&&img src=&/v2-3d4e201bc3c992_b.jpg& data-rawwidth=&870& data-rawheight=&1333& class=&origin_image zh-lightbox-thumb& width=&870& data-original=&/v2-3d4e201bc3c992_r.jpg&&&img src=&/v2-4d922a8955fffcb8694ebf42df84aef7_b.png& data-rawwidth=&640& data-rawheight=&427& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/v2-4d922a8955fffcb8694ebf42df84aef7_r.png&&&p&将第一个公式代入第二个,即得最终的神经元输出方程: &/p&&img src=&/equation?tex=Output+of+neuron+%3D+%5Cfrac%7B1%7D%7B1+%2B+e%5E%7B-%28%5Csum+weight_i+%5Ccdot+input_i%29%7D%7D& alt=&Output of neuron = \frac{1}{1 + e^{-(\sum weight_i \cdot input_i)}}& eeimg=&1&&&h3&调整权重的方程&/h3&&p&在训练进程中,我们需要调整权重,但是具体如何调整呢?就要用到“误差加权导数”方程:&/p&&img src=&/equation?tex=Adjust+weights+by+%3D+error+%5Ccdot+input+%5Ccdot+SigmoidCurveGradient%28output%29& alt=&Adjust weights by = error \cdot input \cdot SigmoidCurveGradient(output)& eeimg=&1&&&p&为什么是这个方程?首先我们希望调整量与误差量成正比,然后再乘以输入(0-1)。如果输入为0,那么权重就不会被调整。最后乘以Sigmoid曲线的梯度,为便于理解,请考虑:&/p&&ol&&li&&p&我们使用Sigmoid曲线计算神经元输出。&/p&&/li&&li&&p&如果输出绝对值很大,这就表示该神经元是很确定的(有正反两种可能)。&/p&&/li&&li&&p&Sigmoid曲线在绝对值较大处的梯度较小。&/p&&/li&&li&&p&如果神经元确信当前权重值是正确的,那么就不需要太大调整。乘以Sigmoid曲线的梯度可以实现。&/p&&/li&&/ol&&p&Sigmoid曲线的梯度可由导数获得:&/p&&img src=&/equation?tex=SigmoidCurveGradient%28output%29+%3D+output+%5Ccdot+%281+-+output%29& alt=&SigmoidCurveGradient(output) = output \cdot (1 - output)& eeimg=&1&&&p&代入公式可的最终的权重调整方程:&/p&&img src=&/equation?tex=Adjust+weights+by+%3D+error+%5Ccdot+input+%5Ccdot+output+%5Ccdot+%281+-+output%29& alt=&Adjust weights by = error \cdot input \cdot output \cdot (1 - output)& eeimg=&1&&&p&实际上也有其他让神经元学习更快的方程,这里主要是取其相对简单的优势。&br&&/p&&h2&构建Python代码&br&&/h

我要回帖

更多关于 中子星优财 的文章

 

随机推荐