定義完了神經(jīng)網(wǎng)絡,讓我們回到手寫識別。我們可以將手寫識別這個問題分解成兩個子問題。第一,我們需要將一張包含很多數(shù)字的圖片分解成只包含一個數(shù)字的單獨圖片序列。例如,我們要把這幅圖片

分解成6個單獨的圖片,

我們?nèi)祟惡苋菀拙湍芴幚磉@種分割問題,但是對計算機程序來說,正確的分割照片是一個挑戰(zhàn)。一旦照片被分割完成,程序接下來需要分類每個單獨的數(shù)字。所以,例如,我們要程序識別上面的第一個數(shù)字,

是5。
我們將主要寫一個解決第二個問題的程序,也就是識別單獨數(shù)字。我們這樣做是因為分割問題并不是很難解決,一旦你找到了一個分類單獨數(shù)字的好方法,將會有很多方法解決分割問題。一種方法就是嘗試不同的分割方法,使用數(shù)字分類器為每個分割打分。如果數(shù)字分類器對每一個分段的置信度都很高,那么這個分割就會得到很高的分數(shù)。相反,數(shù)字分類器在一個或多個分段上出現(xiàn)問題,那么這個分割方法就會得到很低的分數(shù)。這個方法的關鍵是如果分類器出現(xiàn)了問題,那么這有可能是因為分割方法不對造成的。這個方法或其他的變種可以很好的解決圖片分割問題。與其關心分割問題還不如把精力集中在開發(fā)一個神經(jīng)網(wǎng)路來解決更有趣和更難的問題,即手寫數(shù)字識別。
為了解決這個問題,我們將使用一個三層網(wǎng)絡:

輸入層是對輸入像素編碼的神經(jīng)元。接下來的部分,我們將使用28x28像素的掃描手寫數(shù)字圖片組成訓練數(shù)據(jù),因此輸入層包含784=28x28個神經(jīng)元。為了簡便,上圖中我省略了784個神經(jīng)元中的大部分。輸入的像素點是其灰度值,0.0代表白色,1.0代表黑色,中間值表示不同程度的灰度值
第二層是隱層,我們用n表示這一層中的神經(jīng)元的個數(shù),我們將嘗試不同大小的n。舉例的圖中是一個很小的隱層,僅僅包含n=15個神經(jīng)元。
這個網(wǎng)絡的輸出層包含了10個神經(jīng)元。如果第一個神經(jīng)元激活了,例如輸出1,則表明網(wǎng)絡認為數(shù)字是0,如果第二個神經(jīng)元激活了,則表明神經(jīng)元認為數(shù)字是1,等等。說的更明確一點,我們?yōu)槊總€神經(jīng)元從0到9進行編號,然后觀察哪個神經(jīng)元有最高的活動值。如果這個神經(jīng)元是6號神經(jīng)元,那么可以得到神經(jīng)網(wǎng)絡的輸出是6。其他的也是如此。
你也許對為什么用10個輸出神經(jīng)元感到奇怪。畢竟這個神經(jīng)網(wǎng)絡的目標是哪一個數(shù)字和我們輸入的圖片一致??雌饋砀匀坏淖龇ㄊ鞘褂?個輸出神經(jīng)元,將每一個神經(jīng)元二值化,取決于神經(jīng)元的輸入是否接近0或1。四個神經(jīng)元足夠編碼答案的解,因為2^4 = 16遠遠超過了10種可能輸入的數(shù)字。為什么我們要用10個神經(jīng)元代替呢?這難道不是低效的嗎?終極原因源于經(jīng)驗:我們可以同時試驗設計兩個神經(jīng)網(wǎng)絡,然而事實證明,在這個特殊的問題上,10個神經(jīng)元的神經(jīng)網(wǎng)絡要比4個輸出神經(jīng)元的神經(jīng)網(wǎng)絡要好。令我們好奇的是為什么使用10個輸出神經(jīng)元更有效呢?有什么啟發(fā)式的思考可以提前告訴我們?yōu)槭裁词褂?0個輸出神經(jīng)元替代4個輸出神經(jīng)元的編碼嗎?
為了理解我們?yōu)槭裁催@樣做,需要從根本原理上思考神經(jīng)網(wǎng)絡是怎樣做的。思考第一種我們使用10個出書神經(jīng)元的情況,讓我們集中在第一個輸出神經(jīng)元上,它盡力決定輸入數(shù)字是不是0。他通過權衡隱層的輸入來做出決策。那隱層神經(jīng)元做了什么呢?假設隱層的第一個神經(jīng)元只是為了檢查是否存在以下圖像:

它可以通過增加和它重疊部分的權重,而減少其他輸入的權重。同樣的,我們假設隱層第2/3/4個神經(jīng)元是為了識別以下的圖片:

也許你已經(jīng)猜到了,這四個圖片組合成了我們之前看到的數(shù)字0圖片:

因此,如果這四個神經(jīng)元被激活了,我們可以認為數(shù)字是0。當然,這不是唯一的能得出這個圖片是0的方法,我們還有很多其他合理的方法(比如,對上述圖像做些轉(zhuǎn)換,或者輕微的變形)。但是在這里,這種方法可以得出輸入是0。
假設神經(jīng)網(wǎng)絡以這種方式工作,我們可以給出一個貌似合理的解釋,為什么10個輸出神經(jīng)元工作的要比4個輸出神經(jīng)元要好。如果我們有4個輸出,那么第一個神經(jīng)元就會盡力判斷最高有效位是什么,把數(shù)字的最高有效位和數(shù)字的形狀聯(lián)系取來并不是一個簡單的問題。很難想想有什么恰當?shù)臍v史原因,數(shù)字的形狀和最高有效位有什么緊密聯(lián)系。
上面所說的僅僅是給出一個啟示。沒有什么能夠表明神經(jīng)網(wǎng)絡像我說的那樣工作,即隱層判斷數(shù)字的形狀。也許一個聰明的學習算法將會找到一些合適的權重讓我們僅僅用4個輸出神經(jīng)元就行。但是,這個啟發(fā)式的思考通常很有效,它會節(jié)省你大量的時間去設計一個好的神經(jīng)網(wǎng)絡架構。