經典網絡
LeNet-5
針對灰度圖片訓練,例如輸入一個32x32x1的圖片:
圖片與一個5x5x6的過濾器做卷積,步伐s=1,padding=0,得到28x28x6的矩陣,再與一個14x14x6的過濾器做均值池化,過濾器寬度爲2,步幅爲2,圖形的尺寸,高度和寬度均縮小2倍,得到一個14x14x6的圖像,再與一個5x5x16的過濾器做卷積,步伐s=1,padding=0,得到10x10x16的圖像,再與一個5x5x16的過濾器做均值池化,過濾器寬度爲2,步幅爲2,圖形高度和寬度均縮小2倍,輸出一個5x5x16的圖形。將所有數字相乘,乘積是400。
下一層是全連接層,在全連接層中,有400個節點,每個節點有120個神經元,再從這400個節點中抽取一部分節點構建另一個全連接層。
最後一步就是利用這84個特徵得到最後的輸出,還可以再這裏再加一個節點用來預測的值,有10個可能的值,對應識別0-9這10個數字,用softmax函數輸出十種分類結果。
AlexNet
AlexNet首先用一張227x227x3的圖片作爲輸入,第一層使用11x11x96的過濾器,s=4,得到55x55x96的圖像,用一個3x3的過濾器構建最大池化層,f=3,s=2,得到27x27x96的圖像,接着再執行一個5x5的卷積,padding之後,得到27x27x276的圖像,再進行最大池化,尺寸縮小到13x13,再執行一次same卷積,相同的padding,得到的結果是13x13x384,再做一次same卷積。再做一次同樣的操作,最後再進行一次最大池化,尺寸縮小到6x6x256。最後將所有數字相乘,得到9216個單元,然後是一些全連接層,最後使用softmax函數輸出識別的結果。
VGGNet
VGG-16網絡沒有那麼多超參數,這是一種只需要專注於構建卷積層的簡單網絡,首先用3x3,步幅爲1的過濾器構建卷積層,padding參數爲same卷積中的參數,然後用一個2x2,步幅爲2的過濾器構建最大池化層,池化層將輸入圖像進行壓縮,從224x224x64縮小到112x112x64。使用128個過濾器,以及一些same卷積,輸出112x112x128然後進行池化,可以推導出池化後的結果是56x56x128,然後又是若干個卷積層,使用128個過濾器,以及一些same卷積,輸出112x112x128,然後進行池化,可以推導出池化後的結果是56x56x128,接着再用256個相同的過濾器做三次卷積操作,然後再池化,然後再卷積三次,再池化。如此進行幾輪操作後,得到7x7x512的特徵圖進行全連接操作,得到4096個單元,然後進行softmax激活,輸出從1000個對象中識別的結果。
VGG-16的這個數字16,就是指在這個網絡中包含16個卷積層和全連接層,網絡結構規整,主要缺點是需要訓練的特徵數量非常巨大。
殘差網絡(ResNet)
situation:非常非常深的神經網絡是很難訓練的。
why:存在梯度消失和梯度爆炸問題。
solution:跳躍連接skip connection,它可以從某一層網絡層獲取激活,然後迅速反饋給另外一層,甚至是神經網絡的更深層,可以利用跳躍連接構建能夠訓練深度網絡的ResNets,有時深度能夠超過100層。
注:skip connection:指跳過一層或者好幾層,從而將信息傳遞到神經網絡的更深層。
這是一個兩層神經網絡,在L層進行激活,得到,再次進行激活,兩層之後得到。計算過程是從開始,首先進行線性激活,根據這個公式:,通過算出,即乘以權重矩陣,再加上偏差因子。然後通過ReLU非線性激活函數得到,計算得出,接着再次進行線性激活,依據等式,最後根據這個等式再次進行ReLU非線性激活,即,這裏的g是指ReLU非線性函數,得到的結果就是。信息流從到需要經過以上所有步驟,即這組網絡層的主路徑。
在殘差網絡中有一點變化,我們將直接向後,拷貝到神經網絡的深層,在ReLU非線性激活函數前加上,這是一條捷徑。的信息直接到達神經網絡的深層,不再沿着主路徑傳遞,這意味着最後這個等式()去掉了,取而代之的是另一個ReLU非線性函數,仍然對進行g函數處理,但這次要加上,即:,也就是加上的這個產生了一個殘差塊。
如圖所示,5個殘差塊連接在一起構成一個殘差網絡。如果使用標準優化算法訓練一個普通網絡,比如梯度下降法,或者其它熱門的優化算法,如果沒有殘差,沒有這些捷徑或者跳躍連接,憑經驗會發現隨着網絡深度加深,訓練錯誤會減少,然後增多,理論上,隨着網絡深度的加深,應該訓練得越來越好纔對,但實際上如果沒有殘差網絡,對於一個普通網絡來說,深度越深意味着優化算法越難訓練,訓練錯誤會越來越多。
但殘差網絡不同,即使網絡再深,訓練的表現卻不錯。
1x1卷積
1x1卷積:用於減少或保持或增加通道數()
谷歌Inception網絡
作用
代替人工來確定卷積層中的過濾器類型,大小究竟是1x1,3x3,還是5x5,或者是否需要創建卷積層或池化層。
**思想:**不需要人爲決定使用哪個過濾器或者是否需要池化,而是由網絡自行確定這些參數,你可以給網絡添加這些參數的所有可能值,然後把這些輸出連接起來,讓網絡自己學習它需要什麼樣的參數,採用哪些過濾器組合。
**瓶頸層:**假設有一個玻璃瓶,瓶頸是這個瓶子最小的部分。同理,瓶頸層是網絡中最小的部分,先縮小網絡,再擴大它。只要合理構建瓶頸層,既可以顯著縮小表示層規模,又不會降低網絡性能,從而節省了計算。
inception網絡
輸入一個28x28x192的圖片,先通過1x1的過濾器,再通過5x5的過濾器,1x1的層可能有16個通道,而5x5的層輸出爲28x28x32,共32個通道。
輸入一個28x28x192的圖片,先通過1x1的過濾器,再通過3x3的過濾器,1x1的層可能有96個通道,而3x3的層輸出爲28x28x128,共128個通道。
也可以輸入一個28x28x192的圖片,將其直接通過一個1x1的卷積層,這時就不比在後面再跟一個1x1的層,輸出28x28x64。
使用same類型的padding來池化,使得輸出的高和寬依然是28x28,再加上一個1x1的卷積層,將通道的數量縮小,縮小到28x28x32。
最後將這些矩陣全連接起來,在這過程中,把得到的各個層的通道都加起來,最後得到一個28x28x256的輸出。
遷移學習
使用別人已經訓練好網絡結構的權重參數,把它當作一個很好的初始化用在你自己的神經網絡上,用遷移學習把公共的數據集的知識遷移到你自己的問題上,然後轉換到你感興趣的任務上,