適讀人群:
本書可作為嵌入式領(lǐng)域工程技術(shù)人員、機器學(xué)習(xí)算法的底層算法軟件開發(fā)人員的參考書,也可作為計算機、電子信息、自動控制等相關(guān)專業(yè)高年級本科學(xué)生的參考教材。
配套PPT 代碼 數(shù)據(jù)獲取方式:
1、微信關(guān)注華章計算機
2、在后臺回復(fù)關(guān)鍵詞:69325
一、本書面向人工智能的嵌入式應(yīng)用,涵蓋了基于運算量,內(nèi)存,功耗等多維度的機器學(xué)習(xí)算法優(yōu)化理論與技術(shù)。從算法底層單元到機器學(xué)習(xí)算法訓(xùn)練-推理聯(lián)合優(yōu)化及自動優(yōu)化部署算法等方面進行闡述,并結(jié)合通用嵌入式處理器進行了驗證。本書集機器學(xué)習(xí)算法優(yōu)化理論和應(yīng)用實踐為一體,為實現(xiàn)高效的人工智能嵌入式系統(tǒng)提供了基礎(chǔ)理論與方法。
二、本書作者常年從事嵌入式教學(xué)與研究,書中的內(nèi)容凝練了他們長期從事人工智能算法研究與系統(tǒng)設(shè)計的研究與經(jīng)驗,為人工智能應(yīng)用普及提供了詳實的學(xué)習(xí)和研究指南。
三、本書配套的PPT、源代碼和訓(xùn)練數(shù)據(jù)均可下載并持續(xù)更新。
隨著人工智能(AI)技術(shù)在各個行業(yè)的普及,將AI技術(shù)和嵌入式系統(tǒng)相結(jié)合,構(gòu)建AI嵌入式系統(tǒng)成為當(dāng)前技術(shù)熱點之一。本書介紹AI領(lǐng)域多種機器學(xué)習(xí)算法在嵌入式系統(tǒng)上的底層實現(xiàn)和優(yōu)化技術(shù)。現(xiàn)在很多機器學(xué)習(xí)算法基于海量存儲和運算,對功耗、體積、計算能力和存儲容量有較高要求,而不同領(lǐng)域的嵌入式系統(tǒng)受限于各自的應(yīng)用需求,難以滿足所有條件。目前在嵌入式系統(tǒng)中實現(xiàn)復(fù)雜機器學(xué)習(xí)算法有多條途徑,包括基于通用GPU多處理器架構(gòu)的方案、基于專用運算加速引擎的定制化方案,以及基于現(xiàn)有處理器對算法進行深度優(yōu)化的方案等。這些技術(shù)方案各有優(yōu)缺點,并且在不同領(lǐng)域得到了應(yīng)用;贕PU的通用多處理器架構(gòu)的方案通用性強、算力高,但代價是硬件成本高、功耗大;趯S眠\算加速引擎的定制化方案運算效率高,功耗可控,但運算結(jié)構(gòu)相對固定,靈活性差。基于現(xiàn)有處理器對算法進行深度優(yōu)化的方案成本低,不需要專用或者定制化硬件,通用性強,但代價是需要手動對各案例逐個進行優(yōu)化,開發(fā)難度高。本書中關(guān)注的是基于現(xiàn)有的嵌入式處理器系統(tǒng)和架構(gòu),通過不同層次的優(yōu)化實現(xiàn)機器學(xué)習(xí)算法。雖然書中所介紹的方法以通用嵌入式處理器為例,但也能夠應(yīng)用于GPU或者硬件加速引擎架構(gòu),比如基于變換域的快速卷積算法在GPU的底層運算庫中得到應(yīng)用,基于加減圖的常數(shù)乘法運算能夠方便地在芯片硬件設(shè)計中實現(xiàn)。
機器學(xué)習(xí)涉及多個不同領(lǐng)域的算法,其中包括基于統(tǒng)計學(xué)習(xí)的方法和基于神經(jīng)網(wǎng)絡(luò)的方法;诮y(tǒng)計學(xué)習(xí)的算法理論模型設(shè)計精巧,泛化性能好,運算量相對較低,容易在存儲量和運算量受限的嵌入式系統(tǒng)中實現(xiàn),但它依賴較強的概率假設(shè),模型上的偏差限制了它在實際應(yīng)用中的性能。近年來,隨著GPU算力的增加以及海量標(biāo)注數(shù)據(jù)的積累,基于神經(jīng)網(wǎng)絡(luò)的灰盒式機器學(xué)習(xí)算法得到應(yīng)用,神經(jīng)網(wǎng)絡(luò)訓(xùn)練使用反向梯度傳播算法,能夠自動地從訓(xùn)練數(shù)據(jù)中學(xué)到特征提取方法,擺脫人工特征設(shè)計的效率約束。很多現(xiàn)有神經(jīng)網(wǎng)絡(luò)性能優(yōu)越,但龐大的參數(shù)存儲量限制了其在嵌入式系統(tǒng)上的實現(xiàn)。近年來的研究發(fā)現(xiàn),很多神經(jīng)網(wǎng)絡(luò)架構(gòu)中存在大量冗余的運算和參數(shù),通過運算的簡化和架構(gòu)裁剪能夠大大降低神經(jīng)網(wǎng)絡(luò)對計算性能和內(nèi)存的需求,使得在嵌入式系統(tǒng)上實現(xiàn)它成為可能。本書中討論的內(nèi)容覆蓋基于統(tǒng)計學(xué)習(xí)和基于神經(jīng)網(wǎng)絡(luò)的機器學(xué)習(xí)算法在嵌入式系統(tǒng)上的實現(xiàn),通過算法和例程介紹具體的優(yōu)化手段。
書中給出了通過詳細的手工優(yōu)化步驟以說明嵌入式機器學(xué)習(xí)算法的優(yōu)化過程,但隨著機器學(xué)習(xí)算法復(fù)雜度的增加和規(guī)模的擴大,手動優(yōu)化效率顯得較低。對部分優(yōu)化過程,我們給出了軟件輔助優(yōu)化的介紹,比如通過軟件自動搜索加減圖實現(xiàn)多常數(shù)乘法,使用軟件控制神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程,消除網(wǎng)絡(luò)參數(shù)和架構(gòu)上的冗余,以及通過軟件自動從訓(xùn)練得到的模型中提取參數(shù)并自動生成C語言源代碼。讀者可以基于這些代碼進一步拓展,構(gòu)建自動化的嵌入式機器學(xué)習(xí)算法實現(xiàn)工具。在撰寫本書期間,出現(xiàn)了多種嵌入式機器學(xué)習(xí)算法框架和算法部署工具,大大提高了機器學(xué)習(xí)算法在嵌入式系統(tǒng)中的部署效率。從長遠看,使用更高層的機器學(xué)習(xí)算法來訓(xùn)練和優(yōu)化當(dāng)前機器學(xué)習(xí)算法會是研究趨勢。
書中介紹的部分底層算法代碼以Python語言形式給出,這考慮了Python語言的表達能力和程序簡潔性,在實際應(yīng)用中需要讀者在理解算法原理的基礎(chǔ)上改成C程序?qū)崿F(xiàn)。另外,書中列舉的機器學(xué)習(xí)問題集中在基本的手寫識別數(shù)據(jù)或者簡單圖像分類問題上,選擇這些機器學(xué)習(xí)問題,是考慮到它們的訓(xùn)練速度快,模型構(gòu)建代碼量小,能夠在有限篇幅內(nèi)解釋清楚,但所介紹的方法能夠應(yīng)用于更復(fù)雜的機器學(xué)習(xí)算法和模型。
機器學(xué)習(xí)涉及建模、訓(xùn)練和推理這幾個部分,本書的重點在于嵌入式系統(tǒng)中的機器學(xué)習(xí)算法推理過程的實現(xiàn),對機器學(xué)習(xí)本身的理論模型介紹相對較少,因此需要讀者在閱讀之前了解基本的機器學(xué)習(xí)算法知識。另外,要掌握本書介紹的近似算法,需要讀者提前了解一些線性代數(shù)的知識。
本書的撰寫工作得到了Arm中國大學(xué)計劃的幫助和支持,在此表示感謝!
應(yīng)忍冬
2021年6月于上海
前言
第1章 緒論 1
1.1 AI嵌入式系統(tǒng)的概念與特點 1
1.2 機器學(xué)習(xí)在嵌入式系統(tǒng)中的實現(xiàn) 4
1.3 本書內(nèi)容概述 6
第2章 嵌入式軟件編程模式和優(yōu)化 8
2.1 嵌入式軟件編程模式 8
2.1.1 基于周期調(diào)用的運行模式 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)結(jié)構(gòu)優(yōu)化 21
2.2.2 時間空間平衡 23
2.2.3 運算精度和性能平衡 25
2.2.4 底層運算的快速實現(xiàn)算法 28
2.2.5 內(nèi)存使用優(yōu)化 30
2.3 小結(jié) 34
參考文獻 34
第3章 機器學(xué)習(xí)算法概述 35
3.1 高斯樸素貝葉斯分類器 35
3.1.1 原理概述 35
3.1.2 模型訓(xùn)練和推理 36
3.2 感知器 38
3.2.1 原理概述 38
3.2.2 模型訓(xùn)練和推理 39
3.3 SVM分類器 40
3.3.1 原理概述 40
3.3.2 模型訓(xùn)練和推理 42
3.4 決策樹 43
3.4.1 原理概述 43
3.4.2 模型訓(xùn)練和推理 44
3.4.3 決策樹分類器的代碼實現(xiàn) 45
3.5 線性數(shù)據(jù)降維 47
3.5.1 原理概述 47
3.5.2 模型訓(xùn)練和推理 47
3.6 神經(jīng)網(wǎng)絡(luò) 48
3.6.1 原理概述 48
3.6.2 模型訓(xùn)練和推理 50
3.7 小結(jié) 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)化的應(yīng)用 103
4.5 小結(jié) 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 長序列一維線性卷積的構(gòu)建 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 小結(jié) 176
參考文獻 177
第6章 矩陣乘法優(yōu)化 178
6.1 機器學(xué)習(xí)算法中的矩陣乘法 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)計相關(guān)性的近似矩陣乘法 192
6.6.3 基于向量量化的近似矩陣乘法 194
6.7 小結(jié) 202
參考文獻 203
第7章 神經(jīng)網(wǎng)絡(luò)的實現(xiàn)與優(yōu)化 204
7.1 神經(jīng)網(wǎng)絡(luò)基本運算及軟件實現(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 神經(jīng)網(wǎng)絡(luò)示例 217
7.2 神經(jīng)網(wǎng)絡(luò)的權(quán)重系數(shù)優(yōu)化 221
7.2.1 權(quán)重系數(shù)二值化 222
7.2.2 權(quán)重系數(shù)的定點數(shù)量化 224
7.2.3 權(quán)重系數(shù)量化和神經(jīng)網(wǎng)絡(luò)訓(xùn)練結(jié)合 226
7.3 神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)優(yōu)化 233
7.3.1 剪枝優(yōu)化 233
7.3.2 卷積結(jié)構(gòu)優(yōu)化 245
7.3.3 知識蒸餾 251
7.4 小結(jié) 255
參考文獻 255
第8章 ARM平臺上的機器學(xué)習(xí)編程 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的神經(jīng)網(wǎng)絡(luò)編程 277
8.3.1 基于卷積神經(jīng)網(wǎng)絡(luò)的手寫數(shù)字識別算法 277
8.3.2 CMSIS-NN的卷積神經(jīng)網(wǎng)絡(luò)實現(xiàn) 278
8.3.3 卷積神經(jīng)網(wǎng)絡(luò)的定點化 282
8.3.4 數(shù)據(jù)存儲和格式轉(zhuǎn)換 287
8.4 ARM Compute Library軟件框架和編程 288
8.4.1 基于ACL庫的圖像處理編程 289
8.4.2 基于ACL庫的神經(jīng)網(wǎng)絡(luò)編程 292
8.5 ARM NN軟件框架和編程 306
8.5.1 基于ARM NN運行神經(jīng)網(wǎng)絡(luò)模型 307
8.5.2 基于ONNX格式的機器學(xué)習(xí)模型構(gòu)建 310
8.6 ARM的SIMD指令編程 316
8.6.1 NEON編程的基本概念和數(shù)據(jù)寄存器 317
8.6.2 基于C語言的NEON編程 319
8.7 小結(jié) 330
附錄A 補充數(shù)據(jù)和列表 332
附錄B 技術(shù)術(shù)語表 338