
[日]齋藤康毅
本書是深度學習的入門書,深入淺出地剖析了深度學習的原理和相關技術。書中使用Python3,儘量不依賴外部庫或工具,從基本的數學知識出發,帶領讀者從零創建一個經典的深度學習網絡,使讀者在此過程中逐步理解深度學習。書中不僅介紹了深度學習和神經網絡的概念、特徵等基礎知識,對誤差反向傳播法、卷積神經網絡等也有深入講解,此外還介紹了深度學習相關的實用技巧,自動駕駛、圖像生成、強化學習等方面的應用,以及爲什麼加深層可以提高識別精度等疑難的問題。 本書適合深度學習初學者閱讀,也可作爲高校教材使用。
千問幫忙對比這本書和《Python神經網絡編程》: 你已經讀完了《Python神經網絡編程》,所以: 齋藤康毅這本書,你真正需要讀的章節只有這些: ┌──────────┬───────────────────────┬─────────────────────────────────────┐ │ 章節 │ 理由 │ 跳過原因 │ ├──────────┼───────────────────────┼─────────────────────────────────────┤ │ 第2章 │ 感知機是理解神經網絡 │ 你已經懂神經網絡基本結構,當複習 │ │ 感知機 │ 的起點,但速讀 │ │ ├──────────┼───────────────────────┼─────────────────────────────────────┤ │ 第4章 │ 核心:損失函數→數值微 │ 《Python神經網絡編程》只給了樸素版 │ │ 神經網絡 │ 分→梯度→SGD │ 本,這裏有系統化的數學框架 │ │ 的學習 │ │ │ ├──────────┼───────────────────────┼─────────────────────────────────────┤ │ 第5章 │ 最有價值的部分——齋藤 │ 《Python神經網絡編程》第1章的BP是簡 │ │ 誤差反向 │ 用計算圖來直觀解釋BP │ 化版,這裏的BP纔是工程上真正用的 │ │ 傳播法 │ │ │ ├──────────┼───────────────────────┼─────────────────────────────────────┤ │ 第6章 │ BatchNorm、權重複習、 │ │ │ 與學習相 │ 超參數驗證 │ 《Python神經網絡編程》完全沒提這些 │ │ 關的技巧 │ │ │ ├──────────┼───────────────────────┼─────────────────────────────────────┤ │ 第7章 │ CNN結構、卷積層、池化 │ 這是《Python神經網絡編程》沒有的內 │ │ 卷積神經 │ 層、可視化 │ 容 │ │ 網絡 │ │ │ └──────────┴───────────────────────┴─────────────────────────────────────┘ 你應該跳過的章節: - 第1章 Python入門 → 你有Python基礎 - 第3章 神經網絡 → 基本上是第2章的延伸,你已經有直覺 - 第8章 深度學習 → 歷史和展望,不是工程實踐 - 附錄A → 計算圖細節,第二次閱讀時再看 讀第5章的正確方式 第5章(誤差反向傳播法)是這本書的精華。齋藤用計算圖來拆解BP——這是《Python神經 網絡編程》完全沒有涉及的部分。具體說: 《Python神經網絡編程》的BP: 誤差 → 反向傳 → 逐層算梯度 → 更新權重 (你得到的:直覺上的理解) 齋藤的BP(計算圖視角): 每一步前向計算 → 畫成圖 → 每個節點反向傳導數 → 局部梯度×上游梯度 (你得到:工程實現能力) 讀這一章的建議:邊讀邊在紙上畫計算圖,不要只看。齋藤的書最價值的地方就是"用計 算圖把反向傳播拆成一塊一塊的"——讀完之後你能從零手寫一個帶BatchNorm的MLP。 --- 一句話總結 《Python神經網絡編程》給你的是直覺和項目感;齋藤的書給你的是數學框架和工程拆解 能力。你已經有了直覺,這本書的真正價值在於第5章的計算圖 + 第6章的訓練技巧——這兩章是《Python神經網絡編程》完全沒有的內容。
很早就想系統學一遍深度學習的底層原理,卻總被各種公式和框架勸退。直到翻開這本被很多人推薦的“魚書”,才真正感受到:原來深度學習也可以這麼好懂。 整本書最打動我的一點,就是不跳步、不炫技、對新手極度友好。作者沒有一上來就堆理論、甩公式,而是從最基礎的 Python 和 NumPy 開始,一步一步帶着你手寫神經網絡,把每一個概念都講得清清楚楚。 讀完最大的收穫,是終於搞懂了: 神經網絡到底在“學習”什麼? 前向傳播和反向傳播到底在做什麼? 梯度下降爲什麼能讓模型越來越準? CNN 又是憑什麼在圖像任務裏這麼強。 沒有複雜框架,不用 PyTorch / TensorFlow,只用最樸素的代碼,把黑盒子拆開給你看。每看懂一段,就跟着敲一段代碼,這種從原理到實現的踏實感,是隻調包、跑別人代碼比不了的。 書裏的邏輯非常順暢: 從感知機,到神經網絡結構,再到損失函數、梯度、反向傳播,最後落地到 MNIST 手寫數字識別和 CNN。 跟着走一遍,整個深度學習基礎框架就在腦子裏立起來了。 如果你和我一樣: - 想入門深度學習,但數學一般、基礎一般 - 只會調庫,對底層原理一知半解 - 希望紮紮實實打牢基礎,而不是淺嘗輒止 那這本書真的非常適合你。 它不會讓你立刻變成算法大神,但會讓你真正入門、真正理解、真正敢動手。 把基礎打牢之後,再去學框架、看論文、做項目,都會輕鬆很多。 一本溫柔、紮實、誠意滿滿的入門好書,推薦給所有想認真學好深度學習的人。
終於把這本書看完了。把深奧的東西講簡單,是最難的事情,但作者做到了。由於我離開開發十多年了,對數學中微積分,統計學,以及概率的功力也不夠,所以剛開始讀起來並不容易。但是有兩樣東西對我幫助特別大。一樣是搭建Python 代碼的運行環境,一樣是打開ChatGPT。 對於任何難以理解的概念,或者某些公式的推導過程不理解,都可以簡單的通過截圖,扔給ChatGPT來詢問解決。同時把書中的代碼,或者ChatGPT生成的代碼,在Python環境下運行一遍。這樣的方法,讓我離開開發十幾年的中年人,完全也可以通過自學,基本瞭解了深度學習的各種概念,以及背後的運行機理。
我是看過了吳恩達的課以後,閒來無事讀的動物書。書講的很簡潔,有基礎再讀反而能理解作者的編排和每句話的意思。 但作爲入門書,作者這本書有時不起眼的一句話卻含量很大,反而容易成爲障礙。 這本書整理內容很細,每個人的思維路徑也不太一樣。所以我說的障礙之處很可能是個人謬誤。 還是強烈推薦入門的人來學習這本書,原因也是因爲作者講的很細,面面俱到。有些開始不太理解的地方,適合回頭再讀。尤其是代碼,有時候就理解當前的片面即可,作者就是爲了解釋當前的概念而已,並無太多延展,文字中也說的很仔細,如果需要理解全貌,讀到書後面可以回頭再集合起來看。
What I cannot create, I do not understand.”只有創造一個東西,纔算真正弄懂了一個問題。 怎麼才能更深入地理解深度學習呢?在筆者看來,最好的辦法就是親自實現。從零開始編寫可實際運行的程序,一邊看源代碼,一邊思考。 在光看數學式和理論說明無法理解的情況下,可以嘗試閱讀源代碼並運行,很多時候思路都會變得清晰起來。對數學式感到困惑時,就閱讀源代碼來理解技術的流程。 學習新知識時,只聽別人講解的話,有時會無法理解,或者會立刻忘記。正如“不聞不若聞之,聞之不若見之,見之不若知之,知之不若行之”,在學習新東西時,沒有什麼比實踐更重要了。 神經網絡的學習所說的“學習”是指從訓練數據中自動獲取最優權重參數的過程。
同樣被推薦爲機器學習入門書籍,李航的《統計學習方法》和周志華的西瓜書🍉《機器學習》範圍會廣很多,對讀者還是有概率論、線性代數等最基本要求的。 而這本書不涉及任何框架,捨棄其他機器學習方法,直接聚焦近幾年最火熱的深度學習方法,對讀者的要求也很低,非常適合零基礎的小白,還有一本續作同樣很推薦《深度學習進階:自然語言處理》!
也是一本好書,作者的三本書都非常優秀。從零開始介紹如何搭建一個深度學習的框架。對於入門深度學習和掌握一些編程技巧非常有用,學習還是必須要掌握原理,雖然開源框架肯定比我們自己搭建的框架好。我可以不用自己寫的框架,但我不能不會,否則不就真是個調參工程師了,和一直做CRUD也沒什麼區別了。順便說下我的學習路徑: 1.深度學習入門1,入門+先檢測下自己是不是真的感興趣 2.深度學習入門2,從編程的角度深入掌握深度學習 3.花書,深度學習的理論聖經,沒什麼可說的,必須學 4.動手學深度學習pytorch版,學一下框架 1和2我是按順序學的,書不厚,學習曲線也非常平緩,基本上一週就能看完兩本。 3和4是目前在學習中,路上看3,公司看4。 本書面向的讀者:有一定python基礎,但不瞭解深度學習的人; 不適合閱讀的羣體:已經很熟悉深度學習或者對深度學習的編程實現不感興趣的讀者;
讀完打卡,作爲醫療+LLM應用的學生算是半路跨學科來學習AI領域的知識,看這本書是爲了更好地從底層入門知識來夯實深度學習基礎。距離本書問世已經十年過去了,很多提到的技術和工具已經更新換代了,但好在仍能通過了解“初代機”的設計思路來明白新工具是如何迭代升級的。最後一章讓人很感慨,十年前展望未來的應用和現在遙相呼應:一些設想方法現在看來一部分已經過時了,但是它們的思路在如今都有了驗證,技術在範式和架構上演進,實現了從有無到好壞再到通用的自然升級。
- 《深度學習入門: 基於Python的理論與實現》 - `從神經網絡學習權重思維`, 讀書時也要把握住有助於當下理解的重點, 對核心章節賦予更高的權重 - `感知機/神經網絡/反向傳播等章節對理解LLM很有價值`, 當然書中也有一些過時的章節, 降低它們的權重 - Python, 數據科學領域, 深度學習框架, Anaconda發行版, 包含了側重數據分析的很多外部庫 - NumPy數值計算/數學算法/數組(矩陣)操作, Matplotlib畫圖的庫, 數據結果可視化 - 感知機perceptron算法, 理解神經網絡的重要入門思想 - 接收兩個輸入信號的感知機的例子, 輸入信號, $x_1, x_2$, 權重, $w_1, w_2$ - $w_1x_1 + w_2x_2 > \theta$(閾值), 輸出1, 否則輸出0 - 令$b = -\theta$, 命名爲偏置 - 權重是控制輸入信號重要性的參數, 偏置是調整神經元被激活的容易程度的參數 - 單層感知機可以實現與門/與非門/或門等簡單邏輯電路, 但卻難以實現異或門, 因爲它是線性空間 - 可以通過疊加層來實現多層感知機, 可以劃分非線性空間 - 通過感知機可以實現與門/或門, 然後實現半加器和全加器, 接着實現算數邏輯單元(ALU), 最後實現CPU - 神經網絡, 輸入層/隱藏層(中間層)/輸出層, 自動從數據中學習到合適的權重參數 - 激活函數(activation function), 階躍函數(感知機使用的) - sigmoid函數, $s=1/(1+e^(-z))$, ReLU函數, 小於等於0時輸出0, 大於0時直接輸出該值 - 當激活函數爲線性時, 加深網絡並不會增加表達能力, 多層會退化爲單層, 只有引入非線性激活, 多層網絡纔有意義 - 如果用線性激活函數$h(x)=cx$, 三層網絡$y(x)=h(h(h(x)))$ - 可以用一層神經元$y(x)=ax, (其中a=c^3)$來代替, `多層退化爲單層` - 神經網絡學習的目標, 是找到使損失函數達到最小的權重參數, 損失函數是學習的標尺(評價指標) - 數據是機器學習的命根子, 數據集分爲訓練數據和測試數據 - 用訓練數據學習, 用測試數據評價模型泛化能力(面對未見過的數據時的表現), 注意避免過擬合 - 學習機制是梯度法, 以損失函數爲指標, 更新權重參數, 使損失函數的值不斷減小, 更新的方向由函數斜率(梯度)決定 - 計算圖把計算可視化, 可以直觀把握計算過程 - 節點由局部計算構成, 每個節點只依賴自己的輸入, 可保存中間結果, 局部計算的組合構成全局計算 - 正向傳播, 從前往後計算得到損失(及各中間值), 反向傳播, 從後往前計算得到各參數的更新梯度值 - 鏈式法則, 複合函數的導數=各組成函數導數的乘積, 反向傳播能在計算圖上逐節點傳遞梯度的數學基礎 - 層的模塊化, 將神經網絡的組成元素實現爲"層", 每層提供forward(正向)與backward(反向)方法 - 模塊化的收益, 自由組裝層, 即可輕鬆構建自己想要的網絡結構
現在回頭看本科生讀的書,確實有點丟臉。 不過別怕,丟臉的事情我沒少幹。 書寫得很不錯,這是肯定的。連我這種白癡都能看懂,作者爲了寫好一本簡單易懂的書,是下了功夫的。 第一章Python入門,沒什麼好說的了,是真基礎入門了。 第二章感知機,作者要從感知機來引入神經網絡。這裏說一下,p31的例子說是使用曲線可以分開圓圈和三角形,我覺得這個說明不好。其實,多畫幾條線,或者說畫折線,也可以分開那樣的圓圈和三角形。事實上,神經網絡還是在畫的直線,只是畫得特別多,形成了一個邊數很大的多邊形,以直代曲的話,也勉強可以說是曲線了。正是因爲畫的還是直線,所以關聯的課程名稱叫作線性代數。 第三章神經網絡,正式引入了神經網絡基本概念和書中將用來舉例的項目——手寫數字識別。 第四章神經網絡的學習,介紹了數值微分和樸素的隨機梯度下降算法。這裏要注意,手寫數字識別的例子,在沒有GPU的機器上,運行這樣的樸素的算法很耗時間。可以將項目更改一下,比如改成判斷二維座標系下各個點歸屬於哪個點的集合。自己生成數據,平面上隨機生成距離較大的幾個中心點(4-10個都可以),在中心點周圍生成距離較小的點集(若干個,幾千幾萬個),在這裏面自己選擇部分訓練數據,訓練出權重,然後進行全量測試,這樣每次訓練和測試都更快。(比起每個圖片28*28個輸入參數,這個只有x,y座標兩個輸入參數。) 第五章誤差反向傳播法,這個當然是重點了,書上舉了雙層網絡實現的例子,這個必須自己寫代碼實現一下了。熟悉高等數學中求偏導數的讀者應該很容易理解這個方法。其中梯度可以理解爲,爲了最快下降,各個方向維度應該下降的對應比例。所以,如果只有一個變量,梯度是沒有意義的。(每次下降也都是要乘以學習率的。) 第六章與學習相關的技巧,這裏當然是假定你的神經網絡已經會學習了,因爲這裏都是講各種優化技巧。如果你自己寫的代碼連20%準確率也沒有(手寫數字識別瞎猜應該是10%的準確率,有20%說明至少不是瞎猜的),那還是繼續第一到第五章,或者直接換本書吧。 第七章卷積神經網絡,其實這一章內容很好理解(但是很不好寫代碼),不過感覺對於初學者,還是要看看視頻或者問問AI具體的理解,尤其不要對多個濾波器多個通道時的情況有誤解。這章內容只要不誤解了,就很容易懂。其中還有一個21層的深度神經網絡,訓練非常耗事件,建議有GPU的讀者嘗試(或者晚上睡覺時跑程序)。 第八章深度學習,可以說作者是在聊天,也可以說是在介紹更深入內容的方向。 總之,這確實是我AI學習入門的第一本書,我算是讀完了,也基本讀懂了。 其中的雙層網絡我手寫了C++代碼運行,能達到96%接近97%的準確率(運行很快的)。第七章的21層的深度神經網絡我本來想手寫C++代碼的,結果發現要完全C++手寫,幾乎要實現一個張量庫,還是經過優化的張量庫,只能放棄了。不過我運行了別人寫的python代碼,運行了一個晚上,第二天起來看到確實是大於99%的準確率。 等我把這個作者《深度學習入門》(1-5)一套書五本,加上《動手學深度學習》和<Build A Large Language Model (From Scratch)>共七本書看完看懂,我就應該真的算是入門了深度學習了吧。