1. 行星不发光,科学家是如何发现太阳系外的行星的
科学家有很多方法来寻找地外行星,比如行星凌日法、径向速度法、直接测量法、引力摄动法,重力微透镜法、脉冲星计时法、相对论法等等;其中凌日法是最有效的,目前人类发现大约5000颗地外行星中,有70%都是利用凌日法发现的。
但是这个方法对观测设备的要求极高,还要求行星的尺寸不能太小,距离地球越近越好,同时行星也不能距离母恒星太近,目前天文学家用这种方法发现了数十颗系外行星。
以上七种探测系外行星的方法,都是各有各的优缺点,比如行星凌日法虽然效率非常高,但是当行星的公转轨道垂直于地球方向时,这个办法就失效了,而且行星凌日法不反应行星的大气数据,只有各种方法相辅相成,才能让我们发现更多的地外行星唯迅。
2. Google 人工智能引擎 TensorFlow 开源会带来哪些影响
最直接的影响就是明年又会有一大批"自出创新型"科技项目要上马了。
说一点感想。。。
一是现在很多大公司都越来越重视DL,所以赶紧多了解了解DL无论是对于相关领域的工作,还是对于未来自己的发展都有好处
二是DL现在一大硬伤在于运算复杂度太高导致的计算时间太长,所以GPU加速这一块未来也会越来越重要。现在和DL关系比较密切的加速手段也主要就是CUDA,所以CUDA相关的东西也可以多了解了解,未来肯定只会用的越多而不是越少
今年CVPR2015和ICCV2015,不少使用DL的工作识别精确度暴增10%,使得未来如果不是工作上有巨大创新的话,基本上所有人都会向着DL的方向去做了
而且这是一条很难回头的路,因为实验结果只能越来越好而不是越来越差,如果你不用DL,那么你的结果比不过别人,所以很多人虽然心里不怎么情愿,但也是不得不用DL来做自己的一些工作
3. 谷歌bard是什么意思
"谷歌Bard"是指由Google推出的人工智能聊天机器人。这个项目是在2019年由Google的研究团队发起的,旨在探索人工智能在自然语言处理、问答、对话等方面的技术。Bard的设计是基于神经语言模型,可以理解并生成人类语言的自然文本。
尽管Bard在许多方面表现出了很高的智能,但仍然存在一些局限性。例如,它可能会出现错误的理解、生成不正确的回答或者重复已经出现过的信息。此外,由于Bard是基于大量数据进行训练的,它在某些特定领域的知识可能不如专业人士丰富。
总的来说,谷歌Bard是人工智能领域的一项创新尝试,旨在推动自然语言处理技术的发展。尽管Bard还存在一些局限性,但它展示了人工智能在理解和生成人类语言方面宽好的巨大潜力。随着技术的不断发展,Bard有望在未来为我们提供更加智能、高效和有趣的交流体验。
4. 如何评价Google发布的第二代深度学习系统TensorFlow
在尚未确定能否发布分布式弯罩版本之前,把一个单机工具描述成”Todaywe’--oursecond-”,”",这样的claim是否过大?不管是工业界还是学术界,都应该珍惜机器学习(或者人工智能)今天这来之不易的局面,在宣传与推广自己工作的时候实事求是,不给公众造成误导。
仔细研读了TensorFlow的开源代码文档和slides,总体印象是:一个新的单机深度学习工具包,没有明显的理论和系统创新,开源版本不支持分布式,所以对大规模深度学习没有太大益处。
1、编程模式。采用了一种称作“computationgraph”的数据流编程模式,这种模式在之前很多系统中已有实现,如微软Dryad[1],Spark。
2、数据表示。称作为”Tensor“,统一来表示向量、矩阵、三维及以上张量。类似的抽象在之前很多系统与工具中已有。大部分机器学习操作的对象(数据或者参数)都是以向量、矩阵的形式存在,少部分是张量。统一表征成"tensor"没有问题,但在创新性上贡献有限。
3、开源版本不支持分布式。单机的深度学习工具已经不下10个,Google没有提供测评数据显缓闹键示TensorFlow相比这些扰巧工具在性能上有优势。市面上真正缺乏的是能够支持大规模深度学习的分布式框架或系统,而TensorFlow开源版本并没有提供。
希望TensorFlow能够开源分布式版本。如果不方便开源的话,希望在以后的宣传中清晰指出开源版本是一个单机深度学习工具,而不是支持大规模深度学习的系统,这二者有本质的区别。
5. 如何评价Google发布的第二代深度学习系统TensorFlow
参考链接:https://www.hu.com/question/37243838/answer/71634545
个人的一点看法:
1. TensorFlow是采用的DataFlow的数据流模型,不过我不觉得和Dryad有太多相似之处,此外Dryad也不是第一个提出DataFlow模型的地方,要说最早可以参考MIT TaggedToken
machine里面的static dataflow 和dynamic dataflow architecture[2]的资料. 在一个大规模机器学习系统上全面、可靠的支持DataFlow的feature本不是一件容易的事情,但是Tensorflow做到这一点,支持control_dependence, merge, condition,for-loop/while-loop, iteration。1. 就像LSTM的unrolling,原来需要predefine unroll,现在用for-loop去做展开(内部维持状态的变化) 2. 还有比如一些算法需要对不同的input example做不同的训练(不同的gradient,更新不一样的variables),以前需要hack很多东西(至少在DistBelif上是),现在只需要一个ConditionOp就解决了。3. 比如不同的variables用不同的optimizer,SGD/AdaGrad/FTRL/Momentum等。有了ControlFlow的支持,tensorflow graph更像是一种语言的抽象(variables, tensors, controlflow, compile[这个是指会rewrite整个graph, send/recv node, un-reference, graph partition, dynamic placement], parallelism,functional programming等),从这个角度讲还是有不少新东西在里面。
2. 是否用Dataflow和BSP并无直接对应关系,Dataflow只是tensor/token的流动,怎么 schele和控制流动是别的部分的事情(session 如何drive)。事实上,Tensorflow提供的灵活性用户很容易在上层做BSP(如果你含帆非常喜欢这样做的话,这种模型最大的缺点是fault tolerance很难做),SSP(如果非要把这个概念引入的话) 或者parameter server的结构(事实上我从来不认为这是一种通用的结构,只是ps被centralized起来存有状态的variables而已, 5年前的DistBelief就是这种架构),有了这个框架的抽象,然后进一步你可以做Synchronous or Asynchronous training。所以说Dataflow只能做BSP,这个是很没有缘由的。
3. 数据表示成tensor/token,单单这一点非要说这个有多少的创新确实也谈不上。不过基于tensor的每一个single op怎么做实现就有考究了,从Eigen开始到每一个kernels op基本都有micro-benchmark来保证单个op的performance达到最优,既然是kernel级的tensorflow的框架支持用户可以随便扩展GPU、CPU甚至即使是CPU的可以针对不同的指令级做优化和定制。当然任何事情有得就有失,大的系统的设计本身就是trade-off,比如你本来所有的东西揉斗弊在一起操作指针、inplace内存读写就可以,但现在抽象成多个各个粒度的operators,operators之间读写难免有很多overhead(当然graph rewrite已经最大限度的避免)。所以概括而言TensorFlow采用(目标)的设计其实是是空老族proction级的performance/成熟度和research flexibility的trade-off。从Google内部的各种产品线(Search/inbox/Photo等)的使用看,这个系统无论从各个方面都是经受住了考验(performance/scalability/flexibility/usability等)。Ps: TensorFlow绝不是只能做deep learning, shallow/wide model 以及传统的ML都可以基于这个系统来做(当然一些operators并不现成,需要去实现)。
4. 最后说一下多机版本的开源问题。有各种复杂的因素导致了这次release的版本没有多机在里面,比如并没有很好的job shele和高性能的RPC系统的支持。这个问题不深入讲但是希望不久的将来这些障碍都会排除。说到和DistBelief的性能比较,各种大大小小的task表明Tensorflow比DistBelief的性能提高不少(我不会说几X的这样的number,显然不同的tasks这个number的variance会很大. Tensorflow比DistBelief扩展性和灵活性的优势自然不用多少)要说开放出来比较数据更是没有意义,因为DistBelief本身并没有开源。
5. 再来说一下distributed version support的问题,如果你仔细研究一下Tensorflow的framework就会发现再当前的基础上加一个分布式的支持是相当容易的,你可以用Zeromq/MPI 任何一种高效的通信框架来做,结合当前的Graph rewrite的functionality,只需要增加一些通信的节点就可以。
6. 最后关于详细情况请参考Tensorflow writepaper[3],欢迎试用。
[1]: Arvind and David E. Culler. Annual review
of computer science vol. 1, 1986. chapter
Dataflow Architectures, pages 225–253. 1986 http://www.dtic.mil/cgi-bin/GetTRDoc?Location=U2&
doc=GetTRDoc.pdf&AD=ADA166235.
[2]: Arvind and Rishiyur S. Nikhil. Executing a program
on the MIT tagged-token dataflow architecture.
IEEE Trans. Comput., 39(3):300–318, 1990.
http://dl.acm.org/citation.cfm?id=78583.
[3]: TensorFlow:
Large-Scale Machine Learning on Heterogeneous Distributed Systems
6. 2019年十大最佳深度学习框架
作者 | python语音识别
来源 | 涛哥聊Python
虽然我们大多数人都惊叹为什么DL这么好?在使用大量数据进行训练时,它在准确性方面非常出色。近几年随着深度学习算法的发展,出现了很多深度学习的框架,这些框架各有所长,各具特色。下面将为大家介绍2019年最受欢迎的十大深度学习框架。
TensorFlow谷歌的Tensorflow可以说是当今最受欢迎的深度学习框架。Gmail,Uber,Airbnb,Nvidia以及其他许多知名品牌都在使用。TF是目前深度学习的主流框架,Tensorflow主要特性:
TensorFlow支持python、javaScript、C ++、Java和Go,C#和Julia等多种编程语言。 TF不仅拥有强大的计算集群,还可以在iOS和Android等移动平台上运行模型。 TF编程入门难度较大。初学者需要仔细考虑神经网络的架构,正确评估输入和输出数据的维度和数量。 TF使用静态计算图进行操作 。也就是说我们需要先定义图形,然后运行计算,如果我们需要对架构进行更改,我们会重新训练模型。选择这样的方法是为了提高效率,但是许多现代神经网络工具能够在学习过程中考虑改进而不会显着降低学习速度。在这方面,TensorFlow的主要竞争对手是PyTorch 。TensorFlow优点:
它非常适合创建和试验深度学习架构,便于数据集成,如输入图形,SQL表和图像。 它得到谷歌的支持,这就说明该模型短期内不会被抛弃,因此值得投入时间来学习它。 PyTorchTensorflow之后用于深度学习的主要框架是PyTorch。PyTorch框架是Facebook开发的,已被Twitter和Salesforce等公司使用。
PyTorch基本特性:
与TensorFlow不同,PyTorch库使用动态更新的图形进行操作 。这意味着它可以在流程中更改体系结构。 在PyTorch中,您可以使用标准调试器 ,例如pdb或PyCharm。PyTorch优点:
训练神经网络的过程简单明了。同时,PyTorch支持数据并行和分布式学习模型,并且还包含许多预先训练的模型。 PyTorch更适合小型项目和原型设计。 SonnetSonnet深度学习框架是建立在TensorFlow的基础之上。它是DeepMind用于创建具有复杂架构的神经网络。
Sonnet基本特性:
面向对象的库,在开发神经网络(NN)或其他机器学习(ML)算法时更加抽象。 Sonnet的想法是构造对应于神经网络的特定部分的主要Python对象。此外,这些对象独立地连接到计算TensorFlow图。分离创建对象并将其与图形相关联的过程简化了高级体系结构的设计。Sonnet优点:
Sonnet的主要优点是可以使用它来重现DeepMind论文中展示的研究,比Keras更容易,因为DeepMind论文模型就是使用Sonnet搭建的。 KerasKeras是一个机器学习框架,如果您拥有大量数据和/或你想快速入门深度学习,那么Keras将非常适合学习。Keras是TensorFlow高级集成APi,可以非常方便的和TensorFlow进行融合。这是我强烈推荐学习的一个库。
Keras基本特性:
除了Tensorflow之外,Keras还是其他流行的库(如Theano和CNTK)的高级API。 在Keras中更容易创建大规模的深度学习模型,但Keras框架环境配置比其他底层框架要复杂一些。Keras优点:
对于刚刚入门的人来说,Keras是最好的深度学习框架。它是学习和原型化简单概念的理想选择,可以理解各种模型和学习过程的本质。 Keras是一个简洁的API。 可以快速帮助您创建应用程序。 Keras中代码更加可读和简洁。 Keras模型序列化/反序列化API,回调和使用Python生成器的数据流非常成熟。顺便说一下TensorFlow和Keras的对比:
PS:Tensorflow处于底层框架:这和MXNet,Theano和PyTorch等框架一样。包括实现诸如广义矩阵 - 矩阵乘法和诸如卷积运算的神经网络原语之类的数学运算。
Keras处于高度集成框架。虽然更容易创建模型,但是面对复杂的网络结构时可能不如TensorFlow。
MXNetMXNet是一种高度可扩展的深度学习工具,可用于各种设备。虽然与TensorFlow相比,它似乎没有被广泛使用,但MXNet的增长可能会因为成为一个Apache项目而得到提升。
MXNet基本特性:
该框架支持多种语言,如C ++,Python,R,Julia,JavaScript,Scala,Go,甚至Perl。 可以在多个GPU和许多机器上非常有效地并行计算。MXNet优点:
支持多个GPU(具有优化的计算和快速上下文切换) 清晰且易于维护的代码(Python,R,Scala和其他API) 快速解决问题的能力(对于像我这样的深度学习新手至关重要)虽然它不像TF那么受欢迎,但MXNet具有详细的文档并且易于使用,能够在命令式和符号式编程风格之间进行选择,使其成为初学者和经验丰富的工程师的理想选择。
GLUONGluon是一个更好的深度学习框架,可以用来创建复杂的模型。GLUON基本特性:
Gluon的特殊性是具有一个灵活的界面,简化了原型设计,构建和培训深度学习模型,而不会牺牲学习速度。 Gluon基于MXNet,提供简单的API,简化深度学习模型的创建。 与PyTorch类似,Gluon框架支持使用动态图表 ,将其与高性能MXNet相结合。从这个角度来看,Gluon看起来像是分布式计算的Keras非常有趣的替代品。GLUON优点:
在Gluon中,您可以使用简单,清晰和简洁的代码定义神经网络。 它将训练算法和神经网络模型结合在一起,从而在不牺牲性能的情况下提供开发过程的灵活性。 Gluon可以定义动态的神经网络模型,这意味着它们可以动态构建,使用任何结构,并使用Python的任何本机控制流。 SWIFT当你听到Swift时,您可能会考虑iOS或MacOS的应用程序开发。但是如果你正在学习深度学习,那么你一定听说过Swens for Tensorflow。通过直接与通用编程语言集成,Swift for TensorFlow可以以前所未有的方式表达更强大的算法。SWIFT基本特性:
可以轻松获得可微分的自定义数据结构。 下一代API 。通过实践和研究获得的新API更易于使用且更强大。 在TensorFlow的基础上 ,Swift API为您提供对所有底层TensorFlow运算符的直接调用。 基于Jupyter、LLDB或者Swift in Colab的编程工具提高了您的工作效率。SWIFT优点:
如果动态语言不适合您的任务,那么这将是一个很好的选择。当你训练运行了几个小时,然后你的程序遇到类型错误,那么使用Swift,一种静态类型语言。您将看到代码错误的地方。 Chainer直到CMU的DyNet和Facebook的PyTorch出现之前,Chainer是动态计算图或网络的领先神经网络框架,它允许输入数据长度不一致。chainer基本特性:
Chainer代码是在Numpy和CuPy库的基础之上用纯Python编写的, Chainer是第一个使用动态架构模型的框架。Chainer优点:
通过自己的基准测试,Chainer明显比其他面向Python的框架更快,TensorFlow是包含MxNet和CNTK的测试组中最慢的。 比TensorFlow更好的GPU和GPU数据中心性能。最近Chainer成为GPU数据中心性能的全球冠军。 DL4J那些使用Java或Scala的人应该注意DL4J(Deep Learning for Java的简称)。DL4J的基本特性:
DL4J中的神经网络训练通过簇的迭代并行计算。 该过程由Hadoop和Spark架构支持。 使用Java允许您在Android设备的程序开发周期中使用。DL4J优点:
如果您正在寻找一个良好的Java深度学习框架,这会是一个非常好的平台。 ONNXONNX项目诞生于微软和Facebook,旨在寻找深度学习模型呈现的开放格式。ONNX简化了在人工智能的不同工作方式之间传递模型的过程。因此ONNX具有各种深度学习框架的优点。
ONNX基本特性:
ONNX使模型能够在一个框架中进行训练并转移到另一个框架中进行推理。ONNX模型目前在Caffe2,Microsoft Cognitive Toolkit,MXNet和PyTorch中得到支持,并且还有许多其他常见框架和库的连接器。ONNX优点:
对于PyTorch开发人员来说,ONNX是一个好的选择。但是对于那些喜欢TensorFlow的人来说,Keras等可能好一点。 总结那么您应该使用哪种深度学习框架?下面是几点建议:
如果你刚刚开始学习,那么最好的选择是Keras 。 出于研究目的,请选择PyTorch 。 对于生产,您需要关注环境。因此对于Google Cloud,最好的选择是TensorFlow ,适用于AWS - MXNet和Gluon 。 Android开发人员应该关注D4LJ ,对于iOS来说, Core ML会破坏类似的任务范围。 最后, ONNX将帮助解决不同框架之间的交互问题。7. 为什么深度学习大势超过传统机器学习
人工智能风靡一时!突然之间,每一个人,无论是否理解,都在谈论它。人工智能的发展趋势似乎势不可挡,但它真正归结为两个非常流行的概念:机器学习和深度学习。但最近,深度学习越来越受欢迎,因为它在用大量数据训练时的准确性方面至高无上。
通常,由于大量的参数,深度学习算法需要很长时间进行训练。最受欢迎的ResNet算法需要大约两周的时间才能完全从头开始训练。传统的机器学习算法需要几秒到几个小时来训练,这个场景在测试阶段完全相反。在测试时,深度学习算法花费的时间少得多。然而,如果将其与最近邻算法(一种机器学习算法)进行比较,则测试时间会随着数据大小的增加而增加。虽然这不适用于所有机器学习算法,但其中一些算法的测试时间也很短。
可解释性是为什么许多行业在深度学习中使用其他机器学习技术的主要问题。我们举个例子吧,假设我们使用深度学习来计算文档的相关性分数。它提供的性能非常好,接近人类的表现。但是有一个问题,它没有揭示为什么它给出了这个分数。事实上,你可以在数学上找出深层神经网络的哪些节点被激活,但我们不知道神经元应该建模什么,以及这些神经元层共同做了什么。所以我们不能解释结果。这不是机器学习算法,如决策树,逻辑回归等。
何时使用深度学习或不使用?
1.深度学习如果数据量很大,则执行其他技术。但由于数据量较小,传统的机器学习算法更为可取。
2.深度学习技术需要有高端基础设施来在合理的时间内进行培训。
3.当对特征内省缺乏领域理解时,深度学习技术超越了其他领域,因为你不必担心特征工程。
4.深度学习在图像分类、自然语言处理和语音识别等复杂问题方面真正发挥出色。
8. 如何看待中科院计算所的Cambricon-X稀疏深度学习处理器
在Google I/O 2016的主题演讲进入尾声时,Google提到了一项他们这段时间在AI和机器学习上取得的成果,一款叫做Tensor Processing Unit(张量处理单元)的处理器,简称TPU。
根据TPU团队主要负责人介绍,TPU专为Google机器学习应用TensorFlow打造,能够降低运算精度,在相同时间内处理更复杂、更强大的机器学习模型并将其更快地投入使用。Google数据中心早在一年前就开始使用TPU,其性能把摩尔绝缺定律往前推进到7年之后。之前打败李世乭的AlphaGo就是采用了TPU做了运算加速。
根据Google所言,TPU只在特定应用中作为辅助使用,公司将继续使用CPU和GPU。并且Google并没有对外销售TPU的打算。因此,TPU虽好,但仅限Google内部,而且即便使用TPU,也是用作辅助CPU和 GPU。
谷歌并没有公布TPU是怎么设计的,因此似乎很难对其一探究竟。不过,要知道谷歌的TPU并不是什么黑科技,只不过是正常的一款专用加速芯片。而且,这也不是世界上第一款用来做深度学习的专用芯片。IBM和我国中科院其实都有类似成果。
IBM 在2014年研发出脉冲神经网络芯片TrueNorth,走的是“类脑计算”路线。类脑计算的假设是,相似的结构可能会出现相似的功能,所以假如用神经电子元件制造与人脑神经网络相似的电子神经网络,是否可能实现人脑功能呢?这其实有点像人类研究飞行器的过程。我们都知道鸟会飞是因为有翅膀,人没有。所以假如给人也弄一对翅膀,人是不是也能飞?
早先人类其实有这么一个探索过程。如今人类要探索大脑,但是大脑何其复杂?IBM的这款芯片就是通过打造类脑的芯片架构,来期望得到大脑同样的功能,就算达不到,能模拟一下也很有意义。大意如此,当然实际上复杂多了。目前这款芯片理念很超前,还处于深入研究阶段,算得上是黑科技。
今天要重点讲的其实是中科院的这款“寒武纪”芯片。2016年3月,中国科学院计算技术研究所发布了全球首个能够“深度学习”的“神经网络”处理器芯片,名为“寒武纪”。该课题组负责人之一、中科院计算所陈天石博士透露,这项成果将于今年内正式投入产业化。在不久的未来,反欺诈的刷脸支付、图片搜索等都将更加可靠、易用。下图是“寒武纪”的芯片板卡。
之所以重点讲,是因为Google的TPU芯片并没有公开设计细节,连是谁代工的都没有公开。但是没拦同样作为深度学习的芯片,有理由相信中科院的“寒武纪”与Google的TPU在设计理念上是相同的。在讲这个之前,先简单科普一下人工智能和深度学习。
1981年的诺贝尔医学奖,颁发给了David Hubel和Torsten Wiesel,以及Roger Sperry。前两位的主要贡献是,发现了人的视觉系统的信息处理是分级的。如下图所示:从原始信号摄入开始(瞳孔摄入像素),接着做初步处理(大脑皮层某些细胞发现边缘和方向),然后抽象(大脑判定眼前物体的形状,比如是椭圆形的),然后进一步抽象(大脑枯宏胡进一步判定该物体是张人脸),最后识别眼前的这个人。
而深度学习(Deep Learning),恰恰就是模仿人脑的机制来解释数据。通过组合低层特征形成更加抽象的高层特征(或属性类别)。例如,在计算机视觉领域,深度学习算法从原始图像去学习得到一个低层次表达,例如边缘检测器、小波滤波器等,然后在这些低层次表达的基础上,通过线性或者非线性组合,来获得一个高层次的表达。此外,不仅图像存在这个规律,声音也是类似的。比如,研究人员从某个声音库中通过算法自动发现了20种基本的声音结构,其余的声音都可以由这20种基本结构来合成!
对于深度学习来说,其思想就是堆叠多个层,上一层的输出作为下一层的输入。深度神经网络由一个输入层,数个隐层,以及一个输出层构成。每层有若干个神经元,神经元之间有连接权重。每个神经元模拟人类的神经细胞,而结点之间的连接模拟神经细胞之间的连接。
当然了,以上这些原理都不是重点。我们只需要明白深度神经网络模拟了大脑的神经网络,上图的每个圈圈都类似大脑的一个神经元。通过采用专用芯片进行神经元的运算加速,相比于采用CPU这种通用运算器,可以大大提高神经网络的性能。根据“寒武纪”芯片的介绍,它可以一条指令完成多个神经元的并行处理。据此推断,Google的TPU很有可能也是这么设计的,也就是说,支持一条指令完成神经元的多次计算。
“寒武纪”专用处理器还有配套的指令集,叫Cambricon。我们知道,指令集乃是一个处理器架构的核心。知道了一款处理器实现了哪些指令,其实也就知道了这款处理器适合做什么,也大概知道了这款处理器的硬件设计。
Cambricon指令集的特点是单指令可以做完一次向量或矩阵运算,因此假如我们知道了深度学习的具体算法,那么其实也就知道了每个神经元可以规约为何种向量或矩阵运算,其实也就推断出了Cambricon的指令集。以此类推,如果我们知道了Google的深度学习算法,假设也是每条指令实现多个神经元相关的向量或矩阵运算,那么其实也能推断出TPU的指令集。这种假设应该是很有道理的,毕竟把一个神经元的计算打包成一条指令,是非常科学合理的专用加速器设计方案。
可以看到,整个系统连接了两块图像传感器,传感器采集到的图像通过Camera Serial Interfaces(CSI)接口连接到Video pipeline处理单元,进行Bayer重建、白平衡、降噪、压缩等等图像处理。
而ShiDianNao则在该系统中进行深度学习的模式识别,它内部实现了一个深度神经网络,经训练之后具有类似人类大脑一样的识别能力,可以从图像中识别出有一只猫,然后将识别出“猫”的信息通过GPIO/I2C接口输出给主机。整个系统用一款微处理器做控制,协调各个部件的运行。整个系统的数据存储,使用了256KB的SRAM,为了节省功耗,并提高性能,并没有使用DRAM。
下图给出了ShiDianNao处理器的深度神经网络的架构。根据文献介绍,NBin是输入神经元的缓存,NBout是输出神经元的缓存,SB是突触的缓存。核心部件是NFU(neural functional unit)单元,它负责实现一个神经元的功能。ALU是数值运算单元,IB(decoder forinstructions)是指令译码器。
之前讲过,深度神经网络加速芯片的最大特点就是单指令可以完成多个神经元的计算。因此神经元计算单元的实现,就是这款加速芯片的核心。根据文献介绍,每个NFU又是一个阵列,包含一堆PE单元。每个NFU单元实现了16bit x 16bit的定点整数乘法,相比于浮点乘法,这会损失一部分运算精度,但是这种损失可以忽略不计。
由此,我们就自上而下的看完了整个ShiDianNao的架构设计。由于Google并没有公布TPU的设计,中科院和寒武纪公司亦没有公开商用的寒武纪芯片的具体架构,因此我们只能大概根据中科院前些年与法国和瑞士的合作者在学术界公开发表的ShiDianNao架构进行推断(我们假设寒武纪商用芯片和前些年的学术工作ShiDianNao在架构上有一脉相承之处,毕竟中科院计算所陈天石团队的成员都是主要架构师或论文的第一作者)。
根据ShiDianNao架构的论文描述,结合之前的论述,我们可以大致得出以下猜测:
(1)Google的TPU很有可能也是单指令完成多个神经元的计算。
(2)知道了Google的机器学习算法,就可以推断出TPU支持的指令集。
(3)根据Google对TPU的描述“能够降低运算精度”,猜测TPU内部可能也是采用更低位宽的定点或浮点乘法,虽然具体位宽未知。
(4)乘累加单元搭建的向量或矩阵指令仍然是基础运算的核心。
(5)Google强调TPU有领先7年的性能功耗比(十倍以上的提升),据此猜测,TPU可能也没有使用DRAM做存储,可能仍然使用SRAM来存储数据。但从性能功耗比提升量级上看,还远未达到专用处理器的提升上限,因此很可能本质上采用的是数据位宽更低的类GPU架构,可能还是具有较强的通用性。
9. 如何评价Google发布的第二代深度学习系统TensorFlow
google头一次让人莫名地失望, 总觉得有些华而不实, 或搞了噱头但有意地抽掉关键功能
这里跟另一个我用的框架比较 deeplearning4j 及其分开的数值库 nd4j 也是支持张量的
1. 虽然已实作的网路种类很广, 但不少都是那种只要框架本身架构好些, 就挺容易自行扩展实现的, 对任何有自行编程扩展能力的人来说, 这不能算是个好处. 因为深度学习架构日新月异, 更重要的是实作新架构的弹性, 这点tensorflow目前略胜, 用Java还是有点痛苦的. 但若是用其他支持设计DSL的JVM语言如Scala或Groovy等, 也是大有可为. 已经有人用Scala或Groovy的DSL搞出一个Dataflow或甚至reactive的范式用于界面设计, 虽还没人用在深度学习架构上, 但这只是有没人要做的问题. python C++ 不支持DSL, 没办法自然地嵌入其他范式, 硬做成dataflow还是有些难看的
2. 暂时不支持分布式, 不知道要等到猴年马月才会释出, 说不定根本不会释出, 用了说不定就被Google服务给绑架了, 说绑架是情绪化些, 但这确实是Google常用的商业模式, 用所谓的开源软件搭配闭源且很关键的服务. 现在应用场景的数量级一个比一个大, 没分布式只能玩玩具. 但此时已经有两个用java写的框架支持分布式, 似无必要作此赌注. 其中一个是我没用过的SINGA, 及我用的 deeplearning4j
3. deeplearning4j 后端可抽换, 有 spark 后端支持分布式, 还有更轻量的 Akka 分布式后端, 另外Spark后端支持在每台主机上用Cuda加速, 甚至还貌似很容易的加上了有zookeeper跟这个我不知道是什麽的分布式后端, 若第1点讲的是语言界面前端的弹性, 这第3点就是讲后端的弹性了, 两端的可携性都强到一定境界. 若是Tensorflow也要增加新后端, 恐怕是到处都在定义 Protocolbuf, 这点 另 Tensorflow 相形见绌
4. Tensorflow把能在其他cpu架构隐蠢上跑当作卖点, 但很不巧 deeplearning4j 选上宽银了JVM, 不用什麽调整就能在手机上跑慎携宴, 只要你用不依赖原生函式库的纯Java后端像是JBlas