神經網絡+遺傳算法+遊戲=❤

這就是我創建AI的方式 徹底擊敗了這個遊戲!

神經網絡+遺傳算法+遊戲=❤

> A.I. plays the game

遊戲:規則與動作

首先,讓我描述一下游戲。 正如您可能從gif中猜到的那樣,該遊戲的目標是避免紅色橫條並將綠色生物向前移動。 您走得越遠,您的分數就會越高。 為了使遊戲逼真,我實現了重力,這意味著如果生物向上移動,它必須以給定的加速度下降。 但是它如何/何時跳躍? 為了能夠跳躍,它必須在地面上。 在此位置,生物可以在地面上施加作用力,地面將在其上施加反作用力。 這種反應將幫助它跳躍(就像我們跳躍一樣)。 該力的x分量將在x方向上產生加速度,並且在y方向上也是如此。

注意:為簡單起見,我沒有實現動作-反應機制,而是僅使用加速功能。 當生物在地面上時,可以確定它的x和y加速度!

神經網絡+遺傳算法+遊戲=❤

> Physics of jumping

面臨的挑戰是找到這些加速度的值,以便它可以安全地跳過下一個紅色條! 請注意,該生物在空中時無法改變其速度(為什麼?留給讀者看)。 與地面的碰撞是無彈性的,因此不會自動反彈。

建立人工智能

有許多方法可以解決這類問題。 在這裡,我將應用稱為神經進化的東西,它是神經網絡和遺傳算法的結合。

I.神經網絡(NN)

為了能夠"思考"(何時以及如何跳躍)生物,需要某種決策模型。 在我的方法中,我將神經網絡用作小朋友的大腦。 我使用了一個小nn,在輸入層包含6個節點,在隱藏層包含8個節點,在輸出層包含2個節點。 但是在這6個輸入節點中發生了什麼,在2個輸出節點中發生了什麼? 我們首先來看一下輸出節點。 2個節點決定兩個方向上的加速度值。 正如我之前所說,該生物只需確定其x加速度和y加速度即可。

神經網絡+遺傳算法+遊戲=❤

> The architecture of our NN showing input features and outputs

對於輸入節點,可以有許多可能的功能集。 目的是向大腦提供有關該生物當前狀態及其周圍環境的儘可能多的信息。 我正在使用這6條信息(您能提供一套更好的功能嗎?)

二。 遺傳算法(GA)

顧名思義,它與遺傳學有關。 這是一種進化算法,我們試圖模仿生物進化來找到給定問題的最佳解決方案。 我們從一組解決方案開始,然後從中選擇最佳解決方案,並讓它們不斷髮展。 寬鬆地說,每種遺傳算法都遵循5個步驟。

· 初始人口:初始解決方案。 每個解決方案都有確定其行為的某些基因(一組參數)。 基因在個體之間變化,這被稱為變異。

注意:如果初始種群沒有變化,那麼每個解決方案都會以完全相同的方式發展,我們將無法探索其他解決方案!

· 適應度函數:一種數學函數,通過為每個解決方案分配適應性得分來確定解決方案的適合度(最佳)。 這將對下一步有所幫助。

· 選擇:在這一步中,我們選擇最適合的個體,並允許他們將其遺傳信息傳遞給下一代。

· 交叉:將兩個(或多個)父母的基因結合起來,產生一個下一代。

· 變異:在將遺傳信息從當前一代轉移到下一代遺傳信息時,很少一部分信息會隨機更改。

注意:由於突變,將引入一些新的特徵(屬性),以"希望"使我們的解決方案更加優化。 "希望如此",因為誘變是隨機的,也可能產生負面影響!

三, 結合NN和GA

現在是大展示的時候了。 您將如何結合這兩種完全不同的算法? 主要思想是將nn(大腦)的權重視為基因。 最初,我們從250個生物組成,每個生物都有其獨立的大腦。 為了改變總體,我們隨機初始化這些神經網絡的權重。 我們將最好的權重傳遞給下一代。 您將如何確定哪個球更好? 我們將使用健身得分。 就我而言,適應度得分是該生物覆蓋的距離的線性函數。 因此,距離最大的生物產生後代的可能性更大。 因此,他們的nn的權重將被轉移到下一代。 現在,讓我在這裡提及一些細節…

i)我沒有使用交叉的概念,因此一個生物可以在不與另一個生物交配的情況下創造其後代。

ii)創建後代(在這種情況下)是指複製一個生物的nn的權重,並在添加一些突變後使用先前生物的權重製作一個新的nn。

iii)突變不過是隨機改變一小部分重量(通常小於2%)的重量而已。

一遍又一遍地執行此過程,以模仿生物進化,並經過許多代人,我們希望獲得一些具有最佳權重的生物。 換句話說,經過幾代人之後,我們將有一些小傢伙可以決定x和y加速度的值,以便它可以跳過下一個紅色條。 在機器學習方面,我們已經成功地訓練了我們的模型:D

但是我們從未使用過反向傳播!

在傳統的深度學習中,我們使用基於梯度的優化技術(aka反向傳播)來訓練神經網絡。 在這種情況下,我們採用最後一層的錯誤並傳播其反向詞,然後在每一層中計算梯度,並根據此值更改相應層的權重。 但是在這種情況下(GA + NN),我們無法執行反向傳播。 為什麼? 因為我們無法從最後一層計算誤差(因為我們不瞭解基本事實)。 我們完全依賴於學習的選擇和變異。

想看人工智能 學習? 這是視頻…

訪問網絡應用…

https://suji04.github.io/jumpingameAI/

遊戲代碼和AI …

https://github.com/Suji04/jumpingameAI

(本文翻譯自Sujan Dutta的文章《Neural Network + Genetic Algorithm + Game = ❤》,參考:https://towardsdatascience.com/neural-network-genetic-algorithm-game-15320b3a44e3)


分享到:


相關文章: