使用神經網路識別手寫數字

AnneQiQi發表於2017-04-13

簡介

《神經網路與深度學習》是一本免費的線上電子書。本書主要介紹以下內容:

  • 神經網路,一種啟發自生物學的優美的程式設計正規化,能夠從觀測到的資料中進行學習

  • 深度學習,一系列神經網路中強大的學習技巧

神經網路和深度學習為影象識別、語音識別、自然語言處理等問題提供了目前最好的解決方案。本書主要會介紹神經網路和深度學習背後關鍵的概念。

更多關於本書的細節,請參考這裡。或者您可以直接從第一章開始學習。

譯者注

本專案是Neural Networks and Deep Learning的中文翻譯,原文作者 Michael Nielsen



人類的視覺系統是世上的一個奇蹟。考慮以下這串手寫的數字:

digits

大部分人都能輕易地識別出圖上的數字是504192。這個看似簡單的過程的背後,實際上很複雜。在我們大腦的每個腦半球中,有一個叫做初級視皮層(primary visual cortex)的部分,也被稱作V1。它擁有1億4千萬個神經元,包含了上百億的神經元連線。然而,人類的視覺系統不僅僅依賴於V1,還依賴於整套視皮層——V2、V3、V4和V5的協同工作,來實現複雜的影象處理任務。我們的大腦就像一臺超級計算機,經過了上億年的進化,才得以能夠出色地理解視覺的世界。識別手寫數字不是一個簡單的任務,但是,人類極其擅長理解眼睛所看到的東西,並且幾乎所有這些工作都是在無意識的情況下完成的,所以我們通常不會意識到我們的視覺系統解決了的任務有多麼困難。

當你企圖實現一個用來識別類似上圖數字的計算機程式時,你就會逐漸意識到視覺模式識別的難度。一個本來對於人類看似很簡單的事情,突然就變得極其困難。「數字9的上部有一個圓圈,右下部有一筆豎線」這種人類識別形狀的直覺,在演算法上卻很難表示。當你試圖定義明確的識別規則時,你會很快地被一大堆特例所困擾。這似乎毫無解決的希望。

神經網路(Neural Networks)使用一種不同的思路解決這個問題。它的思想是利用大量的手寫數字,亦被稱為訓練樣例,

mnist_100_digits

從這些訓練樣例學習並建立一個系統。換一種說法,神經網路使用這些樣例,從中能夠自動地學習到識別手寫數字的規則。而且,隨著訓練樣例的增加,神經網路可以從中學習到更多資訊,從而提高它的準確度。所以,儘管我上面只給出了100個訓練數字,也許我們可以使用上千、上萬、上億的訓練樣例來構建一個更好的手寫識別器。

在本章中,我們會實現一個神經網路的計算機程式,來學習並識別手寫數字。雖然這個程式僅僅只有74行,並且沒有使用任何特別的神經網路庫,但是它可以在沒有任何人工干預的情況下,達到超過百分之96的手寫數字識別準確率。在之後的章節中,我們會進一步改善我們的方法,使之達到超過百分之99的準確率。實際上,目前最好的商用神經網路已經足夠好到能被銀行用來處理支票,以及被郵局用來識別地址。

我們會專注於手寫數字的識別這個問題,因為它基本上是學習神經網路最好的示範問題,之所以這麼說是因為它戳中了幾個痛點:它具有挑戰性,識別手寫數字不是一個簡單的工程;同時它的難度也不是特別大,並不需要極其複雜的方法,或者大量的計算資源。而且它是實現更高階技術的基礎,例如深度學習(deep learning)。所以,手寫數字識別問題會貫穿本書。在本書的後部分,我們會討論如何將這些想法應用到計算視覺的其它問題上,甚至語音處理、自然語言處理以及其它領域。

當然,本章的主旨如果只是實現一個程式來識別手寫數字,那麼本章的內容就會少很多!實際上,在這個過程中,我們會產生許多關於神經網路的關鍵思想,包括兩種重要的人工神經元(感知機和sigmoid神經元),以及神經網路的標準學習演算法,稱為隨機梯度下降(stochastic gradient descent)。在本書中,我關注於解釋為什麼問題能夠被這樣解決,以及為你建立關於神經網路的直覺。儘管相比於僅僅展示基礎理論過程,這需要更長的篇幅來討論,但是這對於你的深入理解是很有價值的。從中的收穫,就是在章節的最後,我們就能夠理解深度學習是什麼,以及為什麼它能夠起作用。

連載中:

下一篇:感知機

http://blog.csdn.net/anneqiqi/article/details/70154331

相關文章