一个典型机器学习的推论流程可以分为两步(如图 2):特征提取和分类。有些方法,比如深度神经网络(DNN)就模糊了步骤之间的差别。
图 2:推理流程 A. 特征提取 特征提取是将原始数据转化为对给定任务有意义的输入。传统意义上,特征提取是通过该领域的专家手工进行标注而设计的。例如,计算机视觉中的对象识别就是根据观察到人类视觉是对图像边缘(如梯度)具有敏感性而设计的。因此,许多众所周知的计算机视觉算法 Histogram of Oriented Gradients (HOG) 和 Scale Invariant Feature Transform (SIFT) 使用的就是基于图像梯度的特征。设计这些特征的挑战就是保证他们在过曝或噪点的情况下保持鲁棒性。 B. 分类算法 特征提取的输出由向量表示,并且用分类器将这个过程映射到一个得分上。根据应用,分类权重可以和阀值比较来决定对象是否是当前的,或者也可以和其他得分相比较决定对象的分类。 分类算法技术上通常使用支持向量机(SVM)和 Softmax 回归等线性方法,还有核函数支持向量机(kernel-SVM)和 Adaboost 等非线性方法。 C. 深度神经网络(DNN) 深度神经网络不需要使用手工标注的特征,它能从数据中直接学习到这些特征,这一点和分类器中的权重分配很相似,这样整个系统就是从端到端训练。这种自动学习特征的方式在机器学习中很流行,我们称它为深度神经网络(DNN),也就是常说的深度学习。在很多任务上,深度神经网络通过将输入数据映射到高维空间,这种方式在很多任务上实现的精度要比手工提取的特征精确得多,然而,代价就是高度计算复杂性。 现存有许多深度神经网络架构(如卷积神经网络和循环神经网络等)。对于计算机视觉的应用,深度神经网络由多个卷积层(CONV)组成(如图 3)。每层将输入数据抽象到更高一层,称之为特征映射,这种更高层的抽象被提取以保留重要而独特的信息。现代深度神经网络能通过采用非常深的层级来实现优越的性能。
图 3:深度神经网络由多个卷积层组成,后面跟着全连接层
图.4 DNN 中某个卷积的计算 表 1 比较了现代深度神经网络和 20 世纪 90 年代流行的神经网络的层级数(深度)、滤波器的权重数量、操作数量(如 MACs)。如今的深度神经网络在计算和储存上都领先几个数量级
表 1:流行的 CNN 的总结 [21, 22, 25, 27, 28]. 基于 ImageNet top-5error 的精度测量 [19] D. 任务的复杂性 VS 难度 当比较不同的机器学习方法时,重要的是考虑任务的难度。例如,使用 MNIST 数据集进行手写数字分类的任务就比使用 ImageNet 数据集进行 1000 类物品分类简单得多。所以我们预期分类器或网络的大小(如权重数量)和 MACs 的数量在更难的任务中要多一些,也因此需要更多的能。例如,LeNet-5 被设计用来进行数字分类,而 AlexNet、VGG-16,GoogLeNet 和 ResNet 被设计用于进行 1000 类图像的分类任务。 四、挑战 嵌入式机器学习的关键指标是精确度、能耗、吞吐量/延迟性以及成本。 机器学习算法的精确性要在充足的大型数据组上进行测量。有许多广泛使用、公开使用的数据组可供研究人员使用(比如,ImageNet)。 可编程性很重要,因为环境或应用变了后,权重也要更新。在 DNN 的案例中,处理器必须能够支持层数不同、滤波器以及通道大小不一的不同网络。 可编程性性的需求会增加数据计算和数据传送。更高的维度会增加生成的数据量,而且可编程性意味着需要读取并保存权重。这就对能效提出了挑战,因为数据传输要比计算更耗费成本。本文中,我们会讨论减少数据传输以最小化能耗的不同方法。 吞吐量取决于计算量,它也会随着数据维度的增加而增加。本文中,我们会讨论变换数据以减少所需操作数量的各种办法。 成本在于芯片上所需的存储量。本文中,我们会讨论减少存储成本的各种办法,在芯片面积缩减的同时维持低芯片外存储带宽。 (责任编辑:本港台直播) |