给初学者们讲解人工神经网络(ANN)
生活随笔
收集整理的這篇文章主要介紹了
给初学者们讲解人工神经网络(ANN)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 介紹
這份教學包是針對那些對人工神經網絡(ANN)沒有接觸過、基本上完全不懂的一批人做的一個簡短入門級的介紹。我們首先簡要的引入網絡模型,然后才開始講解ANN的相關術語。作為一個應用的案例,我們解釋了后向傳播算法,畢竟這一算法已經得到廣泛應用并且許多別的算法也是從它繼承而來的。 讀者應該已經了解線性代數相關知識,也能解決一些函數和向量問題,如果掌握微積分知識更好但不是必須的。這份教學包的內容對一名高中畢業生來講就已經能理解了。同時,對那些對ANN感興趣或者想加深理解的人來說也是很有益處的。因此如果讀者能全部看完這邊教學包,應該對ANN的概念有個清楚的理解。另外對那些想運用后向傳播算法但又對晦澀難懂的公式細節不想深入理解的讀者來講,這份教學包你選對了!這份包不應看做是網絡上的科普讀物,但也不是一篇枯燥的研究論文。為了簡潔許多公式都刪除了,具體細節的解釋和演示在后面的參考書目里,讀者可以深入學習。書中的練習章節是用來測試讀者對理論知識的掌握程度的。作為對教學包的補充,列出了一些在線資源供讀者網上學習。2. 網絡
復雜問題的有效解決方法就是“分而治之”。為了理解的目的,可以把復雜系統分解成一些簡單的元素。同樣,簡單的元素也可集成為復雜系統[Bar Yam, 1997]。網絡就是一種可以達到這種目的的方法。雖然網絡的類型成千上萬,但網絡的基本元素是固定的:一系列的結點和連接結點之間的線。 這些點可以看做是運算單元。它們接受輸入、處理輸入、獲得輸出。有些處理過程可能就像計算輸入總和這么簡單,也有些可能會復雜一點,比如一個結點可能嵌入了另一個網絡。 結點之間的連線決定了結點之間的信息流動。它們可能是單向的,連線的兩個結點只能單向流動,也有可能是雙向的,連線上的兩個結點是相互流動的。 各結點通過連線相互交互產生了全局網絡行為,這種行為只通過網絡的基本元素是不可能觀察到的,稱這全局行為是“新顯”。也就是說,緊隨著網絡元素而來的網絡能力使網絡成為了一個強大有效的工具。 物理學、計算機科學、生物化學、行為學、數學、社會學、經濟學、電信和許多別的領域網絡已經被應用于建立基于各自領域的模型。這是因為許多系統本身就可以看做是一個網絡,比如:蛋白質、計算機、通訊等等。想想還有哪些別的系統也可以看做網絡?為什么?3. 人工神經網絡
有一種類型網絡把各個結點看做是“人工神經元”,這種網絡就叫做“人工神經網絡”(Artificial Neural Networks)。人工神經元就是受自然神經元靜息和動作電位的產生機制啟發而建立的一個運算模型。神經元通過位于細胞膜或樹突上的突觸接受信號。當接受到的信號足夠大時(超過某個門限值),神經元被激活然后通過軸突發射信號,發射的信號也許被另一個突觸接受,并且可能激活別的神經元。人工神經元模型已經把自然神經元的復雜性進行了高度抽象的符號性概括。神經元模型基本上包括多個輸入(類似突觸),這些輸入分別被不同的權值相乘(收到的信號強度不同),然后被一個數學函數用來計算決定是否激發神經元。還有一個函數(也許是不變,就是復制)計算人工神經元的輸出(有時依賴于某個門限)。人工神經網絡把這些人工神經元融合一起用于處理信息。
權值越大表示輸入的信號對神經元影響越大。權值可以為負值,意味著輸入信號收到了抑制。權值不同那么神經元的計算也不同。通過調整權值可以得到固定輸入下需要的輸出值。但是當ANN是由成百上千的神經元組成時,手工計算這些權值會變得異常復雜。這時就需要一些算法技巧。調整權重的過程稱為“學習”或者“訓練”。 ANN的類型和使用方式也有很多種。從McCulloch和Pitts(1943)建立第一個神經元模型起,已經產生了幾百個不同的也被稱為ANN的模型。這些模型之間的不同 也許是功能不同、也許是接受值和拓撲結構不同、也許是學習算法不同等等。同時也有一些混合模型,這些模型里的神經元有更多在上文中沒有提到的屬性。由于文章篇幅的原因,我們只講解使用后向傳播算法學習的ANN(Rumelhart and McClelland,1986)來學習合適的權值,這種ANN是所有ANNs里最通用的模型,并且許多模型都是基于它的。 由于ANNs是用來處理信息的,自然它被應用在與信息相關的領域。有許多的ANNs就是對真實神經元網絡進行建模,用來研究動物和機器的行為與控制,但是也有許多是用于工程的,比如:模式識別、預測、數據壓縮。
3.1 練習
這個練習的目的是熟悉人工神經網絡的概念。建立一個包含四個人工神經元的網絡。在網絡中兩個充當接受信號的輸入端,另外兩個充當發射信號的輸出端。每一個箭頭都有一個權值代表信息流的強度,這些值和通過箭頭的信號值相乘表示對信號的增強和衰減,這個網絡上的神經元只是簡單的把所有輸入到該神經元的信號求和。由于這里的輸入神經元上只有一個輸入值,因此這個神經元的輸出也只是輸入的權值與輸入的信號相乘的結果。如果權值是負值會發生什么?如果是零呢? 處于輸出層的每個神經元都接受到了來至輸入層神經元的輸出信號,這些輸出層神經元把收到的信號乘以各自的權值再求和作為自身的輸出。輸出信號再被權值相乘作為整個網絡的輸出。 現在把這些權值全都置為1,意味著信息流上的信號不會收到影響。請分別計算在下列不同輸入的條件下網絡的輸出是什么?輸入值:(1,1),(1,0),(0,1),(0,0),(-1,1),(-1,-1)。 很好,現在在(0.5,0,-0.5)中選擇權值并且隨機放在網絡的任意權值處。輸入值和上面的一樣,請計算輸出值。改變一些權值,看看網絡的行為發生了怎樣的變化。哪些權值具有舉足輕重的作用(也就是說改變這個權重值,網絡的輸出會發生較大變化)? 現在假如我們需要這樣的一個網絡,它可以把輸入值的順序進行調換(例如(0.3,0.7)->(0.7,0.3))。試一下怎么設置權值? 這很簡單的。還有一個簡單的網絡只是把輸入加倍輸出。你也可以試一試。 現在,給神經元設置門限值。神經元之前的輸出值如果大于神經元的門限值,這個神經元的輸出值就為1,否則為0。對現存的網絡設置門限,看看這些網絡的行為發生了什么改變。 現在,假設我們有這樣的網絡,輸入層神經元只接受0和1。調整權值和門限使網絡的第一個輸出值是網絡輸入的“邏輯與”運算(輸入值都為1時輸出值才為1,否則為0),使網絡第二個輸出的值是網絡輸出的“邏輯或”運算(輸入值都為0時輸出值才為0,否則為1)。你會發現滿足此種要求的網絡不止一種。 現在,雖然調整這么小的網絡的權值輕而易舉,但是這個網絡具有的能力也是渺小的。如果我們需要一個包含上百個神經元的網絡,為得到需要的輸出值你怎么調整這些權值?有許多種方法可以使用,我們將探索最通用的一種。
4. 后向傳播算法
后向傳播算法(Rumelhart and McClelland,1986)是應用在分層前饋式ANN上的一種算法。這就意味著人工神經元是根據不同層次來組織劃分的,并且是通過前向方式發送信號的,然后把錯誤率通過反饋方式傳播給后向上的神經元。網絡通過位于輸入層(input layer)的神經元收集輸入信號,網絡的輸出值是通過位于輸出層(output)的神經元給出的??赡艽嬖谝粚踊蛘叨鄬拥闹虚g隱藏層(hidden layers)。后向傳播算法使用監督學習,也就是說我們給這個算法提供了輸入值和本來想讓計算的輸出值,然后計算出誤差(真實值和計算值之間的誤差)。后向傳播算法的思想就在于學習完訓練樣本后誤差要盡量的小。訓練是以權值為任意值開始的,目的就是不停的調整權值,使誤差最小。 實現后向傳播算法的ANN里的神經元的激發函數是加權和(輸入的與各自的權值相乘后的和):可以看出激活函數只與輸入值和權值有關 如果輸出函數不變(輸出等于激活函數),稱神經元是線性的。但是這有嚴重的局限性。最通用的輸出函數是S型函數:
S型函數是這樣的函數:對于大的正數變量,函數的值漸漸趨近與1,對于大的負數變量,函數的值漸漸趨于0,在零點,函數的值為0.5。這就給神經元輸出的高低值有一個平穩的過度(接近于1或接近于0)。我們發現輸出只和激活函數有關,而激活函數又與輸入值和對應的權值有關。 現在,訓練的目標就變成了給定輸入值得到希望的輸出值。既然誤差是真實輸出值與希望輸出值的差值,并且誤差依賴于權值,我們需要調整權值來最小化誤差。我們可以為每個神經元的輸出定義一個誤差函數:
我們把輸出值與希望值的差做了平方,這樣可以保證誤差值都為正,因為差別越大誤差值也越大,差別越小誤差值也越小。網絡的誤差值就是簡單的把所有在輸出層上神經元的誤差求和:
后向傳播算法現在計算誤差是怎么隨著輸出值、輸入值和權重而變化的。我們理解了這些,就可以通過梯度下降法來調整權值了:
上面的公式可以按照下面的思路來理解:每個調整的值將會根據上次調整后權重與網絡誤差的依賴程度進行調整,這種依賴程度是關于的導數。每次調整的步長還依賴于。也就是說對誤差影響大的權值相比于影響小的,每次調整的值也比較大。公式(5)循環計算直到找到滿意的權值才停止(誤差很小了)。如果你對導數不理解,沒關系,你可以把它看著一個函數,并且在下文我將立即用線性代數來代替。如果你理解了,請自己寫出來然后和我這兒的做個比較。如果你還想詳細的理解關于后向傳播算法的推導過程,你可以根據我后面的推薦書籍進行查找,畢竟這已經超出了這份材料的范圍。 所以,我們只須求得關于的導數。這就是后向傳播算法的目標,我們需要得到這個反饋。首先,我們需要計算輸出值是怎么影響誤差的,它是關于的導數(來自公式(3))。
然后計算激活函數是怎么影響輸出的,其次是權值怎么影響激活函數的(來自公式(1)和(2)):
繼續推導(來自公式(6)和(7)):
因此,對于每個權值做如下調整(來自公式(5)和(8)):
我們可以使用公式(9)來訓練含有兩層的ANN?,F在我們想訓練再多一層的網絡還要考慮許多。如果我們想調整前面一層的權重(我們把它記為)。我們首先需要計算誤差是怎么依賴于來自上層的輸入的,而和權值無關。這很簡單,我們只須把公式(7),(8),(9)里的用代替。但是也需要知道網路的誤差是怎么隨而變化的。因此:
這里:
另外,假設有輸入值為、權重為的信號進入神經元(來自公式(7)):
如果我們還想增加一層,用同樣的方法計算誤差是怎么隨第一層的輸入和權值而變化的。我們只須對這些牽引稍加注意,畢竟每層的神經元個數是不一樣的,不能混淆。 對于實踐推理來說,實現后向傳播算法的ANNs不能有太多的層,因為花在計算上的時間是隨層數指數級別上升的。同時,還有許多具有更快學習速度的改進算法。
4.1 練習
如果你懂得編程,實現這個后向傳播算法,至少能用來訓練下面的網絡。要是你能實現后向傳播的通用算法(隨意幾層、每層有任意個神經元、任意個訓練序列),好好干吧。
如果你還不懂得編程,但是知道運用一些輔助工具(比如Matlab或者Mathematica),那么應用里面定義好的函數找到下面網絡的合適的權值吧,這些函數能讓你的工作變得輕松一點。
再如果你一點電腦經驗都沒有的話,還是通過手一步一步的算吧。
這里的網絡在輸入層有三個神經元,隱藏層有兩個,輸出層有三個。一般情況下訓練序列是很大的,但在這個練習里,我們只用一個訓練序列。當輸入為(1,0.25,-0.5)時,輸出應該為(1,-1,0)。記住,你應該以隨機的權值開始訓練。
5. 進一步閱讀
以下都是深入理解ANNs的大作:- Rojas, R. (1966). Neural Networks: A systematical Introduction. Springer, Berlin.
- Rumelhart, D. and J. McClelland (1986). Parallel Distributed Processing. MIT Press, Cambridge, Mass.
- Bar-Yam, Y. (1997). Dynamics of Complex Systems,Addison-Wesley.
- Kauffman, S. (1993). Origins of Order, Oxford University Press.
6. 在線資源
網絡上有大量的關于神經網絡的資源。EPFL基于Java applets開發的卓越案例和指導手冊。別的兩個教程是Universidad Politécnica de Madrid和倫敦科學、技術、醫學的帝國理工學院。另外作者自己一些關于神經網絡編程方面的Java代碼。7. 參考書目
- Bar-Yam, Y. (1997). Dynamics of Complex Systems. Addison-Wesley.
- Kauffman, S. (1993).?Origins of Order, Oxford University Press.
- McCulloch, W. and W. Pitts (1943). A Logical Calculus of the Ideas Immanent in Nervous Activity.Bulletin of Mathematical Biophysics, Vol. 5, pp. 115-133.
- Rojas, R. (1996). Neural Networks: A Systematic Introduction. Springer, Berlin.
- Rumelhart, D. and J. McClelland (1986). Parallel Distributed Processing. MIT Press, Cambridge,
- Mass.Young, D.Formal Computational Skills Course Notes.
總結
以上是生活随笔為你收集整理的给初学者们讲解人工神经网络(ANN)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言程序设计夏宽理第三版答案,(100
- 下一篇: php mysql while循环,PH