文章目錄
- 第1章 Python入門
- 第2章 感知機(jī)
- 第3章 神經(jīng)網(wǎng)絡(luò)
- 第4章 神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)
- 第5章 誤差反向傳播
- 第6章 與學(xué)習(xí)相關(guān)的技巧
- 1. 各種參數(shù)更新的方法
- 2. 權(quán)重的初始值
- 第7章 卷積神經(jīng)網(wǎng)絡(luò)
原書鏈接(感謝作者,書是真的經(jīng)典,建議購買紙質(zhì)書):https://github.com/zjcao/books/blob/master/%E3%80%8A%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%85%A5%E9%97%A8%EF%BC%9A%E5%9F%BA%E4%BA%8EPython%E7%9A%84%E7%90%86%E8%AE%BA%E4%B8%8E%E5%AE%9E%E7%8E%B0%E3%80%8B_%E4%B8%AD%E6%96%87%E7%89%88.pdf
第1章 Python入門
主要介紹了Python的定義、安裝以及簡單語法,除此之外還介紹了一下Numpy包和Matplotlib包的用法,大多為Python相關(guān)的基礎(chǔ)知識。
第2章 感知機(jī)
與電流做類比,簡明扼要地介紹了感知機(jī)中輸入值如何被激活,以及如何用感知機(jī)來實(shí)現(xiàn):與門、與非門和或門。
引入權(quán)重和偏置的概念:
w1和w2是控制輸入信號的重要性的參數(shù),而偏置是調(diào)
整神經(jīng)元被激活的容易程度(輸出信號為1的程度)的參數(shù)。
然后提到了感知機(jī)的局限性,感知機(jī)對于線性不可分(異或)問題是無法解決的,但是多層感知機(jī)可以解決。
最后還提到了,理論上:
2層感知機(jī)(嚴(yán)格地說是激活函數(shù)使用了非線性的sigmoid函數(shù)的感知機(jī),具
體請參照下一章)可以表示任意函數(shù)
。
第3章 神經(jīng)網(wǎng)絡(luò)
原文提到的值得記錄的一點(diǎn)是:
- 激活函數(shù)是連接感知機(jī)和神經(jīng)網(wǎng)絡(luò)的橋梁。
- 實(shí)際上,如果將激活函數(shù)從階躍函數(shù)換成其他函數(shù),就可以進(jìn)入神經(jīng)網(wǎng)絡(luò)的世界了。
接下來介紹了sigmoid函數(shù),階躍函數(shù)以及它們的實(shí)現(xiàn),并對比了兩者的不同:
- 首先注意到的是“平滑性”的不同。sigmoid函數(shù)是一條平滑的曲線,輸出隨著輸入發(fā)生連續(xù)性的變化。而階躍函數(shù)以0為界,輸出發(fā)生急劇性的變化。
- 另一個(gè)不同點(diǎn)是,相對于階躍函數(shù)只能返回0或1,sigmoid函數(shù)可以返回0.731 …、0.880 …等實(shí)數(shù)(這一點(diǎn)和剛才的平滑性有關(guān))。
以及相同:
- 當(dāng)輸入信號為重要信息時(shí),階躍函數(shù)和sigmoid函數(shù)都會輸出較大的值;當(dāng)輸入信號為不重要的信息時(shí),兩者都輸出較小的值。
- 還有一個(gè)共同點(diǎn)是,不管輸入信號有多小,或者有多大,輸出信號的值都在0到1之間。
然后還介紹了另一種激活函數(shù):ReLU函數(shù)。
3.3節(jié) 介紹了神經(jīng)網(wǎng)絡(luò)中運(yùn)算的數(shù)學(xué)基礎(chǔ)知識-矩陣運(yùn)算并介紹神經(jīng)網(wǎng)絡(luò)的內(nèi)積。
3.4節(jié) 3.5節(jié) 介紹3層神經(jīng)網(wǎng)絡(luò)的理論實(shí)現(xiàn)以及代碼實(shí)現(xiàn),并介紹了輸出層的恒等函數(shù)和softmax函數(shù)。其中: 一般地,回歸問題可以使用恒等函數(shù),二元分類問題可以使用 sigmoid函數(shù),多元分類問題可以使用 softmax函數(shù) 。最后提到輸出的神經(jīng)元數(shù)量需要根據(jù)待解決的問題來決定。對于分類問題,輸出層的神經(jīng)元數(shù)量一般設(shè)定為類別的數(shù)量。
問題類型 | 最后一層激活 | 損失函數(shù) |
---|---|---|
二元分類問題 | sigmoid | binary_crossentropy |
多分類、單標(biāo)簽問題 | softmax | categorical_crossentropy |
多分類、多標(biāo)簽問題 | sigmoid | binary_crossentropy |
回歸到任意值 | 無 | mse |
回歸到0~1范圍內(nèi)的值 | sigmoid | mse或sigmoid |
最后是舉一個(gè)例子,手寫數(shù)字識別的實(shí)現(xiàn),再次詮釋神經(jīng)網(wǎng)絡(luò)的神奇。
第4章 神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)
首先介紹數(shù)據(jù)驅(qū)動的觀點(diǎn),然后把數(shù)據(jù)分為
訓(xùn)練數(shù)據(jù)
和
測試數(shù)據(jù)
,然后介紹了兩種損失函數(shù),
均方誤差
和
交叉熵誤差
。
然后擴(kuò)展到mini-batch學(xué)習(xí):神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)也是從訓(xùn)練數(shù)據(jù)中選出一批數(shù)據(jù)(稱為mini-batch, 小批量),然后對每個(gè)mini-batch 進(jìn)行學(xué)習(xí)。比如,從60000 個(gè)訓(xùn)練數(shù)據(jù)中隨機(jī)
選擇100 筆,再用這100 筆數(shù)據(jù)進(jìn)行學(xué)習(xí)。這種學(xué)習(xí)方式稱為mini-batch 學(xué)習(xí)。
求所有訓(xùn)練數(shù)據(jù)的損失函數(shù)的總和,以交叉熵誤差為例。
然后介紹數(shù)值微分的求解,并計(jì)算梯度。
知識點(diǎn):
-
epoch是一個(gè)單位。一個(gè)epoch表示學(xué)習(xí)中所有訓(xùn)練數(shù)據(jù)均被使用過
一次時(shí)的更新次數(shù)。比如,對于10000 筆訓(xùn)練數(shù)據(jù),用大小為100
筆數(shù)據(jù)的mini-batch 進(jìn)行學(xué)習(xí)時(shí),重復(fù)隨機(jī)梯度下降法100 次,所
有的訓(xùn)練數(shù)據(jù)就都被“看過”了A。此時(shí),100次就是一個(gè)epoch。
第5章 誤差反向傳播
開始作者為了介紹計(jì)算圖,舉了買蘋果的栗子,然后講到反向傳播,比較重要的有兩點(diǎn),加法節(jié)點(diǎn)的反向傳播和乘法節(jié)點(diǎn)的反向傳播。
值得記錄的一點(diǎn),由于Softmax對于輸出的大小關(guān)系是不會有影響的,因此在推理(測試)的時(shí)候可以不用,但是訓(xùn)練的時(shí)候要用到,因?yàn)橐c交叉熵組合為Softmax-with-Loss層來計(jì)算反向傳播的誤差。
然后代碼實(shí)現(xiàn)誤差反向傳播,其中 要更好地理解程序,一定要跟著程序跑一遍 。
第6章 與學(xué)習(xí)相關(guān)的技巧
這里關(guān)于學(xué)習(xí)的技巧總結(jié)起來有這幾點(diǎn):
-
- 參數(shù)更新的方法
-
- 權(quán)重初始值的選取
-
- Batch Normalization(批歸一化)
-
- 正則化(權(quán)值衰減和dropout)
-
- 超參數(shù)的驗(yàn)證(驗(yàn)證集)
1. 各種參數(shù)更新的方法
這幾種優(yōu)化方法的實(shí)驗(yàn)對比:
結(jié)論:從圖6-9 的結(jié)果中可知,與SGD相比,其他3 種方法學(xué)習(xí)得更快,而且速度基本相同,仔細(xì)看的話,AdaGrad的學(xué)習(xí)進(jìn)行得稍微快一點(diǎn)。這個(gè)實(shí)驗(yàn)需要注意的地方是,實(shí)驗(yàn)結(jié)果會隨學(xué)習(xí)率等超參數(shù)、神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)(幾層深等)的不同而發(fā)生變化。不過,一般而言,與SGD相比,其他3 種方法可以學(xué)習(xí)得更快,有時(shí)最終的識別精度也更高。
2. 權(quán)重的初始值
- 為什么不能將初始值設(shè)為0?
因?yàn)樵谡`差反向傳播法中,所有的權(quán)重值都會進(jìn)行相同的更新。比如,在2 層神經(jīng)網(wǎng)絡(luò)中,假設(shè)第1 層和第2 層的權(quán)重為0。這樣一來,正向傳播時(shí),因?yàn)檩斎雽拥臋?quán)重為0,所以第2 層的神經(jīng)元全部會被傳遞相同的值。第2 層的神經(jīng)元中全部輸入相同的值,這意味著反向傳播時(shí)第2 層的權(quán)重全部都會進(jìn)行相同的更新(回憶一下“乘法節(jié)點(diǎn)的反向傳播”6.2 權(quán)重的初始值 177的內(nèi)容)。因此,權(quán)重被更新為相同的值,并擁有了對稱的值(重復(fù)的值)。這使得神經(jīng)網(wǎng)絡(luò)擁有許多不同的權(quán)重的意義喪失了。為了防止“權(quán)重均一化”(嚴(yán)格地講,是為了瓦解權(quán)重的對稱結(jié)構(gòu)),必須隨機(jī)生成初始值。
-
當(dāng)激活函數(shù)使用ReLU時(shí),權(quán)重初始值使用He初始值,當(dāng)激活函數(shù)為sigmoid 或tanh 等S 型曲線函數(shù)時(shí),初始值使用Xavier 初始值。
歸一化和正則化這里就不說了,在提到一點(diǎn)就是,超參數(shù)的選擇,一般說參數(shù)指的權(quán)重和偏置是可以訓(xùn)練出來的,而所謂超參數(shù)是那些人為設(shè)定好的參數(shù),所謂的調(diào)參也就是指調(diào)超參數(shù)。這里需要注意,一般把數(shù)據(jù)集分為訓(xùn)練集、驗(yàn)證集和測試集。
我的理解,一般先用驗(yàn)證集來選取最佳的超參數(shù),有很多方法包括網(wǎng)格搜索、隨機(jī)采樣又或者貝葉斯最優(yōu)化。然后再用訓(xùn)練集來訓(xùn)練出參數(shù),最后用測試集測試效果。
書上提到,比較理想的情況下測試集只用一次。
第7章 卷積神經(jīng)網(wǎng)絡(luò)
其實(shí)筆者早在16年開始接觸深度學(xué)習(xí),最開始就是學(xué)習(xí)了一些簡單的機(jī)器學(xué)習(xí)知識(主要是NG老師的課和統(tǒng)計(jì)學(xué)習(xí)方法),就接觸CNN,一開始是真的蒙蔽,以至于覺得圖像好難好難,這次再看,有了很大的改觀,這里更多的是心得。
其實(shí)理解上上面章節(jié)的知識,理解卷積神經(jīng)網(wǎng)絡(luò)(CNN)真的是
特別簡單
!
- 卷積層是用來提取圖像的特征的;
- 全連接層就是神經(jīng)網(wǎng)絡(luò)的全連接版!!把卷積層收集的特征,再次激活,并分類;
- 至于為什么一般接兩層全連接層,請看感知機(jī)兩層的效果(當(dāng)然激活函數(shù)是非線性的)。當(dāng)然是兩層理論上就可以處理任何非線性問題了!
- 還有就是,為什么要有卷積層,我的理解是,有些圖像太大,而且會有多層,所以直接神經(jīng)網(wǎng)絡(luò)分類奇慢,所以需要卷積的方式提取特征,其實(shí)也是神經(jīng)網(wǎng)絡(luò)的思想,只不過可以理解為局部神經(jīng)網(wǎng)絡(luò),并可以保留空間的信息。
最后一章深度學(xué)習(xí)就不再記錄。
最后一點(diǎn)感悟,理論確實(shí)要與代碼結(jié)合,代碼得去跑和理解。
最后最后,代碼要與業(yè)務(wù)結(jié)合,工程上利用理論和代碼把業(yè)務(wù)處理好才是王道!!
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
