但這裡還有一個問題,在訓練過程中,當實際輸出值和期望輸出值產生差異的時候,要如何去調整各個引數呢?
當然,在思考怎麼做之前,也應該先弄清楚:透過調整引數的方式獲得期望的輸出,這個方法行得通嗎?
實際上,對於感知器網路來說,這個方法基本不可行。
比如在上圖有39個引數的感知器網路中,如果維持輸入不變,我們改變某個引數的值,那麼最終的輸出基本完全不可預測。
它或者從0變到1(或從1變到0),當然也可能維持不變。這個問題的關鍵在於:輸入和輸出都是二進位制的,只能是0或者1。
如果把整個網路看成一個函式(有輸入,有輸出),那麼這個函式不是連續的。
因此,為了讓訓練成為可能,我們需要一個輸入和輸出能夠在實數上保持連續的神經網路。於是,這就出現了sigmoid神經元。
&noid神經元(sigmoidneuron是現代神經網路經常使用的基本結構(當然不是唯一的結構)。它與感知器的結構類似,但有兩個重要的區別。
第一,它的輸入不再限制為0和1,而可以是任意0~1之間的實數。
第二,它的輸出也不再限制為0和1,而是將各個輸入的加權求和再加上偏置引數,經過一個稱為sigmoid函式的計算作為輸出。
具體來說,假設z=w1x1+w2x2+w3x3+...+b,那麼輸出output=σ(z,其中:σ(z=1(1+ez。
σ(z是一個平滑、連續的函式。而且,它的輸出也是0~1之間的實數,這個輸出值可以直接作為下一層神經元的輸入,保持在0~1之間。
&noid神經元組裝神經網路之後,網路的輸入和輸出都變為連續的了,也就是說,當我們對某個引數的值進行微小的改變的時候,它的輸出也只是產生微小的改變。這樣就使得逐步調整引數值的訓練成為可能。
在歷史上,很多研究人員曾經也做過嘗試,MicNielsen的書《NeuralNet》這本書中也曾經提到過這個例子。
這個神經網路只有一層隱藏層,屬於淺層的神經網路(slowneuralnetworks。而真正的深度神經網路(deepnerualnetworks,則會有多層隱藏層。
神經元系統採用了左右腦半球的設計方式進行設計和製造。
最右側則是輸出層(outputlayer,有10個神經元節點,分別代表識別結果是0,1,2,...,9。當然,受sigmoid函式σ(z的限制,每個輸出也肯定是0~1之間的數。
那我們得到一組輸出值之後,哪個輸出的值最大,最終的識別結果就是它。
而在訓練的時候,輸出的形式則是:正確的那個數字輸出為1,其它輸出為0,隱藏層和輸出層之間也是全連線。
神經網路共的權重引數有784*15+15*10=個,偏置引數有15+10=25個,總共引數個數為:+25=個。
這是一個非常驚人的數字。
我的超級黑科技帝國 /book/78898/