天天看點

<神經網絡入門>連載3<神經網絡入門>連載3 4. 聰明的掃雷機工程(Smart Minesweeper Project)

<神經網絡入門>連載3

4. 聰明的掃雷機工程

(Smart Minesweeper Project)

....我要向你介紹的第一個完整例子,是怎麼使用神經網絡來控制具有人工智能的掃雷機的行為。掃雷機工作在一個很簡單的環境中,那裡隻有掃雷機以及随機散布的許多地雷。

&lt;神經網絡入門&gt;連載3&lt;神經網絡入門&gt;連載3 4. 聰明的掃雷機工程(Smart Minesweeper Project)

圖7 運作中的示範程式。

盡管書上圖形畫成了黑白色,但當你運作程式時性能最好的掃雷機将顯現為紅色。地雷,你可能已經猜到,就是那些小方形。工程的目标是建立一個網絡,它不需要從我們這裡得到任何幫助,就能自己進行演化(evolve)去尋找地雷。為了實作這一功能,網絡的權重将被編碼到基因組中,并用一個遺傳算法來演化它們。 

....怎麼樣,很酷吧?

提示(重要) 

如果你跳過前面的一些章節來到這裡,而你又不了解怎樣使用遺 傳算法,則在進一步閱讀下面的内容之前,你應回到前面去補讀一下有關遺傳算法的内容。

....首先讓我解釋人工神經網絡(ANN)的體系結構。我們需要決定輸入的數目、輸出的數目、還有隐藏層和每個隐藏層中隐藏單元的數目。

4.1 選擇輸出

....人工神經網絡怎樣控制掃雷機的行動呢?為了回答這一問題,我們把掃雷機想象成和坦克車一樣,通過左右2個能轉動的履帶式輪軌(track)來行動的。見圖案9.8。

&lt;神經網絡入門&gt;連載3&lt;神經網絡入門&gt;連載3 4. 聰明的掃雷機工程(Smart Minesweeper Project)

圖8 掃雷機的控制

掃雷機向前行進的速度,以及向左、向右轉彎的角度,都是通過改變2個履帶輪的相對速度來實作的。是以,神經網絡需要2個輸入,1個是左側履帶輪的速度,另一個是右側履帶輪的速度。 

 .啊,但是..., 我聽見你在嘀咕了。 如果網絡隻能輸出一個1或一個0,我們怎麼能控制車軌移動的快慢呢? 你是對的;如果利用以前描述的階躍函數來決定輸出,我們就根本無法控制掃雷機實際移動。幸好,我有一套戲法,讓我卷起袖子來,把激勵函數的輸出由階躍式改變成為在0-1之間連續變化的形式,這樣就可以供掃雷機神經細胞使用了。為此,有幾種函數都能做到這樣,我們使用的是一個被稱為邏輯斯蒂S形函數(logistic sigmoid function)[譯注1]。該函數所實作的功能,本質上說,就是把神經細胞原有的階躍式輸出曲線鈍化為一光滑曲線,後者繞y軸0.5處點對稱[譯注2],如圖9所示。 

[譯注1] logistic有'計算的'或'符号邏輯的'等意思在内,和'邏輯的(logic)'意義不同。 

[譯注2] 點對稱圖形繞對稱點轉180度後能與原圖重合。若f(x)以原點為點對稱,則有f(-x)=-f(x)

&lt;神經網絡入門&gt;連載3&lt;神經網絡入門&gt;連載3 4. 聰明的掃雷機工程(Smart Minesweeper Project)

圖9 S形曲線。

當神經細胞的激勵值趨于正、負無窮時,S形函數分别趨于1或0。負的激勵值對應的函數值都<0.5; 正激勵值對應的函數值都>0.5。S形函數用數學表達式寫出來則為:

&lt;神經網絡入門&gt;連載3&lt;神經網絡入門&gt;連載3 4. 聰明的掃雷機工程(Smart Minesweeper Project)

這個方程看上去可能會吓唬一些人,但其實很簡單。e是數學常數,近似等于2.7183,a是神經細胞的激勵值,它是函數的自變量,而p是一個用來控制曲線形狀變化快慢或陡峭性的參數。p通常設定為1。當p賦以較大值時,曲線就顯得平坦,反之,就會使曲線變為陡峭。見圖1O。很低的p值所生成的函數就和階躍函數近似。P值的大小用來控制何時使神經網絡由低變高開始翻轉有很大作用,但是在本例子中我們将它保持為1。 

注:“S型”的英文原名Sigmoid 或Sigmoidal 原來是根據希臘字“Sigma”得來的,但非常巧它也可以說成是曲線的一種形狀。

&lt;神經網絡入門&gt;連載3&lt;神經網絡入門&gt;連載3 4. 聰明的掃雷機工程(Smart Minesweeper Project)

圖7。10 不同的S形響應曲線。

4.2 選擇輸入層

上面我們已經把輸出安排好了,現在我們來考慮輸入,确定網絡需要什麼樣的輸入?為此,我們必須想象一下掃雷機的具體細節:需要什麼樣的資訊才能使它朝地雷前進?你可能想到的第一個輸入資訊清單是:

  • 掃雷機的位置(x1,y1)
  • 與掃雷機最靠近的地雷的位置(x2,y2)
  • 代表掃雷機前進方向的向量(x3,y3)

這樣一共得到6個輸入。但是,要網絡使用這些輸入,工作起來就非常困難,因為,網絡在像我們希望的那樣執行工作之前,必須尋找所有6個輸入之間的數學關系,而這有相當工作量。可以把此作為一個練習倒是很理想的:去試試如何給出最少數量的輸入而仍能為網絡傳達解決問題所需要的全部資訊。 你的網絡使用的輸入愈少,網絡所要求的神經細胞數目也愈少。而較少的神經細胞就意味更快速的訓練和更少的計算,有利于網絡更高速度的工作。 

隻要作少量的額外考慮,就能把輸入個數減少為4,這就是圖11中所畫出的兩個向量的4個參數。 

把神經網絡的所有輸入進行規範化是一種好想法。這裡的意思并不是說每個輸入都要改變大小使它們都在0~1間,而是說每一個輸入應該受到同等重視。例如,拿我們已經讨論過的掃雷機輸入為例。瞄準向量或視線向量(look-at vector)總是一個規範化向量,即長度等于1,分量x和y都在0~1間。但從掃雷機到達其最近地雷的向量就可能很大,其中的一個分量甚至有可能和窗體的寬度或高度一樣大。如果這個資料以它的原始狀态輸入到網絡,網絡對有較大值的輸入将顯得更靈敏,由此就會使網絡性能變差。是以,在資訊輸入到神經網絡中去之前,資料應預先定比(scaled)和标準化(standardized),使它們大小相似(similar)。在本特例中,由掃雷機引到與其最接近地雷的向量需要進行規範化(normalized)。這樣可以使掃雷機的性能得到改良。 

&lt;神經網絡入門&gt;連載3&lt;神經網絡入門&gt;連載3 4. 聰明的掃雷機工程(Smart Minesweeper Project)

圖11 選擇輸入。

小技巧: 

....有時,你把輸入資料重新換算(rescale)一下,使它以0點為中心,就能從你的神經網絡獲得最好的性能。這一小竅門在你設計網絡時永遠值得一試。但我在掃雷機工程中沒有采用這一方法,這是因為我想使用一種更直覺的方法。

4.3 隐藏的神經細胞要多少?

到此我們已把輸入、輸出神經細胞的數目和種類确定下來了,下一步是确定隐藏層的數目,并确定每個隐藏層中神經細胞必須有多少?但遺憾的是,還沒有一種确切的規則可用來計算這些。它們的開發又需要憑個人的“感覺”了。某些書上和文章中确實給過一些提綱性的東西,告訴你如何去決定隐藏神經細胞個數,但業内專家們的一緻看法是:你隻能把任何建議當作不可全信的東西,主要還要靠自己的不斷嘗試和失敗中獲得經驗。但你通常會發現,你所遇到的大多數問題都隻要用一個隐藏層就能解決。是以,本領的高低就在于如何為這一隐藏層确定最合适的神經細胞數目了。顯然,個數是愈少愈好,因為我前面已經提及,數目少的神經細胞能夠造就快速的網絡。通常,為了确定出一個最優總數,我總是在隐藏層中采用不同數目的神經細胞來進行試驗。我在本章所編寫的神經網絡工程的.

第一版本中一共使用了10個隐藏神經細胞(當然,我的這個數字也不一定是最好的<一笑>)。你應圍繞這個數字的附近來做遊戲,并觀察隐藏層神經細胞的數目對掃雷機的演化會産生什麼樣的影響。不管怎樣,理論已經夠了,讓我們拿一個具體程式來看看吧!你可以在本書所附CD光牒的Chapter7/Smart Sweepers v1.0檔案夾中找到本章下面幾頁即将描述的所有程式的源碼。

需要源碼的可以留言,我這裡有,可以發給你,有時間我會上傳源碼的

版權聲明:本文為CSDN部落客「weixin_34148456」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。

原文連結:https://blog.csdn.net/weixin_34148456/article/details/91707674

繼續閱讀