《神經網路和深度學習》是一本免費的線上書籍,它將教你關於:
- 神經網路:一個漂亮的、受生物學啟發的程式設計範例,它使計算機能夠從觀測資料中學習。
- 深度學習:一個用於在神經網路中學習的強大技術集。
目前,對於影像識別、語音識別和自然語言處理中的許多問題,神經網路和深度學習提供了最好的解決方案。本書將教你神經網路和深度學習背後的核心概念。
本書目前是一個不完整的beta版初稿。接下來的幾個月中,將會新增更多章節。現在,你可以閱讀:
- 第一章:解釋神經網路如何能夠學習識別手寫體
- 第二章:解釋反向傳播演算法—神經網路中用於訓練的最重要的演算法
- 第三章:解釋可以用於提升反向傳播演算法效能的眾多技術
- 第四章:解釋為什麼神經網路可以計算任意函式的原因
- 學習更多書中所採用的方法
(作者:Michael Nielsen)
這本書是關於什麼的
神經網路是到目前為止發明的最漂亮的程式設計範例之一。在傳統的程式設計方法中,我們告訴計算機做什麼,比如把大問題分解成許多小問題,精確定義計算機可以輕鬆執行的任務等。相比之下,在神經網路中,我們並不告訴計算機如何解決我們的問題,相反,計算機自己從觀測資料中學習,然後計算出解決手頭問題的獨有方法。
從資料中自動學習聽起來很有前景。然而,2006年之前,除了針對少數專業問題之外,我們並不知道如何訓練神經網路來超越偏傳統的方法。2006年的變化是發現了在所謂的深度神經網路中學習的技術,即現在所知的深度學習。經過進一步發展,今天,對於計算機視覺、語音識別和自然語言處理中的許多重要問題,深度神經網路和深度學習取得了傑出的表現。諸如谷歌、微軟以及中國搜尋巨頭百度此類公司正在大規模地部署它們。
本書的目的是幫你掌握神經網路的核心概念,包括用於深度學習的現代化技術。學習本書後,你將會寫出使用神經網路和深度學習來解決複雜模式識別問題的程式碼,而且掌握使用神經網路和深度學習來處理你所設計的問題的基礎。
一個面向原理的方法
本書堅信,獲取對神經網路和深度學習核心原理的深刻理解,要比對眾多思想的模糊理解更有用。如果你已很好地理解了核心思想,你可以快速地理解其他新材料(統一一下,所有的material都翻譯為材料)。以程式語言的角度來說,即將其看成掌握一門新語言的核心語法、庫以及資料結構。也許你仍然只是“瞭解”全部語言中的一丁點兒—許多語言擁有龐大的標準庫—但是可以快而容易地理解新庫和資料結構。
這就意味著本書並不著重於作為一個教程,講解如何使用某些特定的神經網路庫。如果你更希望學習某個庫,不要讀此書!找到你希望學習的庫,去學習它的教程和文件。但請注意,儘管這樣可以直接解決問題,但是如果你想理解神經網路中的運作實質,如果你想得到經久不變的深刻理解,那麼僅僅學習一些熱門庫是不夠的。你需要理解神經網路運作之下的永恆本質。技術更迭,唯本質不變。
一個實踐性的方法
我們將通過解決一個具體問題:教計算機識別手寫體數字,來學習神經網路和深度學習背後的核心原理。使用傳統的程式設計方法很難解決這個問題。然而我們將看到,一個簡單的神經網路可以相當好地解決它,僅需要幾十行程式碼,而且不用特殊的庫。此外,我們將通過多次迭代,不斷地併入越來越多關於神經網路和深度學習的核心思想,來改進我們的程式。
這個實踐性的方法意味著你需要一些程式設計經驗來閱讀本書。但並不要求你是一位專業程式設計師。我已經用Python(版本2.7)寫出了程式碼,儘管你不使用Python程式設計,但稍微努力一下也能輕易理解。通過本書的學習過程,我們將開發一個小的神經網路庫,用於實驗和建立理解。所有程式碼可以在這下載。一旦閱畢此書,或者在閱讀中,你可以輕鬆地拿起特徵更完備的神經網路庫中的一個方法,在生產中使用。
還有一個相關提示,閱讀本書的數學要求並不高。大多數章節中有一些數學的東西,但只是一些我認為大多數讀者都能應對的基礎代數和函式視覺化。偶爾我會使用更加高等的數學知識,但已經整理成了材料,所以即使你對一些數學細節不理解,通過這些材料你也能跟得上。第二章是數學氣息最濃的一個章節,它需要一點多元微積分和線性代數的知識。如果不熟悉這些,我在第二章開頭談論瞭如何一步步學習數學知識。如果覺得太難理解,你可以簡單地跳到本章主要結果的總結部分。無論如何,在一開始都不需要擔心這些。
很少有一本書既力求面向原理,又力求面向實踐。但是我相信,如果我們建立了神經網路的基本思想,你將學得最好。我們將開發實時程式碼,而不只是抽象的理論,你可以探索並擴充套件程式碼。這樣,你將從理論和實踐中理解基本原理,而且在這樣好的基礎上,進一步擴充自己的知識。
關於練習和題目
技術書通常包含一個來自作者的勸告,即讀者必須做練習和題目。我讀到這些提醒時總覺得怪怪的。如果我不做的話,會遭遇不幸麼?當然不!我將以理解的深度為代價換取一些時間。這麼做值與不值,因時而異。
那麼在本書中,什麼值得去做呢?我的建議是你確實應該嘗試大部分的練習和少量的題目。
之所以要做大多數練習,是因為它們是確定你是否已經理解材料的基礎檢驗。如果你不能輕鬆地解決某個相關練習,那麼你可能遺漏了一些基礎知識。當然,如果你確實偶然困在了某個練習上,繼續往下吧,對於你來說那可能只是一個小的誤解,或者可能是我沒有描述清楚。但是如果大多數練習都很費力,那麼你大概需要重新閱讀前面的材料。
題目是另一回事,它們比練習要難,可能需要你努力才能解決。雖然那樣令人討厭,但是面對這樣的挫折,唯有耐心,才能真正理解並消化一個主題。
這麼說來,我不推薦做完所有題目。最好是找到自己的專案,或許你想使用神經網路對你的音樂收藏進行分類,或者對股票價格進行預測。不論怎樣,找到你所喜歡的專案,然後可以忽略書中的題目,或者只是把它們作為完成你自己專案的靈感。通過在自己喜歡的專案上努力所能學到的,遠超過做完任意數量題目所學到的。情感投入是實現精通的一個關鍵。
當然,你可能沒有這樣一個專案。沒關係,解決那些讓你感覺有動力去做的題目就好。你也可以使用書中的材料幫你尋找個人專案的創意。