參數過多:神經網絡中多個神經元能夠組成一層,這一層的神經元須要和上一層的輸出作全鏈接,固然在輸入的時候,也須要將輸入數據的每個份量都鏈接到本身的神經元上做爲輸入,而後獲得一個輸出。面試
若是是圖像的話,咱們能夠把每個像素點,都當成一個特徵值。編程
參數過多會帶來什麼問題呢:bash
解決問題網絡
對於圖像數據來講,某個像素點和他周圍的關係比較大,可是離他比較遠的店的關係就比較小。因此對於一個圖像數據來講,他具備很是大的區域性。ide
基於這樣的一個性質,咱們能夠作一個篩檢,從全鏈接編程局部連接從而下降他的模型參數函數
(注:區域鏈接範圍是只一個區域的大小是10*10,不是將1000*1000的圖像分紅100份)學習
局部鏈接(圖像的區域性)spa
固然還能夠去調整filter-size:神經元和圖像中多大的區域的像素點進行鏈接3d
參數共享(圖像特徵與位置無關)code
對於一張圖像來講,不一樣的角度能夠看到不一樣的圖像信息。圖像的特徵和位置是無關的,他的特徵就表明着這個東西是什麼(好比愛因斯坦的左眼和右眼);和位置無關,就表明着說能夠在圖像的任何一個位置(多是左上角,多是右上角),若是用每一個神經元去學習一個固定的位置的話,那麼這個神經元他提取的特徵,他也不知道是什麼,由於這個位置是變化的,因此說咱們沒法去解釋這個神經元到底學到了什麼東西。
爲了解決這個問題,咱們又作了另一個操做-參數共享:強制每個神經元和圖像的局部連接都使用一樣的參數。
先看下這麼作能夠下降模型參數到什麼程度
那麼這個的物理含義是什麼呢:如下圖爲例,左邊是原圖,右邊是原圖的每個區域根據參數塊內積獲得的神經元,能夠想象成是參數再在圖像上從左到右從上到下劃過生成的一個新的圖像。那麼能夠想象一下參數共享的含義。無論這個特徵在哪(圖像的哪一個位置),這個參數塊就是去捕捉這個特徵,捕捉到了,就能夠激活對應的某個神經元(每一個參數塊由全部局部區域共享,爲提取一個特徵)
每一個位置進行計算
卷積核的操做:輸入圖像中的每個區域都和卷積核作全鏈接,獲得輸出圖像中的一個區域
卷積核和輸入圖像的計算方法:
步長:控制卷積核在圖像上每次划動所隔的位置
padding使輸出size變小:
在剛纔的計算中,卷積核在圖像劃事後產生的輸出相對輸入來講是逐漸變小的,這個對中間的計算就會比較負責,由於可能會有多個卷積層,若是每層都變小的話,會很難計算。
那麼有沒有一種辦法,讓輸入和輸出的size是同樣的呢--padding
padding的方法就是說在圖像的周圍,加上一些默認值0,那麼當卷積核在從加過padding圖像劃過的時候,產生的輸出就和原輸入的大小是同樣的。padding加的大小,就和卷積核是有關的(根據輸出size=輸入size-卷積核size+1
的這個公式計算),
感悟:實際上一次卷積操做,就是一次特徵提取
多通道:卷積也變成多通道的,通道上的卷積的參數是不共享的,在作計算的過程當中,每一個通道上的卷積的參數和相應圖像上的區域作內積,將這三個通道上獲得的一樣位置上的內積的結果相加起來做爲輸出神經元的值
多個卷積核
如何產生多通道的神經元—多加幾個卷積核,這些卷積核的參數是不共享的。多卷積核的物理意義:卷積核是用來提取某種特徵的,當這個區域有這個特徵的時候,卷積核就可以捕捉到特徵使得輸出神經元比較大,沒有捕捉到,輸出就會比較小。多個卷積核能夠用來提取多種特徵
卷積層的參數數目舉例
卷積層,輸入三通道,輸出192通道,卷積核大小是3*3 ,問該卷積層有多少參數?
// 3*3 是一個卷積核,由於是三通道的因此再乘3
// (3*3)*3 是一個卷積層,一共有192通道,就有192層
(3*(3*3)) * 192 = 5184
複製代碼
激活函數
除了以前講過的sigmoid激活函數,經常使用的還有其餘五種
在卷積神經網絡中,比較經常使用的激活函數時ReLU,由於他的計算很是簡單(sigmoid須要進行一個很是複雜的指數計算和一個相對複雜的出發計算)
池化
最大值池化:
平均值池化:
池化的性質與性質:
全鏈接層(和普通神經網絡同樣)
卷積神經網絡結構
卷積神經網絡=卷積層+池化層+全鏈接層
上圖年代較早,圖中的單詞和咱們講的概念能夠先忽略,只看結構的基本信息
因爲全鏈接的結果是向量,是沒有辦法生成圖像的,若是去掉全鏈接層,咱們就可使得卷積神經網絡能夠以圖像的形式輸出模型東西。
以下輸出是和輸入同等大小的圖像,每一個圖像上的值就是一個分類信息,用來分類這是否是一個分界面,好比輸入是貓和狗,這裏就能夠把貓和狗區分開來
問題:不padding的卷積和池化會使得圖像變小,如何獲得和原圖同樣大小的輸出呢?反捲積,使用小於1的步長,這是一個很是奇怪的卷積操做,會在後面提到