777精品久无码人妻蜜桃-欧美在线观看视频一区-99精品网-伊人网中文字幕-99福利网-国产精品99久久久久久武松影视-日本黄色片免费看-免费观看高清在线观看-人妻少妇被粗大爽9797pw-日韩国产在线播放-国产日产成人免费视频在线观看-一区二区人妻-午夜看毛片-国产精品s-午夜免费av-国产精品色情国产三级在-国产精品资源在线

在微控制器芯片實現(xiàn)神經(jīng)網(wǎng)絡(luò)的方法

來源:期刊VIP網(wǎng)所屬分類:檢驗醫(yī)學(xué)時間:瀏覽:次

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

  關(guān)鍵詞: 微控制器芯片; 神經(jīng)網(wǎng)絡(luò); LSTM; 棧區(qū)空間; 內(nèi)存分配; 時序信號處理

醫(yī)學(xué)神經(jīng)論文

  0 引 言

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

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

  1 LSTM循環(huán)神經(jīng)網(wǎng)絡(luò)

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

  為了更好地理解RNN神經(jīng)網(wǎng)絡(luò),將圖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]表示隱含層到輸出層的權(quán)重矩陣;[W]表示隱含層的值到下一個時刻隱含層的值的權(quán)重矩陣。從圖中可以看出,前向傳播公式為:

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

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

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

  2 實現(xiàn)LSTM循環(huán)神經(jīng)網(wǎng)絡(luò)

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

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

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

  2.1 ARM芯片中的矩陣運算

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

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

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

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

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

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

  推薦閱讀:《中華神經(jīng)醫(yī)學(xué)雜志》是中國科學(xué)技術(shù)協(xié)會主管,中華醫(yī)學(xué)會主辦,南方醫(yī)科大學(xué)珠江醫(yī)院承辦的國家級神經(jīng)醫(yī)學(xué)專業(yè)學(xué)術(shù)期刊。

余姚市| 泸溪县| 玉屏| 博湖县| 商河县| 澄江县| 石阡县| 章丘市| 靖边县| 科技| 泰宁县| 临澧县| 汪清县| 阜新| 绥江县| 黄石市| 闸北区| 涞水县| 肃北| 庆城县| 吉木乃县| 阜南县| 临西县| 洛隆县| 乌拉特后旗| 拉萨市| 布尔津县| 广宁县| 宁城县| 台江县| 石门县| 万全县| 鱼台县| 辉南县| 民权县| 彰化县| 临沂市| 承德县| 北宁市| 正阳县| 普定县|