1. 程式人生 > >深度學習之AlexNet解讀

深度學習之AlexNet解讀

為什麼提出?

提出的背景

 目前的目標識別任務基本上全是利用的傳統機器學習的方法,為了提升他們的效能。
 由於現實中有成千上萬的可變的圖片,現在帶標籤的資料集相對來說還是太小了,因此簡單的識別任務由於這些資料集的尺寸有限,還是獲得了不錯的效果。
 因此為了識別現實生活中的大量可變的圖片,使用一個非常大的訓練集顯得尤為重要,包括LabelMe(包含成千上萬全分割圖片)和ImageNet(包含1500萬帶標籤的高解析度的2萬2類圖片,由於現實生活共有差不多3萬多類)。
 為了學習這成百萬上千萬的圖片,需要一個有非常大的學習容量的模型。
 卷積神經網路CNN(convolutional neural networks)由此提出,其容量可由改變他們的寬度和深度來加以控制,並且她們也對圖片的性質(即統計性質的穩定性和區域性畫素間的依賴性)做出了正確的假設。
 相比於之前其他提出過的前饋神經網路,CNN擁有更少的連線和引數,因此也就更容易訓練。
 但這遠遠不夠,因為相對於尺寸較大的高解析度圖片,運用CNN仍然需要及其昂貴的代價。
 但是!由於下面兩個原因,目前CNN得以運用:
   1. GPU:對2維卷積操作的高度優化。
   2. ImageNet:提供了足夠多的標籤資料樣本訓練,以致於沒有造成嚴重的過擬合。

基本思想及其過程

ReLU(Rectified Linear Uints,修正線性單元),即f(x)=max(0,x),是一種非飽和非線性啟用函式。相較於f(x)=tanh(x)和sigmoid函式:f(x)=(1+e^-x)^-1,這兩種飽和非線性啟用函式而言,梯度下降的時間更快。

activity -w400
3Dactivity -w400

 上述圖可以看出,當x越來越大時,傳統的飽和啟用函式的梯度變化的越來越慢,幾乎趨近於0,甚至於梯度消失,但是ReLU則沒有這種問題,並且經過Hinton等人的實驗表明ReLU相對於傳統的啟用函式而言,能夠更快的學習到一個比較好的效能,這在大模型(深度,寬度上)和非常大的資料集上的應用無疑是非常有意義的。
區域性響應歸一化

aix,y代表a神經元由第i個核在(x,y)上被計算然後經過ReLu啟用函式加入非線性特性。則相應歸一化bix,y由下列表達式得到:

bix,y=aix,y(k+αmin(N1,i+n/2)j=max(0,in/2)(ajx,y)2)β

 其中n代表同一空間位置的n個相鄰的特徵圖,N代表一層的特徵圖總數,k,n,/alpha,/beta都是都一個驗證集來決定的超引數,在AlexNet中,Hinton等人設定為k=2,n=5,α=104β=0.75,通常在應用ReLu非線性啟用函式之後應用這個歸一化。

重疊池化:傳統的池化操作針都是針對相鄰單元不重疊的操作,但在CNN中是在同一個特徵圖中對神經元的鄰域內進行重疊的池化操作,在CNN中使用池化網格大小為3x3,步長為2,因此有重疊區域,Hinton等人用實驗證明這個效果不僅優於非重疊的池化操作,而且還稍微有點減少過擬合。
 兩種減少過擬合

的方法:
增加資料:最容易而且通用的在影象資料上減少過擬合的方法就是使用儲存標籤變換來人工的擴大資料集。下面有兩種不同的增加資料的方法,但相同的是,因為是在原始影象上做一些變換,而且是在先前影象仍在在GPU上做訓練的時候,變換是在CPU上進行程式設計運算得到的結果,並且計算量很小,因此這樣就避免了佔用GPU計算資源。
 (1) 從256x256的影象中隨機提取224x224以及他們的水平翻轉影象用來訓練。在測試時,網路通過提取5個224x224影象(4個角落以及中心)和他們的水平翻轉影象(因此總共10個)來做測試,最後對這10個經過softmax之後取平均得到最終的預測結果。

[p1,p2,p3][α1λ1,α2λ2,α3λ3]T

這裡piλi分別是RGB畫素值的3x3的協方差矩陣的第i個特徵向量和特徵值,αi是上述的一個來自高斯分佈的隨機變數。
dropout:對每個隱藏神經元的輸出以0.5的概率設定為0,即這些神經元不參與前向傳播和反向傳播。這樣做,每次輸入的時候,網路取樣於不同的網路結構,但是所有的這些網路結構都共享權值。因此這個理論減少了複雜的互適應的神經元,也就是一個神經元不能依賴於某個特定的神經元而存在。這強迫一個神經元與大量不同其他神經元的隨機子集來協同合作,從而學到更多魯棒性特徵。在測試的時候,使用所有的神經元,但是對他們的輸出都乘上0.5。但是也雙倍增加了要求收斂的迭代次數。
過程

  由上圖可知,AlexNet共有8個權值層,前5個都是卷積層,剩下的3個是全連線層。
  輸入:224x224x3圖片。
  輸出:1000類標籤分類。
  由上圖看到,分為兩路的原因就是在兩個GPU上平行計算,只有第三層是利用了第二層中的所有特徵圖,有點類似於人腦視覺訊號在人腦中的傳輸中有個交叉迴路的設計。在整個網路中,響應歸一化層連線在第一二層卷積層之後。最大池化層連線在所有的相應歸一化層和第五層卷積層之後。ReLU非線性啟用應用在每個卷積層和全連線層之後。
這裡寫圖片描述

  在整個網路中使用了0.0005的權值衰減,這個非常小的權值衰減對學習的模型非常重要,它減少了模型的訓練誤差。
  權值更新規則為:

vi+1:=0.9vi0.0005ϵwiϵ(Lw|wi)Di
wi+1:=wi+vi+1

  i代表迭代次數,v是動量變數,ϵ是學習率,(Lw|wi)Di是由wi估計的,關於w的目標的導數在第i個塊Di上的平均值,也就是求隨機梯度,也就是更新取決於權值,權值衰減項(帶學習率),以及隨機梯度(帶學習率)。
  對每層進行權值初始化都用高斯分佈為N(0,0.0001)來隨機取值。對第2,4,5層卷積層和全連線隱藏層的偏置項都初始化為1,剩餘層的偏置項初始化為0。這樣做的目的在於為初始階段的ReLU提供正輸入。手動調整學習率的值為0.01,啟發式的以10的倍數調整學習率,且所有層的學習率置同一個值。

<div align=center>![結果示意圖 -w400](media/14802426704073/%E7%BB%93%E6%9E%9C%E7%A4%BA%E6%84%8F%E5%9B%BE.png)</div>

  上圖為第一層卷積層上的結果,上面48個為在GPU1上用48個卷積核產生的效果圖,下面48個為在GPU2上用48個卷積核產生的效果圖。

優缺點及其發展

  如果移除一個卷積層,那麼整個AlexNet網路都會退化。所以Hinton提出網路深度對於有一個好的結果是非常重要的。
  Hinton還提出將會在視訊序列中使用非常大和深的卷積神經網路,因為時間結構將會提供在靜態圖片中缺失或幾乎不可見的有幫助的資訊。