Deep Learning的基础概念
目錄
- DNN
- CNN
- DNN VS CNN
- Example
- 卷積的好處why convolution?
- 權值共享 parameter sharing
- 稀疏連接 sparse connection
- 平移不變性
- DNN VS CNN
- DCNN
- 卷積核移動的步長 stride
- 激活函數 active function
- 通道 channel
- 補零 padding
- 參數計算
- 池化層 Pooling layer
- 池化層的超參數:
- 池化層的類型:
- 全連接層 Fully connected layer FC層
- CNN的一些性質
- 不變性 invariant
- 平移不變性 translation invariant
- 旋轉不變性 和 縮放(尺度)不變性
- 反向傳播梯度消失
- 不變性 invariant
- 常規框架
- trick
- #空洞卷積 dialted convolution
- #隨機丟棄 dropout
- #批正則化 Batch Normalization
- #遷移學習 transfer learning
- #數據增強 data augmentation
- tips for doing well on benchmarks/winning competitions
- A few useful thing to know in Machine Learning:
\
\
?
參考?https://www.jeremyjordan.me/convolutional-neural-networks/
DNN
Deep Neural Network == feed-forward-network == multilayer perceptron(MLP)
input -> 一系列全連接層 -> output
CNN
【注意】 深度學習中的卷積操作和信號處理里面的不一樣,信號處理或是數學課本上說的卷積,需要先對卷積核做關于中心的翻轉然后再對應元素相乘相加;而不翻轉 直接對應元素相乘相加的操作叫相關 cross-corelation。在深度學習中是直接用卷積核和圖像的對應元素相乘相加,其實是做的相關操作,但稱作卷積。
\
DNN VS CNN
Deep Neural Network, feed-forward-network ,also known as a multilayer perceptron
- 有一系列全連接層在中間
Convolutional Neural Network
- 用卷積對圖像做操作,將所使用的卷積核看做未知參數,在訓練網絡的過程中求出最優參數,具體參見下文DCNN的圖
Example
以數字手寫體識別為例
-
對于反饋前向網絡(DNN),需要將4 * 4的2D圖像拉伸成1D的長度是16 * 1 的向量,才能作為網絡的輸入。
拉伸使得原本2D圖像中像素之間的位置信息丟失,只留下每個像素的灰度值,難以正確識別出數字
-
對于卷積神經網絡,卷積層在2D圖像上定義了窗口的概念,用窗口去框出圖像的一部分區域,在這部分區域上和窗口進行卷積操作,得出的結果填入到輸出圖像的對應位置,然后通過逐步地平移窗口來掃描整個圖像。窗口window也叫濾波器filter\卷積核kernel。
-
通過設置特定的窗口參數值來搜尋一些特定的特征(比如邊緣)
掃描數字'4',可以定義專門檢測水平直線的窗口和檢測垂直直線的窗口。
-
窗口掃描過整個圖像后輸出的結果稱作特征圖 feature map,feature map一般比原圖的尺寸小,如果想和原圖的尺寸保持一致,可以在原圖的四周根據窗口的尺寸進行補零padding。
并不是所有的窗口都適用于檢測數字'4',比如用檢測右對角線的窗口則沒有什么效果。一般實際應用中并不會直接指定窗口的參數值,而是設置參數變量,在訓練過程中讓網絡去學習最優的參數值。
我們可以將多層卷積層stack together(疊在一起),即對于卷積的結果繼續卷積。
\ -
卷積的好處why convolution?
權值共享 parameter sharing
- 理由:a feature detector(such as edge detector) that's useful in one part of the image is probably useful in another part of image.
- 好處:減少參數個數(相比起傳統的多層感知機模型,假如第一層圖像是n1 * n1 * c1 ,第二層圖像是 n2 * n2 * c2,對于感知機模型,需要在第一層有n1 * n1 * c1,第二層有n2 * n2 * c2個神經元,然后將它們全連接,參數個數即權重個數非常多 ,而如果是用卷積的操作,參數個數就是所有卷積核的總元素個數+偏置個數 )
\
稀疏連接 sparse connection
- 含義:卷積之后的每個元素只和原圖中對應的周圍區域有關,而與其他區域無關
因此由于上述兩個機制,卷積神經網絡的參數個數比較少(相對于DNN這種全連接網絡來說),從而降低過擬合的概率
平移不變性
下文有提及
\
DCNN
Deep Convolutional Neural Network?更深的CNN (下面把DCNN都稱為CNN)
Example
識別正方形,可以考慮 邊特征和角特征,正方形有兩對長度相等的平行邊{A1,A2,B1,B2},兩兩的夾角是直角。因此是用低層次的特征來描述高層次的物體。
?
如何卷積?將卷積核(filter)的3 * 3 區域放到圖像中,遍歷(scan)整個圖像,每次將卷積核和圖像的某個3 * 3區域 元素相乘,得到的結果填到輸出圖像的相應位置
每次卷積之前對輸入圖像補零;圖像尺寸的格式為 長 * 寬 * 通道個數
第一層的輸入圖像是 5 * 5 * 1,用兩個卷積核,尺寸分別都為 3 * 3 * 1,得到兩張特征圖
卷積之后輸出圖像是 3 * 3 * 2,通道數為2,每個通道分別代表一個卷積核得到的特征圖
然后將每個特征圖里的每個元素加上偏置之后,傳給非線性激活函數,ReLU(x+b),偏置的下標和特征圖(即通道個數)一致,即一張特征圖對應一個偏置b。這樣之后形成新的特征圖,作為第二層的輸入。
對應到多層感知機模型:
- 假設本層神經元的輸入是a(0)a(0)?,輸出(即下一層神經元的輸入)是?a(1)a(1)
- 則?a(1)=f(w(0)a(0)+b)a(1)=f(w(0)a(0)+b)?,?ff?是神經元的激活函數
- 則對輸入圖像執行卷積操作相當于?w(0)a(0)w(0)a(0)?,對形成的特征圖加上偏置,再傳給激活函數,得出輸出。
第二層的輸入圖像是 3 * 3 * 2,用一個卷積核,尺寸為 3 * 3 * 2(因為卷積核的通道數要與輸入圖像保持一致)
第二層的輸出圖像是 3 * 3 * 1,將兩個通道下的結果相加融合為1個通道(這是因為卷積核的通道數也為2所以對圖像卷積就要相加)
\
卷積核移動的步長 stride
在上面的例子中,卷積核移動的步長為1,但實際情況中可以有多種選擇,有時也會把步長定為2
- 卷積的步長決定了掃描整個圖像所需的步數,即卷積后得到的特征圖的size
- 某種程度上,是降采樣方法
- 而作為同樣是降采樣方法的池化層,需要顯式地定義出如何總結該窗口(summarize a window,比如需要定義是max pooling還是min還是average等等)
激活函數 active function
ReLU, sigmoid, tanh等等都是激活函數,在DNN(反饋前向網絡)中也用到激活函數。
在CNN中,一般是緊跟在卷積層之后的處理,也就是:第n層卷積層 -> 激活函數 -> 第n+1層卷積層 -> 激活函數 -> 第n+2層卷積層 ....
如何在卷積層后用激活函數?將卷積后的圖像里的每個像素都看做一個神經元節點,比如卷積后的特征圖是 55 * 55 * 5,將每個元素(像素)都分別作為激活函數的輸入,輸出的結果形成新的圖 55 * 55 * 5
通道 channel
https://blog.csdn.net/sscc_learning/article/details/79814146?更好地解釋,可以認為是卷積核的個數
比如一個RGB圖像的尺寸為 h * w * c,其中c=3 分別代表R\G\B三個通道。
卷積核與輸入圖像進行卷積時,要求卷積核的通道數必須與輸入圖像一致:
-
對于三通道的 h * w * 3,卷積核的尺寸為 f * f * 3,卷積后的結果是同一位置上三個通道相加的結果,因此卷積后的圖只有1個通道
-
當一次使用多個卷積核時,比如用k個卷積核,則輸出圖像為 k 通道的, 每個通道代表其對應的一個卷積核與輸入圖像卷積后的結果
-
因此輸出圖像的通道數=所用卷積核的個數
補零 padding
如果不補零,兩個問題:
- 隨著卷積層數增多,得到的特征圖尺寸會越來越小【補零可以使卷積后的特征圖和輸入圖像的尺寸保持一致】
- 位于圖像邊緣的點相對位于圖像較中心的點來說被計算的次數少【比如角落的點可能只被卷積核覆蓋過一次,而位于中心的點則會被多次覆蓋】
兩種補零方式:
-
valid: 不補零
-
same: 補零一定尺寸使得輸出的特征圖尺寸和補零前的輸入圖像一致。假設卷積核移動步長為1,則n + 2p - f + 1 = n,n是原圖尺寸,p是補零尺寸,f是卷積核尺寸
filter sizepadding 3 * 3 1 5 * 5 2 7 * 7 3
\
參數計算
image size of output from layer l-1 =?nl?1H?nl?1W?nl?1CnHl?1?nWl?1?nCl?1
filter size of layer l =?flfl
padding: valid, so?p=0p=0
stride of layer l =slsl
number of filters at layer l =?nlfnfl
nlH=nl?1H+0?flsl+1nHl=nHl?1+0?flsl+1,?nlWnWl?also can be computed using the same formula
nlC=nlfnCl=nfl?即該層輸出的特征圖通道個數與該層使用的卷積核個數一致
\
池化層 Pooling layer
池化是用于壓縮特征圖中包含的空間信息,與卷積的過程類似,同樣需要定義一個窗口,逐步移動該窗口使其掃描整個圖像;與卷積不同的是,池化一般不會補零。池化的目的是壓縮信息,而卷積的目的是提取特征。
池化層的超參數:
- f ( filter尺寸 )
- s ( stride移動步長 )
- 池化層的超參數并不是通過網絡的學習得出,而是直接指定。(因為梯度傳播并不會影響這些超參數)
假設輸入圖像是 h * w * c,根據池化層filter的尺寸(長和寬)還有移動的步長,得到輸出的圖像 h' * w' * c
池化層輸出尺寸h' w'的計算和卷積層的公式一樣
【注意】通道數不發生變化,池化層是對每一個特征圖分別做pooling,并不會像卷積層那樣把每個通道的結果相加!
*【注意】 pooling選擇的stride 一般保證不會出現overlap,而不同于一般的卷積層 經常出現overlap *
池化層的類型:
-
最大池化Max pooling:每個窗口操作后的結果是當前區域內的像素最大值。
-
同樣也可以定義:平均池化,或是最小池化
?
-
全局池化Global pooling:比較極端的情況,窗口的尺寸和圖像的尺寸一致,池化之后,每個尺寸為n * n的圖像被壓縮為一個1 * 1的單一的值。這適用于那些輸入圖像的尺寸各不相同的CNN,因為它能夠將任意的w * h *c 的圖像壓縮成 1 * 1 * c 的特征圖。【只要給出的池化窗口尺寸和輸入圖像的尺寸一致即可】
全連接層 Fully connected layer FC層
經典的CNN結構 = 卷積層+池化層+全連接層,全連接層一般放在網絡結構中的靠后部分
全連接層給CNN帶來局限
CNN的局限之一是只能輸入固定尺寸的圖像到網絡,如果尺寸不一致需要進行裁剪或縮放等預處理:
-
在全連接層需要將二維圖像拉成一維向量,假設輸入全連接層的特征圖尺寸是 r * w , 全連接層的神經元是 k 個, 則全連接層的權重個數是 r * w * k。
-
如果訓練網絡時一直用的輸入圖像尺寸是 n * m 使得輸入全連接層的特征圖是 r * w,而在測試階段(test or predict phase)時輸入網絡的圖像不是 n * m,則會導致輸入全連接層的特征圖尺寸與 r * w 不一致,即與全連接層的參數(權重)個數不一致!
VGGNet通過將全連接層等價轉換成卷積層來改進這一問題 [這樣的網絡是Fully Convolutional Network (FCN)]
- 轉換成卷積層還有一個好處是:參數變少,原本含有FC層的網絡,觀察每一層的參數個數,發現大多數參數是集中在FC層,而卷積層的參數相對較少(因為卷積操作是權值共享),因此將FC層轉換成卷積層可減少參數個數,從而提高訓練速度等等。
CNN的一些性質
不變性 invariant
CNN具有平移不變形,一定程度的旋轉不變形和縮放不變形,但是劇烈地旋轉和縮放則難以識別
平移不變性 translation invariant
因為卷積核是平滑濾波,即如果輸入圖像的特征移動,輸出的特征圖也隨著移動,但不會影響識別:
- 如果用于訓練網絡的人臉圖像中,人臉都出現在圖像的左上角,而在測試網絡時輸入的人臉圖像中,人臉出現在右下角,并不會影響識別結果
旋轉不變性 和 縮放(尺度)不變性
由于最大池化層的存在,盡管發生細微的旋轉或縮放,可能在感受野區域內的最大值仍沒有變化,因此使用最大池化層仍能取到恰當的最大值
- The pooling regimes make convolution process invariant to translation, rotation and shifting. Most widely used one is max-pooling. You take the highest activation to propagate at the interest region so called receptive field. Even a images are relatively a little shifted, since we are looking for highest activation, we are able to capture commonalities between images.
反向傳播梯度消失
https://zhuanlan.zhihu.com/p/33006526
梯度反向傳播,基于梯度下降策略,以目標的負梯度方向調整參數,?wt+1=wt+Δwwt+1=wt+Δw
求梯度用鏈式法則,記?fi=f(wi?fi?1),fi=f(wi?fi?1),?則?Δw2=?Loss?f4?f4?f3?f3?f2?f2?w2Δw2=?Loss?f4?f4?f3?f3?f2?f2?w2
Loss是最后一層的輸出,f4是輸入;f4是倒數第二層的輸出,f3是輸入…… 可見中間的部分就是在每一層對激活函數求導,如果求導結果大于1,隨著層數增多,梯度會越來越大,產生梯度爆炸;如果求導結果小于1,梯度更新信息將會以指數形式衰減,發生梯度消失
因此,不同的層 學習的速度(參數更新的速度)差異很大,靠近輸出的層學習情況很好,靠近輸入的層學習的很慢,(靠近輸出的層更新梯度不需要對太多層鏈式求偏導),甚至訓練了很久,前幾層的權值和剛開始隨機初始化的值差不多。。
激活函數使用sigmoid或tanh,導數都是小于1的,很容易發生梯度消失。。
可以改用ReLU, Leak ReLU, eLU等激活函數:
- ReLU 及其導數,可以看到在大于0的部分其導數是恒等于1的
\
常規框架
CNN,包含一些卷積層,某些階段還有降采樣(pooling or stride convolutions)
- 卷積層用于產生特征圖,其用不同的方式解釋輸入圖像
- 池化層壓縮空間維度,減少在之后的層里待提取特征的參數數量
- 一般的結構可以表示成: [(CONV-RELU) * N-POOL?] * M-(FC-RELU) * K , SOFTMAX
\
對圖像分類問題,我們最后會將原始的輸入壓縮成 a deep stack of(一堆?)?1 * 1的特征圖,然后將這些結果喂到幾個全連接層來計算 p(class|image) 的概率 (似然)。
?
CNN的OVERVIEW,通用框架
https://www.jeremyjordan.me/convnet-architectures/
ReLU 是激活函數的一種。softmax用在最后作歸一化。
ReLU 激活函數,f(x)=max(0,x)f(x)=max(0,x),即神經元的輸入為x,通過激活函數后神經元的輸出為f(x)
softmax,將多個神經元的輸出映射到(0,1)區間 ,?Si=ei∑jejSi=ei∑jej
\
trick
#空洞卷積 dialted convolution
https://www.zhihu.com/question/54149221
工作原理: 卷積核有間隔。即在標準的convolutional map里注入空洞,以此來增加感受野。
下圖中的圖一是標準卷積,圖二是空洞卷積
空洞卷積多了一個超參數稱為dilation-rate,指的是kernel的間隔數量,標準的卷積dilation rate是1
圖一
圖二
#隨機丟棄 dropout
https://blog.csdn.net/stdcoutzyx/article/details/49022443
在訓練時,按照一定概率將一些網絡節點暫時丟棄(失活)。對于隨機梯度下降來說,由于是隨機丟棄,因此每個mini-batch都在訓練不同的網絡。
作用:有利于改善CNN中費時、過擬合的缺點
#批正則化 Batch Normalization
https://blog.csdn.net/fate_fjh/article/details/53375881
#遷移學習 transfer learning
使用他人訓練好的網絡,可以作為自己網絡的pre-trained model 即用別人訓練好的參數來初始化自己的網絡 而不是直接隨機初始化參數
進一步的,可以只訓練softmax層 以及 最后幾層,而前面的層就直接使用別人訓練好的網絡,這樣可以節省訓練時間,而且在自己的數據集不夠充分的情況下,使用他人在大數據集上訓練好的網絡而不是自己從零開始訓練整個網絡,有更好的精度。
#數據增強 data augmentation
【下面說的是對圖片,在computer vision領域】
common augmentation method
- 鏡像操作mirroring、隨機裁剪random cropping、旋轉rotation
color shifting
- 對色彩值做一些擾動 (motivation 室外和室內不同光照條件下會對圖片顏色產生影響,引入顏色干擾或色彩變化 可以使算法在應對圖像色彩變化時健壯性更好)
同樣的,數據增強也包含有一些超參數,來代表需要添加什么程度的擾動
同樣的,這些超參數最好可以通過先去參考他人的例子,來作為一個好的起步
tips for doing well on benchmarks/winning competitions
- ensembing 訓練多個網絡,然后將多個網絡的結果求平均作為最終結果
- multi-crop at test time 在測試階段對輸入圖像進行5次crop (中間+四角) 再分別輸入到網絡中 對結果求平均 上面兩種都算是模型集成 model ensemble
- 以上方法會耗費較多計算資源,不推薦用于產品化的系統
A few useful thing to know in Machine Learning:
https://www.cnblogs.com/SnakeHunt2012/archive/2013/02/18/2916232.html?一個他人的筆記
總結
以上是生活随笔為你收集整理的Deep Learning的基础概念的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1X1 convolution laye
- 下一篇: 一分钟理解softmax函数(超简单)