matlab 上面可以训练 深度循环神经网络 知乎吗 知乎

你说的这个需求,银行业已经有成熟应用,用alphago属于大炮打蚊子了。&br&&br&IBM的watson现在正在商用领域发力,其中两个主力方向供参考:律师和医生&br&&br&就目前的应用和测试结果,在有足够病例和病理知识的输入下,watson对一般病症的判定准确率是高于初级医生的,换句话说,它是可以替代美国大多数社区医院的医生做的事情。&br&&br&律师行业,watson能做到的,和助理律师能做到的功能差不多了,效率不知高了多少倍。&br&&br&然后,从IBM内部某些人的观点来看,watson和alphago的智力对比,基本上是狗和人的对比。watson虽然是人名,但是在阿法狗的智商面前,他才是真的狗。&br&&br&所以可以想象alphago的未来空间到底有多大。&br&&br&静候伟大的AI纪元到来。&br&&br&-----------------------&br&刚才几个朋友讨论这个事情,突然有一个想法,也许deepmind真正的价值,并不是局限在某个单独的行业呢?&br&&br&可不可以这样,让deepmind替代政府职能,来管理一座城市?制定均衡的经济竞争力和民生指标,根据该城市的地理环境、自然资源、人口、教育、交通、经济、社会、旅游、文化等各方面的资源,制定最优的发展规划,最后横向对比,看看是AI管的好,还是人类自己管的好?&br&&br&如果拿一个城市做样本测试成功,然后让AI来管理一个省试试?一个国家试试?&br&&br&然后管理一个星球?
你说的这个需求,银行业已经有成熟应用,用alphago属于大炮打蚊子了。 IBM的watson现在正在商用领域发力,其中两个主力方向供参考:律师和医生 就目前的应用和测试结果,在有足够病例和病理知识的输入下,watson对一般病症的判定准确率是高于初级医生的,换…
&p&终于来了个自己研究方向的题目~&/p&&p&PS:路径规划(Path Planning)与运动规划(Motion Planning)在数学上是同一个问题,所以我在文中就直接混用了。&/p&&br&&p&首先,我们要先明确路径规划/运动规划的&b&定义&/b&:&/p&&img src=&/v2-45a26a05dea78e6892dd0_b.png& data-rawwidth=&1059& data-rawheight=&178& class=&origin_image zh-lightbox-thumb& width=&1059& data-original=&/v2-45a26a05dea78e6892dd0_r.png&&&p&简单地说,就是给定环境、机器人模型,指定规划目标(如无碰撞到达目的点),自动计算出机器人的运动路径(可以是一序列离散状态,也可以是运动策略)。&/p&&p&当然,传统的运动规划方法可以看我之前发过的两篇文章(&a href=&///?target=https%3A//mp./s%3F__biz%3DMzA5MDE2MjQ0OQ%3D%3D%26mid%3D%26idx%3D1%26sn%3Df937dd6aa91344fed689baf51dc821ab%23rd& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&运动规划 | 简介篇&i class=&icon-external&&&/i&&/a&,&a href=&///?target=https%3A//mp./s%3F__biz%3DMzA5MDE2MjQ0OQ%3D%3D%26mid%3D%26idx%3D1%26sn%3D21e1a64a2a47c865cb73c381c3f10001%26chksm%3D8be53b84bc92b292e841e7cb15edefff9eac%23rd& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&运动规划 | 视频篇&i class=&icon-external&&&/i&&/a&),这里就不展开了。所以,如 &a class=&member_mention& href=&///people/1ddf4aa7f75c& data-hash=&1ddf4aa7f75c& data-hovercard=&p$b$1ddf4aa7f75c&&@Pickles Husky&/a& 所说,如果想将机器学习直接塞到现有的运动规划,似乎并不是一个好方法。于是,只能想办法发明新的运动规划框架了。&/p&&br&&p&第一种,当然就是&b&监督学习&/b&(Supervised Learning )的形式了。&/p&&p&这个其实很简单,Andrew Ng 的机器学习公开课(&a href=&///?target=https%3A///watch%3Fv%3D_2zt4yVCkGk& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&/watch?&/span&&span class=&invisible&&v=_2zt4yVCkGk&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a& )里就提到了这样的一个例子&/p&&img src=&/v2-6c6db5bb45fa91651dab7_b.png& data-rawwidth=&1249& data-rawheight=&936& class=&origin_image zh-lightbox-thumb& width=&1249& data-original=&/v2-6c6db5bb45fa91651dab7_r.png&&&p&如上图所示,无人车通过输入前方图像,在人类驾驶员的标记动作下训练一段时间后,即可实现汽车的自主驾驶。&/p&&p&当然,上面这个例子的还是很简单的,所能应对的应用场景也极其有限;深度学习出来后,当然也有人做了类似的工作(前面的答主也有提到过这篇文章):&/p&&blockquote&Pfeiffer, Mark, et al. &From Perception to Decision: A Data-driven Approach to End-to-end Motion Planning for Autonomous Ground Robots.& &i&arXiv preprint arXiv:&/i& (2016). &/blockquote&&img src=&/v2-ccf3b4ce3eab7e5fff0b_b.png& data-rawwidth=&1882& data-rawheight=&594& class=&origin_image zh-lightbox-thumb& width=&1882& data-original=&/v2-ccf3b4ce3eab7e5fff0b_r.png&&&p&这篇文章的意思大概就是利用 CNN 解析激光信息,然后利用 A* 算法作为标记信息,进行监督学习。所以,这篇论文的工作其实跟前面那个自动驾驶的例子没什么太大区别。&/p&&p&目前看来,用监督学习的框架做运动规划,在环境变化不大的情况下,有可能实现;但是这种方法强烈依赖于标记算法(平面还好,有A*;高维机械臂的话,没什么好的『最优』算法),而且对环境变化的泛化能力比较弱。&/p&&br&&p&第二种框架就是&b&强化学习&/b&(Reinforcement Learning)了。这里我就先不详细展开强化学习的内容了,有兴趣的可以先去刷一遍 Sutton 的书:&/p&&blockquote&Sutton, Richard S., and Andrew G. Barto. &i&Reinforcement learning: An introduction&/i&. Vol. 1. No. 1. Cambridge: MIT press, 1998. &/blockquote&&p&简而言之,路径规划就是一个标准的 MDP 问题,强化学习可以通过值迭代(value iteration)等方法建立一个表格,用以存储状态 s (如机器人当前位置)到动作 a (控制指令)的映射。这样,把机器人放在地图中任何一个位置,它都能迅速地确定自己下一时刻的动作,而这个动作将引导机器人运动到目标点。&/p&&img src=&/v2-fa0bb734b636c_b.png& data-rawwidth=&656& data-rawheight=&388& class=&origin_image zh-lightbox-thumb& width=&656& data-original=&/v2-fa0bb734b636c_r.png&&&p&当然,如果目标点不同、障碍物位置不同,我只需生成多张表格即可。但是,这样就是造成表格太大,占用内存太多的问题。&/p&&p&后来,深度学习出现了,它有可能地完成两件事:1)从传感器观测数据 o 中提取出状态 s;2)拟合出状态 s 与动作 a 的映射关系(就是前面说的表格)。&/p&&p&大名鼎鼎的 DQN 就可以简单地认为在做这两件事(当然,它就是 End-to-End 的结构,实际上并不能简单地分为这样的两个步骤):&/p&&img src=&/v2-720f92bc3ecac6c4266f2dcd548bf5f6_b.png& data-rawwidth=&656& data-rawheight=&408& class=&origin_image zh-lightbox-thumb& width=&656& data-original=&/v2-720f92bc3ecac6c4266f2dcd548bf5f6_r.png&&&blockquote&Mnih, Volodymyr, et al. &Human-level control through deep reinforcement learning.& Nature 518.): 529-533.&/blockquote&&p&深度强化学习的好处是我们不依赖于人工标记的轨迹,只需要指定规划目标(无碰撞、到达目的地、路径最短等),让机器人不断尝试、迭代更新网络即可。&/p&&p&当然,这一块用在路径规划的工作也已经有了:&/p&&blockquote&Tai, Lei, and Ming Liu. &Towards cognitive exploration through deep reinforcement learning for mobile robots.& &i&arXiv preprint arXiv:&/i&(2016).
Tai, Lei, Giuseppe Paolo, and Ming Liu. &Virtual-to-real Deep Reinforcement Learning: Continuous Control of Mobile Robots for Mapless Navigation.& &i&arXiv preprint arXiv:&/i& (2017). &/blockquote&&img src=&/v2-b48bd09a9d2e460e774392aa_b.png& data-rawwidth=&916& data-rawheight=&471& class=&origin_image zh-lightbox-thumb& width=&916& data-original=&/v2-b48bd09a9d2e460e774392aa_r.png&&&p&这篇文章就是让移动机器人在仿真环境中不断尝试学习、训练 DQN,最终得到一个较好的路径规划结果。&/p&&p&毕竟,现在 Planning-from-scratch 的规划方法总是给我一种『人类不是这样规划的呀』的感觉;深度强化学习又跟人类的技能学习方法很相似;如果成功,规划时间很短(一次前向传播的时间)。所以,我感觉,深度强化学习有希望成为彻底解决机器人运动规划问题的途径,未来几年应该也会涌现出一大堆 paper。&/p&&br&&p&PS:从个人角度而言,如果还只是刚开始做路径规划的小伙伴,极度不建议直接上深度学习;我还是比较建议先至少把传统的规划算法体系都搞清楚,之后,如有可能,再去尝试深度学习。理由的话,以后有机会再聊吧。&/p&
终于来了个自己研究方向的题目~PS:路径规划(Path Planning)与运动规划(Motion Planning)在数学上是同一个问题,所以我在文中就直接混用了。 首先,我们要先明确路径规划/运动规划的定义:简单地说,就是给定环境、机器人模型,指定规划目标(如无碰撞…
&p&最近也在看这部分内容,将自己的理解和大家分享一下,希望有所帮助。&/p&&p&首先我们需要知道anchor的本质是什么,本质是SPP(spatial pyramid pooling)思想的逆向。而SPP本身是做什么的呢,就是将不同尺寸的输入resize成为相同尺寸的输出。所以SPP的逆向就是,将相同尺寸的输出,倒推得到不同尺寸的输入。&/p&&p&接下来是anchor的窗口尺寸,这个不难理解,三个面积尺寸(128^2,256^2,512^2),然后在每个面积尺寸下,取三种不同的长宽比例(1:1,1:2,2:1).这样一来,我们得到了一共9种面积尺寸各异的anchor。示意图如下:&/p&&img src=&/v2-d72a6dd68cc5efc9ed421b_b.png& data-rawwidth=&421& data-rawheight=&381& class=&origin_image zh-lightbox-thumb& width=&421& data-original=&/v2-d72a6dd68cc5efc9ed421b_r.png&&&p&至于这个anchor到底是怎么用的,这个是理解整个问题的关键。&/p&&p&下面是整个faster RCNN结构的示意图:&/p&&img src=&/v2-3d0ba749c27ceba0885a24_b.png& data-rawwidth=&766& data-rawheight=&264& class=&origin_image zh-lightbox-thumb& width=&766& data-original=&/v2-3d0ba749c27ceba0885a24_r.png&&&p&利用anchor是从第二列这个位置开始进行处理,这个时候,原始图片已经经过一系列卷积层和池化层以及relu,得到了这里的 feature:51x39x256(256是层数)&/p&&p&在这个特征参数的基础上,通过一个3x3的滑动窗口,在这个51x39的区域上进行滑动,stride=1,padding=2,这样一来,滑动得到的就是51x39个3x3的窗口。&/p&&p&&b&对于每个3x3的窗口,作者就计算这个滑动窗口的中心点所对应的原始图片的中心点。然后作者假定,这个3x3窗口,是从原始图片上通过SPP池化得到的,而这个池化的区域的面积以及比例,就是一个个的anchor。换句话说,对于每个3x3窗口,作者假定它来自9种不同原始区域的池化,但是这些池化在原始图片中的中心点,都完全一样。这个中心点,就是刚才提到的,3x3窗口中心点所对应的原始图片中的中心点。如此一来,在每个窗口位置,我们都可以根据9个不同长宽比例、不同面积的anchor,逆向推导出它所对应的原始图片中的一个区域,这个区域的尺寸以及坐标,都是已知的。而这个区域,就是我们想要的 proposal。所以我们通过滑动窗口和anchor,成功得到了 51x39x9 个原始图片的proposal。接下来,每个proposal我们只输出6个参数:每个 proposal 和 ground truth 进行比较得到的前景概率和背景概率(2个参数)(对应图上的 cls_score);由于每个 proposal 和 ground truth 位置及尺寸上的差异,从 proposal 通过平移放缩得到 ground truth 需要的4个平移放缩参数(对应图上的 bbox_pred)。&/b&&/p&&p&&b&所以根据我们刚才的计算,我们一共得到了多少个anchor box呢?
&/b&&/p&&p&&b&51 x 39 x 9 = 17900 &/b&&/p&&p&&b&约等于 20 k&/b&&/p&&p&&b&bingo!&/b&&/p&&p&以上是自己最近几天看 faster RCNN的理解,如果有不对的地方,希望大神能够指正,免得误导更多小白,嘿嘿。&/p&
最近也在看这部分内容,将自己的理解和大家分享一下,希望有所帮助。首先我们需要知道anchor的本质是什么,本质是SPP(spatial pyramid pooling)思想的逆向。而SPP本身是做什么的呢,就是将不同尺寸的输入resize成为相同尺寸的输出。所以SPP的逆向就是,将相…
请注意区分 &b&研发&/b& 和 &b&制造&/b& 的区别。&br&&b&研发:从无到有 结果未知;&br&制造:学习+模仿 结果已知。&/b&&br&当年国家花那么多时间人力和物力,是因为国家在开始之前就已经知道一定可以做出来。这是国家行为、是国策,当然不可能简单地只靠蛮干和热情就能达到目的。对于已经投入应用领域的技术,我们可以通过统计前人经验的方法,得出科学的结论。比如,经过统计,我们可以得出:只要投入x的资源、花y的时间,我们就一定可以做出原子弹。包括今天的飞机发动机,也一样。我们统计下能独立制造航发的国家的投入和时间,就能算出我们投入多少就能制造出航发来。只不过,事情当然不是这么简单的。假如我们按照统计结果去投入,如果这个投入所需要的时间是二十年,那么你投入了很多人力物力和二十年的时间,将在二十年后获得一个很可能马上即将淘汰的技术。这就是为什么一般国家不会去研发发动机而会直接买-----因为直接买更便宜。所以航发这类东西,不能靠简单地堆钱堆时间,还应该积极尝试其他途径。至于有什么途径可以尝试,我就不细说了......&br&而对于研发领域,其结果是未知的。统计前人的研发历程我们可以得出一个结论:研发就是砸钱且失败的概率远大于成功的概率。我们这几十年来的教育,最大的成功,就是培养了&b&极其擅长学习的人才---学习,就是学习现成已有的东西&/b&。世界上恐怕找不出第二个有如此多擅长学习的人才的国家了。正因为这些人才,我们才在改革开放仅三四十年后就已经获得了完备的制造业。我们或许目前还不擅长研发东西,但是呢,有本事你就别研发新东西,只要你研发出来,让我看到了,第二天就给你山寨出来了......&br&&br&研发,就是在领跑---你还没学会走路呢,就想跑了而且还是做领跑了?&br&&br&人工智能对现阶段的人类社会来说,仍属于研发领域。现在的确有了一些成熟的技术,比如基于大数据的机器学习等。对于这些,我们并没有落后啊,而且国家也一直在扶持。而对于太过前沿的领域,我们的投入远远没有美国多。为什么?还是我们没钱。这是每个国家所处的生产链决定的。暂时就不展开说了。如果需要我可以改天详细解释一下什么叫“生产链”。
请注意区分 研发 和 制造 的区别。 研发:从无到有 结果未知; 制造:学习+模仿 结果已知。 当年国家花那么多时间人力和物力,是因为国家在开始之前就已经知道一定可以做出来。这是国家行为、是国策,当然不可能简单地只靠蛮干和热情就能达到目的。对于已经…
赞同那个高票答案,如果没有特别牛的人帮助,我也觉得要两年沉淀吧,当然拿深度学习随便跑跑一跑工业数据或者什么文科生用深度学习做一个古文字识别的当我没说,他们只是把深度学习当一个工具而已。&br&&br&先说一个事实,深度学习太火导致几乎世界上最聪明的一批人很多都在研究深度学习,所以这个领域就是一个速度和视野的争夺,你会发现你吃饭时候觉得自己想了一个特别牛逼的点子,屁颠屁颠回来一查,然后就会内心骂一句:***&br&&br&说正文,发一篇深度学习论文首先要花半年到一年的时间理论入门,先从传统的机器学习了解模式识别是什么,然后在了解神经网络及其bp规则,然后开始学习cnn 卷积神经网络,它的三个特点,怎么解决了神经网络层数和参数太多无法训练的问题,然后可以算一个脚趾头踏进了这个领域,现在你可以考虑选择一个深度学习框架或者继续了解深度学习。&b&(算上平时在学校的课程或者实验室杂七杂八的时间,把基础打扎实需要半年,即一个学期)&/b&&br&&br&分支一,选择深度学习框架,这个时候你要开始搭建深度学习工作平台,在Ubuntu和windows搭建GPU环境,可能有些人对计算机和硬件都不明白,很多人问我如何搭建平台的时候,他们连windows的cmd,Ubuntu的终端命令都不知道,显存和内存也傻傻分不清。windows的cuda还好,Ubuntu的cuda可以让你疯掉,装到让你怀疑人生。现在主流的框架这么多,Theano,Tensorlayer,tensorflow,TFlearn,keras,mxnet,torch,每一个框架都有大量的使用者,你会很茫然选择哪一个框架,去看别人说的各有纷纭,其实最好是自己每个框架都去尝试一下,如果你不想尝试那么多的话,我推荐你tensorflow,keras,tensorlayer这三个框架好好对比使用下,选择一个自己顺手的。然后你需要做一些实验,从最开始跑源码到最后可以自己搭基本,调参数,一百次实验不过分吧?小的程序几分钟到几小时,大的程序几天到一两周,加上自己找数据预处理数据的时间,&b&花三个月应该不过分吧&/b&&br&&br&分支二,跟踪近两年的深度学习的主要成果,从最开始的CNN卷积网络开始,深度学习就在以一年至少两次大的突破在高速发展,真的要花很多时间才能跟踪到位。(1)CNN网络之后的主要发展,先是递归网络RNN的诞生,是的深度学习可以处理时序问题,自然语言处理的效果大大提升,为了解决RNN时间轴上的梯度弥散问题,LSTM,GRU等一系列递归网络诞生。(2)RNN之后开始出现了Attention based model,在传统的递归网络RNN里面加入一个Attention model,使得效果进一步提升,这个时期RNN,CNN,Attention model各种乱七八糟的组合诞生了一系列图文转换,视觉语义的文章,典型的如DRAM(3)另外一条战线是CNN反过来的图像生成DCNN,以前我们都用CNN来提取图像特征,后来有一批人想反过来用深度学习来生成图像,这就是deconvolution反卷积,基于deconvolution的generator network已经可以开始生成图像了,虽然结果还不是很好,但是是一个突破。(4)GAN流派的诞生,generator network诞生后,生成图像已经变成了可能,但是效果还不是很好,也不知道谁想出了这个GAN网络,在生成网络后面加一个判别网络,使得生成的图像/视频真的很逼真,这一个流派有几篇经典文章必须要好好读一读,比如DCGAN,LPGAN,CGAN。(5)强化学习(reinforcement learning),如此火的一个非监督学习方法我想还是要花时间好好研究一下吧,(6)其他的一些的分支比如batchnorm,relu,优化函数等等理论上的改进我想按照我们的智商也突破不了吧,会用就行;以及其他小众领域的one/zero shot learning也可以花时间去看看。&b&综上,这么多好的文章,加起来起码一百篇,一天一篇也要三个月,反正我一天是无法好好啃下一篇文章在入门的初期,所以这里三个月~六个月不过分吧。&/b&&br&&br&&br&&b&当然两个分支应该是结合起来一起进步的,等你到这里已经过去一年多了,&/b&还是时间很紧凑的情况下,你还要花一些时间去尝试一些源码,并尝试在自己的数据集上运行一些当前流行的主流网络,这些也是要花一些时间的,寒暑假自己还要玩一玩,所以两年里剩下给自己做论文的时间也真的是不多了,需要想点子刷结果,还要花时间做综述写论文,LaTeX第一次写论文也不是像word那样傻叉的,说不定你连LaTeX的bug都解决不了。&br&&br&&b&所以我认为从零基础到真正发第一篇文章,需要两年的时间,这是在没有任何人给你指明方向需要自己去找方向的情景下的,有人告诉你用哪个方法去做哪个问题的话会快很多。&/b&&br&&br&想想自己花了两年最后给学术界灌了一点水也是蛮心酸的。
赞同那个高票答案,如果没有特别牛的人帮助,我也觉得要两年沉淀吧,当然拿深度学习随便跑跑一跑工业数据或者什么文科生用深度学习做一个古文字识别的当我没说,他们只是把深度学习当一个工具而已。 先说一个事实,深度学习太火导致几乎世界上最聪明的一批…
基于深度学习的计算机视觉、模式识别等有关工程还是蛮⑥的,可能适合你,各方面资源代码也多。&br&挑个你感兴趣的——人脸识别,行人检测,车牌识别,目标跟踪,目标匹配,重建,分割等等。&br&————————————————————————————————————————————&br&&br&贴几个资源和代码链接,题主看看能不能用得到:&br&①计算机视觉CV基础论文代码等:&a href=&///?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CVPapers - Computer Vision Resource&i class=&icon-external&&&/i&&/a&
; &a href=&///?target=http%3A///rr.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Computer Vision Algorithm Implementations&i class=&icon-external&&&/i&&/a&;&br&&br&②深度学习基础相关介绍及论文等: &a data-hash=&ceff5c1efda55& href=&///people/ceff5c1efda55& class=&member_mention& data-editable=&true& data-title=&@jacky yang& data-hovercard=&p$b$ceff5c1efda55&&@jacky yang&/a&
在&a href=&/question/& class=&internal&&深度学习如何入门? - 机器学习&/a&的这个高票回答特别好,台湾李宏毅教授写的300多页的ppt看完受益匪浅,也可以关注这个问题&a href=&/question/& class=&internal&&深度学习入门必看的书和论文?有哪些必备的技能需学习? - 深度学习(Deep Learning)&/a&;&br&&br&③行人检测相关
&a href=&///?target=http%3A//valser.org/thread-657-1-1.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&行人检测资源(上)综述文献&i class=&icon-external&&&/i&&/a&;&a href=&///?target=http%3A//valser.org/thread-677-1-1.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&行人检测资源(下)代码数据&i class=&icon-external&&&/i&&/a&;&br&&br&④多目标跟踪
&a href=&///?target=https%3A//motchallenge.net/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&MOT Challenge&i class=&icon-external&&&/i&&/a& 包括MOT介绍、数据库、算法对比及少量开源代码;&a href=&///?target=http%3A//www.milanton.de/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Anton Milan&i class=&icon-external&&&/i&&/a& 他做的几个基于深度学习的论文不错,有代码;&br&&br&⑤人脸识别相关
人脸识别有关理论可以查阅相关论文;技术总结&a href=&///?target=http%3A///sciencefans/p/4394861.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&人脸识别技术大总结1——Face Detection & Alignment&i class=&icon-external&&&/i&&/a&
;&a href=&///?target=https%3A///ChrisYang& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ChrisYang (Heng) · GitHub&i class=&icon-external&&&/i&&/a&;中科院山世光老师最近提出的&a href=&///?target=https%3A///seetaface/SeetaFaceEngine& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GitHub - seetaface/SeetaFaceEngine&i class=&icon-external&&&/i&&/a& 以及有关配置安装教程&a href=&/p/& class=&internal&&SeetaFace教程(一) 在 VS 中的编译安装和环境配置 - 何之源的文章 - 知乎专栏&/a&;计算机视觉日报很不错——&a href=&///?target=http%3A///blog/thread/ml_cv-/%966802& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&第203期计算机视觉日报()&i class=&icon-external&&&/i&&/a&应用谷歌FaceNet深度神经网络进行面部识别的开源项目等等;&br&&br&⑥车牌识别相关
&a href=&///?target=http%3A///subconscious/p/3979988.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&EasyPR--一个开源的中文车牌识别系统&i class=&icon-external&&&/i&&/a& 包括车牌识别原理、代码等;&br&&br&⑦&b&进阶版(这里能找到好多基于深度学习的计算机视觉项目)——特别推荐这几个链接,包括一些比较好的CV会议的项目链接代码文献等等,可以自己搜索想要的,比如:
:&a href=&///?target=https%3A///%3Fcat%3Dconference-iclr-Dtype-code& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Conference-Iclr-2016&i class=&icon-external&&&/i&&/a&;CVPR2016:&a href=&///?target=https%3A///%3Fcat%3Dconference-cvpr-Dtype-code& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Conference-Cvpr-2016&i class=&icon-external&&&/i&&/a&。&/b&&br&——————————————————————————————————————————&br&&br&下面列一些在&b&链接⑦&/b&中找到的&b&CVPR&/b&&b&2016论文项目和其他比较有趣的项目&/b&:&br&&br&1.Slicing Convolutional Neural Network for Crowd Video Understanding&br&&b&&a href=&///?target=http%3A//www.ee.cuhk.edu.hk/%7Ejshao/SCNN.html& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&ee.cuhk.edu.hk/~jshao/S&/span&&span class=&invisible&&CNN.html&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&&/b&&img src=&/v2-df28fbb1fbd7fcb_b.jpg& data-rawwidth=&2427& data-rawheight=&894& class=&origin_image zh-lightbox-thumb& width=&2427& data-original=&/v2-df28fbb1fbd7fcb_r.jpg&&2.&em&LocNet: Improving Localization Accuracy for Object Detection&/em&
(CVPR2016)&br&&b&链接:&/b&&b&&i&&a href=&///?target=https%3A///gidariss/LocNet& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/gidariss/Loc&/span&&span class=&invisible&&Net&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/i&&/b&&br&&img src=&/v2-0b49dc86ae98cc183e56ce7b561e86f4_b.png& data-rawwidth=&781& data-rawheight=&410& class=&origin_image zh-lightbox-thumb& width=&781& data-original=&/v2-0b49dc86ae98cc183e56ce7b561e86f4_r.png&&&br&&br&3. Caffe_VDSR: 论文 &a href=&///?target=http%3A//cv.snu.ac.kr/research/VDSR/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&&Accurate Image Super-Resolution Using Very Deep Convolutional Networks&&i class=&icon-external&&&/i&&/a& (CVPR 2016 Oral Paper) 在深度学习框架caffe上的实现。&br&&b&项目地址:&a href=&///?target=http%3A//cv.snu.ac.kr/research/VDSR/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&http://cv.snu.ac.kr/research/VDSR&i class=&icon-external&&&/i&&/a& 代码:&a href=&///?target=https%3A///huangzehao/caffe-vdsr& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/huangzehao/c&/span&&span class=&invisible&&affe-vdsr&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/b&&br&&img src=&/v2-ebfb2dc2bbfb1ac52f8a7d_b.png& data-rawwidth=&1132& data-rawheight=&538& class=&origin_image zh-lightbox-thumb& width=&1132& data-original=&/v2-ebfb2dc2bbfb1ac52f8a7d_r.png&&4.Deep3D: Automatic 2D-to-3D Video Conversion with CNNs
&b&&a href=&///?target=http%3A//dmlc.ml/mxnet//deep3d-automatic-2d-to-3d-conversion-with-CNN.html& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&dmlc.ml/mxnet/&/span&&span class=&invisible&&4/deep3d-automatic-2d-to-3d-conversion-with-CNN.html&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/b&&br&利用CNNs将2D变成3D(PS:贴张大爱的权游龙母照)。&br&&img src=&/v2-d4b947dcf436e_b.png& data-rawwidth=&1440& data-rawheight=&540& class=&origin_image zh-lightbox-thumb& width=&1440& data-original=&/v2-d4b947dcf436e_r.png&&5.3DDFA:&b&Face Alignment Across Large Poses: A 3D Solution——&/b&3D大偏角人脸对齐,基于卷积神经网络(CNN)链接:&a href=&///?target=http%3A//www.cbsr./users/xiangyuzhu/projects/3DDFA/main.htm& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&cbsr./users/xia&/span&&span class=&invisible&&ngyuzhu/projects/3DDFA/main.htm&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&&img src=&/v2-466aab423ce3bba562cc3b_b.jpg& data-rawwidth=&758& data-rawheight=&472& class=&origin_image zh-lightbox-thumb& width=&758& data-original=&/v2-466aab423ce3bba562cc3b_r.jpg&&6.特别赞的一个图像修复工作:Context Encoders: Feature Learning by Inpainting(UC berkeley CVPR2016)链接:&a href=&///?target=http%3A//people.eecs.berkeley.edu/%7Epathak/context_encoder/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&people.eecs.berkeley.edu&/span&&span class=&invisible&&/~pathak/context_encoder/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&&img src=&/v2-57bed585ea990bdb5fc522_b.jpg& data-rawwidth=&5483& data-rawheight=&3490& class=&origin_image zh-lightbox-thumb& width=&5483& data-original=&/v2-57bed585ea990bdb5fc522_r.jpg&&7.基于caffe的图像骨架提取:Object Skeleton Extraction in Natural Images by Fusing Scale-associated Deep Side Outputs 链接:&a href=&///?target=https%3A///zeakey/DeepSkeleton& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/zeakey/DeepS&/span&&span class=&invisible&&keleton&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&&img src=&/v2-680bc52fa202e7cd8768_b.png& data-rawwidth=&500& data-rawheight=&112& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&/v2-680bc52fa202e7cd8768_r.png&&8.Shallow and Deep Convolutional Networks for Saliency Prediction (CVPR Caffe)&br&链接:&a href=&///?target=https%3A///imatge-upc/saliency-2016-cvpr& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/imatge-upc/s&/span&&span class=&invisible&&aliency-2016-cvpr&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&&img src=&/v2-c74f0b8ce9386fbdaa42eaa_b.jpg& data-rawwidth=&739& data-rawheight=&861& class=&origin_image zh-lightbox-thumb& width=&739& data-original=&/v2-c74f0b8ce9386fbdaa42eaa_r.jpg&&9.图像问答~~DPPNET:Image Question Answering using Convolutional Neural Network with Dynamic Parameter Prediction 链接:&a href=&///?target=http%3A//cvlab.postech.ac.kr/research/dppnet/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&cvlab.postech.ac.kr/res&/span&&span class=&invisible&&earch/dppnet/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&&img src=&/v2-7bdc16a03e1d5bf29893dc82_b.png& data-rawwidth=&1105& data-rawheight=&758& class=&origin_image zh-lightbox-thumb& width=&1105& data-original=&/v2-7bdc16a03e1d5bf29893dc82_r.png&&&br&&br&&br&希望能帮到你,以上。
基于深度学习的计算机视觉、模式识别等有关工程还是蛮⑥的,可能适合你,各方面资源代码也多。 挑个你感兴趣的——人脸识别,行人检测,车牌识别,目标跟踪,目标匹配,重建,分割等等。 ————————————————————————————————…
一方面,深度学习领域确实存在噱头的现象,主要是在有些人利用传媒说深度学习是在模仿大脑。从实际上来说,大脑神经科学的发展还远远不足以使我们找到足够形成算法的机制来形成智能,也还没有能力去证明或者证伪深度学习于生物神经系统的相关性,更无法说明深度学习是不是真的像大脑。但是,深度学习在某些地方确实是受到了神经系统的启发,比如说多层结构和卷积过程。现在只能说是受启发,而不能说是模仿。不过我觉得随着美国和欧盟两个大脑研究计划的深入,类比深度学习系统和大脑工作方式的相同点和不同点会在将来成为可能。&br&&br&另一方面,这种“深度学习研究领域过分夸大”说法的产生还有完全相反的一面。除了媒体噱头是真的夸大之外,学界还有一种对于深度学习方法的逆反应,表现出来就是会有一些人片面地说这个领域被过分夸大,而不去真正比较过去的系统和现在系统有效性的巨大区别。这种学术惯性又分为两类,一类是那些耗费许多精力掌握了一些领域性知识的人,他们不愿意接受机器不需要那些领域知识就可以得到很好结果的现实,这个在深度学习逐渐革命计算机视觉和语音识别上的过程中表现的尤其明显;另外一类是机器学习界内部偏向于理论(特别是PAC理论)的人,他们过于担心深度学习这种工程系统的泛化性和一致性,不愿意接受其有效性的经验性证明而只沉浸于那些拥有美好数学的简单方法之中。&br&&br&个人认为,深度学习的噱头现象必须打压下去,因为噱头是到头来最容易伤害一整个领域的东西。但另外一个方面,传统的领域性学科应该逐渐接受深度学习的有效性,并将其作为基本工具之一来采用。同时,机器学习理论学家应该意识到泛化性和一致性证明的局限,理解那些“上界的上界”所得到的结果对于深度学习来说是极其偏离真实情况的,同时要抛弃对VC维之类概念的迷信,尝试使用泛函空间(如Banach Space)中的概率论(特别要注意函数嵌套的作用)来解释可学习性。&br&&br&最后,奉上图灵祖师1950年论文《Computing Machinery and Intelligence》中第三小节第一段的一句话:&br&“We also wish to allow the possibility that an engineer or team of engineers may construct a machine which works, but whose manner of operation cannot be satisfactorily described by its constructors because they have applied a method which is largely experimental. ”&br&“我们(在考虑图灵测试中的机器时)也应当允许这样一种可能,那就是一些工程师可能会建造一台机器,它能够完成任务(通过图灵测试),但其工作的原理却未必能够被其创造者所完全理解,这是因为他们采用了一种试验的方式(来建造这台机器)。“
一方面,深度学习领域确实存在噱头的现象,主要是在有些人利用传媒说深度学习是在模仿大脑。从实际上来说,大脑神经科学的发展还远远不足以使我们找到足够形成算法的机制来形成智能,也还没有能力去证明或者证伪深度学习于生物神经系统的相关性,更无法说明…
还是看定义吧。&br&&img src=&///equation?tex=KL%28P%7C%7CQ%29+%3D+%5Csum_i+P%28i%29+%5Clog+%5Cleft%28P%28i%29+%5Cover+Q%28i%29%5Cright%29& alt=&KL(P||Q) = \sum_i P(i) \log \left(P(i) \over Q(i)\right)& eeimg=&1&&&br&直观来说,这是对随机变量的每个取值上,&img src=&///equation?tex=%5Clog%28P%28i%29%2FQ%28i%29%29& alt=&\log(P(i)/Q(i))& eeimg=&1&&这个值的加权平均。这里加权的权值是&img src=&///equation?tex=P%28i%29& alt=&P(i)& eeimg=&1&& (其实就是算了个期望)。&br&&br&在&img src=&///equation?tex=P%28i%29%0A& alt=&P(i)
& eeimg=&1&&大的地方,想让KL散度小,我们需要让&img src=&///equation?tex=Q%28i%29%0A& alt=&Q(i)
& eeimg=&1&&的值尽量也大;而当&img src=&///equation?tex=P%28i%29%0A& alt=&P(i)
& eeimg=&1&&本身小的时候,&img src=&///equation?tex=Q%28i%29& alt=&Q(i)& eeimg=&1&&对整个KL的影响却没有那么大(因为log项本身因为分子就很小,再加上乘以了很小的&img src=&///equation?tex=P%28i%29%0A& alt=&P(i)
& eeimg=&1&&)。直观来说就是,在P的概率密度大的地方,它应该尽量和Q概率密度大的区域保持一致以保证KL散度小,而在P概率密度很小的地方,P和Q的差别对KL的影响很小。&br&&br&画图来说(懒得画了),就是P高的地方应该和Q的形状尽量一致,但P低的地方就无所谓了。 &a data-hash=&abef358cabdddff8fa74c3f& href=&///people/abef358cabdddff8fa74c3f& class=&member_mention& data-hovercard=&p$b$abef358cabdddff8fa74c3f&&@Earthson Lu&/a& 的解释可能更接近信息论受众的理解,我这里试着给一个概率的理解:&br&* KL(P||Q) 很大,意味着在P事件大概率时,Q事件不一定有大概率;&br&* KL(Q||P) 很小,意味着当Q事件有大概率时,P事件同样有大概率。&br&造成这种现象的&b&一种&/b&可能的成因是:Q是造成P的多种原因之一,所以当Q发生时(高概率),P也发生(高概率);而P还有其他的成因,所以当P发生时,Q不一定会发生。当然理解成从属/包含关系也是另一种可行的思路:Q是P的子集,所以Q发生时P一定发生,而P发生时,有可能是P\Q中的某些事件发生了,所以Q不一定发生。
还是看定义吧。 KL(P||Q) = \sum_i P(i) \log \left(P(i) \over Q(i)\right) 直观来说,这是对随机变量的每个取值上,\log(P(i)/Q(i))这个值的加权平均。这里加权的权值是P(i) (其实就是算了个期望)。 在P(i)
大的地方,想让KL散度小,我们需要让Q(i)
&p&发现问题最近突然火了,多了一些所谓的神经科学解释,所以来扯一发。不知道这两个方法到底是怎么想到的,但其中之一的ReLU肯定不是和神经科学有关系的(Dropout就更没关系了)。有的关系是后来搞计算神经科学的人强行套上去的,而不是刚开始那群做ML的人想出来的(其实我一开始也以为是这么回事,最后发现其实比较扯淡)。&/p&&br&&p&首先,ReLU不是Krizhevsky想出来的,Dropout自然也不是他想出来的,甚至他都不是第一个用这两个想法到CNN的。他只是应用这两种方法并且发现非常好用而已。&/p&&br&&p&最早给CNN用ReLU的应该是AlexNet引用的这篇文章:&V. Nair and G. E. Hinton. Rectified linear units improve restricted boltzmann machines. In Proc. 27th
International Conference on Machine Learning, 2010&,这篇文章似乎是最早把ReLU用到RBM上(应该也算CNN)的。&/p&&br&&p&作者首先亮出RBM的binary state: &img src=&///equation?tex=p%28h_j%3D1%29+%5C+%3D+%5C+%5Cfrac%7B1%7D%7B1%2Bexp%28-b_j+-+%5Csum+_i+v_iw_ij%29%29%7D& alt=&p(h_j=1) \ = \ \frac{1}{1+exp(-b_j - \sum _i v_iw_ij))}& eeimg=&1&& ,类比sigmoid激活函数,然后把它分成 &img src=&///equation?tex=N& alt=&N& eeimg=&1&& 个小binary units再加一起,自己就变成了binomial unit,以表达更多信息。&/p&&br&&p&然后作者抱怨到binomial units其实很坑爹,虽然每个小binary units的 &img src=&///equation?tex=p& alt=&p& eeimg=&1&&都一样,但是最后当 &img src=&///equation?tex=x& alt=&x& eeimg=&1&& (这里是 &img src=&///equation?tex=x%3Dvw%5E%7BT%7D%2Bb& alt=&x=vw^{T}+b& eeimg=&1&& )变大的时候, &img src=&///equation?tex=p& alt=&p& eeimg=&1&& 变小,然后方差(&img src=&///equation?tex=Np%281-p%29& alt=&Np(1-p)& eeimg=&1&& )消失不见。实际上如果把上面p的公式代入可以发现,作者的抱怨正是DL里的gradient vanish problem。最后作者祭出大招,用了一个我没看懂的方法(希望评论有人可以解释一下为什么这么做),把一个binary unit分成无数个小binary units,每个小units有同样的weight &img src=&///equation?tex=w& alt=&w& eeimg=&1&& 和bias &img src=&///equation?tex=b& alt=&b& eeimg=&1&& ,但是每个小units有不同的bias offset,而且每次都以1位单位递减,最后近似出了一个ReLU函数:&/p&&p&&img src=&///equation?tex=%5Csum%5Climits_%7Bi%3D1%7D%5E%7BN%7D+%5Csigma%28x+-+i+%2B0.5%29%5Capprox+log%281+%2B+e%5E%7Bx%7D%29& alt=&\sum\limits_{i=1}^{N} \sigma(x - i +0.5)\approx log(1 + e^{x})& eeimg=&1&& ,其中 &img src=&///equation?tex=x%3Dvw%5E%7BT%7D%2Bb& alt=&x=vw^{T}+b& eeimg=&1&&。&/p&&img src=&/v2-86f852dbe6adedb_b.png& data-rawwidth=&446& data-rawheight=&332& class=&origin_image zh-lightbox-thumb& width=&446& data-original=&/v2-86f852dbe6adedb_r.png&&&p&红圈是上面的期望值(貌似应该是方差,但是paper里给是的期望)合,蓝线是 &img src=&///equation?tex=log%281%2Be%5E%7Bx%7D%29& alt=&log(1+e^{x})& eeimg=&1&& ,绿线是 &img src=&///equation?tex=max%280%2C+x%2BN%280%2C%5Csigma%28x%29%29%29& alt=&max(0, x+N(0,\sigma(x)))& eeimg=&1&& (Gaussian noise corrupted的ReLU),发现十分一致。此时方差 &img src=&///equation?tex=%5Csigma%28x%29& alt=&\sigma(x)& eeimg=&1&& 就不会因为 &img src=&///equation?tex=x& alt=&x& eeimg=&1&& 增大而变小,也就是根据作者的话,不会引入更大的噪音。作者后面用了用,发现也非常好用,而且还提到 (Jarrett et al., 2009) 试了各种各样的rectified nonlinearities(包括 &img src=&///equation?tex=max%280%2Cx%29& alt=&max(0,x)& eeimg=&1&& ,也就是ReLU),同样也发现很好用(虽然我没在原文找到这个rectifier,没仔细读)。&/p&&br&&p&&b&然而这跟神经科学有什么关系呢?没有任何关系。&/b&只是之后三位大佬(Xavier Glorot, Antoine Bordes and Yoshua Bengio)发现有大新闻可以弄,于是疯狂研究了一下ReLU,给出了各种现在人尽皆知的ReLU为什么那么好用的原因,在2011年发表了《 Deep Sparse Rectifier Neural Networks 》(写的其实非常好,感兴趣的同学推荐一读)。&/p&&p&由于文章一作Xavier Glorot不仅研究ML,还研究计算神经科学,所以这篇文章的“Background”一整个subsection都是神经科学的内容,比如提到真实大脑神经元激活的稀疏性(Sparsity)以及leaky integrate-and-fire的解释。然而实际上,正如&a href=&/question//answer/& class=&internal&&Krizhevsky等人是怎么想到在CNN里用Dropout和ReLu的? - Ruyuan Zhang的回答&/a&里提到的一样,这个解释非常牵强。因为0以下为0,0以上为sigmoid的函数实际上更适合作为真实神经元的激活函数(见下图,出处即上述文章)。然而这种函数更难优化,而且0以上部分和普通sigmoid毫无任何区别,所以在DL里完全是画蛇添足。实际上,神经网络的激活函数只是为了引入非线性(否则就变成诸如Linear Associator的纯线性变换),理论上任何非线性函数都可以使用,而ReLU恰好就是这个拥有各种优势的非线性函数。至于跟神经科学的关系,那都是之后的人套上去的。&/p&&br&&img src=&/v2-587ac01a7b02b8cb418dec6_b.png& data-rawwidth=&1199& data-rawheight=&451& class=&origin_image zh-lightbox-thumb& width=&1199& data-original=&/v2-587ac01a7b02b8cb418dec6_r.png&&&p&所以,就目前神经科学的发展水平,能启发ML的上世纪六七十年代基本都启发完了,现在实际上是ML在启发神经科学。一旦ANN有什么新发现,就可以在神经科学上做实验,说不定能弄个大新闻。&/p&
发现问题最近突然火了,多了一些所谓的神经科学解释,所以来扯一发。不知道这两个方法到底是怎么想到的,但其中之一的ReLU肯定不是和神经科学有关系的(Dropout就更没关系了)。有的关系是后来搞计算神经科学的人强行套上去的,而不是刚开始那群做ML的人想…
&a href=&/p/?refer=YJango& class=&internal&&深层学习为何要“Deep”(上)&/a&一、基本变换:层&br&&br&&p&神经网络是由一层一层构建的,那么每&strong&层&/strong&究竟在做什么?&/p&&ul&&li&&strong&数学式子&/strong&:&img src=&///equation?tex=%5Cvec%7By%7D%3D+a%28W%5Ccdot%5Cvec%7Bx%7D+%2B+%7Bb%7D%29& alt=&\vec{y}= a(W\cdot\vec{x} + {b})& eeimg=&1&&,其中&img src=&///equation?tex=%5Cvec%7Bx%7D& alt=&\vec{x}& eeimg=&1&&是输入向量,&img src=&///equation?tex=%5Cvec%7By%7D& alt=&\vec{y}& eeimg=&1&&是输出向量,&img src=&///equation?tex=%5Cvec%7Bb%7D& alt=&\vec{b}& eeimg=&1&&是偏移向量,&img src=&///equation?tex=W& alt=&W& eeimg=&1&&是权重矩阵,&img src=&///equation?tex=a%28%29& alt=&a()& eeimg=&1&&是激活函数。每一层仅仅是把输入&img src=&///equation?tex=%5Cvec+x& alt=&\vec x& eeimg=&1&&经过如此简单的操作得到&img src=&///equation?tex=%5Cvec+y& alt=&\vec y& eeimg=&1&&。&/li&&li&&strong&数学理解&/strong&:通过如下5种对输入空间(输入向量的集合)的操作,完成 &strong&输入空间 ——& 输出空间&/strong& 的变换 (矩阵的行空间到列空间)。 &br&注:用“空间”二字的原因是被分类的并不是单个事物,而是&strong&一类&/strong&事物。空间是指这类事物所有个体的集合。&ul&&li&&strong&1.&/strong& 升维/降维&/li&&li&&strong&2.&/strong& 放大/缩小&/li&&li&&strong&3.&/strong& 旋转&/li&&li&&strong&4.&/strong& 平移&/li&&li&&strong&5.&/strong& “弯曲” &br&这5种操作中,1,2,3的操作由&img src=&///equation?tex=W%5Ccdot%5Cvec%7Bx%7D& alt=&W\cdot\vec{x}& eeimg=&1&&完成,4的操作是由&img src=&///equation?tex=%2B%5Cvec%7Bb%7D& alt=&+\vec{b}& eeimg=&1&&完成,5的操作则是由&img src=&///equation?tex=a%28%29& alt=&a()& eeimg=&1&&来实现。 (此处有动态图&a href=&///?target=http%3A//colah.github.io/posts/2014-03-NN-Manifolds-Topology/img/1layer.gif& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&5种空间操作&i class=&icon-external&&&/i&&/a&,帮助理解)&br&&/li&&/ul&&/li&&/ul&&blockquote&&p&每层神经网络的数学理解:&strong&用线性变换跟随着非线性变化,将输入空间投向另一个空间&/strong&。&/p&&/blockquote&&ul&&li&&p&&strong&物理理解&/strong&:对 &img src=&///equation?tex=W%5Ccdot%5Cvec%7Bx%7D& alt=&W\cdot\vec{x}& eeimg=&1&& 的理解就是&strong&通过组合形成新物质&/strong&。&img src=&///equation?tex=%0Aa%28%29& alt=&
a()& eeimg=&1&&又符合了我们所处的世界都是非线性的特点。&/p&&ul&&li&&strong&情景:&/strong&&img src=&///equation?tex=%5Cvec%7Bx%7D& alt=&\vec{x}& eeimg=&1&&是二维向量,维度是碳原子和氧原子的数量&img src=&///equation?tex=+%5BC%3BO%5D& alt=& [C;O]& eeimg=&1&&,数值且定为&img src=&///equation?tex=%5B1%3B1%5D& alt=&[1;1]& eeimg=&1&&,若确定&img src=&///equation?tex=%5Cvec%7By%7D& alt=&\vec{y}& eeimg=&1&&是三维向量,就会形成如下网络的形状 (神经网络的每个节点表示一个维度)。通过改变权重的值,可以获得若干个不同物质。右侧的节点数决定了想要获得多少种不同的新物质。(矩阵的行数) &img src=&/v2-69d03cf2bb0d9af58841b4_b.jpg& data-rawwidth=&144& data-rawheight=&164& class=&content_image& width=&144&&&strong&1.&/strong&如果权重W的数值如(1),那么网络的输出y? 就会是三个新物质,[二氧化碳,臭氧,一氧化碳]。 &br&&img src=&///equation?tex=%5Cleft%5B%0A+%5Cbegin%7Bmatrix%7D%0A+++CO_%7B2%7D%5C%5C%0A+++O_%7B3%7D%5C%5C%0A+++CO%0A++%5Cend%7Bmatrix%7D%0A++%5Cright%5D%3D%0A+%5Cleft%5B%0A+%5Cbegin%7Bmatrix%7D%0A+++1+%26+2+%5C%5C%0A+++0+%26+3%5C%5C%0A+++1+%26+1%0A++%5Cend%7Bmatrix%7D%0A++%5Cright%5D+%5Ccdot+%5Cleft%5B%0A+%5Cbegin%7Bmatrix%7D%0A+++C+%5C%5C%0A+++O+%5C%5C%0A++%5Cend%7Bmatrix%7D%0A++%5Cright%5D& alt=&\left[
\begin{matrix}
\end{matrix}
\begin{matrix}
\end{matrix}
\right] \cdot \left[
\begin{matrix}
\end{matrix}
\right]& eeimg=&1&& (1)&/li&&li&&strong&2.&/strong&也可以减少右侧的一个节点,并改变权重W至(2),那么输出&img src=&///equation?tex=%5Cvec%7By%7D& alt=&\vec{y}& eeimg=&1&& 就会是两个新物质,&img src=&///equation?tex=%5B+O_%7B0.3%7D%3BCO_%7B1.5%7D%5D& alt=&[ O_{0.3};CO_{1.5}]& eeimg=&1&&。 &br&&img src=&///equation?tex=%5Cleft%5B%0A+%5Cbegin%7Bmatrix%7D%0A++++O_%7B0.3%7D%5C%5C%0A+++CO_%7B1.5%7D%5C%5C%0A++%5Cend%7Bmatrix%7D%0A++%5Cright%5D%3D%0A+%5Cleft%5B%0A+%5Cbegin%7Bmatrix%7D%0A+++0%26+0.3+%5C%5C%0A+++1+%26+1.5%5C%5C%0A++%5Cend%7Bmatrix%7D%0A++%5Cright%5D+%5Ccdot+%5Cleft%5B%0A+%5Cbegin%7Bmatrix%7D%0A+++C+%5C%5C%0A+++O+%5C%5C%0A++%5Cend%7Bmatrix%7D%0A++%5Cright%5D& alt=&\left[
\begin{matrix}
CO_{1.5}\\
\end{matrix}
\begin{matrix}
\end{matrix}
\right] \cdot \left[
\begin{matrix}
\end{matrix}
\right]& eeimg=&1&&(2)&br&&strong&3.&/strong&如果希望通过层网络能够从[C, O]空间转变到&img src=&///equation?tex=%5BCO_%7B2%7D%3BO_%7B3%7D%3BCO%5D& alt=&[CO_{2};O_{3};CO]& eeimg=&1&&空间的话,那么网络的学习过程就是将W的数值变成尽可能接近(1)的过程 。如果再加一层,就是通过组合&img src=&///equation?tex=%5BCO_%7B2%7D%3BO_%7B3%7D%3BCO%5D& alt=&[CO_{2};O_{3};CO]& eeimg=&1&&这三种基础物质,形成若干更高层的物质。 &br&&strong&4.&/strong&重要的是这种组合思想,组合成的东西在神经网络中并不需要有物理意义。&/li&&/ul&&br&&/li&&/ul&&blockquote&&p&每层神经网络的物理理解:&strong&通过现有的不同物质的组合形成新物质&/strong&。&/p&&/blockquote&二、理解视角:&p&现在我们知道了每一层的行为,但这种行为又是如何完成识别任务的呢?&/p&&br&数学视角:“线性可分”&ul&&li&&strong&一维情景&/strong&:以分类为例,当要分类正数、负数、零,三类的时候,一维空间的直线可以找到两个超平面(比当前空间低一维的子空间。当前空间是直线的话,超平面就是点)分割这三类。但面对像分类奇数和偶数无法找到可以区分它们的点的时候,我们借助 x % 2(取余)的转变,把x变换到另一个空间下来比较,从而分割。 &img src=&/v2-92ff4b847ac5fa41d91d1e76a910c483_b.jpg& data-rawwidth=&370& data-rawheight=&63& class=&content_image& width=&370&&&/li&&li&&strong&二维情景&/strong&:平面的四个象限也是线性可分。但下图的红蓝两条线就无法找到一超平面去分割。 &br&&img src=&/v2-b1bd0f75b46ed27dafb6e3f_b.jpg& data-rawwidth=&197& data-rawheight=&204& class=&content_image& width=&197&&神经网络的解决方法依旧是转换到另外一个空间下,用的是所说的&strong&5种空间变换操作&/strong&。比如下图就是经过放大、平移、旋转、扭曲原二维空间后,在三维空间下就可以成功找到一个超平面分割红蓝两线 (同SVM的思路一样)。 &br&&img src=&/v2-8d7d1ef957ebbf8ba9bb9cf8ff2d87ff_b.jpg& data-rawwidth=&197& data-rawheight=&198& class=&content_image& width=&197&&上面是一层神经网络可以做到的,如果把&img src=&///equation?tex=%5Cvec%7By%7D& alt=&\vec{y}& eeimg=&1&& 当做新的输入再次用这5种操作进行第二遍空间变换的话,网络也就变为了二层。最终输出是&img src=&///equation?tex=%5Cvec%7By%7D%3D+a_%7B2%7D%28W_%7B2%7D%5Ccdot%28a_%7B1%7D%28W_%7B1%7D%5Ccdot%5Cvec%7Bx%7D+%2B+%7Bb%7D_%7B1%7D%29%29+%2B+%7Bb%7D_%7B2%7D%29& alt=&\vec{y}= a_{2}(W_{2}\cdot(a_{1}(W_{1}\cdot\vec{x} + {b}_{1})) + {b}_{2})& eeimg=&1&&。 &br&设想网络拥有很多层时,对原始输入空间的“扭曲力”会大幅增加,如下图,最终我们可以轻松找到一个超平面分割空间。 &img src=&/v2-d831a2d915c01c692c1a624cb5bb2c9f_b.jpg& data-rawwidth=&204& data-rawheight=&201& class=&content_image& width=&204&&当然也有如下图失败的时候,关键在于“如何扭曲空间”。所谓监督学习就是给予神经网络网络大量的训练例子,让网络从训练例子中学会如何变换空间。每一层的权重W就&strong&控制着如何变换空间&/strong&,我们最终需要的也就是训练好的神经网络的所有层的权重矩阵。。这里有非常棒的&a href=&///?target=http%3A//cs.stanford.edu/people/karpathy/convnetjs//demo/classify2d.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&可视化空间变换demo&i class=&icon-external&&&/i&&/a&,&strong&一定要&/strong&打开尝试并感受这种扭曲过程。更多内容请看&a href=&///?target=http%3A//colah.github.io/posts/2014-03-NN-Manifolds-Topology/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Neural Networks, Manifolds, and Topology&i class=&icon-external&&&/i&&/a&。 &img src=&/v2-1e2ad08178_b.jpg& data-rawwidth=&205& data-rawheight=&203& class=&content_image& width=&205&&&/li&&/ul&&p&上面的内容有三张动态图,对于理解这种空间变化非常有帮助。由于知乎不支持动态图,可以在gitbook &a href=&///?target=https%3A//yjango.gitbooks.io/superorganism/content/ren_gong_shen_jing_wang_luo.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&人工神经网络 · 超智能体&i class=&icon-external&&&/i&&/a&上感受那三张图。&b&一定一定要感受&/b&。&/p&&blockquote&&p&线性可分视角:神经网络的学习就是&strong&学习如何利用矩阵的线性变换加激活函数的非线性变换,将原始输入空间投向线性可分/稀疏的空间去分类/回归。&/strong&&/p&&p&&strong&增加节点数:增加维度,即增加线性转换能力。&/strong&&br&&strong&增加层数:增加激活函数的次数,即增加非线性转换次数。&/strong&&/p&&/blockquote&物理视角:“物质组成”&ul&&li&&strong&类比&/strong&:回想上文由碳氧原子通过不同组合形成若干分子的例子。从分子层面继续迭代这种组合思想,可以形成DNA,细胞,组织,器官,最终可以形成一个完整的人。继续迭代还会有家庭,公司,国家等。这种现象在身边随处可见。并且原子的内部结构与太阳系又惊人的相似。不同层级之间都是以类似的几种规则再不断形成新物质。你也可能听过&strong&分形学&/strong&这三个字。可通过观看&a href=&///?target=http%3A///programs/view/o41zy0SeSS0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&从1米到150亿光年&i class=&icon-external&&&/i&&/a&来感受自然界这种层级现象的普遍性。 &img src=&/v2-3ecdacc0ae28_b.jpg& data-rawwidth=&488& data-rawheight=&340& class=&origin_image zh-lightbox-thumb& width=&488& data-original=&/v2-3ecdacc0ae28_r.jpg&&&/li&&li&&strong&人脸识别情景&/strong&:我们可以模拟这种思想并应用在画面识别上。由像素组成菱角再组成五官最后到不同的人脸。每一层代表不同的不同的物质层面 (如分子层)。而每层的W&strong&存储着如何组合上一层的物质从而形成新物质&/strong&。 &br&如果我们完全掌握一架飞机是如何从分子开始一层一层形成的,拿到一堆分子后,我们就可以判断他们是否可以以此形成方式,形成一架飞机。 &br&附:&a href=&///?target=http%3A//playground.tensorflow.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Tensorflow playground&i class=&icon-external&&&/i&&/a&展示了数据是如何“流动”的。 &img src=&/v2-82f05552fd2ddde28a0ef20814d7acbb_b.png& data-rawwidth=&624& data-rawheight=&218& class=&origin_image zh-lightbox-thumb& width=&624& data-original=&/v2-82f05552fd2ddde28a0ef20814d7acbb_r.png&&&/li&&/ul&&blockquote&&p&物质组成视角:神经网络的学习过程就是&strong&学习物质组成方式的过程。&/strong&&/p&&p&&strong&增加节点数:增加同一层物质的种类,比如118个元素的原子层就有118个节点。&/strong&&br&&strong&增加层数:增加更多层级,比如分子层,原子层,器官层,并通过判断更抽象的概念来识别物体。&/strong&&/p&&/blockquote&&p&按照上文在理解视角中所述的观点,可以想出下面两条理由关于为什么更深的网络会更加容易识别,增加容纳变异体(variation)(红苹果、绿苹果)的能力、鲁棒性(robust)。&/p&&p&&strong&数学视角&/strong&:变异体(variation)很多的分类的任务需要高度非线性的分割曲线。不断的利用那5种空间变换操作将原始输入空间像“捏橡皮泥一样”在高维空间下捏成更为线性可分/稀疏的形状。 &br&&strong&物理视角&/strong&:通过对“&strong&抽象概念&/strong&”的判断来识别物体,而非细节。比如对“飞机”的判断,即便人类自己也无法用语言或者若干条规则来解释自己如何判断一个飞机。因为人脑中真正判断的不是是否“有机翼”、“能飞行”等细节现象,而是一个抽象概念。层数越深,这种概念就越抽象,所能&strong&涵盖的变异体&/strong&就越多,就可以容纳战斗机,客机等很多种不同种类的飞机。&/p&&br&&br&三、神经网络的训练&p&知道了神经网络的学习过程就是&strong&学习&/strong&控制着空间变换方式(物质组成方式)的&strong&权重矩阵&/strong&后,接下来的问题就是&strong&如何学习&/strong&每一层的权重矩阵W。&/p&&br&如何训练:&p&既然我们希望网络的输出尽可能的接近真正想要预测的值。那么就可以通过&strong&比较&/strong&当前网络的&strong&预测值&/strong&和我们真正想要的&strong&目标值&/strong&,再根据两者的差异情况来更新每一层的权重矩阵(比如,如果网络的预测值高了,就调整权重让它预测低一些,不断调整,直到能够预测出目标值)。因此就需要先&strong&定义“如何比较&/strong&预测值和目标值的&strong&差异&/strong&”,这便是&strong&损失函数或目标函数(loss function or objective function)&/strong&,用于衡量预测值和目标值的差异的方程。loss function的输出值(loss)越高表示差异性越大。那神经网络的训练就变成了尽可能的缩小loss的过程。 &br&所用的方法是&strong&梯度下降(Gradient descent)&/strong&:通过使loss值向当前点对应梯度的反方向不断移动,来降低loss。一次移动多少是由&strong&学习速率(learning rate)&/strong&来控制的。&/p&&br&梯度下降的问题:&p&然而使用梯度下降训练神经网络拥有两个主要难题。&/p&&br&1、局部极小值&p&梯度下降寻找的是loss function的局部极小值,而我们想要全局最小值。如下图所示,我们希望loss值可以降低到右侧深蓝色的最低点,但loss有可能“卡”在左侧的局部极小值中。 &br&&img src=&/v2-00fe10bf57cf0cd7f9219_b.png& data-rawwidth=&420& data-rawheight=&250& class=&content_image& width=&420&&试图解决“卡在局部极小值”问题的方法分两大类:&/p&&ul&&li&&p&&strong&调节步伐:&/strong&调节学习速率,使每一次的更新“步伐”不同。常用方法有:&/p&&/li&&li&&p&随机梯度下降(Stochastic Gradient Descent (SGD):每次只更新一个样本所计算的梯度&/p&&/li&&li&小批量梯度下降(Mini-batch gradient descent):每次更新若干样本所计算的梯度的平均值&/li&&li&动量(Momentum):不仅仅考虑当前样本所计算的梯度;Nesterov动量(Nesterov Momentum):Momentum的改进&/li&&li&&p&Adagrad、RMSProp、Adadelta、Adam:这些方法都是训练过程中依照规则降低学习速率,部分也综合动量&/p&&/li&&li&&p&&strong&优化起点&/strong&:合理初始化权重(weights initialization)、预训练网络(pre-train),使网络获得一个较好的“起始点”,如最右侧的起始点就比最左侧的起始点要好。常用方法有:高斯分布初始权重(Gaussian distribution)、均匀分布初始权重(Uniform distribution)、Glorot 初始权重、He初始权、稀疏矩阵初始权重(sparse matrix)&/p&&/li&&/ul&2、梯度的计算&p&机器学习所处理的数据都是高维数据,该&strong&如何快速计算梯度&/strong&、而不是以年来计算。 &br&其次如何更新&strong&隐藏层&/strong&的权重? &br&解决方法是:计算图:&strong&反向传播算法&/strong&&br&这里的解释留给非常棒的&a href=&///?target=http%3A//colah.github.io/posts/2015-08-Backprop/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Computational Graphs: Backpropagation&i class=&icon-external&&&/i&&/a&&br&需要知道的是,&strong&反向传播算法是求梯度的一种方法&/strong&。如同快速傅里叶变换(FFT)的贡献。 &br&而计算图的概念又使梯度的计算更加合理方便。&/p&&br&基本流程图:&p&下面就结合图简单浏览一下训练和识别过程,并描述各个部分的作用。要&b&结合图解阅读以下内容。但手机显示的图过小,最好用电脑打开&/b&。&img src=&/v2-af6cbfc37ee36e0_b.jpg& data-rawwidth=&743& data-rawheight=&345& class=&origin_image zh-lightbox-thumb& width=&743& data-original=&/v2-af6cbfc37ee36e0_r.jpg&&&/p&&ul&&li&&strong&收集训练集(train data):&/strong&也就是同时有input以及对应label的数据。每个数据叫做训练样本(sample)。label也叫target,也是机器学习中最贵的部分。上图表示的是我的数据库。假设input本别是x的维度是39,label的维度是48。&/li&&li&&p&&strong&设计网络结构(architecture):&/strong&确定层数、每一隐藏层的节点数和激活函数,以及输出层的激活函数和损失函数。上图用的是两层隐藏层(最后一层是输出层)。隐藏层所用激活函数a( )是ReLu,输出层的激活函数是线性linear(也可看成是没有激活函数)。隐藏层都是1000节点。损失函数L( )是用于比较距离MSE:mean((output - target)^2)。MSE越小表示预测效果越好。训练过程就是不断减小MSE的过程。到此所有数据的维度都已确定:&/p&&ul&&li&训练数据:&img src=&///equation?tex=input+%5Cin+R%5E%7B39%7D+%3Blabel+%5Cin+R%5E%7B48%7D& alt=&input \in R^{39} ;label \in R^{48}& eeimg=&1&&&br&&/li&&li&权重矩阵:&img src=&///equation?tex=W_%7Bh1%7D%5Cin+R%5E%7BD%3BW_%7Bh2%7D%5Cin+R%5E%7BD+%3BW_%7Bo%7D%5Cin+R%5E%7B48x1000%7D& alt=&W_{h1}\in R^{1000x39};W_{h2}\in R^{} ;W_{o}\in R^{48x1000}& eeimg=&1&&&br&&/li&&li&偏移向量:&img src=&///equation?tex=b_%7Bh1%7D%5Cin+R%5E%7BBb_%7Bh2%7D%5Cin+R%5E%7B1000%7D+%3Bb_%7Bo%7D%5Cin+R%5E%7B48%7D& alt=&b_{h1}\in R^{1000};b_{h2}\in R^{1000} ;b_{o}\in R^{48}& eeimg=&1&&&br&&/li&&li&网络输出:&img src=&///equation?tex=output+%5Cin+R%5E%7B48%7D& alt=&output \in R^{48}& eeimg=&1&&&br&&/li&&/ul&&/li&&li&&p&&strong&数据预处理(preprocessing):&/strong&将所有样本的input和label处理成能够使用神经网络的数据,label的值域符合激活函数的值域。并简单优化数据以便让训练易于收敛。比如中心化(mean subtraction)、归一化(normlization)、主成分分析(PCA)、白化(whitening)。假设上图的input和output全都经过了中心化和归一化。&/p&&/li&&li&&strong&权重初始化(weights initialization)&/strong&:&img src=&///equation?tex=W_%7Bh1%7D%2CW_%7Bh2%7D%2CW_%7B0%7D& alt=&W_{h1},W_{h2},W_{0}& eeimg=&1&&在训练前不能为空,要初始化才能够计算loss从而来降低。&img src=&///equation?tex=W_%7Bh1%7D%2CW_%7Bh2%7D%2CW_%7B0%7D& alt=&W_{h1},W_{h2},W_{0}& eeimg=&1&&初始化决定了loss在loss function中从哪个点开始作为起点训练网络。上图用均匀分布初始权重(Uniform distribution)。&/li&&li&&p&&strong&训练网络(training)&/strong&:训练过程就是用训练数据的input经过网络计算出output,再和label计算出loss,再计算出gradients来更新weights的过程。&/p&&ul&&li&正向传递:,算当前网络的预测值&img src=&///equation?tex=output+%3Dlinear+%28W_%7Bo%7D+%5Ccdot+Relu%28W_%7Bh2%7D%5Ccdot+Relu%28W_%7Bh1%7D%5Ccdot+input%2Bb_%7Bh1%7D%29%2Bb_%7Bh2%7D%29+%2Bb_%7Bo%7D%29& alt=&output =linear (W_{o} \cdot Relu(W_{h2}\cdot Relu(W_{h1}\cdot input+b_{h1})+b_{h2}) +b_{o})& eeimg=&1&&&/li&&li&计算loss:&img src=&///equation?tex=loss+%3D+mean%28%28output+-+target%29%5E2%29& alt=&loss = mean((output - target)^2)& eeimg=&1&&&/li&&li&计算梯度:从loss开始反向传播计算每个参数(parameters)对应的梯度(gradients)。这里用Stochastic Gradient Descent (SGD) 来计算梯度,即每次更新所计算的梯度都是从一个样本计算出来的。传统的方法Gradient Descent是正向传递所有样本来计算梯度。SGD的方法来计算梯度的话,loss function的形状如下图所示会有变化,这样在更新中就有可能“跳出”局部最小值。 &img src=&/v2-0c0e7f5ffa98c2c1eb8d9a3_b.png& data-rawwidth=&469& data-rawheight=&227& class=&origin_image zh-lightbox-thumb& width=&469& data-original=&/v2-0c0e7f5ffa98c2c1eb8d9a3_r.png&&&/li&&li&更新权重:这里用最简单的方法来更新,即所有参数都 &img src=&///equation?tex=W+%3D+W+-+learningrate+%2A+gradient& alt=&W = W - learningrate * gradient& eeimg=&1&&&/li&&li&预测新值:训练过所有样本后,打乱样本顺序再次训练若干次。训练完毕后,当再来新的数据input,就可以利用训练的网络来预测了。这时的output就是效果很好的预测值了。下图是一张&b&实际值&/b&和&b&预测值&/b&的三组对比图。输出数据是48维,这里只取1个维度来画图。蓝色的是实际值,绿色的是实际值。最上方的是训练数据的对比图,而下方的两行是神经网络模型&b&从未见过&/b&的数据预测对比图。(不过这里用的是RNN,主要是为了让大家感受一下效果)&img src=&/v2-a675e692f7f7755d91bcdba5e988e910_b.jpg& data-rawwidth=&2000& data-rawheight=&1600& class=&origin_image zh-lightbox-thumb& width=&2000& data-original=&/v2-a675e692f7f7755d91bcdba5e988e910_r.jpg&&&/li&&/ul&&/li&&/ul&&p&注:此部分内容&strong&不是&/strong&这篇文章的&strong&重点&/strong&,但为了理解&strong&深层&/strong&神经网络,需要明白最基本的训练过程。 &br&若能理解训练过程是通过梯度下降尽可能缩小loss的过程即可。 &br&若有理解障碍,可以用python实践一下&a href=&///?target=http%3A///2015/09/implementing-a-neural-network-from-scratch/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&从零开始训练一个神经网络&i class=&icon-external&&&/i&&/a&,体会整个训练过程。若有时间则可以再体会一下计算图自动求梯度的方便&a href=&///?target=https%3A//www.tensorflow.org/versions/r0.11/tutorials/mnist/beginners/index.html%23mnist-for-ml-beginners& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&利用TensorFlow&i class=&icon-external&&&/i&&/a&。&/p&&br&四、结合&a href=&///?target=http%3A//playground.tensorflow.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Tensorflow playground&i class=&icon-external&&&/i&&/a&理解&b&5种空间操作&/b&和&b&物质组成视角&/b&&p&打开网页后,总体来说,蓝色代表正值,黄色代表负值。拿&b&分类&/b&任务来分析。&/p&&ul&&li&数据:在二维平面内,若干点被标记成了两种颜色。黄色,蓝色,表示想要区分的两类。你可以把平面内的任意点标记成任意颜色。网页给你提供了4种规律。神经网络会根据你给的数据训练,再分类相同规律的点。&br&&/li&&/ul&&img src=&/v2-6d17d1fb77d3ae456317_b.png& data-rawwidth=&173& data-rawheight=&169& class=&content_image& width=&173&&&br&&ul&&li&输入:在二维平面内,你想给网络多少关于“点”的信息。从颜色就可以看出来,&img src=&///equation?tex=x_%7B1%7D& alt=&x_{1}& eeimg=&1&&左边是负,右边是正,&img src=&///equation?tex=x_%7B1%7D& alt=&x_{1}& eeimg=&1&&表示此点的横坐标值。同理,&img src=&///equation?tex=x_%7B2%7D& alt=&x_{2}& eeimg=&1&&表示此点的纵坐标值。&img src=&///equation?tex=x_%7B1%7D%5E%7B2%7D& alt=&x_{1}^{2}& eeimg=&1&&是关于横坐标值的“抛物线”信息。你也可以给更多关于这个点的信息。给的越多,越容易被分开。&img src=&/v2-111e37e8479aa57bedbfb2dbcd8e5b63_b.png& data-rawwidth=&92& data-rawheight=&228& class=&content_image& width=&92&&&/li&&li&连接线:表示权重,蓝色表示用神经元的原始输出,黄色表示用负输出。深浅表示权重的绝对值大小。鼠标放在线上可以看到具体值。也可以更改。在(1)中,当把&img src=&///equation?tex=x_%7B2%7D& alt=&x_{2}& eeimg=&1&&输出的一个权重改为-1时,&img src=&///equation?tex=x_%7B2%7D& alt=&x_{2}& eeimg=&1&&的形状直接倒置了。不过还需要考虑激活函数。(1)中用的是linear。在(2)中,当换成sigmoid时,你会发现没有黄色区域了。因为sigmoid的值域是(0,1)&br&&img src=&/v2-fcd7a49d57c4deb1e4f3c_b.png& data-rawwidth=&315& data-rawheight=&136& class=&content_image& width=&315&&(1)&img src=&/v2-83fd9f01e2ea38c7f6b8aeaa308cf040_b.png& data-rawwidth=&294& data-rawheight=&123& class=&content_image& width=&294&&(2)&br&&br&&/li&&li&输出:黄色背景颜色都被归为黄点类,蓝色背景颜色都被归为蓝点类。深浅表示可能性的强弱。&img src=&/v2-dff3f6e72881ebd222414eabb9504671_b.png& data-rawwidth=&1116& data-rawheight=&363& class=&origin_image zh-lightbox-thumb& width=&1116& data-original=&/v2-dff3f6e72881ebd222414eabb9504671_r.png&&上图中所有在黄色背景颜色的点都会被分类为“黄点“,同理,蓝色区域被分成蓝点。在上面的分类分布图中你可以看到每一层通过上一层信息的组合所形成的。权重(那些连接线)控制了“如何组合”。神经网络的学习也就是从数据中学习那些权重。Tensorflow playground所表现出来的现象就是“在我文章里所写的“物质组成思想”,这也是为什么我把&a href=&///?target=http%3A//playground.tensorflow.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Tensorflow playground&i class=&icon-external&&&/i&&/a&放在了那一部分。&/li&&/ul&&br&不过你要是把Tensorflow的个名字拆开来看的话,是tensor(张量)的flow(流动)。Tensorflow playground的作者想要阐述的侧重点是“&b&张量如何流动&/b&”的。&br&&br&&b&5种空间变换的理解&/b&:Tensorflow playground下没有体现5种空间变换的理解。需要打开这个网站尝试:&a href=&///?target=http%3A//cs.stanford.edu/people/karpathy/convnetjs//demo/classify2d.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ConvNetJS demo: Classify toy 2D data&i class=&icon-external&&&/i&&/a&&br&&img src=&/v2-5f56fb5abe49_b.png& data-rawwidth=&841& data-rawheight=&425& class=&origin_image zh-lightbox-thumb& width=&841& data-original=&/v2-5f56fb5abe49_r.png&&左侧是原始输入空间下的分类图,右侧是转换后的高维空间下的扭曲图。&br&&img src=&/v2-a81ad2b067e1d4ae3951e7_b.png& data-rawwidth=&848& data-rawheight=&417& class=&origin_image zh-lightbox-thumb& width=&848& data-original=&/v2-a81ad2b067e1d4ae3951e7_r.png&&最终的扭曲效果是所有绿点都被扭曲到了一侧,而所有红点都被扭曲到了另一侧。这样就可以线性分割(用超平面(这里是一个平面)在中间分开两类)&br&&br&&b&&a href=&/p/& class=&internal&&深层学习为何要“Deep”(下)&/a&是有关为什么深层比浅层效果好的解释&/b&
一、基本变换:层 神经网络是由一层一层构建的,那么每层究竟在做什么?数学式子:\vec{y}= a(W\cdot\vec{x} + {b}),其中\vec{x}是输入向量,\vec{y}是输出向量,\vec{b}是偏移向量,W是权重矩阵,a()是激活函数。每一层仅仅…
已有帐号?
无法登录?
社交帐号登录}

我要回帖

更多关于 神经网络 知乎 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信