Deep Learning浅析

作者:易灵思 陈新

       随着数字时代的到来,数据的增长是爆发式的,2021年全球数据容量达到了59Zettabytes(1Zettabytes=2的70次方字节)。并且每年还在以26%的复合增长率加速!数据的爆炸式增长、更多更好的算法和更强大的处理器的推出,推动了机器学习、深度学习和人工智能的能力和应用的巨大增长。

       从消费设备中的人机交互,到更高效的企业运作,再到医疗保健、能源、零售和交通领域的创新,人工智能应用几乎遍及我们生活中的方方面面。特别是深度学习网络已被部署在智能手机语音识别和自动驾驶的所有领域。

        什么是机器学习,它与更一般的人工智能领域有何关联呢?

       首先人工智能只是描述了一种无需明确的计算机编程即可感知、学习、推理、行动和适应现实世界的机器。而机器学习是人工智能的一个子类别,其中计算机使用学习算法通过提供训练数据来构建模型。

       深度学习是机器学习的一个子类别,其中设计了多层神经元以能够学习复杂的表示。在深度学习中,可以有不同类型的神经网络。其中循环神经网络是具有反馈的神经网络,通常用于语音和文本的处理。卷积神经网络或CNN是使用卷积运算作为层间的前馈网络。CNN对分类、识别或定位等计算机视觉任务特别有效。

1.png

        那么什么是机器学习呢?

       从下图我们可以轻松地识别为。但是你是否想过,有人详细的告诉过你狗的特征吗?实际是你可能在年幼时曾多次听别人讲过什么是狗什么不是狗的例子,直到你能够在大脑中建立和完善什么是狗,哦原来看起来像这样,你就可以破译和识别一只狗。这就是机器学习的真正意义所在。

2.png

       如果你想用一个计算机程序来检测特定的特征来识别它是一只狗,这将是非常困难的,因为这条狗的许多特征与其他哺乳动物共有。换个思路,如果我们设置一个神经网络并简单地为它提供数十万甚至数百万张图像以及图像中对对象类型的特征标签,那么该算法将能够自我配置,因此它将能够识别不同的物体。这就是机器学习。如果我们用多层神经网络来做这件事,那么这就是深度学习。
       要详细了解机器学习,让我们从perceptron开始讨论。在机器学习中,perceptron本质上是一个非常简单的神经元二元模型。它是在1950年代和60年代开发的。它实际上是一个给定输入的二元分类器,输出是0或1。可以有任意数量的输入和单个输出,用于确定输入(通常由数字向量表示)是否属于某个特定类别。

3.png

4.png

      这是perceptron的数学表示。perceptron由权重和偏差组成。perceptron的输出只是所有输入的总和乘以相应的权重,然后添加到偏差中。如果结果小于或等于0,则输出为0,否则输出为1,表示perceptron已激活。权重将决定特定输入有多大影响,偏差或阈值可以确定神经元激发或激活的可能性。
      举个例子假设我们要决定是否出去吃饭。我们可以有3个输入来指示:我们是否饿了,是否是特殊日子,以及我是否可以报销餐费。

5.png

       如果输出大于0,我们就出去,否则我们留在里面。
       对于第一个输入我饿了,所以我应该吃东西,这不是一个决定外出就餐的非常重要的问题,所以我们权重算1。另一方面,“这是一个特殊的日子吗”是一个更重要的因素,所以我们权重算3。对于最后一个输入,“如果餐费可以报销”,这对我们的决定有非常大的影响,因此我们权重算6。我们将偏差设置为-2,这个偏差将使这个perceptron很有可能被触发。

      现在,如果输入为1、1和0,那么在乘以权重系数后,我们得到1、3和0,相加值为4,带上偏差,我们的最终输出为2,因此我们决定出去。

       虽然perceptron非常简单,但它有一些严重的缺陷。例如,因为它是一个线性函数,输入的微小变化可能会对输出产生重大影响。此外,如果perceptron有多层,它实际上相当于一个更复杂的单层网络,因为层可以合并。为了避免这种情况,我们经常对神经元应用非线性激活函数,例如sigmoid函数。Sigmoid神经元将sigmoid函数

1637306885(1).jpg

应用于我们神经元的输出,它是perceptron的稍微复杂的版本。最终结果是一条平滑的曲线,这使得它不易受输入变化的影响,并且更容易训练网络以找到合适的权重和偏差。

6.png

     然而现代人工神经网络由许多相互连接的神经元组成,每个神经元后跟非线性激活函数和可能的其他层。对按层组织的数据进行处理。有一个输入层,后面是许多隐藏层,然后是输出层。层层神经网络的连接,一层层的输入、输出、叠加,构成了一个复杂的、多隐藏性的深度神经网络。

7.png

       在部署神经网络以供使用之前,我们需要对其进行训练。训练是利用算法根据大量训练数据寻找合适的权重和偏差的过程。通常首先选择一个起始网络拓扑,例如ResNet或GoogleNet或其它某个版本。然后使用DeepLearning框架,例如Caffe或TensorFlow,对网络进行修改以实现改进。训练网络需要一个大型的数据库,然后使用训练数据来训练网络的权重与偏差。当然训练的权重与偏差也是需要实时的去更新,以提升部署网络的健硕性。一旦有了训练有素的神经网络,你就可以将它运用在你需要的神经模型中进行实战。
       现在大家常用的图像识别常用库有:MNIST是手写数字的数据库可用于数字的手写识别;CIFAR是一个32x32彩色图像的数据库;imagenet这是一个224x224彩色图像的数据库,每年imagenet大型视觉识别挑战赛就是围绕这个数据集展开的。
     那现在主要有哪些深度学习网络可供大家使用呢?例如GoogLeNet、VGG、Resnet、Alexnet、MobileNet、SqueezeNet等。当然还有一些流行的深度学习框架,例如Caffe、Caffe2、TensorFlow、Torch、PyTorch等。
AlexNet是Alex和Hinton参加2012年imagenet比赛时提出的卷积网络框架,夺得了当年ImageNet LSVRC的冠军。这个神经网络有6000万参数和650000个神经元,包含5个卷积层(某些卷积层后面带有池化层)和3个全连接层,最后是一个1000维的softmax。网络拓扑图如下:(网络的输入是224x224x3的图像,深度为3表示RGB颜色通道。网络的输出是1x1x1000矩阵,描述了1000类对象的概率)

8.png

       AlexNet的前5层卷积层很好的将数据计算量和权重量压缩了,不断的减少权重量以达到节省计算次数。如果8层都是全连接,那么前两层的数据量就来到了恐怖的430亿权重和计算!在AlexNet中,第一个卷积层使用96个11x11x3过滤器,这将显着减少计算数量至9700万次,权重数量减少至34848。
       详细的神经卷积网络的搭建以后向大家分享。从上面我们可以清楚的看到深度学习的计算强度之高,实现CNN推理需要很高的吞吐量,需要很多浮点乘法和累加运算用于过滤数据,需要高带宽本地存储。针对不同网络拓扑、精度和问题需要极好的灵活性。而且巨大的运算对功耗也有极大的要求。
      现在深度学习上FPGA具有很大的优势,FPGA有丰富的高性能DSP,高带宽的吞吐,以及可编程性。可以很好的运用现在的深度学习场景并且可以快速部署。目前国产易灵思FPGA低功耗、高性能的硬件优势,结合创新的EVSOC框架,可以帮助客户快速部署边缘AI计算应用。16nm钛金系列FPGA可以提供相当于2~3TOPS的算力水平,支持硬核LPDDR4,速率3733Mbps,带宽高达100Gbps,支持2.5GbpsMIPID-PHY硬核,是图像处理与深度学习的绝佳选择。

9.png

来源:易灵思官微

最新文章