人類的視覺系統(tǒng)絕對算是這個世界上的一個奇跡。考慮如下的手寫數(shù)字的序列:
大多數(shù)人都能輕易的認出這些數(shù)字是504192。其實輕易的認出這些數(shù)字只是個假象。在我們大腦的每個半球中都存在一個初級視皮層(primary visual corte),也被稱為V1,包含1.4億個神經(jīng)元,并且這些神經(jīng)元之間存在著數(shù)百億的連接。但是人類的視覺系統(tǒng)不僅依賴于V1,而是整個視皮層——V2,V3,V4和V5——來逐步進行復(fù)雜的圖像處理。我們的大腦就像一臺超級計算機,經(jīng)過億萬年的進化,已經(jīng)非常適合理解視覺世界。識別手寫數(shù)字并不簡單,但是,我們?nèi)祟悩O易理解我們眼睛看到的東西,并且這些幾乎都是在無意識的情況下完成的,因此,我們通常并不會感激我們的視覺系統(tǒng)解決了多么艱難的問題。
如果你嘗試寫一個電腦程序來識別數(shù)字,就像上面的那些,視覺模式識別的困難將會非常明顯。看起來很簡單,但是親自實現(xiàn)起來卻很難。簡單直觀的識別形狀的方法——“數(shù)字9上部有一個圓圈,并且右下部有一豎”——在算法表達上卻沒有這么簡單。當(dāng)你嘗試做一些精確的規(guī)則的時候,你會很快的迷失在意外情況、注意事項和特殊情況里,毫無希望。
神經(jīng)網(wǎng)絡(luò)用不同的方法解決這個問題。這個方法需要大量的手寫數(shù)字,即訓(xùn)練樣本,
然后開發(fā)一個系統(tǒng),這個系統(tǒng)可以從這些訓(xùn)練樣本中學(xué)習(xí)。換句話說,神經(jīng)網(wǎng)絡(luò)使用這些訓(xùn)練樣本自動的推斷出識別手寫數(shù)字的規(guī)則。此外,通過增加訓(xùn)練樣本的數(shù)量,神經(jīng)網(wǎng)絡(luò)可以從更多的手寫中學(xué)習(xí),以此提高它的正確率。雖然在上面我只展示了100個訓(xùn)練數(shù)字,但可能我們要想做一個更好的手寫識別器需要數(shù)千甚至數(shù)百萬的訓(xùn)練樣本。
在這一章里,我將寫一個可以學(xué)習(xí)識別手寫數(shù)字的的神經(jīng)網(wǎng)絡(luò)程序,這個程序僅僅74行,而且沒有使用其他的神經(jīng)網(wǎng)絡(luò)庫。但是這個小程序識別手寫數(shù)字的準確率可以達到96%,并且沒有人工干預(yù)。此外,在接下來的章節(jié)里,我們將改進想法,將正確率提高到99%。事實上,最好的商業(yè)神經(jīng)網(wǎng)絡(luò)效果非常好,可以被銀行用來識別支票,可以被郵局用來識別地址。
一般來說,我們選擇手寫識別是因為它是一個關(guān)于神經(jīng)網(wǎng)絡(luò)的非常好的原型問題。作為原型,它擊中了甜蜜點:具有挑戰(zhàn)性,識別手寫數(shù)字是一個不小的壯舉,并且不需要極其困難的解決方案和強大的計算能力;此外,這是一個學(xué)習(xí)更先進技術(shù)的好方法,比如深度學(xué)習(xí),所以在本書中會反復(fù)提到手寫識別問題。本書接下來的部分中,我們會討論怎樣把這些方法用在計算機視覺的其他問題上,還有語音識別、自然語言處理等其他的領(lǐng)域。
當(dāng)然,如果本章只是寫一個識別手寫數(shù)字的程序的話,本章將會短很多。但是,沿著這條線,我們將會學(xué)習(xí)很多神經(jīng)網(wǎng)絡(luò)的關(guān)鍵思想,包括兩個重要的人工神經(jīng)元(感知機和sigmoid神經(jīng)元),和神經(jīng)網(wǎng)絡(luò)的標準學(xué)習(xí)算法,隨機梯度下降算法。我將始終注重解釋使用某種方法解決問題的原因,并建立你的神經(jīng)網(wǎng)絡(luò)直覺。這要比我剛才講是怎樣的基本方法要長的多,但為了你更好的理解這是值得的。其中的收益,當(dāng)本章結(jié)束的時候,我們將以適當(dāng)?shù)姆绞嚼斫馐裁词巧疃葘W(xué)習(xí)和深度學(xué)習(xí)為什么這么重要。