• 沒有找到結果。

第四節 全文架構

本論文共分為五章,以下為各章節的概述:

第一章 緒論

本論文的研究背景、動機、目的與方法以及全文架構說明。

第二章 基礎理論及技術背景

簡述本論文所使用到的二元化類神經網路的基礎理論。

第三章 系統架構

詳述各層的電路架構以及運作流程。

第四章 實驗數據與效能分析

說明本論文的實驗環境以及實驗數據的分析。

第五章 結論

根據實驗數據對本論文做總結。

第二章 基礎理論與技術背景

10

第二章 基礎理論及技術背景

本章節將介紹 BNN 模型,並介紹與 CNN 的比較、Batch Normalization 的使用以及活化函數(Activations)的選擇。

第一節 BNN 與 CNN 的比較

Binarized Neural Networks 於 2016 年由 Matthieu Courbariaux 所提出,此 模型是一種為了降低類神經網路模型所占用的內存及降低模型的複雜度,以 第二種作法是 Stochastic Binarization,將值以隨機性的方式做二元化轉 換,如式子(2,2)所示,其中𝜎為 hard sigmoid function,運算式子為(2,3)。雖然 第二種方法較為合理,但每一次運算時,都需要產生一個隨機數,這會造成

第二章 基礎理論與技術背景

第二章 基礎理論與技術背景

第二節 Batch Normalization

類神經網路模型的深度隨著問題的複雜性提高而增加,而網路每層間都 存在高度的關聯性。因此隨著訓練的進行,當淺層網路中有參數產生些微的 變化,到深層時淺層的改變會依層數加深而被放大,且深層也需要不斷適應 因淺層的改變所造成資料分布不同的問題,導致模型訓練難以收斂、學習速 度過慢。為了解決上述的問題,學者提出了Batch Normalization 的方法。

Batch Normalization 以 mini-batch 為單位進行正規化,透過公式(2,6)來正

規化上一層的輸出,使得輸出後特徵分布的平均值為0,標準差為 1。其中𝑥

是輸入,𝑦是正規化後的輸出結果,𝜇為訓練樣本的平均值,𝜎2則為變異數,

𝜖是一個為了防止分母為零的極小浮點數,而可訓練的參數為𝛾與𝛽,𝛾為權重,

第二章 基礎理論與技術背景 在採樣層後必須使用Batch Normalization 讓類神經網路能更容易找到特徵的 規律性,以加快模型的學習,並增加網路的穩定度。

第三節 Activations

活化函數的用意主要是為了解決類神經網路的非線性問題,現實生活 中的問題大多都是非線性問題,若無使用活化函數,每一層都只是上一層 的線性組合,輸入和輸出無法脫離關係,使得神經網路的訓練毫無意義。

而Courbariaux 提及在經過 Batch Normalization 的正規化之後,BNN 會使用 的活化函數為Hard Hyperbolic tangent function(Htanh, 公式(2,7)),再透過二

第二章 基礎理論與技術背景

14

元化轉換將輸出限制在+1 與−1,以達到輸出與輸入為非線性關係。

𝐻𝑡𝑎𝑛ℎ(𝑥) = 𝑚𝑎𝑥 (−1, 𝑚𝑖𝑛 (1, 𝑥)) (2,7) 當進入下一層摺積層做運算時(公式(2,4)),輸入𝑋𝑝只為+1 與−1,再加上 權重𝑊𝑝,𝑞也為+1 與−1,這會造成彼此作摺積運算時會流失許多的訊息,導 致辨識率下降,且隨著網路模型加深,此問題會更加嚴重,因此,為了避免 此問題,本論文選擇用ReLU(公式(2,8))作為活化函數。

𝑅𝑒𝐿𝑈(𝑥) = 𝑚𝑎𝑥 (0, 𝑥) (2,8) 模型在訓練時會使用反向傳播來傳遞訊息以及更新參數,若在訓練的過

程中有梯度消失的問題,會導致資料無法更新,然而ReLU 有效的解決了此

問題,再加上ReLU 有計算速度快且收斂速度也快的特性,因此在現今許多

模型中常被使用。由公式(2,8)可知,ReLU 的運算十分簡單,當輸入小於零 時,將輸出指定為零,否則保持不變,以此方式去除掉不必要的資訊,只保 留重要的特徵,且經過ReLU 運算後依然為浮點數,並不會流失過多的訊息,

可以使得我們的模型維持在極好的辨識率。

第三章 系統架構

15

第三章 系統架構

此章節將介紹本論文的研究流程以及基於 BWNN 所設計的電路架構,

並詳述各層的架構與運作方法。

第一節 研究流程

首先,本論文先於一個由Python 撰寫類神經網路的前端平台—Keras 來

設計 BWNN 模型,接著將我們的訓練資料集放入模型進行訓練,訓練好模

型後,從中取出參數作為 C Model 與硬體設計所需要的參數,例如:權重 (weights)、偏移量(biases)以及 Batch Normalization 包含的相關參數。再藉由 與硬體設計所使用的Verilog 語法相近的 C 語言來建立 BNN 模型,能更有效 地設計模型的電路架構。接著設計電路並實現在FPGA 上,最後將軟體 Keras、

C Model 及硬體之間做三方的相互驗證,此研究流程見圖 3-1。

圖 3-1 本論文研究流程圖

第三章 系統架構

16

第二節 電路架構

本論文所使用的模型是根據Lenet-5 架構再做簡化。Lenet-5 是一個經典 的CNN 模型,它由三層摺積層(C1、C3、C5)、兩層採樣層(S2、S4)以及一層 全連接層(F6)所組成,如圖 3-2 所示。然而本論文減少一層摺積層,簡化後 模型架構為圖 3-3。首先,先將原先大小為 32×32 的輸入影像做 zero padding,

使之大小變為 34×34,接著以 kernel 大小為 3×3 做摺積運算(C1、C3),再依 序做採樣層(S2、S4)以及 Batch Normalization(B1、B2),最後將資料做分類,

在此我們分為28 個種類,藉由全連接層將資料分為 28 個輸出分布值,以取 最大值做為我們的辨識結果。

圖 3-2 Lenet-5 模型架構

圖 3-3 本論文模型架構

第三章 系統架構

17

本論文的電路架構在每一層之間皆平行做運算,架構呈現如圖 3-4,接 著我們會分項來依序詳細介紹第一層摺積層(C1)、採樣層(S2、S4)、Batch Normalization(B1、B2)、第二層摺積層(C3)以及全連接層(F5)的電路架構以及 電路運算過程。

圖 3-4 BWNN pipelined 硬體模型架構

第三章 系統架構

18

第一項 C1 電路架構

C1 電路架構依據論文[6]做改良,此電路包含用以暫存輸入影像資料的 Shift Register,以及用以執行摺積運算的 Kernel Core,而為了減少電路面積,

在此我們只使用一個 Kernel Core,C1 電路架構整合為圖 3-5 所示。其中 X 為輸入,Output feature map 個數為 6 個,分別為𝑌0、𝑌1、𝑌2、𝑌3、𝑌4、𝑌5, 而Kernel Core 包含 6 組權重,分別為𝑊0、𝑊1、𝑊2、𝑊3、𝑊4、𝑊5

圖 3-5 C1 電路架構

以圖 3-6~3-9 來呈現 C1 的電路運作。我們以 L×L 表示輸入圖像大小,

在此以 6×6 作為範例,以 K×K 代表 Kernel 大小,此例以 3×3 作為範例,而 Shift Register 大小受到輸入圖像大小以及 Kernel 大小所影響,以 L(K−1)+K 來定義Shift Register 的大小。首先,將圖像的像素值依序暫存到 Shift Register,

當填滿暫存器後便可輸入到 Kernel Core 做摺積運算。如圖 3-6 所示,將第 一組資料相繼與Kernel Core 中的𝑊0、𝑊1、𝑊2、𝑊3、𝑊4、𝑊5做運算,因 而得到Interleaved 架構輸出 𝑌0、𝑌1、𝑌2、𝑌3、𝑌4、𝑌5的第一個特徵值。

第三章 系統架構

19

圖 3-6 C1 電路運作範例 1

接著推入下一筆像素資料(0,1)組成新的一組輸入,再輸入至 Kernel Core 依序與六組權重做摺積運算,而得到 6 個 Output feature map 的第二個特徵 值,且以Interleaved 架構輸出,如圖 3-7 所示。

圖 3-7 C1 電路運作範例 2

第三章 系統架構

20

圖 3-8 顯示,資料(2,4)推入後組成一組新的輸入,依上述運作方式與 6 個權重做摺積運算後,依序輸出6 個 Output feature map 位於(0,2)的特徵值。

圖 3-8 C1 電路運作範例 3

接著輸入資料(2,5)再組成一組新輸入做摺積運算,得到 6 個 Output feature map 位於(0,3)的特徵值,如圖 3-9 所示。

圖 3-9 C1 電路運作範例 4

第三章 系統架構

21

然而在下一筆資料(3,0)輸入時,會因為此 Shift Register 的設計導致有邊 界問題,如圖 3-10 所示,此組輸入並非完整的 3×3 區塊,將此視為無效輸 入,若其進入 Kernel Core 做運算會造成錯誤的結果,因此在遇到邊界問題 時,於是將會不採用此組輸入,直到輸入資料為有效資料,才輸入至Kernel Core 做運算。

圖 3-10 Shift Register 邊界問題

第三章 系統架構

22

第二項 S2、S4 電路架構

S2、S4 電路皆為以 Pooling size 為 2×2 來執行 Max-pooing 的運算,S2、

S4 差別只在於所使用的 Shift Register 的大小不相同。採樣層電路架構圖如圖 3-11 所示,其由一個 Shift Register 以及一個 Comparator Core 所組成。Shift Register 大小受到 Input feature map 的大小以及 Input feature map 的個數所影

響,當 Input feature map 大小為 L×L,Input feature map 個數為 S,則 Shift Register 大小可以表示為 L×S+(S+1)。Comparator Core 則由三個浮點數比較器 所組成,將輸入的四個值作相互比較,最後從中輸出最大值。

圖 3-11 S2、S4 電路架構

第三章 系統架構

23

圖 3-12~圖 3-14 以 Input feature map 大小為 4×4 且 Input feature map 個 數為6 來作為電路運作的範例。當 Shift Register 填滿後得到𝑋0的一組輸入並 進入 Comparator Core 進行運算,彼此相互比較後輸出最大值,得到第一個 Output feature map 𝑌0的第一個特徵值(0,0),如圖 3-12 所示。

圖 3-12 S2、S4 電路運作範例 1

當下一筆資料再進入Shift Register 後又得到第二個 Input feature map 𝑋1 的一組新的輸入資料,與上述運作相同,進入Comparator Core 完成運算後,

得到第二個Output feature map 𝑌1的第一個特徵值(0,0),如圖 3-13 所示。

第三章 系統架構

24

圖 3-13 S2、S4 電路運作範例 2

圖 3-14 顯示,再將下一個 Input feature map 𝑋2的輸入作Max-pooling 的 運算得到輸出𝑌2,依此類推,直到輸出完整的Output feature map。

圖 3-14 S2、S4 電路運作範例 3

第三章 系統架構

25

第三項 B1、B2 電路架構

B1、B2 為 Batch Normalization 的運作電路,依 Batch Normalization 的公 式(3,1)可知此運算需要根號計算以及除法計算。

第三章 系統架構

26

平均值、權重與偏移量個數會隨著 Input feature map 個數而改變,且因 為本電路為一次只計算一個輸入,因此需要注意參數的指定。圖 3-16~圖 3-17 為 Batch Normalization 的運作,以 Input feature map 個數為 6 來作為範 例。圖 3-16 顯示,當第一個 Input feature map 𝑋0輸入,接著指定與𝜇0、𝑤0 與𝛽0做運算得到第一個Output feature map 的𝑌0的特徵值。

圖 3-16 B1、B2 電路運作範例 1

隨後第二筆輸入為第二張 Input feature map 的資料,將參數指定為所對 應的𝜇1、𝑤1與𝛽1,輸出運算結果為第二張Output feature map 的𝑌1的特徵值,

如圖 3-17。接著依樣畫葫蘆,依序將所有輸入資料承上述所描述的運算方式 作正規化的計算。

圖 3-17 B1、B2 電路運作範例 2

第三章 系統架構

27

第四項 C3 電路架構

C3 電路與 C1 皆是做摺積運算,但是他們的 Input feature map 個數不相 同,C1 的 Input feature map 個數只有 1 個,而 C3 的 Input feature map 個數為 多個,因此設計的電路便不相同,在此C3 電路架構由 Input feature map 個數 為6,以𝑋0, 𝑋1, 𝑋2, 𝑋3, 𝑋4, 𝑋5表示,以及Output feature map 個數為 12,以 𝑌0, 𝑌1, 𝑌2, 𝑌3, 𝑌4, 𝑌5, 𝑌6, 𝑌7, 𝑌8, 𝑌9, 𝑌10, 𝑌11表示來舉例,而權重總共72 組 以𝑊𝑖,𝑜表示,其中

i 為 Input feature map,o 則為對應的 Output feature map,

如圖 3-18 所顯示。

圖 3-18 C3 電路架構

第三章 系統架構

28

C3 電路是由一個 Shift Register、Kernel Core 以及 Output Buffer 所組成。

Shift Register 是暫存輸入影像資料的位移暫存器,Kernel Core 則是與輸入資 料做XNOR 運算,而 Output Buffer 是存放 Kernel Core 運算完的部分結果以 及做累加運算。

C3 的 Shift Register 大小受到 Input feature map 的大小、個數以及 Kernel 的大小所影響,以Input feature map 大小 L×L、個數為 S 與 Kernel 大小 K×K 為 例 , 則 Shift Register 大 小 由 圖 3-19 得 知 , 可 以 表 示 為

L×S×(K−1)+S×(K−1)+1。

圖 3-19 C3 Shift Register 的大小

接下來我們以Input feature map 大小 3×3、個數為 6、Kernel 大小 2×2 與

接下來我們以Input feature map 大小 3×3、個數為 6、Kernel 大小 2×2 與

相關文件