英特爾的研究人員提出一種新的自動算法生成器(AAD),利用演化算法框架,以Python語言的基本子集作為語法架構(gòu),能夠?qū)?9個數(shù)組/向量問題的代碼塊進行組合,通過學(xué)習(xí),自動生成更復(fù)雜問題的解決方案。
本文介紹一種自動算法發(fā)現(xiàn)器(AAD),這是一種用于合成高復(fù)雜度計算程序的演化算法框架。此前的演化算法依賴于客觀的適應(yīng)函數(shù),這在給算法設(shè)計上增加了難度。
本文提出的AAD采用問題式引導(dǎo)演化過程(PGE),這需要將一組問題一起引入,針對更簡單問題發(fā)現(xiàn)解決方案,用于解決同一組問題中的更復(fù)雜的問題。PGE還支持幾種新的進化策略,并自然地應(yīng)用于高性能計算(HPC)技術(shù)。
AAD可以為29個數(shù)組/向量問題生成Python代碼,范圍從min,max,reverse到更具挑戰(zhàn)性的問題,如排序和矩陣向量乘法。此外,AAD顯示出對受限環(huán)境/受限輸入的強適應(yīng)性,以及針對“開箱即用”的問題的解決能力。
AAD是將相對簡單的問題解決組件自動組合程序,可以實現(xiàn)搜索由這些組件的所有可能排列所組成的整個空間,然后尋找滿足給定要求的解決方案。目前已經(jīng)提出了許多這樣的搜索策略(例如枚舉,基于演繹,約束求解,隨機)來應(yīng)對這類挑戰(zhàn)。
使用AAD的分類算法代碼塊示例
本文提出了一種基于演化算法的搜索策略,將其AAD中實現(xiàn)。AAD可以基于Python的子集作為語法結(jié)構(gòu),組合成復(fù)雜度相對較高的程序(循環(huán),嵌套塊,嵌套函數(shù)調(diào)用等),并生成可執(zhí)行的Python代碼。在本文中使用AAD來發(fā)現(xiàn)數(shù)組/向量問題的算法解決方案。
總的來說,AAD實現(xiàn)了以下目標(biāo):
使用問題導(dǎo)向型的演化策略來消除算法中的目標(biāo)函數(shù)。
使用多樣化的演化策略(多環(huán)境解決方案,異花授粉和聯(lián)合演化),并通過廣泛的實驗評估其有效性。
利用AAD解決通用Python語言中的29個數(shù)組/向量問題,表明演化算法能夠解決復(fù)雜的新問題。
支持循環(huán)模塊,可以發(fā)現(xiàn)任何(非零)輸入的算法。
AAD結(jié)構(gòu)設(shè)計方案和原理
AAD主要架構(gòu)示意圖,主要由問題生成器、解決方案生成器和檢測器組成
問題生成器(ProbGen)
我們想要解決的每個問題都從問題生成器開始。這部分負(fù)責(zé):(1)指定輸入和輸出的數(shù)量和類型。(2)為給定的問題生成輸入。例如,對于最大查找(Max),問題生成器指定Max將一個數(shù)組作為輸入,并生成一個數(shù)字作為輸出。另外,當(dāng)請求為大小為N的問題生成輸入時,會產(chǎn)生一個由N個數(shù)字組成的輸入數(shù)組。
檢測器(Checker)
檢測器負(fù)責(zé)接受/拒絕為給定問題生成解決方案。檢測器使用問題生成器生成的輸入執(zhí)行生成的程序,并生成輸出。檢測器中包含接受/拒絕輸出的邏輯。因此,檢測器與給定的問題生成器對應(yīng),兩者齊頭并進。
檢測器不一定真正需要實現(xiàn)其想要發(fā)現(xiàn)的算法。比如,針對“排序問題”的檢測器不必對真的對輸入數(shù)組進行排序,而是可以比較輸出數(shù)組中的每兩個相鄰元素,并查看這兩個元素是否按預(yù)期順序排列。一旦檢測到未排序數(shù)據(jù)對,檢測器會做出“失敗”的聲明。如果每對相鄰元素都是有序的,并且輸出數(shù)組中包含的元素與輸入數(shù)組完全相同,則檢測器宣布可接受該解決方案。
解決方案生成器(SolGen)
SolGen主要由兩部分組成:(1)表達式/短語存儲,以及(2)演化器。
表達式/短語存儲器(ExpStore)
解決方案生成器使用語法構(gòu)造源程序。AAD使用的Python語法子集存儲在ExpStore中,如表1所示。在AAD中,語法規(guī)則使用類型信息進行擴充。
AAD支持四種數(shù)據(jù)類型:數(shù)字(NUM),布爾數(shù)(BOOL),數(shù)組(ARR)和數(shù)組的數(shù)組(AoA),它們可以對矩陣進行建模。此外,表達式的每個操作數(shù)都標(biāo)記為Consumer(只讀),Producer(只寫)或ProdCon(讀-修改-寫)。
演化器(Evolver)
演化器負(fù)責(zé)對表達式和短語進行組合,以生成程序(或函數(shù)),以解決問題生成器提出的問題。演化器分三個階段構(gòu)建解決函數(shù)(SolFunc)。
階段1:構(gòu)建解決函數(shù)
階段2:在“生產(chǎn)者”(只寫數(shù)據(jù))和“消費者”(只讀數(shù)據(jù))間建立聯(lián)系
階段3:操作和函數(shù)調(diào)用突變
檢查輸出
一旦解決函數(shù)構(gòu)建出來,就會執(zhí)行這個函數(shù),使用Python的exec()函數(shù)生成輸出結(jié)果。檢測器負(fù)責(zé)檢查輸出,判定接受或拒絕輸出。如果第一個輸出被接受,則使用問題生成器生成的更多不同大小的、與輸入測試相同的解決函數(shù)。如果檢測器接受了所有測試,則該解決函數(shù)即被聲明為該問題的解決方案。上述三個階段構(gòu)成了一個循序漸進的步驟。
上表所示為在問題集A中的調(diào)用者-被調(diào)用者的關(guān)系。比如SortDesc函數(shù)所在的行顯示,SortAsc在57%的解決方案中調(diào)用了Max函數(shù),在14%的解決方案中調(diào)用了Min函數(shù),以此類推。Min,Max和ReverseArr函數(shù)沒有調(diào)用任何其他函數(shù)。所有其他函數(shù)都依賴于一個或多個函數(shù)來得到解決方案,顯示出函數(shù)組合的重要性。
上表中列出了3組問題以及在基線方法下的步數(shù)表現(xiàn),并將其與四種演化策略下的表現(xiàn)進行了對比。
未來前景與應(yīng)用方向
從概念上講,AAD也可用于程序翻譯。對于用C語言,匯編語言甚至二進制語言編寫的程序,可以執(zhí)行該實例作為AAD的檢測器來生成Python(或類似語言)代碼。這種方式與僅通過觀察另一個對象行為,來構(gòu)建自身行為方式的機器學(xué)習(xí)算法類似。很明顯,本文中使用的Python代碼可以被視為“Python到Python”的翻譯,因為不同的檢測器對應(yīng)了不同的Python實現(xiàn)。
AAD可能不僅僅是一個程序合成器。它還可以用來獲取機器的內(nèi)在知識。通過調(diào)用-被調(diào)用關(guān)系圖和父子圖捕捉不同問題之間的內(nèi)在關(guān)系。這些關(guān)系是由AAD本身發(fā)現(xiàn)的,并且可以被認(rèn)為是不同操作之間的聯(lián)想記憶的一種表示,其形式與人類大腦構(gòu)造和機制類似。
由于AAD可以通過引入越來越多的問題來增加知識儲備的擴展,通過適當(dāng)?shù)闹笇?dǎo)機制,就可以引導(dǎo)系統(tǒng)獲取大量技能(算法),并自己構(gòu)建知識表示。就像我們在自己孩子還小時,向TA們提出許多問題和挑戰(zhàn),目的是為了引導(dǎo)孩子們獲得大量技能和知識。
AAD是用于綜合高復(fù)雜度程序的演化框架,它以Python語言的基本子集作為語法架構(gòu)。使用AAD能夠?qū)?9個數(shù)組/向量問題的代碼塊進行組合,其中既有最大值、最小值,矩陣翻轉(zhuǎn)這類簡單問題,也有更具挑戰(zhàn)性的問題,如排序和矩陣向量乘法等,對于輸入沒有大小限制。
我們評估了解決這些問題策略的有效性,并證明了AAD具備解決“開箱即用”問題的能力。為了應(yīng)對復(fù)雜需求帶來的各種挑戰(zhàn),AAD工具還能實現(xiàn)與高性能計算(HPC)技術(shù)的結(jié)合??偟膩碚f,與現(xiàn)有技術(shù)相比,采用PGE的演化算法能夠解決類似或更高復(fù)雜性的問題。
-
算法
+關(guān)注
關(guān)注
23文章
4631瀏覽量
93423 -
生成器
+關(guān)注
關(guān)注
7文章
320瀏覽量
21149 -
python
+關(guān)注
關(guān)注
56文章
4810瀏覽量
85074
原文標(biāo)題:英特爾“演化算法”新框架:29個Python代碼塊,自動生成新算法
文章出處:【微信號:AI_era,微信公眾號:新智元】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
BP神經(jīng)網(wǎng)絡(luò)算法 python實現(xiàn)
![BP神經(jīng)網(wǎng)絡(luò)<b class='flag-5'>算法</b> <b class='flag-5'>python</b>實現(xiàn)](https://file1.elecfans.com//web2/M00/A7/1F/wKgZomUMQoKAGGIUAAAtLBusaZo440.png)
python基礎(chǔ):如何注釋代碼塊
![<b class='flag-5'>python</b>基礎(chǔ):如何注釋<b class='flag-5'>代碼</b><b class='flag-5'>塊</b>](https://file.elecfans.com/web1/M00/7C/68/o4YBAFwEozaAcC15AAA4ranj_cI741.png)
python初學(xué)者會遇到的29個操作難點
python設(shè)計一個簡單推薦系統(tǒng)的資料和完整代碼
10種聚類算法和Python代碼1
![10種聚類<b class='flag-5'>算法</b>和<b class='flag-5'>Python</b><b class='flag-5'>代碼</b>1](https://file.elecfans.com/web2/M00/92/ED/pYYBAGPy656AE9BQAAAxZGNOPWA613.jpg)
10種聚類算法和Python代碼2
![10種聚類<b class='flag-5'>算法</b>和<b class='flag-5'>Python</b><b class='flag-5'>代碼</b>2](https://file.elecfans.com/web2/M00/92/ED/pYYBAGPy656ADSUYAABDoGVIdtM055.jpg)
10種聚類算法和Python代碼3
![10種聚類<b class='flag-5'>算法</b>和<b class='flag-5'>Python</b><b class='flag-5'>代碼</b>3](https://file.elecfans.com/web2/M00/92/6B/poYBAGPy656AfTQdAAAzVW4rYhw349.jpg)
10種聚類算法和Python代碼4
![10種聚類<b class='flag-5'>算法</b>和<b class='flag-5'>Python</b><b class='flag-5'>代碼</b>4](https://file.elecfans.com/web2/M00/92/ED/pYYBAGPy656AFgcxAAA7jxuYKnY290.jpg)
評論