適讀人群:
本書可作為嵌入式領域工程技術人員、機器學習算法的底層算法軟件開發(fā)人員的參考書,也可作為計算機、電子信息、自動控制等相關專業(yè)高年級本科學生的參考教材。
配套PPT 代碼 數(shù)據(jù)獲取方式:
1、微信關注華章計算機
2、在后臺回復關鍵詞:69325
一、本書面向人工智能的嵌入式應用,涵蓋了基于運算量,內存,功耗等多維度的機器學習算法優(yōu)化理論與技術。從算法底層單元到機器學習算法訓練-推理聯(lián)合優(yōu)化及自動優(yōu)化部署算法等方面進行闡述,并結合通用嵌入式處理器進行了驗證。本書集機器學習算法優(yōu)化理論和應用實踐為一體,為實現(xiàn)高效的人工智能嵌入式系統(tǒng)提供了基礎理論與方法。
二、本書作者常年從事嵌入式教學與研究,書中的內容凝練了他們長期從事人工智能算法研究與系統(tǒng)設計的研究與經驗,為人工智能應用普及提供了詳實的學習和研究指南。
三、本書配套的PPT、源代碼和訓練數(shù)據(jù)均可下載并持續(xù)更新。
隨著人工智能(AI)技術在各個行業(yè)的普及,將AI技術和嵌入式系統(tǒng)相結合,構建AI嵌入式系統(tǒng)成為當前技術熱點之一。本書介紹AI領域多種機器學習算法在嵌入式系統(tǒng)上的底層實現(xiàn)和優(yōu)化技術,F(xiàn)在很多機器學習算法基于海量存儲和運算,對功耗、體積、計算能力和存儲容量有較高要求,而不同領域的嵌入式系統(tǒng)受限于各自的應用需求,難以滿足所有條件。目前在嵌入式系統(tǒng)中實現(xiàn)復雜機器學習算法有多條途徑,包括基于通用GPU多處理器架構的方案、基于專用運算加速引擎的定制化方案,以及基于現(xiàn)有處理器對算法進行深度優(yōu)化的方案等。這些技術方案各有優(yōu)缺點,并且在不同領域得到了應用;贕PU的通用多處理器架構的方案通用性強、算力高,但代價是硬件成本高、功耗大;趯S眠\算加速引擎的定制化方案運算效率高,功耗可控,但運算結構相對固定,靈活性差;诂F(xiàn)有處理器對算法進行深度優(yōu)化的方案成本低,不需要專用或者定制化硬件,通用性強,但代價是需要手動對各案例逐個進行優(yōu)化,開發(fā)難度高。本書中關注的是基于現(xiàn)有的嵌入式處理器系統(tǒng)和架構,通過不同層次的優(yōu)化實現(xiàn)機器學習算法。雖然書中所介紹的方法以通用嵌入式處理器為例,但也能夠應用于GPU或者硬件加速引擎架構,比如基于變換域的快速卷積算法在GPU的底層運算庫中得到應用,基于加減圖的常數(shù)乘法運算能夠方便地在芯片硬件設計中實現(xiàn)。
機器學習涉及多個不同領域的算法,其中包括基于統(tǒng)計學習的方法和基于神經網絡的方法。基于統(tǒng)計學習的算法理論模型設計精巧,泛化性能好,運算量相對較低,容易在存儲量和運算量受限的嵌入式系統(tǒng)中實現(xiàn),但它依賴較強的概率假設,模型上的偏差限制了它在實際應用中的性能。近年來,隨著GPU算力的增加以及海量標注數(shù)據(jù)的積累,基于神經網絡的灰盒式機器學習算法得到應用,神經網絡訓練使用反向梯度傳播算法,能夠自動地從訓練數(shù)據(jù)中學到特征提取方法,擺脫人工特征設計的效率約束。很多現(xiàn)有神經網絡性能優(yōu)越,但龐大的參數(shù)存儲量限制了其在嵌入式系統(tǒng)上的實現(xiàn)。近年來的研究發(fā)現(xiàn),很多神經網絡架構中存在大量冗余的運算和參數(shù),通過運算的簡化和架構裁剪能夠大大降低神經網絡對計算性能和內存的需求,使得在嵌入式系統(tǒng)上實現(xiàn)它成為可能。本書中討論的內容覆蓋基于統(tǒng)計學習和基于神經網絡的機器學習算法在嵌入式系統(tǒng)上的實現(xiàn),通過算法和例程介紹具體的優(yōu)化手段。
書中給出了通過詳細的手工優(yōu)化步驟以說明嵌入式機器學習算法的優(yōu)化過程,但隨著機器學習算法復雜度的增加和規(guī)模的擴大,手動優(yōu)化效率顯得較低。對部分優(yōu)化過程,我們給出了軟件輔助優(yōu)化的介紹,比如通過軟件自動搜索加減圖實現(xiàn)多常數(shù)乘法,使用軟件控制神經網絡訓練過程,消除網絡參數(shù)和架構上的冗余,以及通過軟件自動從訓練得到的模型中提取參數(shù)并自動生成C語言源代碼。讀者可以基于這些代碼進一步拓展,構建自動化的嵌入式機器學習算法實現(xiàn)工具。在撰寫本書期間,出現(xiàn)了多種嵌入式機器學習算法框架和算法部署工具,大大提高了機器學習算法在嵌入式系統(tǒng)中的部署效率。從長遠看,使用更高層的機器學習算法來訓練和優(yōu)化當前機器學習算法會是研究趨勢。
書中介紹的部分底層算法代碼以Python語言形式給出,這考慮了Python語言的表達能力和程序簡潔性,在實際應用中需要讀者在理解算法原理的基礎上改成C程序實現(xiàn)。另外,書中列舉的機器學習問題集中在基本的手寫識別數(shù)據(jù)或者簡單圖像分類問題上,選擇這些機器學習問題,是考慮到它們的訓練速度快,模型構建代碼量小,能夠在有限篇幅內解釋清楚,但所介紹的方法能夠應用于更復雜的機器學習算法和模型。
機器學習涉及建模、訓練和推理這幾個部分,本書的重點在于嵌入式系統(tǒng)中的機器學習算法推理過程的實現(xiàn),對機器學習本身的理論模型介紹相對較少,因此需要讀者在閱讀之前了解基本的機器學習算法知識。另外,要掌握本書介紹的近似算法,需要讀者提前了解一些線性代數(shù)的知識。
本書的撰寫工作得到了Arm中國大學計劃的幫助和支持,在此表示感謝!
應忍冬
2021年6月于上海
前言
第1章 緒論 1
1.1 AI嵌入式系統(tǒng)的概念與特點 1
1.2 機器學習在嵌入式系統(tǒng)中的實現(xiàn) 4
1.3 本書內容概述 6
第2章 嵌入式軟件編程模式和優(yōu)化 8
2.1 嵌入式軟件編程模式 8
2.1.1 基于周期調用的運行模式 9
2.1.2 基于中斷的前后臺運行模式 12
2.1.3 基于事件隊列的運行模式 14
2.1.4 帶時間信息的事件隊列運行模式 16
2.1.5 計算圖運行模式 17
2.2 通用軟件優(yōu)化方法 20
2.2.1 循環(huán)結構優(yōu)化 21
2.2.2 時間空間平衡 23
2.2.3 運算精度和性能平衡 25
2.2.4 底層運算的快速實現(xiàn)算法 28
2.2.5 內存使用優(yōu)化 30
2.3 小結 34
參考文獻 34
第3章 機器學習算法概述 35
3.1 高斯樸素貝葉斯分類器 35
3.1.1 原理概述 35
3.1.2 模型訓練和推理 36
3.2 感知器 38
3.2.1 原理概述 38
3.2.2 模型訓練和推理 39
3.3 SVM分類器 40
3.3.1 原理概述 40
3.3.2 模型訓練和推理 42
3.4 決策樹 43
3.4.1 原理概述 43
3.4.2 模型訓練和推理 44
3.4.3 決策樹分類器的代碼實現(xiàn) 45
3.5 線性數(shù)據(jù)降維 47
3.5.1 原理概述 47
3.5.2 模型訓練和推理 47
3.6 神經網絡 48
3.6.1 原理概述 48
3.6.2 模型訓練和推理 50
3.7 小結 54
參考文獻 54
第4章 數(shù)值的表示和運算 55
4.1 浮點數(shù) 55
4.1.1 單精度和雙精度浮點數(shù) 55
4.1.2 16位浮點數(shù) 57
4.2 定點數(shù) 61
4.2.1 定點數(shù)的二進制表示形式 61
4.2.2 定點數(shù)的運算 64
4.2.3 給定算法的定點化方法 71
4.3 仿射映射量化 78
4.3.1 量化數(shù)據(jù)表示 78
4.3.2 量化數(shù)據(jù)運算 83
4.3.3 基于量化數(shù)據(jù)的矩陣運算 84
4.4 常數(shù)整數(shù)乘法優(yōu)化 88
4.4.1 基于正則有符號數(shù)的常數(shù)整數(shù)乘法優(yōu)化 89
4.4.2 基于運算圖的常數(shù)整數(shù)乘法優(yōu)化 92
4.4.3 多常數(shù)整數(shù)乘法優(yōu)化 97
4.4.4 浮點數(shù)和整數(shù)常數(shù)乘法優(yōu)化 101
4.4.5 常數(shù)整數(shù)乘法優(yōu)化的應用 103
4.5 小結 108
參考文獻 108
第5章 卷積運算優(yōu)化 109
5.1 卷積運算的定義 109
5.1.1 一維線性卷積 110
5.1.2 一維循環(huán)卷積 111
5.1.3 二維線性卷積 112
5.1.4 二維循環(huán)卷積 113
5.2 快速卷積算法 114
5.2.1 一維循環(huán)卷積頻域快速算法 114
5.2.2 短序列一維線性卷積快速算法 117
5.2.3 長序列一維線性卷積的構建 124
5.2.4 快速FIR濾波器算法 129
5.2.5 二維快速卷積算法 140
5.3 近似卷積算法 152
5.3.1 基于卷積核低秩分解的二維快速卷積 153
5.3.2 矩形卷積核近似卷積 154
5.3.3 分段線性卷積核近似 160
5.3.4 卷積核的分段近似 164
5.3.5 基于IIR濾波器的近似卷積 168
5.3.6 基于卷積核低秩近似的二維近似快速卷積 172
5.3.7 基于二維矩形卷積核的近似快速卷積 173
5.4 小結 176
參考文獻 177
第6章 矩陣乘法優(yōu)化 178
6.1 機器學習算法中的矩陣乘法 178
6.2 Strassen矩陣相乘算法 180
6.3 Winograd矩陣相乘算法 184
6.4 低秩矩陣乘法 187
6.5 循環(huán)矩陣乘法 188
6.6 近似矩陣乘法 190
6.6.1 基于矩陣低秩近似的矩陣乘法 191
6.6.2 基于數(shù)據(jù)統(tǒng)計相關性的近似矩陣乘法 192
6.6.3 基于向量量化的近似矩陣乘法 194
6.7 小結 202
參考文獻 203
第7章 神經網絡的實現(xiàn)與優(yōu)化 204
7.1 神經網絡基本運算及軟件實現(xiàn) 205
7.1.1 全連接層運算 205
7.1.2 卷積層運算 207
7.1.3 BN層運算 213
7.1.4 激活層運算 214
7.1.5 池化層運算 216
7.1.6 神經網絡示例 217
7.2 神經網絡的權重系數(shù)優(yōu)化 221
7.2.1 權重系數(shù)二值化 222
7.2.2 權重系數(shù)的定點數(shù)量化 224
7.2.3 權重系數(shù)量化和神經網絡訓練結合 226
7.3 神經網絡結構優(yōu)化 233
7.3.1 剪枝優(yōu)化 233
7.3.2 卷積結構優(yōu)化 245
7.3.3 知識蒸餾 251
7.4 小結 255
參考文獻 255
第8章 ARM平臺上的機器學習編程 257
8.1 CMSIS軟件框架概述 258
8.2 CMSIS-DSP軟件框架和編程 261
8.2.1 矩陣運算 263
8.2.2 高斯樸素貝葉斯算法實現(xiàn) 267
8.2.3 SVM算法實現(xiàn) 271
8.2.4 數(shù)據(jù)降維 275
8.3 基于CMSIS-NN的神經網絡編程 277
8.3.1 基于卷積神經網絡的手寫數(shù)字識別算法 277
8.3.2 CMSIS-NN的卷積神經網絡實現(xiàn) 278
8.3.3 卷積神經網絡的定點化 282
8.3.4 數(shù)據(jù)存儲和格式轉換 287
8.4 ARM Compute Library軟件框架和編程 288
8.4.1 基于ACL庫的圖像處理編程 289
8.4.2 基于ACL庫的神經網絡編程 292
8.5 ARM NN軟件框架和編程 306
8.5.1 基于ARM NN運行神經網絡模型 307
8.5.2 基于ONNX格式的機器學習模型構建 310
8.6 ARM的SIMD指令編程 316
8.6.1 NEON編程的基本概念和數(shù)據(jù)寄存器 317
8.6.2 基于C語言的NEON編程 319
8.7 小結 330
附錄A 補充數(shù)據(jù)和列表 332
附錄B 技術術語表 338