• 沒有找到結果。

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

2.2 Memetic Algorithm 名詞介紹及運算程序

2.2.3 Memetic Algorithm 運算程序

在基因演算法中,我們令S(k)和D(k)分別表示,為經過 k 次演化後所得到 P 組基 因序列的集合與目前最小失真值 D ;且令S 表示在演化過程中目前最佳的基因序列。* 在初始的步驟中,首先使D(0)=∞且S 為空字串 (Null),並隨機地從訓練向量中選取數* 筆向量做為S(0)中的碼字。

11

一次再生,只會有一個基因序列被選擇,而被選擇到的基因序列將會被複製出一份 一模一樣的基因序列,這個新產生出來的基因序列將會進行交配和突變的程序。基因演 算法中,再生的程序會執行 P 次,產生 P 個新的再生基因序列。

交配(Crossover):在每一個再生的基因序列 r,{y1,…,yN}r中,以一個機率值 Pc

為判斷是否進行單點交配。並且隨機地從整個族群中選擇出另一個母代序列 r

{z1,…,zN}r’。接著產生一個在 1 到 N 之間的亂數 n,以此亂數做為交配點,在這兩個序 列位置 n 的地方將其分割為兩部分,並相互交換{yn+1 ,..., yN}和{zn+1,...,zN}的部分,產 生新的基因序列{y1 ,...,yn,zn+1,...,zN}與{z1,...,zn,yn+1,...,yN},完成交配程序,如圖 2.2 所示。

圖 2.2 單點交配

y1 y2 … … … yn+1 yN 母代序列 r

z1 z2 … … … zn+1zN 母代序列 r

y1 y2 … … … zn+1zN 子代序列 1

子代序列 2

z1 z2 … … … yn+1 yN

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

12

突變(Mutation):在突變步驟中,基因序列中的每個碼字都會根據一個機率值 Pm 決定突變與否。假設目前有一個即將進行突變步驟的基因序列 r={y1,…,yN}r,我們會隨 機地從 N 個碼字中選擇一個碼字 y,並且隨機從碼字 y 中的 w 個元素(element)選擇一個 出來;接著產生一個亂數 b,將被選到元素的加上或減掉這個亂數值,也就是+b 或-b 來 達到突變的目的,如圖 2.3 所示。

圖 2.3 突變運算

由於我們將 MA 演算法應用在 VQ 的設計上,因此 GA 演化程序中由 P 組基因序列 構成的族群 S ,事實上為 VQ 中 P 組碼簿的集合,其中的每組碼簿是由N個碼字組成。

在 MA 演算法中,上述再生、交配、突變的 3 個步驟為基因演算法的演化程序,完成所 得到的 P 組碼簿,則代表基因演算法的搜尋結果。接下來,將對 GA 演算法演化後所得 到的 P 組結果,進行局部最佳化步驟。

y1 y2 … … … yn+1yN 原始基因序列 r

i1 i2 … … … … … iw 碼字 yi

隨機選取碼字 yi

突變後碼字 i1 i2 it±b … … … iw

隨機選取元素 it 亂數 b

13

局部最佳化(Local refinement):針對 VQ 的應用,我們採用 C-means 演算法做為在 MA 演算法中的局部最佳化步驟;其中在突變程序完成後,族群中的每一個基因序列 r,

會做為 C-means 演算法的初始碼簿進行訓練。C-means 演算法的輸出,為碼簿 r 在經過 局部微調後訓練出的結果。經過局部最佳化步驟後的 P 組基因序列會成為S(k),而每一 個在S(k)中的基因序列所計算出的平均失真值,會被用來更新D(k)

在 MA 演算法中,演化會持續進行直到D(k)數列收斂為止。在實際上,透過持續 觀察D(k)的變化,我們以連續的 L 次演化產生的D(k)皆相同做為收斂條件,換言之 D(k)

= D(k−1) = … = D(k −L+1),則 MA 演算法停止。經過 MA 演算法收斂後得到的目前最 佳序列 S*,即是我們所追求之最佳碼簿。

我們把由上述步驟所構成的 MA 演算法以 MA( I )表示 。如圖 2.4 所示,為 MA( I ) 演算法流程圖。然而要在硬體上實現 MA( I )演算法電路是有困難的。首先,在 MA( I ) 演算法中,需要使用兩塊族群記憶體,分別用來儲存母代族群基因序列與再生之後的基 因序列;第二點,在執行再生程序時所使用的輪盤法則,也會成為在硬體實現上的瓶頸;

除了上述兩點困難之外,交配、突變與 C-means 程序也必須對 P 組再生後的基因序列進 行運算,相對的在實現硬體電路設計的複雜度將會非常高。因此我們將提出一個新的 MA 演算法架構來解決這些問題,為了有所區分將以 MA( II )表示。

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

14

圖 2.4 MA( I )演算法流程圖

15

2.3 FPGA 系統設計

FPGA 是在 1984 年由 Xilinx 公司所發明,從簡單的膠合邏輯 (Glue logic) 晶片,

演變為可取代客制的特定應用積體電路 (ASIC) 與處理器,適用於各種訊號處理與控制 的應用。最近幾年來,積體電路(IC)產品的發展速度愈來愈快,功能也越來越趨複雜化。

於是,由於 FPGA 的完全可程式化性質,我們可以透過預先建立的邏輯區塊與可程式化 路由資源,不需要花費如使用 ASIC 般大量的時間金錢,即可設定這些晶片以建置客制 化硬體功能,來進行快速的產品研發;當使用者重新編譯不同的電路設定時,可立刻擁 有不同的特性,能快速地在 FPGA 上進行測試。除此之外,FPGA 在系統的開發上也提 供了軟體與硬體共同設計的方式,讓使用者能夠更方便的達成系統化的 IC 設計,具有 開發時間短及系統容易修改的優點。

Altera 公司根據不同使用者的需求,開發出許多不同系列的 FPGA 開發板,本篇論 文是在 NIOS development kit 中的 Stratix EP2S60 系統開發板上實現我們提出的 MA( II ) 演算法硬體架構。在 NIOS 系統中提供了一套專門給 NIOS 處理器使用的匯流排(Avalon Bus),使用者設計出的電路在 NIOS 系統中做為一客製化電路(Custom User Logic),透過 此匯流排上的各種訊號線,使用者的電路可以和整個系統相互傳遞資料。除此之外,開 發板上也提供 Flash memory、SDRAM、Ethernet controller 與 I/O 設備等等,供使用者使 用。整個系統的軟硬體設計流程,如圖 2.5 所示

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

16

圖 2.5 系統設計流程圖[11]

NIOS 系統擁有下列優點:

1. Altera 公司提供使用者一個視窗介面的開發工具:NIOSⅡ IDE。設計者在 NIOS II IDE 介面上撰寫程式碼,提供編譯及除錯的功能並可以透過提供的介面輸入 指令與觀看程式執行結果。此程式除了支援 C 語言的函式庫之外,更進一步的 提供 HAL(hardware abstraction layer)函式庫。其中 HAL 函式庫提供設計者呼叫 系統相關裝置的 API,如圖 2.6;設計者可以撰寫 C 語言程式並透過 HAL API 呼叫來驅動特定的裝置運作。

17

圖 2.6 HAL API[11]

2. 提供了 Compact Flash 卡(以下簡稱 CF 卡)存取功能,讓設計者可以將資料置於 CF 卡中,並透過 HAL API 讓設計者進行讀與寫的動作。

3. 提供 DMA(direct memory access)機制讓設計者可加速資料在記憶體與系統周邊 元件的傳輸速度且不佔用 CPU 資源。

4. 提供 lwIP、NicheStack 等基本的網路功能,除了符合嵌入式系統最基本的簡單、

快速、不佔據過多系統資源之外,也讓設計者更容易修改或增刪想要的功能。

5. 設計者依照自己的需求增加或修改想要的電路功能,只需要簡單的重新 build 系 統並將之後燒錄至開發板即可。

19

中適應值最差的母代序列,並以此子代序列取代之。

特別要注意的是,在本論文中是以向量量化器的設計做為應用,所以實際上的一個 基因序列就是一組碼簿,因此序列檢索(string retrieval)的動作將會花費很多的記憶體存 取時間(Memory Access Time)。必然地,對 r1和 r2的檢索對整體執行效能會造成某種程 度的時間耗損。為了降低記憶體存取時間,我們在 MA( II )演算法中使用了一個替代方 案,將上一個世代挑選出的 r1當作新的 r2,然後再從 S 中隨機選出新的 r1;比起每次都 去讀取新的 r1、r2的方法,可以省掉約一半的記憶體存取時間[14]。

當選擇(Selection)、交配(Crossover)、突變(Mutation)、局部改善(Local refinement) 和生存(Survival)與取代(Replacement)等演化程序不斷進行時,族群整體的適應性將會提 升,使得愈晚產生的子代序列的存活率(survival rate)將會愈來愈低,一直演化到某個世 代,新子代的存活率將降低到零。此時,將會停止演化而使演算法終止。

如圖 3.1 表示,為應用於向量量化器的 MA( II )演算法流程圖。我們可以觀察到,

MA( II )演算法的再生過程簡化為隨機選取 2 組序列 r1、r2做為交配程序的母代序列,

而非透過輪盤法再生出新的族群,因此只需要使用到一塊族群記憶體;除此之外,交配 和突變程序也只針對 r1和 r2序列作用,而不需要對整個族群中的所有序列進行;同樣的,

C-means 演算法也只需要針對交配突變後的子代序列 c 進行運算。因此在 MA( II )演算

第三章 Memetic 演算法之硬體電路實現

20

圖 3.1 MA( II )演算法流程圖

21

法硬體實現上,只需要用到一塊交配突變單元、一塊 C-means 單元,能有效的降低我們 需要的面積消耗(area cost)在 FPGA 的設計上。

如圖 3.2 所示,在 NIOS-based 的 SOPC 系統上[12],MA( II )演算法硬體電路可以 視為一個客製化的邏輯電路。

圖 3.2 MA( II )演算法實現於 NIOS-based SOPC 的系統架構

因為是以向量量化器的設計做為 MA( II )演算法的應用,所以需要使用到大量的訓 練向量資料;因此我們透過使用 SOPC 系統來達成傳送訓練向量的目的。在系統中,訓 練資料是儲存在 SDRAM 中,然後經由 Avalon Bus 將資料傳送到 MA( II )演算法電路上。

第三章 Memetic 演算法之硬體電路實現

22

我們利用 SOPC 上的 DMA controller 加快傳送資料的速度,以加快整體的運算效能。除 了由本地端提供的訓練資料之外,我們也可以透過網路由遠端提供訓練的資料,藉由 Ethernet Controller 接收並儲存到 SDRAM 上,再交由 DMA controller 進行傳送。

圖 3.3 MA( II )演算法硬體電路架構

如圖 3.3 所表示的是 MA( II )演算法的硬體電路架構,在圖中,可以看到 MA( II ) 演算法硬體架構中包含了族群記憶體單元(Population Memory Unit)、交配突變單元 (Crossover & Mutation Unit)、C-means 單元(C-means Unit)、生存測試更新單元(Survival Test & Update Unit)以及 Avalon Bus 介面(Avalon Bus Interface)。而在族群記憶體單元和 交配突變單元中包含了亂數產生器(Random Number Generator , RNG)。

23

在本架構中,族群記憶體單元主要是用來儲存基因序列,並且隨機選擇一名基因序 列作為交配突變單元的母代基因;這裡的隨機選擇機制是由族群記憶體單元中的亂數產 生器(RNG)負責,以產生的亂數來做選擇。在交配突變單元的設計上,我們允許交配與 突變的動作同時進行,而交配突變程序完成所產生的子代序列 c,會做為 C-means 單元 的初始碼簿進行訓練,並計算子代序列的適應值。

當 C-means 單元收斂之後,子代的適應值會做為生存測試更新單元的輸入,而生存 測試單元的目的便是決定新生子代序列是否能存活,如果能存活,則表示子代序列的適 應值優於母代序列中的其中一名,並且在族群記憶體中具有最差適應值的母代序列將會 被新生的子代序列所取代;接下來我們將討論在圖 3.3 中每個單元的細部架構設計。

3.2 族群記憶體單元(Population Memory Unit)

圖 3.4 表示的是族群記憶體單元的基本結構,其中包含了一個族群記憶體和亂數產

圖 3.4 表示的是族群記憶體單元的基本結構,其中包含了一個族群記憶體和亂數產

相關文件