Profile - TW011


TW011

以FPGA實現彈性硬體倒傳遞類神經網路



Semi-Finals


[print]


Project Paper - view as Preliminary(2010/07/21), Final(2010/11/01), Draft, Latest

1. 設計介紹 (Preliminary Paper)

        科技的進步帶來生活的便利,人們在享受科技帶來的繁榮時。也漸漸得體會到傳統計算機不太擅長解決的問題。譬如:高維度的非線性方程式模擬、物品的分類辨識、和時序方面預測的問題等等。這些問題不是作不到,而是在模擬跟實現上需要用到許多的演算法跟方程式去編輯。開發出來的成果,往往會浪費許多的時間在運算數據或是硬體的成本。

針對上面的問題,推動了類神經網路在現今的發展。類神經網路是一套模仿生物神經網路的資訊處理系統。它擅於樣本的辨識和非線性方程式的模擬。依據不同的學習模式和網路節點。可以衍生出許多不同種類的類神經網路。而其中最受到大眾廣泛應用的是倒傳遞類神經網路。

倒傳遞類神經網路包含三層:輸入層、隱藏層和輸出層。如下圖一所示。

輸入層:負責接受外部給的輸入變數,輸入層的處理節點數目依照問題而變,且不做任何的計算。

隱藏層:表現從輸入層接受到的輸入變數的交互運算關係。運算的結果會使用活化函數作轉換再輸出給下一層。

輸出層:用來輸出網路的輸出變數,其處理單元依照問題而定。一樣運算的結果會使用活化函數作轉換再輸出。

計算分為前向運算以及逆向運算。學習演算法為梯度陡降法,網路作訓練調整網路的權重值W,將網路的誤差函數最小化,達到期望的輸出結果。

 

圖一、倒傳遞網路架構

 

本作品的目的是在DE1上實現彈性硬體倒傳遞類神經網路,硬體部份採用多重性運算單元陣列及單指令多匯流排架構。透過軟體Nios II 下指令給硬體決定網路的大小,和演算法中的參數。利用控制器分配網路中的權重和控制系統的流程,讓使用者不需要因為更改的網路大小重新規劃及設計整個系統。並用分段計算的方式讓控制器以固定運算單元陣列合成出各種不同節點數的網路。分段計算的方式讓系統可以動態的改變網路運算單元的數目達到彈性硬體架構的理想。合出不同節點數的類神經網路的重要性是因為每一種不同的問題,需要用到的節點數都可能不一樣。硬體如果只能架構出一種固定的節點數的類神經網路。則開發出的硬體淘汰率高,適用的問題也大大的減少。

應用領域主要在方程式的模擬跟樣本的辨識。常見的範例有蝴蝶花的辨識和使用者自行設計的非線性方程式。

主要對象為在系統的設計上需要用到類神經網路演算法的研究員。本作品在硬體上的實現可以省下許多軟體計算的時間,也可以配合使用者需要更改網路的大小,因為是彈性架構,可以用最少的資源去建造預期中最大的類神經網路。

(Draft / 2010-06-29 02:21:15)

2. 功能描述 (Final Project Paper)

1.功能介紹:

(a)Nios II下達指令跟網路參數給硬體建構倒傳遞類神經網路。

(b)Nios II輸入訓練樣本給在硬體上開發的倒傳遞網路並把訓練好的結果傳回Nios II

(c)用分段計算方式合成出倒傳遞類神經網路。

 

 

2.實現方法:

 硬體部份:

        利用VHDL(Very-High-Speed Integrated Circuit Hardware Description Language)DE1上設計倒傳遞類神經網路使用者邏輯元件(BP Task Logic)負責計算演算法中的前向運算和逆向運算。以下圖二作參考,從左至右。軟體Nios II 藉由Avalon Bus傳過來的值,會依照偏移量決定這個值代表的網路參數。存在暫存器裡。再給使用者邏輯元件設計網路跟運算由硬體實現的演算法。最後把結果再透過Avalon Bus傳回給Nios II

 

圖二、系統架構圖

 

軟體部份:

        藉由SOPC Builder建立SOC(System on chip),設計Avalon週邊元件。用Nios II IDE這套軟體設計程式的部份。程式的設計上包含給使用者自行調整的網路參數,譬如各層的網路節點數量、學習率、慣性因子、和訓練範例等等。等到硬體演算法的部份計算完畢,把值回傳後。再把值輸出在Nios II IDE視窗上。

(Draft / 2010-06-29 02:23:58)

3. 效能參數 (Final Project Paper)

       本作品最大的特色,是由分段計算的方式。讓設計好的硬體不用因為網路節點數的改變而重新架構程式的設計。而是依照原先設定的每次運算可以平行處理的最大節點數去處理網路上的節點。再把運算的結果存入記憶體裡。所以限制本作品所能合成出的最大網路取決於DE1的記憶體的大小。針對這個限制本作品有專門的公式去計算所能合出的最大類神經網路在底下。

 

       

 

        以 2-H-5 (輸入層-隱藏層-輸出層的節點數) 的類神經網路為例,本作品用50MHz頻率配合DE1上的記憶體和邏輯閘數,每次運算可以平行處理的最大節點數數量預設為3,記憶體可以儲存的位元數預設為8bits,在2-H-5的問題下可合成出最大網路為2-157-5(註:Ceil為計算大於指定數的最小整數、I是輸入層的節點數、H是隱藏層的節點數、O為輸出層的節點數)

 

      目前在系統實現方面,硬體和軟體的時序溝通還有待解決的問題。網路在訓練完成後沒有正確的把訓練的結果儲存在指定的記憶體裡。所以輸出的結果都不是正確的輸出值。

 

         下圖系統在運作時輸出在NIOS II 9.0 IDE上的結果。從軟體下指令給硬體設計出一個輸入節點數1,隱藏層節點數3,輸出層節點數1的類神經網路架構。訓練樣本總共有5筆,在經過5000次的訓練之後,硬體訓練花費的時間總共有0.060501秒。接著利用訓練的樣本當測試資料對網路進行回想的測試。輸出的結果卻不是目標網路值。

 

 

(Revision: 7 / 2010-09-17 20:24:14)

4. 設計架構 (Preliminary Paper)

1.      硬體設計方塊圖

圖三是本系統的硬體設計方塊圖。

float2fixfix2float區塊負責將從軟體Nios II得到的浮點數轉為定點數,計算完之後再轉成浮點數給Nios II。這樣的動作是因為定點數的運算在硬體中會比浮點數花得時間少。

各區塊的FIFOStack都是記憶體,儲存運算的結果或是預備輸入的變數。

controller區塊控制各區塊的時序和硬體的流程。也需要計算分段運算和多工器的選擇等等。

series區塊是作前向運算的區塊,裡面包含的PE是運算單元,運算單元的數目由設計者自訂。本作品預設是3個。代表前向運算作分段計算時可平行處理3個類神經網路節點數。

learning區塊是作逆向運算的區塊,裡面設計的區塊是針對演算法的其中一部分作實現的運算。

random區塊負責輸出隨機的權重值給運算單元的記憶體。

 

圖三、硬體設計方塊圖

 

 

1.      軟體流程圖

要讓系統正常運作,除了硬體的設計,軟體也要提供完整的參數和下達正確的指令給硬體。一開始先給定網路架構,接著作初始化,將硬體記憶體裡存放的權重更新。然後寫入樣本、訓練次數、學習率等給硬體。下達開始作訓練的指令。硬體系統進行類神經網路的學習運算。運算完成的權重值會再透過Avalon Bus 傳回給軟體Nios

 

圖四、軟體流程圖

(Draft / 2010-06-29 02:29:48)

5. 設計方法 (Final Project Paper)

        本作品是將倒傳遞類神經演算法建構於DE1FPGA上。透過硬體的加速加快演算法的運算。如同演算法分成前向運算和逆向運算。硬體方塊圖主要也分為前向運算的series區塊和逆向運算的learning區塊。搭配控制區塊控制整個系統的流程和時序。

1.      前向運算

        前向區塊採用串列環狀架構,每個運算單元PE區塊,從輸入匯流排平行得到輸入變數做累加的計算,再經多工器選擇活化函數完成前向運算的結果。公式如下:

 

 

公式中各變數代表的意義:

  X0:偏壓值,通常設定為1,依據偏壓權重來增益或是抑制輸入資料。

  m :神經元數量。

Wij   : 連結各神經元的權重值,為前層第 i 個節點到該層第 j 個節點間權重。

  Vj :為第 j 個神經元所有輸入資料與前層到該層權重相乘累加。

           φ :非線性活化函數。

   Yj :為第 j 個神經元網路輸出值。

 

2.      逆向運算

前向運算的結果會跟軟體輸入的輸出樣本作比較計算誤差量。計算權重的修正量。修正的公式如下:

          輸出層到隱藏層的權重修正公式

 

 

隱藏層到輸入層的修正公式

 

公式中各變數代表的意義:

      Dj 輸出層第 j 個神經元目標輸出值。

       n  :學習速率(Learning rate)

       δj :誤差函數對第 j 個神經元加權總和的偏微分。

               k   : 為第 k 個隱藏層神經元。

              δk :誤差函數對第 k 個神經元加權總和的偏微分。

 

3.      控制區塊

系統要能正常的運算需要有控制區塊控制每個區塊的時序和記憶體的讀取跟存取。本作品以有限狀態機的方式控制每個區塊在系統中正確的運作。同時也要處理分段計算的步驟。

 

 

4.      分段計算

分段計算的次數取決於網路的節點數跟系統預設的最大運算單元。以下圖五為範例。系統預設最大運算單元3個。而這層網路要實現的類神經網路有7個節點,則硬體在做運算時。會先作PE1PE2PE3的節點運算。把結果存入記憶體再作PE4PE5PE6的節點。最後再計算PE7的節點運算。分段計算的次數可以用預備要做分段計算的節點數和每次能平行處理的最大運算節點數的商和餘數作計算。如果商為0則自動加一分段計算一次就好。如果商不為0餘數為0則分段計算商的次數。如果商不為0餘數不為0則分段計算商數加一的次數。本作品就是用此種方式去實現不同節點數目的網路架構來達到硬體彈性架構的能力。

 

圖五、分段計算示意圖

 

 

 

 

 

 

(Draft / 2010-06-29 02:45:07)

6. 設計特點 (Preliminary Paper)

主要特點:

(1)   彈性架構

利用分段計算的方式讓開發出來的硬體不只限定一種倒傳遞類神經網路,操作者在限定的最大節點數內可以自行決定所要得網路大小作倒傳遞類神經演算法的運算。

(2)   將倒傳遞類神經網路演算法實現在硬體上

由硬體實現的倒傳遞網路,比起軟體上的設計。縮短了許多運算所要花費的時間。

(Draft / 2010-06-29 02:46:18)

7. 總結 (Final Project Paper)

        這次很榮幸有這個機會參加友晶科技公司主辦的「2010 Altera 亞洲創新設計大賽」。比賽給我一個動力更加努力的實現作品在Altera FPGA高階開發平台上。綱開始的過程雖然苦,每天都要Debug跟設計系統的架構和流程。但也相對的每天都過得很充實。硬體的設計透過ModelSim的模擬可以清楚地觀察出每個區塊的時序控制有無處理得當。但是軟體和硬體在透過AvalonBus傳值時,每個值有無正確的儲存在指定的記憶體裡,這個問題就格外的讓我傷腦筋。目前本作品還有時序的問題沒控制好,以至於輸出的資料都不是預期的結果。雖然不能如期的完成作品是一個遺憾,但是從中學習到的知識和經驗對我而言卻是未來開拓人生的一把利器。再次謝謝友晶科技公司給我機會參加這次的比賽,也祝福比賽的每一位同學在比賽中都能順利的完成計畫。

 

(Revision: 3 / 2010-09-17 19:41:49)