深度學習基本概念和CNN

深度學習

深度學習的最初級版本是人工神經網絡,是機器學習的一個分支,其試圖模擬人腦,通過更加複雜的結構自動提取特徵。

深度學習與神經網絡的區別

從廣義上說深度學習的網絡結構也是多層神經網絡的一種。
傳統意義上的多層神經網絡是隻有輸入層、隱藏層、輸出層。其中隱藏層的層數根據需要而定,沒有明確的理論推導來說明到底多少層合適。
而深度學習中最著名的卷積神經網絡CNN,在原來多層神經網絡的基礎上,加入了特徵學習部分,這部分是模仿人腦對信號處理上的分級的。具體操作就是在原來的全連接的層前面加入了部分連接的卷積層與降維層,而且加入的是一個層級。
輸入層 - 卷積層 -降維層 -卷積層 - 降維層 – … – 隱藏層 -輸出層
簡單來說,原來多層神經網絡做的步驟是:特徵映射到值。特徵是人工挑選。
深度學習做的步驟是 信號->特徵->值。 特徵是由網絡自己選擇。

深度學習的框架

Tensorflow,Caffe,Theano,Torch,MXNet

基本概念

  1. 神經網絡基礎 神經元(Neuron) ,就像形成我們大腦基本元素的神經元一樣,神經元形成神經網絡的基本結構。想象一下,當我們得到新信息時我們該怎麼做。當我們獲取信息時,我們一般會處理它,然後生成一個輸出。類似地,在神經網絡的情況下,神經元接收輸入,處理它併產生輸出,而這個輸出被髮送到其他神經元用於進一步處理,或者作爲最終輸出進行輸出。
  2. 權重(Weights) 當輸入進入神經元時,它會乘以一個權重。例如,如果一個神經元有兩個輸入,則每個輸入將具有分配給它的一個關聯權重。我們隨機初始化權重,並在模型訓練過程中更新這些權重。訓練後的神經網絡對其輸入賦予較高的權重,這是它認爲與不那麼重要的輸入相比更爲重要的輸入。爲零的權重則表示特定的特徵是微不足道的。
    讓我們假設輸入爲a,並且與其相關聯的權重爲W1,那麼在通過節點之後,輸入變爲a * W1
  3. 偏差(Bias) 除了權重之外,另一個被應用於輸入的線性分量被稱爲偏差。它被加到權重與輸入相乘的結果中。基本上添加偏差的目的是來改變權重與輸入相乘所得結果的範圍的。添加偏差後,結果將看起來像a* W1 +偏差。這是輸入變換的最終線性分量。
  4. 激活函數(Activation Function) 在人工神經網絡的神經元上運行的函數,負責將神經元的輸入映射到輸出端。 引入激活函數是爲了增加神經網絡模型的非線性。沒有激活函數的每層都相當於矩陣相乘。就算你疊加了若干層之後,無非還是個矩陣相乘罷了。
    常見激活函數 :
    (1)邏輯函數(Sigmoid):
    使用範圍最廣的一類激活函數,具有指數函數形狀,它在物理意義上最爲接近生物神經元。
    其自身的缺陷,最明顯的就是飽和性。從函數圖可以看到,其兩側導數逐漸趨近於0,殺死梯度。
    在這裏插入圖片描述
    Sigmoid
    (2)線性整流函數(Rectified Linear Unit,ReLU)
    無飽和區,收斂快、計算簡單、有時候會比較脆弱,如果變量的更新太快,還沒有找到最佳值,就進入小於零的分段就會使得梯度變爲0,無法更新直接死掉了。

在這裏插入圖片描述
(3)Softplus函數:
在這裏插入圖片描述
(4)Maxout:他是ReLU和LReLU的一般化公式(如ReLU就是將w1和b1取爲0)。所以他用於ReUL的優點而且沒有死區,但是它的參數數量卻增加了一倍。

maxout網絡能夠近似任意連續函數,且當w2,b2,…,wn,bn爲0時,退化爲ReLU。Maxout能夠緩解梯度消失,同時又規避了ReLU神經元死亡的缺點,但增加了參數和計算量。
在這裏插入圖片描述
(5)正切函數(Tanh):非常常見的激活函數。與sigmoid相比,它的輸出均值是0,使得其收斂速度要比sigmoid快,減少迭代次數。

相對於sigmoid的好處是他的輸出的均值爲0,克服了第二點缺點。但是當飽和的時候還是會殺死梯度。

在這裏插入圖片描述

  1. 神經網絡(Neural Network) 神經網絡由許多相互關聯的概念化的人造神經元組成,它們之間傳遞相互數據,並且具有根據網絡”經驗“調整的相關權重。神經元具有激活閾值,如果通過其相關權重的組合和傳遞給他們的數據滿足這個閾值的話,其將被解僱;發射神經元的組合導致“學習”。神經網絡構成了深度學習的支柱。神經網絡的目標是找到一個未知函數的近似值。它由相互聯繫的神經元形成。這些神經元具有權重和在網絡訓練期間根據錯誤來進行更新的偏差。激活函數將非線性變換置於線性組合,而這個線性組合稍後會生成輸出。激活的神經元的組合會給出輸出值。

  2. 輸入/輸出/隱藏層(Input / Output / Hidden Layer) 輸入層是接收輸入那一層,本質上是網絡的第一層。而輸出層是生成輸出的那一層,也可以說是網絡的最終層。處理層是網絡中的隱藏層。這些隱藏層是對傳入數據執行特定任務並將其生成的輸出傳遞到下一層的那些層。輸入和輸出層是我們可見的,而中間層則是隱藏的。

  3. 正向傳播(Forward Propagation) 正向傳播是指輸入通過隱藏層到輸出層的運動。在正向傳播中,信息沿着一個單一方向前進。輸入層將輸入提供給隱藏層,然後生成輸出。這過程中是沒有反向運動的

  4. 成本函數(Cost Function) 建立一個網絡時,網絡試圖將輸出預測得儘可能靠近實際值。我們使用成本/損失函數來衡量網絡的準確性,如果我將成本函數定義爲均方誤差,則可以寫爲:
    C= 1/m ∑(y–a)^2,
    其中m是訓練輸入的數量,a是預測值,y是該特定示例的實際值。
    學習過程圍繞最小化成本來進行。

  5. 梯度下降Gradient Descent梯度下降是一種最小化成本的優化算法.
    相關的一些概念:
    (1). 步長(Learning rate):步長決定了在梯度下降迭代的過程中,每一步沿梯度負方向前進的長度。用上面下山的例子,步長就是在當前這一步所在位置沿着最陡峭最易下山的位置走的那一步的長度。
    (2).特徵(feature):指的是樣本中輸入部分,比如2個單特徵的樣本(x(0),y(0)),(x(1),y(1)),則第一個樣本特徵爲x(0),第一個樣本輸出爲y(0)。
    (3). 假設函數(hypothesis function):在監督學習中,爲了擬合輸入樣本,而使用的假設函數,記爲hθ(x)。比如對於單個特徵的m個樣本(x(i),y(i))(i=1,2,…m),可以採用擬合函數如下: hθ(x)=θ0+θ1x。
    (4). 損失函數(loss function):爲了評估模型擬合的好壞,通常用損失函數來度量擬合的程度。損失函數極小化,意味着擬合程度最好,對應的模型參數即爲最優參數。在線性迴歸中,損失函數通常爲樣本輸出和假設函數的差取平方。比如對於m個樣本(xi,yi)(i=1,2,…m),採用線性迴歸,損失函數爲:
    在這裏插入圖片描述 其中xi表示第i個樣本特徵,yi表示第i個樣本對應的輸出,hθ(xi)爲假設函數。

  6. 學習率(Learning Rate) 學習率被定義爲每次迭代中成本函數中最小化的量。簡單來說,我們下降到成本函數的最小值的速率是學習率。我們應該非常仔細地選擇學習率,因爲它不應該是非常大的,以至於較佳解決方案被錯過,也不應該非常低,以至於網絡需要融合。 學習率(Learning rate)作爲監督學習以及深度學習中重要的超參,其決定着目標函數能否收斂到局部最小值以及何時收斂到最小值。合適的學習率能夠使目標函數在合適的時間內收斂到局部最小值。在這裏插入圖片描述

  7. 反向傳播(Backpropagation) 當我們定義神經網絡時,我們爲我們的節點分配隨機權重和偏差值,使用成本函數的梯度的權重的更新被稱爲反向傳播.更新w,b是對w,b求偏導數。而不是x,y,因爲x,y是輸入與輸出,爲已知的。
    在這裏插入圖片描述

  8. 批次(Batches) 在訓練神經網絡的同時,不用一次發送整個輸入,我們將輸入分成幾個隨機大小相等的塊。

  9. 週期Epochs向前和向後傳播中所有批次的單次訓練迭代.1個週期是整個輸入數據的單次向前和向後傳遞。

  10. 丟棄(Dropout) Dropout是一種正則化技術,可防止網絡過度擬合套。顧名思義,在訓練期間,隱藏層中的一定數量的神經元被隨機地丟棄。這意味着訓練發生在神經網絡的不同組合的神經網絡的幾個架構上。
    機器學習的模型中,如果模型的參數太多,而訓練樣本又太少,訓練出來的模型很容易產生過擬合的現象。在訓練神經網絡的時候經常會遇到過擬合的問題,過擬合具體表現在:模型在訓練數據上損失函數較小,預測準確率較高;但是在測試數據上損失函數比較大,預測準確率較低。
    過擬合是很多機器學習的通病。如果模型過擬合,那麼得到的模型幾乎不能用。爲了解決過擬合問題,一般會採用模型集成的方法,即訓練多個模型進行組合。此時,訓練模型費時就成爲一個很大的問題,不僅訓練多個模型費時,測試多個模型也是很費時。
    Dropout可以作爲訓練深度神經網絡的一種trick供選擇。在每個訓練批次中,通過忽略一半的特徵檢測器,讓一半的隱層節點值爲0,可以明顯地減少過擬合現象。這種方式可以減少特徵檢測器(隱層節點)間的相互作用,檢測器相互作用是指某些檢測器依賴其他檢測器才能發揮作用。
    Dropout說的簡單一點就是:我們在前向傳播的時候,讓某個神經元的激活值以一定的概率p停止工作,這樣可以使模型泛化性更強,因爲它不會太依賴某些局部的特徵
    .首先隨機(臨時)刪掉網絡中一半的隱藏神經元,輸入輸出神經元保持不變
    .然後把輸入x通過修改後的網絡前向傳播,然後把得到的損失結果通過修改的網絡反向傳播。一小批訓練樣本執行完這個過程後,在沒有被刪除的神經元上按照隨機梯度下降法更新對應的參數(w,b)
    在這裏插入圖片描述

  11. 批量歸一化(Batch Normalization) 批量歸一化可以被認爲是我們在河流中設定爲特定檢查點的水壩。這樣做是爲了確保數據的分發與希望獲得的下一層相同。當我們訓練神經網絡時,權重在梯度下降的每個步驟之後都會改變,這會改變數據的形狀如何發送到下一層。

  12. 卷積神經網絡 濾波器(Filters) CNN中的濾波器與加權矩陣一樣,它與輸入圖像的一部分相乘以產生一個迴旋輸出。我們假設有一個大小爲28 * 28的圖像,我們隨機分配一個大小爲3 * 3的濾波器,然後與圖像不同的3 * 3部分相乘,形成所謂的卷積輸出。濾波器尺寸通常小於原始圖像尺寸。在成本最小化的反向傳播期間,濾波器值被更新爲重量值。在這裏插入圖片描述
    濾波器過濾圖像時,會與圖像每個等大的區域進行點乘,如果圖像的某一區域與過濾器檢測的特徵很相似,那麼當過濾器經過該區域時,就會激活該過濾器,得到一個很高的值,反之,如果圖像的某一區域與過濾器檢測的特徵很不相似時,就不會激活該過濾器或者得到的數值很低。圖像的過濾器在對整個圖像滑動過濾時,每經過圖像一個區域得到的值越高,則該區域與濾波器檢測的特定特徵相關度越高.但是我們能直觀想到濾波器畢竟數量有限,而CNN可以自動學習濾波器,調整濾波器裏的參數,用CNN自學習濾波器,讓計算機自己去理解這圖像所需的濾波器來檢測特徵,這對圖像的特徵分析是非常有用高效的。

  13. 卷積神經網絡CNN卷積神經網絡基本上應用於圖像數據。假設我們有一個輸入的大小(28 * 28 * 3),如果我們使用正常的神經網絡,將有2352(28 * 28 * 3)參數。並且隨着圖像的大小增加參數的數量變得非常大。我們“卷積”圖像以減少參數數量(如上面濾波器定義所示)。當我們將濾波器滑動到輸入體積的寬度和高度時,將產生一個二維激活圖,給出該濾波器在每個位置的輸出。我們將沿深度尺寸堆疊這些激活圖,併產生輸出量.
    相關概念:
    a. 卷積核(convolutional kernel)卷積層的功能是對輸入數據進行特徵提取,其內部包含多個卷積核,組成卷積核的每個元素都對應一個權重係數和一個偏差量(bias vector),類似於一個前饋神經網絡的神經元(neuron)。卷積層內每個神經元都與前一層中位置接近的區域的多個神經元相連,區域的大小取決於卷積核的大小,在文獻中被稱爲“感受野(receptive field)”,其含義可類比視覺皮層細胞的感受野.
    b.卷積層參數
    卷積層參數包括卷積核大小、步長和填充,三者共同決定了卷積層輸出特徵圖的尺寸,是卷積神經網絡的超參數 [1] 。其中卷積核大小可以指定爲小於輸入圖像尺寸的任意值,卷積核越大,可提取的輸入特徵越複雜 。
    由卷積核的交叉相關計算可知,隨着卷積層的堆疊,特徵圖的尺寸會逐步減小,例如16×16的輸入圖像在經過單位步長、無填充的5×5的卷積核後,會輸出12×12的特徵圖。爲此,填充是在特徵圖通過卷積核之前人爲增大其尺寸以抵消計算中尺寸收縮影響的方法。常見的填充方法爲按0填充和重複邊界值填充(replication padding)
    c. 激勵函數(activation function)
    類似於其它深度學習算法,卷積神經網絡通常使用線性整流單元(Rectified Linear Unit, ReLU).
    d.池化層(pooling layer)在卷積層進行特徵提取後,輸出的特徵圖會被傳遞至池化層進行特徵選擇和信息過濾。池化層包含預設定的池化函數,其功能是將特徵圖中單個點的結果替換爲其相鄰區域的特徵圖統計量。池化層選取池化區域與卷積核掃描特徵圖步驟相同,由池化大小、步長和填充控制 。
    譜池化(spectral pooling)
    d.譜池化是基於FFT的池化方法,可以和FFT卷積一起被用於構建基於FFT的卷積神經網絡 [40] 。在給定特徵圖尺寸 ,和池化層輸出尺寸時 ,譜池化對特徵圖的每個通道分別進行DFT變換,並從頻譜中心截取n×n大小的序列進行DFT逆變換得到池化結果 [40] 。譜池化有濾波功能,可以最大限度地保存低頻變化信息,並能有效控制特徵圖的大小 [40] 。此外,基於成熟的FFT算法,譜池化能夠以很小的計算量完成。
    e.全連接層(fully-connected layer)
    卷積神經網絡中的全連接層等價於傳統前饋神經網絡中的隱含層。全連接層通常搭建在卷積神經網絡隱含層的最後部分,並只向其它全連接層傳遞信號。特徵圖在全連接層中會失去3維結構,被展開爲向量並通過激勵函數傳遞至下一層。
    算法:
    1.VGGNet
    VGG-16的隱含層由13個卷積層、3個全連接層和5個池化層組成,按如下方式構建:
    (3×3)×3×64的卷積層(步長爲1,相同填充,ReLU),(3×3)×64×64的卷積層(步長爲1,相同填充,ReLU),2×2極大池化(步長爲2、無填充)
    (3×3)×64×128的卷積層(步長爲1,相同填充,ReLU),(3×3)×128×128的卷積層(步長爲1,相同填充,ReLU),2×2極大池化(步長爲2、無填充)
    (3×3)×128×256的卷積層(步長爲1,相同填充,ReLU),(3×3)×256×256的卷積層(步長爲1,相同填充,ReLU),(3×3)×256×256的卷積層(步長爲1,相同填充,ReLU),2×2極大池化(步長爲2、無填充)
    (3×3)×256×512的卷積層(步長爲1,相同填充,ReLU),(3×3)×512×512的卷積層(步長爲1,相同填充,ReLU),(3×3)×512×512的卷積層(步長爲1,相同填充,ReLU),2×2極大池化(步長爲2、無填充)
    (3×3)×512×512的卷積層(步長爲1,相同填充,ReLU),(3×3)×512×512的卷積層(步長爲1,相同填充,ReLU),(3×3)×512×512的卷積層(步長爲1,相同填充,ReLU),2×2極大池化(步長爲2、無填充)
    3個全連接層,神經元數量爲4096、4096和1000
    VGGNet構築中僅使用3×3的卷積核並保持卷積層中輸出特徵圖尺寸不變,通道數加倍,池化層中輸出的特徵圖尺寸減半,簡化了神經網絡的拓撲結構並取得了良好效果
    在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章