999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

在微控制器芯片實現神經網絡的方法

2020-12-07 06:14:15劉明曹銀杰耿相珍胡衛生
現代電子技術 2020年22期

劉明 曹銀杰 耿相珍 胡衛生

摘? 要: 針對微控制器芯片尚未存在使用神經網絡處理時序信號的現狀,提出一種可以在微控制器上進行神經網絡訓練、預測時序信號的方法。 該方法不基于操作系統運行神經網絡程序,無法由操作系統進行棧區空間大小的調整以及內存的分配問題,為了解決這個問題,更改了初始化棧區空間的大小,增加了外部擴展SDRAM芯片,使之達到適合神經網絡程序運行的大小。在微控制器芯片實現神經網絡的方法包括定義了實現神經網絡需要的矩陣運算,使用C語言編寫并封裝LSTM循環神經網絡前向傳播函數,反向傳播函數,以及LSTM循環神經網絡的權重更新函數。調用封裝好的LSTM循環神經網絡函數進行實驗,以時序信號sin x函數為例,預測信號變化。故使用該方法,可不依賴操作系統在微控制器芯片建立神經網絡,具備了穩定、實時可靠的優點。

關鍵詞: 微控制器芯片; 神經網絡; LSTM; 棧區空間; 內存分配; 時序信號處理

中圖分類號: TN711?34; TP39? ? ? ? ? ? ? ? ? ? ?文獻標識碼: A? ? ? ? ? ? ? ? ? ? ?文章編號: 1004?373X(2020)22?0001?05

Abstract: In allusion to the fact that there is no current situation of using neural network to process timing signals on microcontroller chips, a method of neural network training and predicting timing signals on microcontroller is proposed. In this method, the neural network program is not operated based on the operating system, and the adjustment of the size of the stack space and the memory allocation cannot be performed by the operating system. On this basis, the size of the initial stack area is changed, and the external extended SDRAM chip is added, so as to make the microcontroller chips suitable for the size of the neural network program to run. The method of implementing neural network on microcontroller chip includes the definition of the matrix operation needed to realize the neural network, writing and packaging LSTM (Long Short?Term Memory) recurrent neural network forward propagation function, back propagation function, and weight update function of LSTM recurrent neural network. The encapsulated LSTM recurrent neural network function is called to perform experiments, and the timing signal sin x function is taken as an example to predict the signal changes. In this method, the neural network can be established in the microcontroller chip without operating system, which has the advantages of stability, real?time reliability.

Keywords: microcontroller chip; neural network; LSTM; stack area; memory allocation; timing signal processing

0? 引言

在2018年中國國際嵌入式大會上,何積豐院士提出,人工智能存在向嵌入式系統遷移的趨勢[1]。在嵌入式系統上玩轉人工智能,是這個智能化時代前沿的研究。目前嵌入式系統人工智能主要使用Cortex?A系列微處理器芯片,A系列微處理器芯片主要面向手機、平板電腦等民用商品,屬于消費類電子,實現人工智能需要依賴操作系統,不具備穩定性,不適合應用在軍事、工業、信號處理等領域。Cortex?C系列微控制器芯片是單一功能的、更加專業的芯片,具備低功耗、低成本、實時、穩定可靠的特性,被廣泛應用在軍事、工業、信號處理等方面,但目前還未發現在微控制器芯片上建立神經網絡,做人工智能的研究。

循環神經網絡算法是神經網絡算法的一種,常用來學習、識別、預測時序信號,若能在Cortex?C系列微控制器芯片上搭建循環神經網絡,只需要輸入信號,用理想輸出作為監督學習,多次訓練后,即可進行信號智能處理、信號智能識別、信號智能預測等工作。使用Cortex?C系列微控制器芯片搭建循環神經網絡,處理時序信號,更加智能、穩定可靠。搭建循環神經網絡需要進行一系列矩陣運算,Cortex?M系列微控制器芯片已經具備DSP指令,所有的DSP指令都可在一個機器周期內完成,提高了矩陣運算速度。本文結合當前的研究現狀提出一種針對Cortex?M系列微控制器芯片建立的循環神經網絡方法,使用循環神經網絡對時序信號進行學習,并預測未來的信號。

1? LSTM循環神經網絡

對于時間信號的預測,常常使用循環神經網絡(Recurrent Neural Network),簡稱RNN神經網絡。一個簡單的RNN神經網絡可以表示為圖1a)的形式。圖1a)中,[x]表示輸入向量;[O]表示輸出向量;[U]表示輸入層到隱含層的權重矩陣;[V]表示隱含層到輸出層的權重矩陣;[S]表示隱含層的值;[W]表示隱含層的值到下一個時刻隱含層的值的權重矩陣[2]。

為了更好地理解RNN神經網絡,將圖1a)按時間展開,如圖1b)所示。其中,[xt-1],[xt],[xt+1]分別表示在t-1,t,t+1時刻的輸入向量;[Ot-1],[Ot],[Ot+1]分別表示在t-1,t,t+1時刻的輸出向量;[St-1],[St],[St+1]表示在t-1,t,t+1時刻的隱含層的值;[V]表示隱含層到輸出層的權重矩陣;[W]表示隱含層的值到下一個時刻隱含層的值的權重矩陣。從圖中可以看出,前向傳播公式為:

由式(1)可以看出,當前隱含層的值[St]不僅與當前時刻的輸入相關,并且與之前隱含層的值相關,而輸出[Ot]是[VSt]的函數,所以輸出[Ot]受歷史輸入影響,這就是RNN可以處理時間序列的原因[3]。

RNN神經網絡在處理長時間的信號序列時會產生梯度消失或梯度爆炸,為了克服這個缺點,將RNN進行改進,在RNN的基礎上,加入長期狀態C,用來保存長期狀態,從而達到解決RNN梯度消失和梯度爆炸的缺陷,改進后的RNN神經網絡被稱作LSTM(Long Short?Term Memory)神經網絡[4]。LSTM中主要使用3個門,分別是遺忘門、輸入門、輸出門以及即時狀態來控制長期狀態。遺忘門負責決定之前的長期狀態對當前的長期狀態影響程度;輸入門與即時狀態共同負責決定當前輸入對長期狀態的影響程度;輸出門決定當前長期狀態對輸出的影響程度[5]。LSTM神經元如圖2所示。

前向傳播過程需要計算遺忘門輸出[ft],輸入門輸出[it],即時狀態輸出[C′t]以及輸出門輸出[Ot]。長期狀態[Ct]由遺忘門輸出[ft]、輸入門輸出[Ot]、即時狀態輸出[C′t]和上一時刻的長期狀態[Ct-1]共同決定。

2? 實現LSTM循環神經網絡

Cortex?M系列芯片具有穩定可靠、實時、低成本、低功耗的優點,被廣泛應在工業控制、軍事、信號處理等領域。由于Cortex?M系列微控制器芯片在建立神經網絡時,不能由操作系統自動分配內存以及棧區空間,為了確保神經網絡程序能夠正常運行,需要人為擴展內存及擴大棧區空間。

Cortex?M系列芯片一直被定位在低性能端,但是仍然比許多傳統處理器性能強大很多,例如Cortex?M7處理器,最高時鐘頻率可以達到400 MHz。Cortex?M7處理器是針對數據處理密集的高性能處理器,具備面向數字信號處理(DSP)的指令集,支持雙精度浮點運算,并且具備擴展存儲器的功能,使用搭載Cortex?M7處理器的芯片,實現機器學習、人工智能,具備低功耗、低成本、穩定可靠的優點。

選擇以搭載Cortex?M7處理器的STM32F767IGT6芯片為例實現LSTM循環神經網絡,STM32F7使用Cortex?M7內核,在數字信號處理上增加了DSP指令集,大大提升了芯片的計算速度。ARM公司提供了DSP算法的庫(CMSIS_DSP),具備了部分矩陣運算的功能,減少了開發的時間以及難度,并使運算速度有了進一步的提升[6]。

2.1? ARM芯片中的矩陣運算

在STM32上實現LSTM,要解決矩陣、向量運算的問題。進行矩陣、向量運算,需要的內存空間比較大,所以需要對芯片進行內存擴展。LSTM的權重矩陣需要進行存儲,權重矩陣的維數直接關系到神經網絡的學習能力,通過內存擴展可以確保權重矩陣維數滿足需求,不會使神經網絡的學習能力過低。在實現LSTM的過程中,用到很多矩陣運算和向量運算,使用ARM公司提供的CMSIS_DSP庫中的矩陣處理函數,可以解決部分矩陣運算,提高運算速度。CMSIS_DSP庫中,用結構體arm_matrix_instance_f32表示矩陣,結構體的元素numRows表示矩陣的行,numCols表示矩陣的列,pData指向矩陣數組,矩陣元素為32位無符號float類型,可以滿足數據精度要求。

用arm_matrix_instance_f32結構體定義結構體數組,用來存放張量(由數組構成的數組),使用張量,來存儲歷史時刻門的輸出值[7]。

CMSIS_DSP庫中有矩陣的基本運算,如矩陣的加法、轉置、乘法等,在LSTM神經網絡算法中需要用到對矩陣元素的操作,例如矩陣按元素相乘,可以選擇使用for循環遍歷整個矩陣的方式訪問到每一個矩陣元素。

定義生成隨機矩陣的函數,輸入值為要生成矩陣的行NumRows,列NumCols,以及這個矩陣是否被作為偏置矩陣使用。若生成權重矩陣,則使用C語言中的隨機數函數rand(),遍歷矩陣賦值隨機數;若生成偏置矩陣,則將矩陣所有元素初始化為0。

無論是前向傳播還是反向傳播時,都會用到矩陣按元素相乘,但CMSIS_DSP庫中并沒有矩陣按元素相乘的函數,所以需要定義。定義矩陣按元素相乘的函數為mul2,它有兩個輸入,即兩個按元素相乘的矩陣,先判斷這2個矩陣的維數是否相同。因為按元素相乘,要求2個矩陣必須維數一樣,才能進行運算。使用for遍歷矩陣中的每一個值,讓2個矩陣對應位置上的元素進行相乘,并返回相乘后的新矩陣。此時新矩陣的維數應該和輸入矩陣的維數相同。

使用兩個矩陣按元素相乘函數mul2,去構造3個矩陣按元素相乘的函數mul3。mul3有3個輸入,首先經前2個輸入送到mul2中進行按元素相乘,再將結果與第3個輸入放到mul2中進行計算,這樣可以獲得連續3個矩陣按元素相乘,同理可以獲得mul4,mul5。

2.2? LSTM循環神經網絡的函數封裝

LSTM中用到兩個激活函數Sigmoid()和tanh(),以及它們各自的導數,由于CMSIS_DSP中沒有按元素操作的函數,所以這里只能選擇使用for循環遍歷矩陣中的每一個數組。定義函數SigmoidActivator,它有兩個輸入,輸入矩陣,以及模式選擇,將輸入的矩陣按元素進行計算,若mod為0,則輸出[sigmoid(x)=11-e-x],若mod為1,輸出[y′=sigmoid(x)′=y(1-y)]。同樣,定義函數TanhActivator,若mod為0,則輸出[tanh(x)=ex-e-xex+e-x],若mod為1,輸出[y′=tanh′(x)=1-y2]。

將遺忘門、輸入門、輸出門以及即時狀態的計算,封裝為一個函數calc_gate,這個函數有6個輸入,分別為輸入向量[x],權重矩陣[Wx],[Wh],偏置矩陣[b],使用sigmoid激活函數或tanh激活函數的標志,以及使用激活函數本身或使用激活函數的導數標志。函數的輸出為門的輸出或者即時狀態,公式如下:

按照LSTM循環神經網絡計算,在前向傳播、反向傳播過程中,使用由矩陣組成的張量進行表示,并將這些張量定義為全局變量,用來存儲歷史時刻的各個門的值,這需要較大內存空間。由于芯片內存空間有限,不能由操作系統調整內存,這里的張量存儲門歷史時刻的值,不能設置為無限大小,根據自己內存大小,定義最多保存N個歷史時刻的值。若存儲時刻數量已經大于N,則將最早的數據刪除。在這里刪除最早時刻的歷史值對最后的輸出并不會產生較大的影響,因為最早時刻的值產生的影響,已經通過影響之后的時刻,保存了下來。為了確保保存歷史時刻的值不會太少,需要增加內存大小。

2.3? 實現LSTM神經網絡的前向傳播

利用封裝好的LSTM循環神經網絡函數,實現前向傳播。前向傳播流程如圖3所示。

定義orward函數,輸入為輸入向量,為了記錄前向傳播的次數,使用全局變量times來記錄前向傳播的次數,也就是時刻times。根據LSTM門的計算理論公式,編寫程序計算遺忘門、輸入門、輸出門以及即時狀態的輸出,并將輸出的結果保存到相對應的結構體數組中的times位置。使用計算所得的遺忘門、輸出門、即時狀態的輸出以及上一時刻的長期狀態,計算當前時刻的長期狀態:

式中,“[?]”表示按元素相乘。此處使用之前定義好的矩陣,按元素相乘函數mul2,將[Ot],[tanh(C)]輸入mul2,輸出結構賦值給[ht]。將LSTM神經元的輸出[ht]保存在h_list[]中,存放位置為times,即h_list[times]。合理設置權重矩陣大小,達到既能滿足使用需求,又不超過產生過擬合的效果[8]。

至此,在微控制器芯片上已經實現LSTM循環神經網絡的前向傳播[9]。

2.4? 實現LSTM神經網絡的反向傳播

實現反向傳播之前,定義誤差函數Error_fun,LSTM反向傳播使用BPTT(Back Propagation Through Time)算法,屬于監督學習,故誤差函數有兩個輸入,一個是LSTM神經元的輸出,另一個是理想值。CMSIS_DSP庫中有矩陣減法arm_mat_sub_f32,可以實現[y-y] 矩陣相減,arm_mat_scale_f32常數與矩陣的乘法函數可以實現[12] 與矩陣相乘。這里還需要矩陣按元素相乘,所以選擇使用for循環遍歷的方法。定義誤差函數的返回值為:

反向傳播過程中,計算量較大。程序中,由函數調用函數的情況比較多,臨時變量在函數進行調用時,需要暫存到棧區中,起始文件默認初始化的1 KB的棧區大小不能滿足使用,程序運行時,會觸發異常,導致程序不能正常運行。將起始文件中棧區的大小進行調整,使棧區的大小足夠滿足程序運行的需要,可解決這個問題。

3? 實驗與分析

在STM32F7開發板進行實驗,STM32F767IGT6本身自帶512 KB的SRAM,為滿足LSTM循環神經網絡程序的正常運行,開發板上外部擴展32 MB的SDRAM芯片W9825G6KH,以及在啟動文件中進行修改,將Stack_Size EQU 0x00000400,更改為Stack_Size EQU 0x00050000,使棧區空間擴大為5 MB。

以預測sin x函數為例,在STM32F7芯片上建立LSTM循環神經網絡。

1) 建立樣本集合,設置時間間隔為[Δt=π5 000],即一個周期內取10 000個數據,將連續10個點的數據作為輸入向量[x],使用10個點的數據預測第11個點的值。

2) 將輸入向量輸入到循環神經網絡中進行前向傳播,因使用的BPTT反向傳播算法為監督學習,故用sin x函數的第11個點作為監督,與神經網絡輸出值進行比對,將誤差傳入LSTM循環神經網絡反向傳播進行計算,并更新權重值。

3) 將實驗結果顯示在LCD顯示屏幕上,見圖4。

根據表1部分誤差點數據顯示,預測值與實際值之間存在誤差,誤差較大的點主要集中在sin x函數的極點附近。由于使用float數據類型,只能保留7位有效數字,訓練時最高精確到小數點后6位,所以預測結果存在誤差。經過多次實驗得出,提高訓練次數,可降低誤差[12]。

4? 結? 論

本文對于如何在Cortex?M系列微控制芯片上搭建LSTM神經網絡進行了介紹,并且以搭載Cortex?M7處理器的STM32F767IGT6芯片為例,實現了對于時間序列sin x函數的預測,預測的sin x函數與實際的sin x函數重合,由于使用的數據類型為float,有效數字最多為7位,最高精確到小數點后6位,實驗時存在誤差,可以提高訓練次數,盡可能減小誤差,但誤差不可完全消除。

主站蜘蛛池模板: 日韩精品无码免费一区二区三区| 国产成人喷潮在线观看| 素人激情视频福利| 99精品在线视频观看| 无码高潮喷水在线观看| 男女性午夜福利网站| 国产尤物视频在线| 日本在线欧美在线| 国产91成人| 天天视频在线91频| yjizz视频最新网站在线| 国产成人久久综合777777麻豆| 成人午夜天| 中文成人在线视频| 欧美狠狠干| 欧美怡红院视频一区二区三区| 日韩在线成年视频人网站观看| 午夜福利免费视频| 免费欧美一级| 中文字幕欧美成人免费| 亚洲性影院| av在线5g无码天天| 久久夜色精品| 日韩 欧美 小说 综合网 另类 | 怡红院美国分院一区二区| 凹凸国产熟女精品视频| 久久www视频| 热伊人99re久久精品最新地| 五月激激激综合网色播免费| 一区二区三区成人| 国产原创演绎剧情有字幕的| 女人18一级毛片免费观看 | 欧美日韩在线亚洲国产人| 久久久久无码精品| 日本欧美一二三区色视频| 久久国产精品夜色| 国产浮力第一页永久地址| 老熟妇喷水一区二区三区| 熟女视频91| 色综合日本| 一级毛片不卡片免费观看| 国产在线专区| 91精品在线视频观看| 亚洲首页国产精品丝袜| 丁香婷婷激情综合激情| 国产精品无码一二三视频| 99这里只有精品6| av免费在线观看美女叉开腿| 中文字幕乱码中文乱码51精品| 日韩午夜福利在线观看| 中文字幕乱码中文乱码51精品| 久久国产乱子| 亚洲va视频| 日本欧美在线观看| 无码久看视频| 精品人妻一区无码视频| 全部免费毛片免费播放| 亚洲一区二区无码视频| 国内精品久久九九国产精品| 久久香蕉国产线| 97视频免费在线观看| 四虎影院国产| 欧美性色综合网| 操操操综合网| 国产人成在线视频| 国产精品成人一区二区| 99这里只有精品免费视频| 亚洲天堂精品在线观看| www.狠狠| 国产亚洲精久久久久久久91| 日韩A∨精品日韩精品无码| h网站在线播放| 久久香蕉国产线看观看精品蕉| 亚洲国产日韩一区| 夜夜高潮夜夜爽国产伦精品| 天天躁夜夜躁狠狠躁图片| 国内精品久久久久久久久久影视| 国产视频一区二区在线观看| 无码区日韩专区免费系列| 久久这里只有精品66| 亚洲天堂视频在线观看免费| 精品久久高清|