前言
随着人工智能(AI)技术在各个行业的普及,将AI技术和嵌入式系统相结合,构建AI嵌入式系统成为当前技术热点之一。本书介绍AI领域多种机器学习算法在嵌入式系统上的底层实现和优化技术。现在很多机器学习算法基于海量存储和运算,对功耗、体积、计算能力和存储容量有较高要求,而不同领域的嵌入式系统受限于各自的应用需求,难以满足所有条件。目前在嵌入式系统中实现复杂机器学习算法有多条途径,包括基于通用GPU多处理器架构的方案、基于专用运算加速引擎的定制化方案,以及基于现有处理器对算法进行深度优化的方案等。这些技术方案各有优缺点,并且在不同领域得到了应用。基于GPU的通用多处理器架构的方案通用性强、算力高,但代价是硬件成本高、功耗大。基于专用运算加速引擎的定制化方案运算效率高,功耗可控,但运算结构相对固定,灵活性差。基于现有处理器对算法进行深度优化的方案成本低,不需要专用或者定制化硬件,通用性强,但代价是需要手动对各案例逐个进行优化,开发难度高。本书中关注的是基于现有的嵌入式处理器系统和架构,通过不同层次的优化实现机器学习算法。虽然书中所介绍的方法以通用嵌入式处理器为例,但也能够应用于GPU或者硬件加速引擎架构,比如基于变换域的快速卷积算法在GPU的底层运算库中得到应用,基于加减图的常数乘法运算能够方便地在芯片硬件设计中实现。
机器学习涉及多个不同领域的算法,其中包括基于统计学习的方法和基于神经网络的方法。基于统计学习的算法理论模型设计精巧,泛化性能好,运算量相对较低,容易在存储量和运算量受限的嵌入式系统中实现,但它依赖较强的概率假设,模型上的偏差限制了它在实际应用中的性能。近年来,随着GPU算力的增加以及海量标注数据的积累,基于神经网络的“灰盒”式机器学习算法得到应用,神经网络训练使用反向梯度传播算法,能够“自动”地从训练数据中学到特征提取方法,摆脱人工特征设计的效率约束。很多现有神经网络性能优越,但庞大的参数存储量限制了其在嵌入式系统上的实现。近年来的研究发现,很多神经网络架构中存在大量冗余的运算和参数,通过运算的简化和架构裁剪能够大大降低神经网络对计算性能和内存的需求,使得在嵌入式系统上实现它成为可能。本书中讨论的内容覆盖基于统计学习和基于神经网络的机器学习算法在嵌入式系统上的实现,通过算法和例程介绍具体的优化手段。
书中给出了通过详细的手工优化步骤以说明嵌入式机器学习算法的优化过程,但随着机器学习算法复杂度的增加和规模的扩大,手动优化效率显得较低。对部分优化过程,我们给出了软件辅助优化的介绍,比如通过软件自动搜索加减图实现多常数乘法,使用软件控制神经网络训练过程,“消除”网络参数和架构上的冗余,以及通过软件自动从训练得到的模型中提取参数并自动生成C语言源代码。读者可以基于这些代码进一步拓展,构建自动化的嵌入式机器学习算法实现工具。在撰写本书期间,出现了多种嵌入式机器学习算法框架和算法部署工具,大大提高了机器学习算法在嵌入式系统中的部署效率。从长远看,使用更高层的机器学习算法来训练和优化当前机器学习算法会是研究趋势。
书中介绍的部分底层算法代码以Python语言形式给出,这考虑了Python语言的表达能力和程序简洁性,在实际应用中需要读者在理解算法原理的基础上改成C程序实现。另外,书中列举的机器学习问题集中在基本的手写识别数据或者简单图像分类问题上,选择这些机器学习问题,是考虑到它们的训练速度快,模型构建代码量小,能够在有限篇幅内解释清楚,但所介绍的方法能够应用于更复杂的机器学习算法和模型。
机器学习涉及建模、训练和推理这几个部分,本书的重点在于嵌入式系统中的机器学习算法推理过程的实现,对机器学习本身的理论模型介绍相对较少,因此需要读者在阅读之前了解基本的机器学习算法知识。另外,要掌握本书介绍的近似算法,需要读者提前了解一些线性代数的知识。
本书的撰写工作得到了Arm中国大学计划的帮助和支持,在此表示感谢!
应忍冬
2021年6月于上海