图4:Imagenet历年准确率变化
ImageNet挑战中使用深度学习方法的队伍,和使用GPU计算的参与者数量都在相应增加。2012年时,只有四位参赛队使用了GPU,而到了2014年,几乎所有参赛者都使用了GPU。这反映了从传统的计算机视觉方法到于深度学习的研究方式的完全的转变。
在2015年,ImageNet获奖作品ResNet 超过人类水平准确率(top-5错误率低于5%),将错误率降到3%以下。而目前的重点也不过多的放在准确率的提升上,而是放在其他一些更具挑战性的方向上,如对象检测和定位。这些成功显然是DNNs应用范围广泛的一个原因。
DNN的应用
目前DNN已经广泛应用到各个领域,下面列举一些DNN已经深远影响的领域,和一些未来可能产生巨大影响的领域。
图像和视频视频可能是大数据时代中最多的资源。它占据了当今互联网70%的流量。例如,世界范围内每天都会产生80亿小时的监控视频。计算机视觉需要从视频中抽取有意义的信息。DNN极大地提高了许多计算机视觉任务地准确性,例如图像分类,物体定位和检测,图像分割,和动作识别。
语音和语言DNN也极大地提高了语音识别和许多其他相关任务地准确率,例如机器翻译,自然语言处理和音频生成。
医药DNN在基因学中扮演了重要的角色,它探究了许多疾病的基因层面的原因,例如孤独症,癌症,和脊髓性肌萎缩。它同样也被应用在医学图像检测中,用来检测皮肤癌,脑癌以及乳腺癌等等。
游戏近期,许多困难的AI挑战包括游戏都被使用DNN的方法解决了。这些成功需要训练技术上的创新,以及强化学习(网络通过自身输出的结果进行反馈训练)。DNN在Atari(一种流行的家用游戏机)和围棋上,已经有了超过人类的准确度。
机器人DNN在一些机器人学的任务上同样取得了成功,例如机械臂抓取,运动规划,视觉导航,四旋翼飞行器稳定性控制以及无人驾驶汽车驾驶策略。
DNN目前已经有了很广泛的应用。我们将目光放向未来,DNN会在医药和机器人领域扮演更重要的角色。同时,也会在金融(例如交易,能源预测和风险评估),基础设施建设(例如结构安全性,交通控制),天气预报和事件检测中有更多的应用。
嵌入式与云
不同的DNN应用和过程(training vs inference)有不同的计算需求。尤其是训练过程,需要一个较大的数据集和大量计算资源来进行迭代,因此需要在云端进行计算。而推理过程可以在云端或者终端进行(例如物联网设备或移动终端)。
在DNN的许多应用中,需要推理过程在传感器附近。例如无人驾驶汽车或者无人机导航或者机器人,处理过程就必须在本地进行,因为延迟和传输的不稳定性造成的安全风险过高。然而对视频进行处理计算相当复杂。因此,能够高效分析视频的低成本硬件仍然是制约DNN应用的重要因素。能够执行DNN推理过程的嵌入式平台要有严格的能量消耗,计算和存储成本限制。这篇论文在推理过程中的计算需求方面进行了详细的介绍,感兴趣的读者可以参考文末连接进一步深入了解。
DNN组成部分与常见模型
DNN针对不同的应用有很多种形式,而流行的形式也在快速地进化,以改善准确性和高效性。所有DNN的输入都是一系列需要被网络分析的值。这些值可以是一幅图片的像素,音频波形的幅值采样值,或者一些表示系统或游戏状态的数值。
处理输入的网络主要有两种形式:前馈(Feed Forward)或者循环(Recurrent),如图2(c)所示。在前馈网络中,所有的计算都是对前面层输出的一系列运算。最后的运算生成网络的输出,例如一个图片包含某个物体的概率值,一段音频序列包含某个单词的概率值。在这样的DNN中,网络是无记忆性的,针对同一段输入,输出总是相同的,而与网络先前的输入是无关的。
相反,循环神经网络(RNN),拥有内部记忆,允许长期的依赖影响输出。其中LSTM(Long Short Term Memory network)是RNN中很流行的一个变体。在这些网络中,一些内部中间操作生成的值会被存储在网络中,并在后面的操作中与其他输入结合,共同作为输入。
如图2(d)左部分网络,DNN可以由全连接层组成(Fully-Connected Layer,也叫做多层感知机)。在全连接层中,输出激活是所有输入激活的加权和(前后两层的神经元是全部连接在一起的)。由于临近两层的所有神经元都是相互连接的,这会导致权重参数过多,需要大量的存储空间和计算资源。不过幸运的是,在许多应用中,我们可以通过设置某些激活之间连接的权值为0来减少参数的数量,而不影响准确性。这种叫做稀疏连接层(Sparsely-Connected Layer),如图2(d)右部分网络。
为了减少权重参数,提高计算效率,我们可以更进一步,限制对输出有贡献的权值的数量。如果输出值是输入中一个固定窗口大小的函数,就可以实现结构上的稀疏性。如果每个计算每个输出时的权重都是相同的,那么就可以进一步提升效率。权值共享(weight sharing)可以极大地降低权重对存储空间的需求。
一个最流行的窗口化,权值共享的网络就是卷积神经网络(convolution neural network)。如图5(a)所示,每个输出仅仅由一小个邻域的激活的加权和计算得到。每个滤波器拥有有限的感知野(receptive field),输入中超过一定距离的值的权重都被设置为零。同时,对于每个输出,同样的权值是被共享的,也就是说滤波器有空间不变性。
图5:卷积
DNN组成部分
卷积神经网络:如图6所示,由多个卷积层组成(CONV),每个卷积层对各自的输入进行高阶抽象,这种高阶抽象被称为特征图(feature map,fmap)。CNN可以通过非常深的层级实现极高的性能。卷积神经网络被广泛应用在图像理解,语音识别,游戏,以及机器人学等。图5(b)介绍了CNN卷积的过程,CNN中的每个卷积层主要由高维卷积构成。输入为一系列二维特征图(input feature map),特征图的个数被称为通道,这里有C个通道。卷积层输出的每个点都是所有通道卷积之和。卷积层输出的通道数取决于滤波器的个数,本例中有M个滤波器,因此输出特征图为M通道。
图6:卷积神经网络
非线性函数:在每个卷积或全连接计算之后,都会使用一个非线性激活函数。如图7所示,不同种类的非线性函数向DNN中引入非线性。起初DNN经常使用Sigmoid或tanh函数,目前ReLU和它的一些变种函数被证明可以更简单,更易训练,同时也能达到更高的准确性,因此变得越来越流行。
图7:常用非线性激活函数
池化(Pooling):池化可以使网络鲁棒性更强。通常池化都是不重叠的,这样能降低表示的维数,减小参数量。
图8:池化
标准化(Normalization):控制各层输入的分布可以极大的加速训练过程并提高准确度。常有的如批标准化(batch normalization)(如下公式),它更进一步的进行缩放和平移,其中γ和β为参数,需要在训练中学习。
常见DNN模型
LeNet:1989年第一个CNN方法,为了解决手写数字识别而设计的。
AlexNet:它在2012年赢得了ImageNet挑战,是第一个使用CNN方法赢得ImageNet的网络。它拥有5个卷积层和3个全连接层。
Overfeat:它与AlexNet结构很相似,同样拥有5个卷积层和3个全连接层,区别是Overfeat的滤波器数量更多,所以准确度略有提升。
VGG-16:网络深度大大加深,达到16层,其中包含13个卷积层和3个全连接层。为了平衡网络层数加深而导致的成本增加,一个大的滤波器被分解为多个小的滤波器,来减小参数数量,并具有相同的感知野。VGG有两个模型,还有一个VGG-19的模型,比VGG-16的Top-5错误率低0.1%。
图9:为了减少参数,为了使感知野大小不变,使用两个较小的滤波器代替大的滤波器
GoogLeNet:网络深度达到22层,同时引入了Inception模型,如图10所示。之前的模型通常是级联的,而Inception模型是并行连接的。可以看到,它使用了多种大小的滤波器对输入进行处理,这是为了能够在不同尺度上处理输入。22层网络包括了三个卷积层,接下来使9个inceptioin层(每层相当于两个卷积层),以及一个全连接层。
图10:Inception模型
ResNet:也叫做残差网络(Residual Net)。使用了残差连接使得网络变得更深(34层,或更多甚至千层)。它是ImageNet挑战中第一个top-5错误率低于人类的。当网络层次变得更深时,训练时的一个难点就是梯度消失(Vanishing Gradient)。由于沿着网络进行反向传播时,梯度会越来越小,导致对于很深的网络,最初几层网络的权重基本不会更新。残差网络引入了“短接”模型,包含了全等连接,使得梯度传播可以跳过卷积层,即使网络层数达到一千层仍可以训练。
图11:残差模型
DNN处理的硬件
由于DNN的流行,许多硬件平台都针对DNN处理的特性进行针对性的开发。无论是服务器级别的还是嵌入式的SoC硬件都在快速发展。因此,了解各种平台如何加速计算,是十分重要的。
CONV和FC层的基本组成都是乘加操作(Multiply-and-Accumulate,MAC),可以很容易的并行化。为了实现高性能,如图12所示,包括时间和空间的架构的经典模型经常被使用。时间架构(也称作SIMD或SIMT)主要出现在CPU或GPU中。它对大量ALU使用集中控制。这些ALU智能从存储器层次结构中获取数据,并且彼此不能通信数据。相比之下,空间架构使用数据流处理,即ALU形成处理链,使得它们能直接将数据从一个传递到另一个。每个ALU有自己的控制逻辑和本地内存,称为暂存器或注册文件。空间架构主要使用在为DNN专门设计的ASIC中。
图12:时间和空间架构
对于时间架构,可以使用核心中的计算转换(Computational Transform)来减少乘法的数量,以增加吞吐量(Throughput)。
对于加速硬件中使用的空间架构,使用存储器层次结构中的低成本内存,来增加数据重利用率,以降低能耗。
论文很详细的介绍了如何通过这两种方法改进时间和空间架构,以加速DNN运算的,感兴趣的读者可以阅读原论文深入了解:Efficient Processing of Deep Neural Networks: A Tutorial and Survey
作者:AI科技评论
出处:http://xilinx.eetrend.com/news/11284