早期的机器学习以搜索为基础,主要依靠进行过一定优化的暴力方法。但是随着机器学习逐渐成熟,它开始专注于加速技术已经很成熟的统计方法和优化问题。同时深度学习的问世更是带来原本可能无法实现的优化方法。本文将介绍现代机器学习如何找到兼顾规模和速度的新方法。 AI领域的转变 在本系列的第1部分中,我们探讨了AI的一些历史,以及从Lisp到现代编程语言以及深度学习等新型计算智能范式的历程。我们还讨论了人工智能的早期应用,它们依赖于经过优化的搜索形式、在海量数据集上进行训练的现代神经网络架构,同时解决了十年前还被认为不可能的难题。然而目前仍有两大难题有待解决,即:如何进一步加速这些应用,以及将它们限制在智能手机这样的功耗优化环境中。 今天,深度学习成为了多数加速技术的重点研究对象。深度学习是一种神经网络架构,它依赖于多层神经网络,其中的每一层都可以支持不同的功能以进行特征检测。这些深层神经网络依赖于可方便运用并行计算的矢量运算, 并为神经网络层分布式计算以及同层诸多神经元并行计算创造了条件。 通过GPU加速机器学习 图形处理单元(GPU)最初并不是用于加速深度学习应用。GPU是一种特殊的设备,用于加速输出到显示设备的帧缓冲区(内存)的构建。它将渲染后的图像存入帧缓冲区,而不是依靠处理器来完成。GPU由数以千计的独立内核组成,它们并行运行并执行矢量运算等特定类型的计算。尽管最初GPU专为视频应用而设计,但人们发现它们也可以加速矩阵乘法等科学计算。 开发人员既可以借助于GPU供应商提供的API将GPU处理功能集成到应用中,也可以采用适用于诸多不同环境的标准软件包方式。R编程语言和编程环境包含与GPU协同工作来加快处理速度的软件包,例如gputools、gmatrix和gpuR。GPU也可以通过numba软件包或Theano等各种库借助于Python进行编程。 通过这些软件包,任何有意将GPU加速应用于机器学习的人都可以达成愿望。但是工程师们还在研究更专门的方法。2019年,英特尔®以20亿美元的价格收购了Habana Labs, 一家致力于为服务器中的机器学习加速器开发定制芯片的公司。此外,英特尔还于2017年以150亿美元收购了自动驾驶芯片技术企业Mobileye。 定制芯片和指令 除了服务器和台式机中的GPU加速之外,用于机器学习的加速器正在试图超越传统平台,进军功耗受限的嵌入式设备和智能手机。这些加速器形式多样,包括U盘、API、智能手机神经网络加速器以及用于深度学习加速的矢量指令等。 适用于智能手机的深度学习 深度学习工具包已经从PC端延伸到智能手机,可为存在更多限制的网络提供支持。TensorFlow Lite和Core ML等框架已经部署在用于机器学习应用的移动设备上。Apple®最近发布了A12 Bionic芯片,这款芯片包括一个8核神经网络引擎,用于开发更加节能的神经网络应用, 从而扩展Apple智能手机上的深度学习应用。 Google发布了适用于Android® 8.1并具有机器学习功能的神经网络API (NNAPI), 目前已应用于Google Lens自然语言处理和图像识别背景下的Google Assistant。NNAPI与其他深度学习工具包相似,但它是针对Android智能手机环境及其资源限制而构建的。 深度学习USB 英特尔发布了其新版神经计算棒,以U盘的形式加速深度学习应用。TensorFlow、Caffe和PyTorch等众多机器学习框架都可以使用它。当没有GPU可用时,这将是一个不错的选择,同时还可以快速构建深度学习应用原型。 深度学习指令 最后,在机器学习计算从CPU转移到GPU的同时,英特尔使用新的指令优化了其Xeon指令集,来加速深度学习。这些被称为AVX-512扩展的新指令(所谓的矢量神经网络指令或VNNi)提高了卷积神经网络运算的处理量。 总结 GPU在机器学习中的应用实现了在众多应用中构建和部署大规模深度神经网络的能力。机器学习框架使构建深度学习应用变得简单。智能手机供应商也不甘人后,为受到诸多限制的应用集成了高能效的神经网络加速器(以及用于定制应用的API)。现在市面上还有其他可转移到USB硬件上的加速器,许多新的初创公司也在加大加速器领域的投入,为未来机器学习应用做准备。 文章 作者简介:M. Tim Jones是一位经验丰富的嵌入式固件架构师,拥有超过30年的架构师和开发经验,撰写过有关软件和固件开发的多本数据和多篇文章,其工程背景涵盖从地球同步航天器的内核开发到嵌入式系统的架构和协议开发等诸多领域。