简明教程.AI人工智能

什么是“人工智能(Artificial Intelligence)”

人工智能简称AI。上世纪40年代,人工智能的基本框架就已经存在。人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。

人工神经网络( Artifical Neural Network)

神经网络没有一个严格的正式定义。它的基本特点,是试图模仿大脑的神经元之间传递,处理信息的模式。深度学习又叫深度神经网络(DNN:Deep Neural Networks),从之前的人工神经网络(ANN:Artificial Neural Networks)模型发展而来。每个神经网络通常包括输入层、隐含层、输出层。

CNN类型最热门的几种神经网络(CNN model)

Lenet,1986年

Alexnet,2012年

GoogleNet,2014年

VGG,2014年

Deep Residual Learning,2015年

SqueezeNet,最新由UC Berkeley和Stanford研究人员一起完成的SqueezeNet网络结构和设计思想。

你一定好奇都长什么样?大概通常画成这个样子(Alexnet)

深度学习框架

深度学习框架的出现降低了入门的门槛,你不需要从复杂的神经网络开始编代码,你可以依据需要,使用已有的模型,模型的参数你自己训练得到,你也可以在已有模型的基础上增加自己的layer,或者是在顶端选择自己需要的分类器。主流的深度学习框架有:MXNet, Caffe, TensorFlow, Torch, Theano

这里有一篇文章:http://blog.csdn.net/myarrow/article/details/52064608

大部分深度学习框架都包含以下五个核心组件:

1. 张量(Tensor)

将各种各样的数据抽象成张量表示,然后再输入神经网络模型进行后续处理。

2. 基于张量的各种操作

大部分的张量操作都是基于类实现的(而且是抽象类),而并不是函数(这一点可能要归功于大部分的深度学习框架都是用面向对象的编程语言实现的)。可以是简单的矩阵乘法,也可以是卷积、池化和LSTM等稍复杂的运算。

3. 计算图(Computation Graph)

有了张量和基于张量的各种操作之后,下一步就是将各种操作整合起来,输出我们需要的结果。将计算图作为前后端之间的中间表示(Intermediate Representations)可以带来良好的交互性,开发者可以将Tensor对象作为数据结构,函数/方法作为操作类型,将特定的操作类型应用于特定的数据结构,从而定义出类似MATLAB的强大建模语言。

4. 自动微分(Automatic Differentiation)工具

计算图带来的另一个好处是让模型训练阶段的梯度计算变得模块化且更为便捷,也就是自动微分法。

5. BLAS、cuBLAS、cuDNN等拓展包

现在,通过上述所有模块,我们已经可以搭建一个全功能的深度学习框架:将待处理数据转换为张量,针对张量施加各种需要的操作,通过自动微分对模型展开训练,然后得到输出结果开始测试。这时还缺什么呢?答案是运算效率。一般的BLAS库只是针对普通的CPU场景进行了优化,但目前大部分的深度学习模型都已经开始采用并行GPU的运算模式,因此利用诸如NVIDIA推出的针对GPU优化的cuBLAS和cuDNN等更据针对性的库可能是更好的选择。

参见该文:

https://www.leiphone.com/news/201701/DZeAwe2qgx8JhbU8.html

深度学习算法分“训练”和“推断”两个过程。

“开学了”--用来形容神经网络的训练比较有趣,一个没有通过训练的神经网络,是不知道善(对)恶(错),所以我们要用大量的数据去训练(Traning),训练的结果就是使他获得推断(Inference)的能力,就是知对错,越多的训练数据使的他的推断(Inference)的结果持续进化。一般来说,云端人工智能硬件负责“训练+推断”,终端人工智能硬件只负责“推断”。

计算

神经网络分为前向计算(包括矩阵相乘、卷积、循环层)和后向更新(主要是梯度运算)两类,两者都包含大量并行运算,谁能单此大任呢?

CPU,这是十项全能选手,什么都可以干。但因为CPU具备的是通用计算能力,针对大量的神经网络张量运算效率不高,内存带宽占用;

GPU(GraphicsProcessingUnit)通常用做图形处理器,之前是专门用作图像运算工作的微处理器,所以GPU更擅长执行复杂的数学和几何计算(尤其是并行运算),刚好与包含大量的并行运算的人工智能深度学习算法相匹配,因此在人工智能时代刚好被赋予了新的使命,成为人工智能硬件首选,在云端和终端各种场景均率先落地。

FPGA(Field-ProgrammableGateArray)是“变形金刚”,算法未定型前的阶段性最佳选择。用户可根据自身需求对FPGA进行重复编程,编程完毕后功能相当于ASIC(专用集成电路),具备效率高、功耗低的特点,但成本会偏高。在AI算法尚处于蓬勃发展、快速迭代的今天,FPGA是一种很不错的选择。

ASIC(ApplicationSpecificIntegratedCircuit)即集成电路/SoC等名号,是“专精职业选手”,专一决定某类问题,所以效率高,功耗低的特点,是AI芯片未来发展的必然趋势。近年针对AI涌现的类似TPU、NPU、VPU、BPU等令人眼花缭乱的各种芯片,本质上都属于ASIC芯片。但ASIC存在开发周期较长、灵活性较低、在人工智能产品落地场景不明确的情况下,很少见这类芯片。

贴士:比特币发展的早期阶段,大家都是用电脑(CPU)装软件来挖矿,谁快谁就能挖到第一桶金;后来发展到利用显卡来做运算(GPU)(一时显卡价格暴涨);同时具有研发能力的采用FPGA来做,速度、成本和功耗比用显卡来做要划得来;后来大家发现挖出来的比特币价格都不够花电费的,需要更快的运算速度和更低的功耗,随之专门设计挖矿的ASIC芯片出来了。

详情可以看看这几篇文章:http://info.ec.hc360.com/2017/10/181830917591.shtml

文尾彩蛋

Google TPU让“脉动阵列”(systolic array)这项“古老”的技术又回到大家的视野当中。首先,图中上半部分是传统的计算系统的模型。一个处理单元(PE)从存储器(memory)读取数据,进行处理,然后再写回到存储器。这个系统的最大问题是:数据存取的速度往往大大低于数据处理的速度。因此,整个系统的处理能力(MOPS,每秒完成的操作)很大程度受限于访存的能力。这个问题也是多年来计算机体系结构研究的重要课题之一,可以说是推动处理器和存储器设计的一大动力。而脉动架构用了一个很简单的方法:让数据尽量在处理单元中多流动一会儿。

正如上图的下半部分所描述的,第一个数据首先进入第一个PE,经过处理以后被传递到下一个PE,同时第二个数据进入第一个PE。以此类推,当第一个数据到达最后一个PE,它已经被处理了多次。所以,脉动架构实际上是多次重用了输入数据。因此,它可以在消耗较小的memory带宽的情况下实现较高的运算吞吐率。当然,脉动架构还有其它一些好处,比如模块化的设计容易扩展,简单和规则的数据和控制流程,使用简单并且均匀的单元(cell),避免了全局广播和扇入(fan-in),以及快速的响应时间(可能?)等等。

脉动阵列

Google TPU的框图

TPU处理单元

这~~~都是TPU

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171212G0N51C00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券