麻省理工公開課人工智能筆記十二

本節主要是講遺傳算法,然後我看了看,視頻內容和網絡上整理的差不多,網上的更詳細,所以直接粘過來了

 

01 什麼是遺傳算法?

1.1 遺傳算法的科學定義

遺傳算法(Genetic Algorithm, GA)是模擬達爾文生物進化論的自然選擇和遺傳學機理的生物進化過程的計算模型,是一種通過模擬自然進化過程搜索最優解的方法。

其主要特點是直接對結構對象進行操作,不存在求導和函數連續性的限定;具有內在的隱並行性和更好的全局尋優能力;採用概率化的尋優方法,不需要確定的規則就能自動獲取和指導優化的搜索空間,自適應地調整搜索方向。

遺傳算法以一種羣體中的所有個體爲對象,並利用隨機化技術指導對一個被編碼的參數空間進行高效搜索。其中,選擇、交叉和變異構成了遺傳算法的遺傳操作;參數編碼、初始羣體的設定、適應度函數的設計、遺傳操作設計、控制參數設定五個要素組成了遺傳算法的核心內容。

1.2 遺傳算法的執行過程(參照百度百科)

遺傳算法是從代表問題可能潛在的解集的一個種羣(population)開始的,而一個種羣則由經過基因(gene)編碼的一定數目的個體(individual)組成。每個個體實際上是染色體(chromosome)帶有特徵的實體。

染色體作爲遺傳物質的主要載體,即多個基因的集合,其內部表現(即基因型)是某種基因組合,它決定了個體的形狀的外部表現,如黑頭髮的特徵是由染色體中控制這一特徵的某種基因組合決定的。因此,在一開始需要實現從表現型到基因型的映射即編碼工作。由於仿照基因編碼的工作很複雜,我們往往進行簡化,如二進制編碼。

初代種羣產生之後,按照適者生存和優勝劣汰的原理,逐代(generation)演化產生出越來越好的近似解,在每一代,根據問題域中個體的適應度(fitness)大小選擇(selection)個體,並藉助於自然遺傳學的遺傳算子(genetic operators)進行組合交叉(crossover)和變異(mutation),產生出代表新的解集的種羣。

這個過程將導致種羣像自然進化一樣的後生代種羣比前代更加適應於環境,末代種羣中的最優個體經過解碼(decoding),可以作爲問題近似最優解。

1.3 遺傳算法過程圖解

image

02 相關生物學術語

爲了大家更好了解遺傳算法,在此之前先簡單介紹一下相關生物學術語,大家瞭解一下即可。

  • 基因型(genotype):性狀染色體的內部表現;

  • 表現型(phenotype):染色體決定的性狀的外部表現,或者說,根據基因型形成的個體的外部表現;

  • 進化(evolution):種羣逐漸適應生存環境,品質不斷得到改良。生物的進化是以種羣的形式進行的。

  • 適應度(fitness):度量某個物種對於生存環境的適應程度。

  • 選擇(selection):以一定的概率從種羣中選擇若干個個體。一般,選擇過程是一種基於適應度的優勝劣汰的過程。

  • 複製(reproduction):細胞分裂時,遺傳物質DNA通過複製而轉移到新產生的細胞中,新細胞就繼承了舊細胞的基因。

  • 交叉(crossover):兩個染色體的某一相同位置處DNA被切斷,前後兩串分別交叉組合形成兩個新的染色體。也稱基因重組或雜交;

  • 變異(mutation):複製時可能(很小的概率)產生某些複製差錯,變異產生新的染色體,表現出新的性狀。

  • 編碼(coding):DNA中遺傳信息在一個長鏈上按一定的模式排列。遺傳編碼可看作從表現型到基因型的映射。

  • 解碼(decoding):基因型到表現型的映射。

  • 個體(individual):指染色體帶有特徵的實體;

  • 種羣(population):個體的集合,該集合內個體數稱爲種羣

03 問題引出與解決

3.1 一元函數最大值問題

如下的函數圖像:

image

現在我們要在既定的區間內找出函數的最大值。

學過高中數學的孩紙都知道,上面的函數存在着很多的極大值和極小值。而最大值則是指定區間的極大值中的最大的那一個。從圖像上具體表現爲,極大值像是一座座山峯,極小值則是像一座座山谷。因此,我們也可以把遺傳算法的過程看作是一個在多元函數裏面求最優解的過程。

這些山峯對應着局部最優解,其中有一個山峯是海拔最高的,這個山峯則對應的是全局最優解。那麼,遺傳算法要做的就是儘量爬到最高峯,而不是困在較低的小山峯上。(如果問題求解是最小值,那麼要做的就是儘量走到最低谷,道理是一樣的)。

image

3.2 "袋鼠蹦跳"

既然我們把函數曲線理解成一個一個山峯和山谷組成的山脈。那麼我們可以設想所得到的每一個解就是一隻袋鼠,我們希望它們不斷的向着更高處跳去,直到跳到最高的山峯。所以求最大值的過程就轉化成一個“袋鼠跳”的過程。

下面介紹介紹“袋鼠跳”的幾種方式。

  • 爬山算法:一隻袋鼠朝着比現在高的地方跳去。它找到了不遠處的最高的山峯。但是這座山不一定是最高峯。這就是爬山算法,它不能保證局部最優值就是全局最優值。

  • 模擬退火:袋鼠喝醉了。它隨機地跳了很長時間。這期間,它可能走向高處,也可能踏入平地。但是,它漸漸清醒了並朝最高峯跳去。這就是模擬退火算法。

  • 遺傳算法:有很多袋鼠,它們降落到喜瑪拉雅山脈的任意地方。這些袋鼠並不知道它們的任務是尋找珠穆朗瑪峯。但每過幾年,就在一些海拔高度較低的地方射殺一些袋鼠。於是,不斷有袋鼠死於海拔較低的地方,而越是在海拔高的袋鼠越是能活得更久,也越有機會生兒育女。就這樣經過許多年,這些袋鼠們竟然都不自覺地聚攏到了一個個的山峯上,可是在所有的袋鼠中,只有聚攏到珠穆朗瑪峯的袋鼠被帶回了美麗的澳洲。

04 大體實現過程

遺傳算法中每一條染色體,對應着遺傳算法的一個解決方案,一般我們用適應性函數(fitness function)來衡量這個解決方案的優劣。所以從一個基因組到其解的適應度形成一個映射。遺傳算法的實現過程實際上就像自然界的進化過程那樣。

下面我們用袋鼠跳中的步驟一一對應解釋,以方便大家理解:

  1. 首先尋找一種對問題潛在解進行“數字化”編碼的方案。(建立表現型和基因型的映射關係)

  2. 隨機初始化一個種羣(那麼第一批袋鼠就被隨意地分散在山脈上),種羣裏面的個體就是這些數字化的編碼。

  3. 接下來,通過適當的解碼過程之後(得到袋鼠的位置座標)。

  4. 用適應性函數對每一個基因個體作一次適應度評估(袋鼠爬得越高當然就越好,所以適應度相應越高)。

  5. 用選擇函數按照某種規定擇優選擇(每隔一段時間,射殺一些所在海拔較低的袋鼠,以保證袋鼠總體數目持平。)。

  6. 讓個體基因變異(讓袋鼠隨機地跳一跳)。

  7. 然後產生子代(希望存活下來的袋鼠是多產的,並在那裏生兒育女)。

遺傳算法並不保證你能獲得問題的最優解,但是使用遺傳算法的最大優點在於你不必去了解和操心如何去“找”最優解。(你不必去指導袋鼠向那邊跳,跳多遠。)而只要簡單的“否定”一些表現不好的個體就行了。(把那些總是愛走下坡路的袋鼠射殺,這就是遺傳算法的精粹!)

由此我們可以得出遺傳算法的一般步驟:

  1. 隨機產生種羣。
  2. 根據策略判斷個體的適應度,是否符合優化準則,若符合,輸出最佳個體及其最優解,結束。否則,進行下一步。
  3. 依據適應度選擇父母,適應度高的個體被選中的概率高,適應度低的個體被淘汰。
  4. 用父母的染色體按照一定的方法進行交叉,生成子代。
  5. 對子代染色體進行變異。

由交叉和變異產生新一代種羣,返回步驟2,直到最優解產生。

具體圖解可以回到1.3查看。

05 開始我們的進化(具體實現細節)

5.1 先從編碼說起

編碼是應用遺傳算法時要解決的首要問題,也是設計遺傳算法時的一個關鍵步驟。編碼方法影響到交叉算子、變異算子等遺傳算子的運算方法,大很大程度上決定了遺傳進化的效率。

迄今爲止人們已經提出了許多種不同的編碼方法。總的來說,這些編碼方法可以分爲三大類:二進制編碼法、浮點編碼法、符號編碼法。下面分別進行介紹:

5.1.1 二進制編碼法

就像人類的基因有AGCT 4種鹼基序列一樣。不過在這裏我們只用了0和1兩種鹼基,然後將他們串成一條鍊形成染色體。一個位能表示出2種狀態的信息量,因此足夠長的二進制染色體便能表示所有的特徵。這便是二進制編碼。如下:
1110001010111

它由二進制符號0和1所組成的二值符號集。它有以下一些優點:

  1. 編碼、解碼操作簡單易行
  2. 交叉、變異等遺傳操作便於實現
  3. 合最小字符集編碼原則
  4. 利用模式定理對算法進行理論分析。

二進制編碼的缺點是:對於一些連續函數的優化問題,由於其隨機性使得其局部搜索能力較差,如對於一些高精度的問題(如上題),當解迫近於最優解後,由於其變異後表現型變化很大,不連續,所以會遠離最優解,達不到穩定。

5.1.2 浮點編碼法

二進制編碼雖然簡單直觀,但明顯地。但是存在着連續函數離散化時的映射誤差。個體長度較短時,可能達不到精度要求,而個體編碼長度較長時,雖然能提高精度,但增加了解碼的難度,使遺傳算法的搜索空間急劇擴大。

所謂浮點法,是指個體的每個基因值用某一範圍內的一個浮點數來表示。在浮點數編碼方法中,必須保證基因值在給定的區間限制範圍內,遺傳算法中所使用的交叉、變異等遺傳算子也必須保證其運算結果所產生的新個體的基因值也在這個區間限制範圍內。如下所示:

1.2-3.2-5.3-7.2-1.4-9.7

浮點數編碼方法有下面幾個優點:

  1. 適用於在遺傳算法中表示範圍較大的數
  2. 適用於精度要求較高的遺傳算法
  3. 便於較大空間的遺傳搜索
  4. 改善了遺傳算法的計算複雜性,提高了運算交率
  5. 便於遺傳算法與經典優化方法的混合使用
  6. 便於設計針對問題的專門知識的知識型遺傳算子
  7. 便於處理複雜的決策變量約束條件

5.1.3 符號編碼法

符號編碼法是指個體染色體編碼串中的基因值取自一個無數值含義、而只有代碼含義的符號集如{A,B,C…}。
符號編碼的主要優點是:

  1. 符合有意義積術塊編碼原則
  2. 便於在遺傳算法中利用所求解問題的專門知識
  3. 便於遺傳算法與相關近似算法之間的混合使用。

5.2 爲我們的袋鼠染色體編碼

在上面介紹了一系列編碼方式以後,那麼,如何利用上面的編碼來爲我們的袋鼠染色體編碼呢?首先我們要明確一點:編碼無非就是建立從基因型到表現型的映射關係。這裏的表現型可以理解爲個體特徵(比如身高、體重、毛色等等)。那麼,在此問題下,我們關心的個體特徵就是:袋鼠的位置座標(因爲我們要把海拔低的袋鼠給殺掉)。無論袋鼠長什麼樣,愛吃什麼。我們關心的始終是袋鼠在哪裏,並且只要知道了袋鼠的位置座標(位置座標就是相應的染色體編碼,可以通過解碼得出),我們就可以:

  1. 在喜馬拉雅山脈的地圖上找到相應的位置座標,算出海拔高度。(相當於通過自變量求得適應函數的值)然後判讀該不該射殺該袋鼠。
  2. 可以知道染色體交叉和變異後袋鼠新的位置座標。

回到3.1中提的求一元函數最大值的問題。在上面我們把極大值比喻爲山峯,那麼,袋鼠的位置座標可以比喻爲區間[-1, 2]的某一個x座標(有了x座標,再通過函數表達式可以算出函數值 <==> 得到了袋鼠染色體編碼,解碼得到位置座標,在喜馬拉雅山脈地圖查詢位置座標算出海拔高度)。這個x座標是一個實數,現在,說白了就是怎麼對這個x座標進行編碼。下面我們以二進制編碼爲例講解,不過這種情況下以二進制編碼比較複雜就是了。(如果以浮點數編碼,其實就很簡潔了,就一浮點數而已。)

我們說過,一定長度的二進制編碼序列,只能表示一定精度的浮點數。在這裏假如我們要求解精確到六位小數,由於區間長度爲2 - (-1) = 3 ,爲了保證精度要求,至少把區間[-1,2]分爲3 × 10^6等份。又因爲

2^21 = 2097152 < 3*10^6 < 2^22 = 4194304

所以編碼的二進制串至少需要22位。

把一個二進制串(b0,b1,....bn)轉化爲區間裏面對應的實數值可以通過下面兩個步驟:

  1. 將一個二進制串代表的二進制數轉化爲10進制數:

    image

  1. 對應區間內的實數:

    image

例如一個二進制串(1000101110110101000111)2通過上面換算以後,表示實數值0.637197。

好了,上面的編碼方式只是舉個例子讓大家更好理解而已,編碼的方式千奇百怪,層出不窮,每個問題可能採用的編碼方式都不一樣。在這一點上大家要注意。

5.3 評價個體的適應度--適應度函數(fitness function)

前面說了,適應度函數主要是通過個體特徵從而判斷個體的適應度。在本例的袋鼠跳中,我們只關心袋鼠的海拔高度,以此來判斷是否該射殺該袋鼠。這樣一來,該函數就非常簡單了。只要輸入袋鼠的位置座標,在通過相應查找運算,返回袋鼠當前位置的海拔高度就行。

適應度函數也稱評價函數,是根據目標函數確定的用於區分羣體中個體好壞的標準。適應度函數總是非負的,而目標函數可能有正有負,故需要在目標函數與適應度函數之間進行變換。

評價個體適應度的一般過程爲:

  1. 對個體編碼串進行解碼處理後,可得到個體的表現型。

  2. 由個體的表現型可計算出對應個體的目標函數值。

  3. 根據最優化問題的類型,由目標函數值按一定的轉換規則求出個體的適應度。

5.4 射殺一些袋鼠--選擇函數(selection)

遺傳算法中的選擇操作就是用來確定如何從父代羣體中按某種方法選取那些個體,以便遺傳到下一代羣體。選擇操作用來確定重組或交叉個體,以及被選個體將產生多少個子代個體。前面說了,我們希望海拔高的袋鼠存活下來,並儘可能繁衍更多的後代。但我們都知道,在自然界中,適應度高的袋鼠越能繁衍後代,但這也是從概率上說的而已。畢竟有些適應度低的袋鼠也可能逃過我們的眼睛。

那麼,怎麼建立這種概率關係呢?

下面介紹幾種常用的選擇算子:

  1. 輪盤賭選擇(Roulette Wheel Selection):是一種回放式隨機採樣方法。每個個體進入下一代的概率等於它的適應度值與整個種羣中個體適應度值和的比例。選擇誤差較大。

  2. 隨機競爭選擇(Stochastic Tournament):每次按輪盤賭選擇一對個體,然後讓這兩個個體進行競爭,適應度高的被選中,如此反覆,直到選滿爲止。

  3. 最佳保留選擇:首先按輪盤賭選擇方法執行遺傳算法的選擇操作,然後將當前羣體中適應度最高的個體結構完整地複製到下一代羣體中。

  4. 無回放隨機選擇(也叫期望值選擇Excepted Value Selection):根據每個個體在下一代羣體中的生存期望來進行隨機選擇運算。方法如下:

    (1) 計算羣體中每個個體在下一代羣體中的生存期望數目N。

    (2) 若某一個體被選中參與交叉運算,則它在下一代中的生存期望數目減去0.5,若某一個體未 被選中參與交叉運算,則它在下一代中的生存期望數目減去1.0。

    (3) 隨着選擇過程的進行,若某一個體的生存期望數目小於0時,則該個體就不再有機會被選中。

  5. 確定式選擇:按照一種確定的方式來進行選擇操作。具體操作過程如下:

    (1) 計算羣體中各個個體在下一代羣體中的期望生存數目N。

    (2) 用N的整數部分確定各個對應個體在下一代羣體中的生存數目。

    (3) 用N的小數部分對個體進行降序排列,順序取前M個個體加入到下一代羣體中。至此可完全確定出下一代羣體中M個個體。

  6. 無回放餘數隨機選擇:可確保適應度比平均適應度大的一些個體能夠被遺傳到下一代羣體中,因而選擇誤差比較小。

  7. 均勻排序:對羣體中的所有個體按期適應度大小進行排序,基於這個排序來分配各個個體被選中的概率。

  8. 最佳保存策略:當前羣體中適應度最高的個體不參與交叉運算和變異運算,而是用它來代替掉本代羣體中經過交叉、變異等操作後所產生的適應度最低的個體。

  9. 隨機聯賽選擇:每次選取幾個個體中適應度最高的一個個體遺傳到下一代羣體中。

  10. 排擠選擇:新生成的子代將代替或排擠相似的舊父代個體,提高羣體的多樣性。

下面以輪盤賭選擇爲例給大家講解一下:

假如有5條染色體,他們的適應度分別爲5、8、3、7、2。

那麼總的適應度爲:F = 5 + 8 + 3 + 7 + 2 = 25。

那麼各個個體的被選中的概率爲:

α1 = ( 5 / 25 ) * 100% = 20%

α2 = ( 8 / 25 ) * 100% = 32%

α3 = ( 3 / 25 ) * 100% = 12%

α4 = ( 7 / 25 ) * 100% = 28%

α5 = ( 2 / 25 ) * 100% = 8%

所以轉盤如下:

image

當指針在這個轉盤上轉動,停止下來時指向的個體就是天選之人啦。可以看出,適應性越高的個體被選中的概率就越大。

5.5 遺傳--染色體交叉(crossover)

遺傳算法的交叉操作,是指對兩個相互配對的染色體按某種方式相互交換其部分基因,從而形成兩個新的個體。

適用於二進制編碼個體或浮點數編碼個體的交叉算子:

  1. 單點交叉(One-point Crossover):指在個體編碼串中只隨機設置一個交叉點,然後再該點相互交換兩個配對個體的部分染色體。

  2. 兩點交叉與多點交叉:

    (1) 兩點交叉(Two-point Crossover):在個體編碼串中隨機設置了兩個交叉點,然後再進行部分基因交換。

    (2) 多點交叉(Multi-point Crossover)

  3. 均勻交叉(也稱一致交叉,Uniform Crossover):兩個配對個體的每個基因座上的基因都以相同的交叉概率進行交換,從而形成兩個新個體。

  4. 算術交叉(Arithmetic Crossover):由兩個個體的線性組合而產生出兩個新的個體。該操作對象一般是由浮點數編碼表示的個體。

咳咳,根據國際慣例。還是抓一個最簡單的二進制單點交叉爲例來給大家講解講解。

二進制編碼的染色體交叉過程非常類似高中生物中所講的同源染色體的聯會過程――隨機把其中幾個位於同一位置的編碼進行交換,產生新的個體。

image

對應的二進制交叉:

image

5.6 變異--基因突變(Mutation)

遺傳算法中的變異運算,是指將個體染色體編碼串中的某些基因座上的基因值用該基因座上的其它等位基因來替換,從而形成新的個體。

例如下面這串二進制編碼:

101101001011001

經過基因突變後,可能變成以下這串新的編碼:

001101011011001

以下變異算子適用於二進制編碼和浮點數編碼的個體:

  1. 基本位變異(Simple Mutation):對個體編碼串中以變異概率、隨機指定的某一位或某幾位僅因座上的值做變異運算。

  2. 均勻變異(Uniform Mutation):分別用符合某一範圍內均勻分佈的隨機數,以某一較小的概率來替換個體編碼串中各個基因座上的原有基因值。(特別適用於在算法的初級運行階段)

  3. 邊界變異(Boundary Mutation):隨機的取基因座上的兩個對應邊界基因值之一去替代原有基因值。特別適用於最優點位於或接近於可行解的邊界時的一類問題。

  4. 非均勻變異:對原有的基因值做一隨機擾動,以擾動後的結果作爲變異後的新基因值。對每個基因座都以相同的概率進行變異運算之後,相當於整個解向量在解空間中作了一次輕微的變動。

  5. 高斯近似變異:進行變異操作時用符號均值爲P的平均值,方差爲P**2的正態分佈的一個隨機數來替換原有的基因值。



作者:短短的路走走停停被搶注啦
鏈接:https://www.jianshu.com/p/ae5157c26af9
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

發佈了27 篇原創文章 · 獲贊 4 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章