對于一個給定的感知器來說,它的權重和閾值也是給定的,代表一種決策策略。因此,我們可以通過調整權重和閾值來改變這個策略。
關于閾值threshld,這里需要指出的一點是,為了表達更方便,一般用它的相反數來表達:bthreshld,這里的b被稱為偏置。
這樣,前面計算輸出的規則就修改為:如果x2x23x3...b≈gt;0,則輸出utput,否則輸出utput0。
而權重22,則b3。
很明顯,只有當xx2的時候,utput0,因為3,小于0。而其它輸入的情況下,都是utput。
所以在實際情況下,這其實是一個“與非門”!
在計算機科學中,與非門是所有門部件中比較特殊的一個,它可以通過組合的方式表達任何其它的門部件。這被稱為與非門的普適性。
既然感知器能夠通過設置恰當的權重和偏置參數,來表達一個與非門,那么理論上它也就能表達任意其它的門部件。
因此,感知器也能夠像前面三體中的例子一樣,通過彼此連接從而組成一個計算機系統。
但這似乎沒有什么值得驚喜的,我們已經有現成的計算機了,這只不過是讓事情復雜化了而已。
單個感知器能做的事情很有限。要做復雜的決策,所以則是需要將多個感知器連接起來。
而實際中的網絡可能會有上萬個,甚至數十萬個參數,如果手工一個一個地去配置這些參數,恐怕這項任務永遠也完成不了了。
而神經網絡最有特色的地方就在于這里。
我們不是為網絡指定所有參數,而是提供訓練數據,讓網絡自己在訓練中去學習,在學習過程中為所有參數找到最恰當的值。
大體的運轉思路是這樣:我們告訴網絡當輸入是某個值的時候,我們期望的輸出是什么,這樣的每一份訓練數據,稱為訓練樣本。
這個過程相當于老師在教學生某個抽象的知識的時候,舉一個具體例子:
一般來說,我們舉的例子越多,就越能表達那個抽象的知識。這在神經網絡的訓練中同樣成立。
我們可以向網絡灌入成千上萬個訓練樣本,然后網絡就自動從這些樣本中總結出那份隱藏在背后的抽象的知識。
這份知識的體現,就在于網絡的所有權重和偏置參數的取值。
假設各個參數有一個初始值,當我們輸入一個訓練樣本的時候,它會根據當前參數值計算出唯一的一個實際輸出值。
這個值可能跟我們期望的輸出值不一樣。想象一下,這時候,我們可以試著調整某些參數的值,讓實際輸出值和期望輸出值盡量接近。
當所有的訓練樣本輸入完畢之后,網絡參數也調整到了最佳值,這時每一次的實際輸出值和期望輸出值已經無限接近,這樣訓練過程就結束了。
假設在訓練過程中,網絡已經對數萬個樣本能夠給出正確的反應了,那么再給它輸入一個它沒見過的數據,它也應該有很大概率給出我們預期的決策。這就是一個神經網絡工作的原理。
但這里還有一個問題,在訓練過程中,當實際輸出值和期望輸出值產生差異的時候,要如何去調整各個參數呢?
當然,在思考怎么做之前,也應該先弄清楚:通過調整參數的方式獲得期望的輸出,這個方法行得通嗎?
實際上,對于感知器網絡來說,這個方法基本不可行。
比如在上圖有39個參數的感知器網絡中,如果維持輸入不變,我們改變某個參數的值,那么最終的輸出基本完全不可預測。
它或者從0變到,當然也可能維持不變。這個問題的關鍵在于:輸入和輸出都是二進制的,只能是0或者。
如果把整個網絡看成一個函數,那么這個函數不是連續的。
因此,為了讓訓練成為可能,我們需要一個輸入和輸出能夠在實數上保持連續的神經網絡。于是,這就出現了sigid神經元。
sigid神經元是現代神經網絡經常使用的基本結構。它與感知器的結構類似,但有兩個重要的區別。
第一,它的輸入不再限制為0和,而可以是任意0之間的實數。
第二,它的輸出也不再限制為0和,而是將各個輸入的加權求和再加上偏置參數,經過一個稱為sigid函數的計算作為輸出。
具體來說,假設zx2x23x3...b,那么輸出utputσ,其中:σ/。
σ是一個平滑、連續的函數。而且,它的輸出也是0之間的實數,這個輸出值可以直接作為下一層神經元的輸入,保持在0之間。
可以想象,在采用sigid神經元組裝神經網絡之后,網絡的輸入和輸出都變為連續的了,也就是說,當我們對某個參數的值進行微小的改變的時候,它的輸出也只是產生微小的改變。這樣就使得逐步調整參數值的訓練成為可能。
在歷史上,很多研究人員曾經也做過嘗試,ihaelNielsen的書《NeuralNetrksandDeepLearning》這本書中也曾經提到過這個例子。
這個神經網絡只有一層隱藏層,屬于淺層的神經網絡。而真正的深度神經網絡,那么就會有多層隱藏層。
神經元系統采用了左右腦半球的設計方式進行設計和制造。
最右側則是輸出層,有0個神經元節點,分別代表識別結果是0,,2,...,9。當然,受sigid函數σ的限制,每個輸出也肯定是0之間的數。
那我們得到一組輸出值之后,哪個輸出的值最大,最終的識別結果就是它。
而在訓練的時候,輸出的形式則是:正確的那個數字輸出為,其它輸出為0,隱藏層和輸出層之間也是全連接。
神經網絡共的權重參數有7455090個,偏置參數有5025個,總共參數個數為:9025935個。
這是一個非常驚人的數字。