作者:陳揚
編輯:田旭
簡(jiǎn) 介
url:[https://arxiv.org/pdf/1703.01513](https://arxiv.org/pdf/1703.01513)
這篇文章講述了如何用傳統的遺傳算法,生成卷積神經(jīng)網(wǎng)絡(luò ),傳統的遺傳算法可以幫助我們調整參數調,這里我們把網(wǎng)絡(luò )參數化,通過(guò)遺傳算法調整我們的DNA序列,然后生成不同的網(wǎng)絡(luò )結構。好探索我們的網(wǎng)絡(luò )結構是否可以達到像我們人工設計的網(wǎng)絡(luò )一樣具有高效的泛化能力和識別能力。這樣我們??梢酝ㄟ^(guò)自動(dòng)生成網(wǎng)絡(luò )來(lái)設計網(wǎng)絡(luò )的方法幫助人設計神經(jīng)網(wǎng)絡(luò ),也是元學(xué)習的一個(gè)基礎。我寫(xiě)這篇論文的目的也是為我第二篇論文筆記通過(guò)強化學(xué)習設計網(wǎng)絡(luò )結構探索網(wǎng)絡(luò )結構的一個(gè)基礎性的工作。
再扯點(diǎn)別的知識
什么是遺傳算法:
在遺傳算法中,一個(gè)個(gè)體一般只包含一條染色體。染色體上包含這一組基因組。
遺傳算法
基因型(genotype):性狀染色體的內部表現
表現型(phenotype):染色體決定的性狀的外部表現,或者說(shuō),根據基因型形成的個(gè)體的外部表現;
進(jìn)化(evolution):種群逐漸適應生存環(huán)境,品質(zhì)不斷得到改良。生物的進(jìn)化是以種群的形式進(jìn)行的。
適應度(fitness):度量某個(gè)物種對于生存環(huán)境的適應程度。
選擇(selection):以一定的概率從種群中選擇若干個(gè)個(gè)體。一般,選擇過(guò)程是一種基于適應度的優(yōu)勝劣汰的過(guò)程。
復制(reproduction):細胞分裂時(shí),遺傳物質(zhì)DNA通過(guò)復制而轉移到新產(chǎn)生的細胞中,新細胞就繼承了舊細胞的基因。
交叉(crossover):兩個(gè)染色體的某一相同位置處DNA被切斷,前后兩串分別交叉組合形成兩個(gè)新的染色體。也稱(chēng)基因重組或雜交;
變異(mutation):復制時(shí)可能(很小的概率)產(chǎn)生某些復制差錯,變異產(chǎn)生新的染色體,表現出新的性狀。
編碼(coding):DNA中遺傳信息在一個(gè)長(cháng)鏈上按一定的模式排列。遺傳編碼可看作從表現型到基因型的映射。
解碼(decoding):基因型到表現型的映射。
個(gè)體(individual):指染色體帶有特征的實(shí)體;
種群(population):個(gè)體的集合,該集合內個(gè)體數稱(chēng)為種群
遺傳算法中每一條染色體,對應著(zhù)遺傳算法的一個(gè)解決方案,一般我們用適應性函數(fitness function)來(lái)衡量這個(gè)解決方案的優(yōu)劣。所以從一個(gè)基因組到其解的適應度形成一個(gè)映射??梢园堰z傳算法的過(guò)程看作是一個(gè)在多元函數里面求最優(yōu)解的過(guò)程??梢赃@樣想象,這個(gè)多維曲面里面有數不清的“山峰”,而這些山峰所對應的就是局部最優(yōu)解。而其中也會(huì )有一個(gè)“山峰”的海拔最高的,那么這個(gè)就是全局最優(yōu)解。而遺傳算法的任務(wù)就是盡量爬到最高峰,而不是陷落在一些小山峰。(另外,值得注意的是遺傳算法不一定要找“最高的山峰”,如果問(wèn)題的適應度評價(jià)越小越好的話(huà),那么全局最優(yōu)解就是函數的最小值,對應的,遺傳算法所要找的就是“最深的谷底”)
好吧這些都是題外話(huà),要是你真的想了解GE,我給你我的gtihub的代碼:(
https://github.com/harvitronix/neural-network-genetic-algorithm)
01
我們現在可以吧一個(gè)神經(jīng)網(wǎng)絡(luò )變成一段01字符串序列,然后通過(guò)對這段DNA序列進(jìn)行我們生物學(xué)的:過(guò)度繁殖,自然選擇(俄羅斯轉輪不均勻選擇),適者生存。
這個(gè)問(wèn)題的關(guān)鍵是我們如何把這個(gè)網(wǎng)絡(luò )參數化?
文章的方法是:設計競爭網(wǎng)絡(luò )結構的遺傳算法。 首先,我們描述一種用固定長(cháng)度的二進(jìn)制串表示網(wǎng)絡(luò ) 結構的方法。約束情況下為網(wǎng)絡(luò )結構提供二進(jìn)制字符串表示
我大概解釋一下,他這個(gè)連接的方式。第一個(gè)1是指A2聯(lián)A1,然后00是指A3沒(méi)有連接A1和A2然后111是指A4鏈接了A1,A2,A3。
stage2中的B2因為既沒(méi)有入點(diǎn)有沒(méi)有出點(diǎn),相當于DNA序列中的無(wú)效基因片段。
·In each stage, we use 1+2+...+(Ks 1) = 1 Ks (Ks 1) bits to encode the inter-node connections.
相當于O(n^2)的復雜度
這樣我們就可以生成許多有趣的結構
嗯,這個(gè)網(wǎng)絡(luò )是什么,我就不解釋了吧,但是呢我們發(fā)現的,是他有一些結構,比如那MAXOUT的它是生成不出來(lái)的,而且他生成了網(wǎng)絡(luò )中,他的conv也好知道pooling要好AP化層也好,他都是固定的格式,包括卷積核的大小它也是固定了的,等于說(shuō)他只是能夠生成不同的網(wǎng)絡(luò )結構,但是在這個(gè)具體的參數上他都是已經(jīng)定死了的一個(gè)東西,所以說(shuō)他最大的問(wèn)題就是我能生成這樣類(lèi)似的網(wǎng)絡(luò )結構,但是我的參數是定時(shí)的,這樣子他就會(huì )失去它的靈活性。如實(shí)驗所示,我們可以?xún)H使用這些 基本構建塊來(lái)實(shí)現競爭性識別性能。 正如最 發(fā)表的 使用強化學(xué)習探索神經(jīng)結構的工作所顯示的那樣 , 這種類(lèi)型的方法通常需要大量的計算來(lái)遍歷巨大的解決方案空間。他的計算量就是這么大,所以我們的方法就是想生成的網(wǎng)絡(luò )現在MNIST上跑,然后跑到好了,我們再把它放到西法時(shí)(CIFAR10)上去跑。
02
遺傳操作:它從初始化的一 代隨機化個(gè)體開(kāi)始。 然后,我們執行T輪或T代,每輪 由三個(gè)操作組成,即選擇,變異和交叉。(呵呵前面介紹了這么多GE algorithm他都沒(méi)有用上)。
首先我們輸入一個(gè)數據dataset,遺傳的代數T還有我們要的這個(gè)網(wǎng)絡(luò )的大小N,嗯,然后我們進(jìn)行一個(gè)迭代的過(guò)程,首先是我們對初始網(wǎng)絡(luò )進(jìn)行一個(gè)隨機參數初始化,然后我們再進(jìn)行一個(gè)選擇,選擇簡(jiǎn)單的說(shuō)就是在那個(gè)訓練局現在完之后跑一下他的正確率然后一個(gè)優(yōu)勝劣汰保存他的DNA,之后我們再對這個(gè)網(wǎng)絡(luò )進(jìn)行一個(gè)交叉,是根據概率PC和QC(因為技術(shù)細節我們組里不讓講太清楚。)然后。然后就是突變,也是基于一個(gè)概率pm和qm。在這一代自然選擇完了之后我們隊這一整袋的基因進(jìn)行一個(gè)整體性的評估evaluation 如果MT,N先前被評估過(guò),我們就簡(jiǎn)單再次評估并計算其所有事件的平均精確度。這種策略至少在一定程度上減輕了訓練過(guò)程中隨機性引起的不穩定性。
最后,我們把這些新編的碼放到了下一代的自然選擇中。
上面這幅圖演示了一個(gè)進(jìn)化的過(guò)程。具體那些網(wǎng)絡(luò )是什么?你應該看得懂
03
遵循基本的LeNet進(jìn)行MNIST識別。 原始網(wǎng)絡(luò )縮寫(xiě) 為:
C5 @ 20 MP2S2-C5 @ 50 MP2S2-FC500-D0.5-FC10。 這里,C5 @ 20是一個(gè)具有內核大小的卷積層 5,缺省空間步幅1和內核20的數量;MP2S2是一個(gè)內核大小為2和空間跨度為2的最大池層, FC500是一個(gè)具有500個(gè)輸出的完全連接層,D0.5是具 有下降比率的丟棄層0.5。 我們應用20個(gè)訓練時(shí)期,學(xué)習率為10-3,其次為4個(gè)時(shí)期, 學(xué)習率為10-4,另一個(gè)時(shí)間為10,學(xué)習率為10-5(這是一種常見(jiàn)的優(yōu)化策略用于平均訓練時(shí)間和精度)。
我們創(chuàng )建一個(gè)N = 20個(gè)個(gè)體的初始代,并 行T = 50 個(gè)循環(huán)的遺傳過(guò)程。 其他參數設置為pM= 0.8,qM= 0.1, pC= 0.2和qC= 0.3。 我們設置相對較高的突變和交叉概率 來(lái)促進(jìn)新結構的產(chǎn)生。 探索個(gè)體的最大數量是20(50 + 1)= 1,020 <8,192。 每個(gè)人的訓練階段在現代titan-x="">8,192。>
經(jīng)過(guò)50代后,最佳個(gè)體的識別錯 誤率從0.41%下降到0.34%
等等我找一張圖:

我們可以看得出來(lái)他進(jìn)化的效果非常的不明顯啊,而且從他的顏色分布你就可以看到出來(lái)。我們想到了一個(gè)很好的解決方案,但是因為涉及到組里面現在的工作,我就不在這里寫(xiě)出來(lái)啦。
04
再對比一下CIFAR10

我們可以到看得到他最大的問(wèn)題,就是他這個(gè)網(wǎng)絡(luò )結構,首先它的層數是固定的,第二個(gè)是他的進(jìn)化及其的不明顯。極其的不明顯,而且他的就是最大的問(wèn)題就是我們浪費了太多多的時(shí)間在這個(gè)進(jìn)化。相反,它的這個(gè)結構其實(shí)是很少的,并沒(méi)有表現出良好的泛化能力。我們完全有理由相信,我們即便是不進(jìn)化,我們也依然可以生存出很好的效果。對,就是我們工作的一個(gè)努力方向。當然,具體的方法我還是不會(huì )說(shuō)出來(lái)。(確實(shí)是我隱藏在了MD里面)
05
總結
哦,我講一下我的總結的經(jīng)驗吧,這是我自己第一次在把論文上“開(kāi)荒”,應該是沒(méi)有人寫(xiě)過(guò)的論文筆記,這個(gè)是我自己寫(xiě)的,網(wǎng)絡(luò )上第一個(gè)。還是可以的吧,開(kāi)荒的過(guò)程中,其實(shí)遇到了蠻多的問(wèn)題去學(xué)習,包括我之前不知道的一些基本的操作也好啊,包括以前很多參數上的具體的調整的細節也是要靠自己去閱讀。更多的是我也學(xué)到了很多常見(jiàn)的數據集比如MNIST還有CIFAR10,還有常見(jiàn)的網(wǎng)絡(luò )結構VGG,Resnet,densenet,Lenet,googleNet等等
我覺(jué)得開(kāi)荒的過(guò)程中也是學(xué)習的一個(gè)過(guò)程,這篇文章我差不多開(kāi)了三天的荒。

END
聯(lián)系客服