該系列博文,主要是對吳恩達深度學習和優達學城相關課程的學習筆記;
主要方便自己查閱,複習。
相關參考閱讀:機器學習16:簡單, 直觀的方法理解CNN(卷積神經網絡)核心原理及實現
1.邊緣檢測
常見的都有垂直方向,水平方向邊緣檢測,sobel算子
假如把濾波器的參數,用數據自動訓練,就可以得到檢測任意邊緣檢測的濾波器
2.Padding
卷積計算的缺點:
1.丟失邊緣信息:每次做卷積運算,圖像就會變小,丟棄邊緣信息;
2.角落邊的像素,只會計算一次,而圖中間的像素,會被卷積計算多次,意味着丟失了邊緣許多信息;
未解決這個問題,在做卷積之前,對圖像先做填充
輸出變成 (n+2p-f+1)*(n+2p-f+1)
這樣,角落邊緣信息丟失,這個問題影響就削弱了。
至於填充多少像素,一般有兩種,分別叫Valid卷積和Same卷積;
Valid卷積:不填充;
Same卷積:填充後,輸出大小和輸入大小是一樣的;
在計算機視覺中,f一般取奇數;可能原因有
原因1:如果取偶數,那隻能使用一些不對稱的填充;
原因2:奇數維度的卷積,有一箇中心點,有時在計算機視覺裏,有一箇中心像素點會更方便,容易指出卷積位置;
3.步長stride
當一個nxn圖片,與一個fxf濾波器,做卷積時,其輸出尺寸計算如下(向下取整):
互相關:將濾波器參數翻轉,即按水平,垂直方向做鏡像
得到新的濾波器,數學家將這叫做互相關;
而在機器學習中,一般統稱爲卷積,將濾波器參數的翻轉視爲卷積的性質
對於信號處理來說,這個性質很重要;但是對深度學習來說,這個不重要,因此省略綠這個雙重鏡像操作;
4多維卷積核
注:可以獨立設置每個通道濾波器參數;比如只關注R通道邊緣檢測…
4卷積神經網絡示例
5.Pooling
除了卷積層,卷積網絡也經常使用池化層,來縮減模型大小,提高計算速度,同時提高所提取特徵的魯棒性;
Pooling layer:Max pooling
意義,某個區域最大值,往往意味着該區域檢測出某個特徵
Pooling layer:average pooling
意義,某個區域最大值,往往意味着該區域檢測出某個特徵
一般來說,最大池化層比平均池化層更常用,但也有例外,就是深度很深的神經網絡,
可以用平均池化來分解規模爲7x7x1000的網絡的表示層;在整個空間內求平均值,得到1x1x1000
最常用的是f=2,s=2,相當於高度和寬度縮減一半
大部分情況下,最大池化很少用到padding,目前p最常用是p=0
需要注意的一點是,池化過程中沒有需要學習的超級參數;只有這些手動設置的參數,也可能是通過交叉驗證設置的;
最大池化只是計算神經網絡某一層的靜態屬性,沒有什麼需要學習的;
一個完整的卷積神經網絡示例
常規做法是,儘量不要自己設置超級參數,而是查看文獻中別人採用了哪些超級參數,選一個在別人任務中效果很好的架構,
那麼它也有可能適用於你自己的應用程序;
如果激活值下降太快,也會影響網絡性能;
整合這些基本模塊確實需要深入的理解和感覺,找到整合基本構造模塊的感覺,最好辦法就是大量閱讀別人的案例,
爲什麼使用卷積
和單純使用全連接層相對,卷積層的兩個主要優勢,參數共享和稀疏鏈接
如上圖示,全連接層需要月14000000參數,而卷積層只需156個參數
卷積層能有效減少參數的原因主要有
1.共享參數
一個卷積核參數,可以平移,滑過所有像素平面;即卷積具有平移不變性
2.稀疏鏈接
如下圖,輸出圖像的某個點,只與輸入圖像部分像素有關
將所有模塊組織成一個可用的卷積網絡示例
輸入圖片,增加捲積層和池化層,然後添加全連接層,最後softmax輸出,得到一個
卷積層和全連接層有不同的參數w和偏差b, 我們可以用任何參數集合來定義代價函數;
並隨機初始化其參數和偏差,CostJ等於神經網絡對整個訓練集的預測的損失總和,再除以m;
所以,訓練神經網絡,你要做的是使用梯度下降法或其他算法,如含動量的梯度下降,含RMSProp或其它因子的梯度下降;
來優化神經網絡中的所有參數,以減小代價函數J的值;
通過上述操作,可以構建一個高效的貓咪或其他檢測器;