定義完了神經(jīng)網(wǎng)絡域慷,讓我們回到手寫識別荒辕。我們可以將手寫識別這個問題分解成兩個子問題。第一犹褒,我們需要將一張包含很多數(shù)字的圖片分解成只包含一個數(shù)字的單獨圖片序列。例如弛针,我們要把這幅圖片
分解成6個單獨的圖片叠骑,
我們人類很容易就能處理這種分割問題,但是對計算機程序來說削茁,正確的分割照片是一個挑戰(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ù)字和我們輸入的圖片一致赦政。看起來更自然的做法是使用4個輸出神經(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的方法褂萧,我們還有很多其他合理的方法(比如,對上述圖像做些轉換葵萎,或者輕微的變形)导犹。但是在這里,這種方法可以得出輸入是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)絡架構兜看。