DeepLearning.ai筆記:(4-2)-- 深度卷積網路例項探究(Deep convolutional models:case studies)
title: ‘DeepLearning.ai筆記:(4-2)-- 深度卷積網路例項探究(Deep convolutional models:case studies)’
id: dl-ai-4-2
tags:
- dl.ai
categories: - AI
- Deep Learning
date: 2018-10-09 17:17:04
首發於個人部落格:fangzh.top,歡迎來訪
本週主要講了深度卷積網路的一些模型:LeNet,AlexNet,VGGNet,ResNet,Inception,1×1卷積,遷移學習等。
經典的卷積網路
經典的卷及網路有三種:LeNet、AlexNet、VGGNet。
LeNet-5
LeNet-5主要是單通道的手寫字型的識別,這是80年代提出的演算法,當時沒有用padding,而且pooling用的是average pooling,但是現在大家都用max pooling了。
論文中的最後預測用的是sigmoid和tanh,而現在都用了softmax。
AlexNet
AlexNet是2012年提出的演算法。用來對彩色的圖片進行處理,其實大致的結構和LeNet-5是很相似的,但是網路更大,引數更多了。
這個時候已經用Relu來作為啟用函數了,而且用了多GPU進行計算。
VGG-16
VGG-16是2015的論文,比較簡化的是,卷積層和池化層都是用相同的卷積核大小,卷積核都是3×3,stride=1,same padding,池化層用的maxpooling,為2×2,stride=2。只是在卷積的時候改變了每一層的通道數。
網路很大,引數有1.38億個引數。
建議閱讀論文順序:AlexNet->VGG->LeNet
Residual Network(殘差網路)
殘差網路是由若干個殘差塊組成的。
因為在非常深的網路中會存在梯度消失和梯度爆炸的問題,為此,引入了Skip Connection來解決,也就是殘差網路的實現。
上圖即為一個殘差塊的基本原理,在原本的傳播過程(稱為主線)中,加上了 到 的連線,成為’short cut’或者’skip connetction’。
所以輸出的表示式變成了:
殘差網路是由多個殘差塊組成的:
沒有殘差網路和加上殘差網路的效果對比,可以看到,隨著layers的增加,ResNet表現的更好:
ResNet為何有用?
假設我們已經經過了一個很大的神經網路Big NN,得到了
那麼這個時候再經過兩層的神經網路得到 ,那麼表示式為:
如果加上正則化,那麼權值就會很小,假設 , 因為啟用函式是Relu,所以
所以可以看到,加上殘差塊以後,更深的網路最差也只是和前面的效果一樣,何況還有可能更好。
如果只是普通的兩層網路,那麼結果可能更好,也可能更差。
注意的是 要和 的維度一樣,可以使用same padding,來保持維度。
1×1卷積
用1×1的卷積核可以來減少通道數,從而減少引數個數。
Inception Network
Inception的主要好處就是不需要人工來選擇filter的大小和是否要新增池化層的問題。
如圖可以一次性把各個卷積核的大小和max pool一起加進去,然後讓機器自己學習裡面的引數。
但是這樣有一個問題,就是計算量太大了,假設是上面的 的卷積核,有32個,這樣一共要進行KaTeX parse error: Expected 'EOF', got '\2' at position 9: 28\times\̲2̲8\times32\times…的乘法次數,運算量是很大的。
如何解決這個問題呢?就需要用到前面的1×1的卷積核了。
可以看到經過維度壓縮,計算次數少了十倍。
Inception 網路
單個的inception模組如下:
構成的google net如下:
使用開源的實現方案
別人已經實現的網路已經很厲害了,我覺得重複造輪子很沒有必要,而且浪費時間,何況你水平也沒有別人高。。還不如直接用別人的網路,然後稍加改造,這樣可以很快的實現你的想法。
在GitHub上找到自己感興趣的網路結構fork過來,好好研究!
遷移學習
之前已經講過遷移學習了,也就是用別人訓練好的網路,固定他們已經訓練好的網路引數,然後套到自己的訓練集上,完成訓練。
如果你只有很少的資料集,那麼,改變已有網路的最後一層softmax就可以了,比如原來別人的模型是有1000個分類,現在你只需要有3個分類。然後freeze凍結前面隱藏層的所有引數不變。這樣就好像是你自己在訓練一個很淺的神經網路,把隱藏層看做一個函式來對映,只需要訓練最後的softmax層就可以了。
如果你有一定量的資料,那麼freeze的範圍可以減少,你可以訓練後面的幾層隱藏層,或者自己設計後面的隱藏層。
資料擴充
資料不夠的話,進行資料擴充是很有用的。
可以採用
- 映象
- 隨機裁剪
- 色彩轉換color shifting(如三通道:R+20,G-20,B+20)等等
tips:
在資料比賽中
- ensembling:訓練多個網路模型,然後平均結果,或者加權平均
- 測試時使用muti-crop,也就是在把單張測試圖片用資料擴充的形式變成很多張,然後執行分類器,得到的結果進行平均。