⑴ 一種基於FPGA的感知量化卷積神經網路加速系統設計
姓名:姬怡希
學號:19020100037
學院:電子工程學院
嵌牛導讀:對卷積神經網路的加速的研究。
嵌牛鼻子:計算機軟體及計算機應用; 自動化技術。
嵌牛提問:如何設計卷積神經網路的加速系統?
嵌牛內容:
近年來,卷積神經網路(CNN)在機器視覺等方面取得了巨大成功。為提升嵌入式設備上運行CNN的速度和能效,本文針對LeNet-5網路模型,先對該網路模型進行感知量化訓練,特徵圖和權重量化為8位整型數據。然後設計一種卷積神經網路加速器系統,該片上系統(SoC)採用Cortex-M3為處理器,所提出的系統處理一張MNIST圖像所需時間5.3ms,精度達到98.2%。
近年來,卷積神經網路(CNN)在機器視覺等方面取得了巨大成功。為提升嵌入式設備上運行CNN的速度和能效,本文針對LeNet-5網路模型,先對該網路模型進行感知量化訓練,特徵圖和權重量化為8位整型數據。然後設計一種卷積神經網路加速器系統,該片上系統(SoC)採用Cortex-M3為處理器,所提出的系統處理一張MNIST圖像所需時間5.3ms,精度達到98.2%。CNN已成功應用於圖像識別等應用,隨著CNN解決更復雜的問題,計算和存儲的需求急劇增加。然而,在一些低功耗的邊緣計算設備中,功耗是重要指標。目前的研究主要針對CNN推理階段模型的壓縮和量化。大多數設計都用定點計算單元代替浮點單元。ESE採用12位定點權重和16位定點神經元設計,Guo等在嵌入式FPGA上使用8位單元進行設計。但之前的設計主要採用Zynq或者HLS開發,功耗較大。本文設計了一種基於FPGA的卷積神經網路加速系統。首先,通過感知量化訓練的方法,實現了將浮點CNN模型的各層權重和特徵圖量化成8比特整型;其次,通過採用單層時分復用的方式,設計流水線架構提高數據吞吐率;再次,設計基於Cortex-M3的SoC;最後,採用MNIST手寫數字進行方案和功能驗證。
1 卷積神經網路
1.1 基本概念
LeNet-5是一個典型的卷積神經網路模型,不包含輸入一共有7層。分別為3層卷積層,2層池化層,以及2層全連接層。
1.2 量化原理
針對目前CNN模型較大,參數多且不適合在移動設備上使用,Google團隊提出了一種量化方案。該方案在推理過程中使用純整。量化方案是量化整數q到實數r的映射,如公式(1)所示:
其中常數S和Z是量化參數。S表示比例系數,是一個任意的正實數。Z表示零點。CNN中主要的操作,比如卷積層的卷積,以及全連接層的乘累加,都可以看成是矩陣乘法。考慮實數兩個N×N的矩陣r1和r2的乘積r3 =r1r2。將每個矩陣ra的項表示為ra(r,j),其中1≤ i, j ≤N,用qa(r,j)表示量化項,根據矩陣乘法的定義,得到:
乘以浮點數M,可以轉化成先乘以定點數M1,再進行右移n+31。將公式(2)中所有零點Z1,Z2,Z3都設為0,可以大大簡化推理階段的運算。另外將偏置加法和激活函數合並到其中。比例系數Sbias=S1S2,零點Zbias= 0。由於選用的激活函數是ReLU,所以只需要將結果鉗位到[0,255]。
2 加速系統硬體設計
2.1 整體結構
本系統採用CPU+FPGA的架構,包括AHB互聯矩陣、Cortex-M3處理器、DMA、緊耦合存儲器、雙埠緩存、AHB2APB橋和CNN加速器,如圖1所示。存儲器部分包含ITCM,DTCM和雙埠RAM。ITCM存放程序鏡像文件;DTCM作為堆棧區;DualRAM作為權重數據,輸入特徵圖,以及中間、最終結果緩存區,一端連接L1級匯流排,CPU和DMA均可以訪問,另一端連接CNN加速器。
2.2 CNN加速器設計
CNN加速器設計的整體結構如圖2所示,並行方案採用輸出通道和權重卷積核內部並行,同時計算6個輸出通道,以及卷積核25個乘法器同時計算。特徵圖行緩沖的窗口尺寸為5x5,可以通過數據選擇器選擇輸入特徵圖的寬度。權重特徵圖的行緩沖設計同理,由於卷積核均為5x5,所以不需要數據選擇器。乘累加陣列輸入為25個8位特徵圖和25個8位權重,對應相乘後採用加法樹方式累加,最後得到1個位寬為21的有符號數。偏置加法器用於累加偏置或者中間結果。選擇哪一個是由數據選擇器控制,輸出一個32位結果。量化激活模塊包含一個32x32位的乘法器,用於將累加結果和乘法系數相乘,再經過右移,鉗位到[0,255],經過四捨五入得到量化的結果。
3.2 實驗結果
本文的SoC工作的頻率為100MHz,識別一張MNIST圖片的時間為5.3ms,FPGA的功耗由Vivado的Report Power工具獲得,僅為0.448W。本文處理單幀的時間比較長,但是功耗是其他文獻的四分之一。由於採用感知量化,識別正確率FPGA實現和軟體實現一致,達到98.2%。實驗結果對比如表1所示。結論:為了解決嵌入式設備上實現卷積神經網路速度慢和功耗大的問題,本文提出了一種卷積神經網路加速系統。首先對卷積神經網路進行感知量化,得到8比特的權重、特徵值圖1 系統框圖 和量化參數。採用Cortex-M3作為處池化模塊設計思路同卷積模塊,採用最大池化。包含3個比較器和一個行緩沖,針對不同層可以選擇不同長度的特徵圖,窗口尺寸為2x2。
⑵ 什麼是卷積
最近有一個項目要用到圖像檢測,所以現在系統的開始入手深度學習的知識。本來打算用 Google 的 TensorFlow 來實現,畢竟 TFBoy 近幾年熱度不減,但考慮到項目實施周期,打算前期用網路的 EasyDL 來實現,和網路 AI 的產品經理聊了幾次,說是類似的項目,200張樣本訓練,識別能達到80%,應該算是一個不錯的識別率了。
當然,一些基礎知識還是要了解一下,這裡面有不少的概念還挺不好理解的。深度學習,有專門的卷積神經網路,在圖像領域取得了非常好的實際效果,已經把傳統的圖像處理的方法快乾趴下了。看了很多關於卷積的解釋,在這里整理一下。
網上流傳的一個段子,非常形象。比如說你的老闆命令你幹活,你卻到樓下打檯球去了,後來被老闆發現,他非常氣憤,扇了你一巴掌(注意,這就是輸入信號,脈沖),於是你的臉上會漸漸地鼓起來一個包,你的臉就是一個系統,而鼓起來的包就是你的臉對巴掌的響應,好,這樣就和信號系統建立起來意義對應的聯系。
下面還需要一些假設來保證論證的嚴謹:假定你的臉是線性時不變系統,也就是說,無論什麼時候老闆打你一巴掌,打在你臉的同一位置,你的臉上總是會在相同的時間間隔內鼓起來一個相同高度的包來,並且假定以鼓起來的包的大小作為系統輸出。好了,那麼,下面可以進入核心內容——卷積了!
如果你每天都到樓下去打檯球,那麼老闆每天都要扇你一巴掌,不過當老闆打你一巴掌後,你5分鍾就消腫了,所以時間長了,你甚至就適應這種生活了……。如果有一天,老闆忍無可忍,以0.5秒的間隔開始不間斷的扇你,這樣問題就來了,第一次扇你鼓起來的包還沒消腫,第二個巴掌就來了,你臉上的包就可能鼓起來兩倍高,老闆不斷扇你,脈沖不斷作用在你臉上,效果不斷疊加了,這樣這些效果就可以求和了,結果就是你臉上的包的高度隨時間變化的一個函數了(注意理解)。
如果老闆再狠一點,頻率越來越高,以至於你都辨別不清時間間隔了,那麼,求和就變成積分了。可以這樣理解,在這個過程中的某一固定的時刻,你的臉上的包的鼓起程度和什麼有關呢?和之前每次打你都有關!但是各次的貢獻是不一樣的,越早打的巴掌,貢獻越小,所以這就是說,某一時刻的輸出是之前很多次輸入乘以各自的衰減系數之後的疊加而形成某一點的輸出,然後再把不同時刻的輸出點放在一起,形成一個函數,這就是卷積,卷積之後的函數就是你臉上的包的大小隨時間變化的函數。
本來你的包幾分鍾就可以消腫,可是如果連續打,幾個小時也消不了腫了,這難道不是一種平滑過程么?反映到劍橋大學的公式上,f(a) 就是第 a 個巴掌,g(x-a)就是第 a 個巴掌在x時刻的作用程度,乘起來再疊加就 ok 了。
從數學上講,卷積就是一種運算。通俗易懂的說,卷積就是
** 輸出 = 輸入 * 系統**
雖然它看起來只是個簡單的數學公式,但是卻有著重要的物理意義,因為自然界這樣的系統無處不在,計算一個系統的輸出最好的方法就是運用卷積。更一般的,我們還有很多其他領域的應用:
統計學中,加權的滑動平均是一種卷積。
概率論中,兩個統計獨立變數X與Y的和的概率密度函數是X與Y的概率密度函數的卷積。
聲學中,回聲可以用源聲與一個反映各種反射效應的函數的卷積表示。
電子工程與信號處理中,任一個線性系統的輸出都可以通過將輸入信號與系統函數(系統的沖激響應)做卷積獲得。
物理學中,任何一個線性系統(符合疊加原理)都存在卷積。
計算機科學中,卷積神經網路(CNN)是深度學習演算法中的一種,近年來被廣泛用到模式識別、圖像處理等領域中。
這6個領域中,卷積起到了至關重要的作用。在面對一些復雜情況時,作為一種強有力的處理方法,卷積給出了簡單卻有效的輸出。對於機器學習領域,尤其是深度學習,最著名的CNN卷積神經網路(Convolutional Neural Network, CNN),在圖像領域取得了非常好的實際效果,始一出現便橫掃各類演算法。
其定義如下:
我們稱 (f * g)(n) 為 f,g 的卷積
其連續的定義為:
其離散的定義為:
再通俗的說,看起來像把一張二維的地毯從角沿45度斜線捲起來。
以下是一張正方形地毯,上面保存著f和g在區間[a,\b]的張量積,即U(x,y)=f(x)g(y)。
再看下面最簡單的一個例子。
考慮到函數 f 和 g 應該地位平等,或者說變數 x 和 y 應該地位平等,一種可取的辦法就是沿直線 x+y = t 捲起來:
卷了有什麼用?可以用來做多位數乘法,比如:
要解決的問題是:有兩枚骰子,把它們都拋出去,兩枚骰子點數加起來為4的概率是多少?
分析一下,兩枚骰子點數加起來為4的情況有三種情況:1+3=4, 2+2=4, 3+1=4
因此,兩枚骰子點數加起來為4的概率為:
在這里我想進一步用上面的翻轉滑動疊加的邏輯進行解釋。
首先,因為兩個骰子的點數和是4,為了滿足這個約束條件,我們還是把函數 g 翻轉一下,然後陰影區域上下對應的數相乘,然後累加,相當於求自變數為4的卷積值,如下圖所示:
樓下早點鋪子生意太好了,供不應求,就買了一台機器,不斷的生產饅頭。
假設饅頭的生產速度是 f(t),那麼一天後生產出來的饅頭總量為:
饅頭生產出來之後,就會慢慢腐敗,假設腐敗函數為 g(t),比如,10個饅頭,24小時會腐敗:
用一個模板和一幅圖像進行卷積,對於圖像上的一個點,讓模板的原點和該點重合,然後模板上的點和圖像上對應的點相乘,然後各點的積相加,就得到了該點的卷積值。對圖像上的每個點都這樣處理。由於大多數模板都是對稱的,所以模板不旋轉。卷積是一種積分運算,用來求兩個曲線重疊區域面積。可以看作加權求和,可以用來消除雜訊、特徵增強。
把一個點的像素值用它周圍的點的像素值的加權平均代替。
卷積是一種線性運算,圖像處理中常見的mask運算都是卷積,廣泛應用於圖像濾波。
卷積關系最重要的一種情況,就是在信號與線性系統或數字信號處理中的卷積定理。利用該定理,可以將時間域或空間域中的卷積運算等價為頻率域的相乘運算,從而利用FFT等快速演算法,實現有效的計算,節省運算代價。
有這么一副圖像,可以看到,圖像上有很多噪點:
自然圖像有其固有特性,也就是說,圖像的一部分的統計特性與其他部分是一樣的。這也意味著我們在這一部分學習的特徵也能用在另一部分上,所以對於這個圖像上的所有位置,我們都能使用同樣的學習特徵。
更恰當的解釋是,當從一個大尺寸圖像中隨機選取一小塊,比如說 8x8 作為樣本,並且從這個小塊樣本中學習到了一些特徵,這時我們可以把從這個 8x8 樣本中學習到的特徵作為探測器,應用到這個圖像的任意地方中去。特別是,我們可以用從 8x8 樣本中所學習到的特徵跟原本的大尺寸圖像作卷積,從而對這個大尺寸圖像上的任一位置獲得一個不同特徵的激活值。
下面給出一個具體的例子:假設你已經從一個 96x96 的圖像中學習到了它的一個 8x8 的樣本所具有的特徵,假設這是由有 100 個隱含單元的自編碼完成的。為了得到卷積特徵,需要對 96x96 的圖像的每個 8x8 的小塊圖像區域都進行卷積運算。也就是說,抽取 8x8 的小塊區域,並且從起始坐標開始依次標記為(1,1),(1,2),...,一直到(89,89),然後對抽取的區域逐個運行訓練過的稀疏自編碼來得到特徵的激活值。在這個例子里,顯然可以得到 100 個集合,每個集合含有 89x89 個卷積特徵。
以上,未知來源出處無法一一註明。
⑶ 什麼是卷積神經網路為什麼它們很重要
卷積神經網路(Convolutional Neural Network,CNN)是一種前饋神經網路,它的人工神經元可以響應一部分覆蓋范圍內的周圍單元,對於大型圖像處理有出色表現。[1]它包括卷積層(alternating convolutional layer)和池層(pooling layer)。
卷積神經網路是近年發展起來,並引起廣泛重視的一種高效識別方法。20世紀60年代,Hubel和Wiesel在研究貓腦皮層中用於局部敏感和方向選擇的神經元時發現其獨特的網路結構可以有效地降低反饋神經網路的復雜性,繼而提出了卷積神經網路(Convolutional Neural Networks-簡稱CNN)。現在,CNN已經成為眾多科學領域的研究熱點之一,特別是在模式分類領域,由於該網路避免了對圖像的復雜前期預處理,可以直接輸入原始圖像,因而得到了更為廣泛的應用。 K.Fukushima在1980年提出的新識別機是卷積神經網路的第一個實現網路。隨後,更多的科研工作者對該網路進行了改進。其中,具有代表性的研究成果是Alexander和Taylor提出的「改進認知機」,該方法綜合了各種改進方法的優點並避免了耗時的誤差反向傳播。
⑷ 卷積神經網路
關於花書中卷積網路的筆記記錄於 https://www.jianshu.com/p/5a3c90ea0807 。
卷積神經網路(Convolutional Neural Network,CNN或ConvNet)是一種具有 局部連接、權重共享 等特性的深層前饋神經網路。卷積神經網路是受生物學上感受野的機制而提出。 感受野(Receptive Field) 主要是指聽覺、視覺等神經系統中一些神經元的特性,即 神經元只接受其所支配的刺激區域內的信號 。
卷積神經網路最早是主要用來處理圖像信息。如果用全連接前饋網路來處理圖像時,會存在以下兩個問題:
目前的卷積神經網路一般是由卷積層、匯聚層和全連接層交叉堆疊而成的前饋神經網路,使用反向傳播演算法進行訓練。 卷積神經網路有三個結構上的特性:局部連接,權重共享以及匯聚 。這些特性使卷積神經網路具有一定程度上的平移、縮放和旋轉不變性。
卷積(Convolution)是分析數學中一種重要的運算。在信號處理或圖像處理中,經常使用一維或二維卷積。
一維卷積經常用在信號處理中,用於計算信號的延遲累積。假設一個信號發生器每個時刻t 產生一個信號 ,其信息的衰減率為 ,即在 個時間步長後,信息為原來的 倍。假設 ,那麼在時刻t收到的信號 為當前時刻產生的信息和以前時刻延遲信息的疊加:
我們把 稱為 濾波器(Filter)或卷積核(Convolution Kernel) 。假設濾波器長度為 ,它和一個信號序列 的卷積為:
信號序列 和濾波器 的卷積定義為:
一般情況下濾波器的長度 遠小於信號序列長度 ,下圖給出一個一維卷積示例,濾波器為 :
二維卷積經常用在圖像處理中。因為圖像為一個兩維結構,所以需要將一維卷積進行擴展。給定一個圖像 和濾波器 ,其卷積為:
下圖給出一個二維卷積示例:
注意這里的卷積運算並不是在圖像中框定卷積核大小的方框並將各像素值與卷積核各個元素相乘並加和,而是先把卷積核旋轉180度,再做上述運算。
在圖像處理中,卷積經常作為特徵提取的有效方法。一幅圖像在經過卷積操作後得到結果稱為 特徵映射(Feature Map) 。
最上面的濾波器是常用的高斯濾波器,可以用來對圖像進行 平滑去噪 ;中間和最下面的過濾器可以用來 提取邊緣特徵 。
在機器學習和圖像處理領域,卷積的主要功能是在一個圖像(或某種特徵)上滑動一個卷積核(即濾波器),通過卷積操作得到一組新的特徵。在計算卷積的過程中,需要進行卷積核翻轉(即上文提到的旋轉180度)。 在具體實現上,一般會以互相關操作來代替卷積,從而會減少一些不必要的操作或開銷。
互相關(Cross-Correlation)是一個衡量兩個序列相關性的函數,通常是用滑動窗口的點積計算來實現 。給定一個圖像 和卷積核 ,它們的互相關為:
互相關和卷積的區別僅在於卷積核是否進行翻轉。因此互相關也可以稱為不翻轉卷積 。當卷積核是可學習的參數時,卷積和互相關是等價的。因此,為了實現上(或描述上)的方便起見,我們用互相關來代替卷積。事實上,很多深度學習工具中卷積操作其實都是互相關操作。
在卷積的標準定義基礎上,還可以引入濾波器的 滑動步長 和 零填充 來增加卷積多樣性,更靈活地進行特徵抽取。
濾波器的步長(Stride)是指濾波器在滑動時的時間間隔。
零填充(Zero Padding)是在輸入向量兩端進行補零。
假設卷積層的輸入神經元個數為 ,卷積大小為 ,步長為 ,神經元兩端各填補 個零,那麼該卷積層的神經元數量為 。
一般常用的卷積有以下三類:
因為卷積網路的訓練也是基於反向傳播演算法,因此我們重點關注卷積的導數性質:
假設 。
, , 。函數 為一個標量函數。
則由 有:
可以看出, 關於 的偏導數為 和 的卷積 :
同理得到:
當 或 時, ,即相當於對 進行 的零填充。從而 關於 的偏導數為 和 的寬卷積 。
用互相關的「卷積」表示,即為(注意 寬卷積運算具有交換性性質 ):
在全連接前饋神經網路中,如果第 層有 個神經元,第 層有 個神經元,連接邊有 個,也就是權重矩陣有 個參數。當 和 都很大時,權重矩陣的參數非常多,訓練的效率會非常低。
如果採用卷積來代替全連接,第 層的凈輸入 為第 層活性值 和濾波器 的卷積,即:
根據卷積的定義,卷積層有兩個很重要的性質:
由於局部連接和權重共享,卷積層的參數只有一個m維的權重 和1維的偏置 ,共 個參數。參數個數和神經元的數量無關。此外,第 層的神經元個數不是任意選擇的,而是滿足 。
卷積層的作用是提取一個局部區域的特徵,不同的卷積核相當於不同的特徵提取器。
特徵映射(Feature Map)為一幅圖像(或其它特徵映射)在經過卷積提取到的特徵,每個特徵映射可以作為一類抽取的圖像特徵。 為了提高卷積網路的表示能力,可以在每一層使用多個不同的特徵映射,以更好地表示圖像的特徵。
在輸入層,特徵映射就是圖像本身。如果是灰度圖像,就是有一個特徵映射,深度 ;如果是彩色圖像,分別有RGB三個顏色通道的特徵映射,深度 。
不失一般性,假設一個卷積層的結構如下:
為了計算輸出特徵映射 ,用卷積核 分別對輸入特徵映射 進行卷積,然後將卷積結果相加,並加上一個標量偏置 得到卷積層的凈輸入 再經過非線性激活函數後得到輸出特徵映射 。
在輸入為 ,輸出為 的卷積層中,每個輸出特徵映射都需要 個濾波器以及一個偏置。假設每個濾波器的大小為 ,那麼共需要 個參數。
匯聚層(Pooling Layer)也叫子采樣層(Subsampling Layer),其作用是進行特徵選擇,降低特徵數量,並從而減少參數數量。
常用的匯聚函數有兩種:
其中 為區域 內每個神經元的激活值。
可以看出,匯聚層不但可以有效地減少神經元的數量,還可以使得網路對一些小的局部形態改變保持不變性,並擁有更大的感受野。
典型的匯聚層是將每個特徵映射劃分為 大小的不重疊區域,然後使用最大匯聚的方式進行下采樣。匯聚層也可以看做是一個特殊的卷積層,卷積核大小為 ,步長為 ,卷積核為 函數或 函數。過大的采樣區域會急劇減少神經元的數量,會造成過多的信息損失。
一個典型的卷積網路是由卷積層、匯聚層、全連接層交叉堆疊而成。
目前常用卷積網路結構如圖所示,一個卷積塊為連續 個卷積層和 個匯聚層( 通常設置為 , 為 或 )。一個卷積網路中可以堆疊 個連續的卷積塊,然後在後面接著 個全連接層( 的取值區間比較大,比如 或者更大; 一般為 )。
目前,整個網路結構 趨向於使用更小的卷積核(比如 和 )以及更深的結構(比如層數大於50) 。此外,由於卷積的操作性越來越靈活(比如不同的步長),匯聚層的作用變得也越來越小,因此目前比較流行的卷積網路中, 匯聚層的比例也逐漸降低,趨向於全卷積網路 。
在全連接前饋神經網路中,梯度主要通過每一層的誤差項 進行反向傳播,並進一步計算每層參數的梯度。在卷積神經網路中,主要有兩種不同功能的神經層:卷積層和匯聚層。而參數為卷積核以及偏置,因此 只需要計算卷積層中參數的梯度。
不失一般性,第 層為卷積層,第 層的輸入特徵映射為 ,通過卷積計算得到第 層的特徵映射凈輸入 ,第 層的第 個特徵映射凈輸入
由 得:
同理可得,損失函數關於第 層的第 個偏置 的偏導數為:
在卷積網路中,每層參數的梯度依賴其所在層的誤差項 。
卷積層和匯聚層中,誤差項的計算有所不同,因此我們分別計算其誤差項。
第 層的第 個特徵映射的誤差項 的具體推導過程如下:
其中 為第 層使用的激活函數導數, 為上采樣函數(upsampling),與匯聚層中使用的下采樣操作剛好相反。如果下采樣是最大匯聚(max pooling),誤差項 中每個值會直接傳遞到上一層對應區域中的最大值所對應的神經元,該區域中其它神經元的誤差項的都設為0。如果下采樣是平均匯聚(meanpooling),誤差項 中每個值會被平均分配到上一層對應區域中的所有神經元上。
第 層的第 個特徵映射的誤差項 的具體推導過程如下:
其中 為寬卷積。
LeNet-5雖然提出的時間比較早,但是是一個非常成功的神經網路模型。基於LeNet-5 的手寫數字識別系統在90年代被美國很多銀行使用,用來識別支票上面的手寫數字。LeNet-5 的網路結構如圖:
不計輸入層,LeNet-5共有7層,每一層的結構為:
AlexNet是第一個現代深度卷積網路模型,其首次使用了很多現代深度卷積網路的一些技術方法,比如採用了ReLU作為非線性激活函數,使用Dropout防止過擬合,使用數據增強來提高模型准確率等。AlexNet 贏得了2012 年ImageNet 圖像分類競賽的冠軍。
AlexNet的結構如圖,包括5個卷積層、3個全連接層和1個softmax層。因為網路規模超出了當時的單個GPU的內存限制,AlexNet 將網路拆為兩半,分別放在兩個GPU上,GPU間只在某些層(比如第3層)進行通訊。
AlexNet的具體結構如下:
在卷積網路中,如何設置卷積層的卷積核大小是一個十分關鍵的問題。 在Inception網路中,一個卷積層包含多個不同大小的卷積操作,稱為Inception模塊。Inception網路是由有多個inception模塊和少量的匯聚層堆疊而成 。
v1版本的Inception模塊,採用了4組平行的特徵抽取方式,分別為1×1、3× 3、5×5的卷積和3×3的最大匯聚。同時,為了提高計算效率,減少參數數量,Inception模塊在進行3×3、5×5的卷積之前、3×3的最大匯聚之後,進行一次1×1的卷積來減少特徵映射的深度。如果輸入特徵映射之間存在冗餘信息, 1×1的卷積相當於先進行一次特徵抽取 。
⑸ 為什麼有圖卷積神經網路
本質上說,世界上所有的數據都是拓撲結構,也就是網路結構,如果能夠把這些網路數據真正的收集、融合起來,這確實是實現了AI智能的第一步。所以,如何利用深度學習處理這些復雜的拓撲數據,如何開創新的處理圖數據以及知識圖譜的智能演算法是AI的一個重要方向。
深度學習在多個領域的成功主要歸功於計算資源的快速發展(如 GPU)、大量訓練數據的收集,還有深度學習從歐幾里得數據(如圖像、文本和視頻)中提取潛在表徵的有效性。但是,盡管深度學習已經在歐幾里得數據中取得了很大的成功,但從非歐幾里得域生成的數據已經取得更廣泛的應用,它們需要有效分析。如在電子商務領域,一個基於圖的學習系統能夠利用用戶和產品之間的交互以實現高度精準的推薦。在化學領域,分子被建模為圖,新葯研發需要測定其生物活性。在論文引用網路中,論文之間通過引用關系互相連接,需要將它們分成不同的類別。自2012年以來,深度學習在計算機視覺以及自然語言處理兩個領域取得了巨大的成功。假設有一張圖,要做分類,傳統方法需要手動提取一些特徵,比如紋理,顏色,或者一些更高級的特徵。然後再把這些特徵放到像隨機森林等分類器,給到一個輸出標簽,告訴它是哪個類別。而深度學習是輸入一張圖,經過神經網路,直接輸出一個標簽。特徵提取和分類一步到位,避免了手工提取特徵或者人工規則,從原始數據中自動化地去提取特徵,是一種端到端(end-to-end)的學習。相較於傳統的方法,深度學習能夠學習到更高效的特徵與模式。
圖數據的復雜性對現有機器學習演算法提出了重大挑戰,因為圖數據是不規則的。每張圖大小不同、節點無序,一張圖中的每個節點都有不同數目的鄰近節點,使得一些在圖像中容易計算的重要運算(如卷積)不能再直接應用於圖。此外,現有機器學習演算法的核心假設是實例彼此獨立。然而,圖數據中的每個實例都與周圍的其它實例相關,含有一些復雜的連接信息,用於捕獲數據之間的依賴關系,包括引用、朋友關系和相互作用。
最近,越來越多的研究開始將深度學習方法應用到圖數據領域。受到深度學習領域進展的驅動,研究人員在設計圖神經網路的架構時借鑒了卷積網路、循環網路和深度自編碼器的思想。為了應對圖數據的復雜性,重要運算的泛化和定義在過去幾年中迅速發展。
⑹ Lecture 9 卷積神經網路架構
首先回顧一下在數字識別領域有巨大成功的LeNet-5,該網路結構為 [CONV-POOL-CONV-POOL-FC-FC]。卷積層使用5x5的卷積核,步長為1;池化層使用2x2的區域,步長為2;後面是全連接層。如下圖所示:
而2012年的 AlexNet 是第一個在ImageNet大賽上奪冠的大型CNN網路,它的結構和LeNet-5很相似,只是層數變多了——[CONV1-MAX POOL1-NORM1-CONV2-MAX POOL2-NORM2-CONV3-CONV4-CONV5-Max POOL3-FC6-FC7-FC8],共有5個卷積層、3個池化層、2個歸一化層和三個全連接層。如下圖所示:
之所以分成上下兩個部分,是因為當時的GPU容量太小,只能用兩個來完成。還有一些細節是:
AlexNet奪得ImageNet大賽2012的冠軍時,將正確率幾乎提高了10%,2013年的冠軍是ZFNet,和AlexNet使用相同的網路架構,只是對超參數進一步調優:
這樣將錯誤率從16.4%降低到11.7%
14年的冠亞軍GoogLeNet和VGG分別有22層和19層,下面來分別介紹。
VGG 相對於AlexNet使用更小的卷積核,層數也更深。VGG有16層和19層兩種。卷積核只使用3x3,步長為1,pad為1;池化區域2x2,步長為2。
那麼為什麼使用3x3的小卷積核呢?
下面看一下VGG-16的參數和內存使用情況:
VGG網路的一些細節是:
下面來看一下分類的第一名,GoogLeNet。
先說明 GoogLeNet 的一些細節:
「Inception」模塊 是一種設計的比較好的區域網拓撲結構,然後將這些模塊堆疊在一起。
這種拓撲結構對來自前一層的輸入,並行應用多種不同的濾波操作,比如1x1卷積、3x3卷積、5x5卷積和3x3池化。然後將所有濾波器的輸出在深度上串聯在一起。如下圖所示:
但是這種結構的一個問題是計算復雜度大大增加。比如考慮下面的網路設置:
輸入為28x28x256,而串聯後的輸出為28x28x672。(假設每個濾波操作都通過零填充保持輸入尺寸)並且運算花費也非常高:
由於池化操作會保持原輸入的深度,所以網路的輸出一定會增加深度。解決辦法是在進行卷積操作前添加一個「瓶頸層」,該層使用1x1卷積,目的是保留原輸入空間尺寸的同時,減小深度,只要卷積核的數量小於原輸入的深度即可。
使用這種結構,同樣的網路參數設置下,的確會減少計算量:
最終得到的輸出為28x28x480。此時總運算量為:
Inception mole堆疊成垂直結構,這里方便描述,將模型水平放置:
所以含參數的層總計3+18+1 = 22層。此外,橙色部分的層不計入總層數,這兩塊的結構都是:AveragePool 5x5+3(V) - Conv 1x1+1(S) - FC - FC - SoftmaxActivation - Output。「該相對較淺的網路在此分類任務上的強大表現表明,網路中間層產生的特徵應該是非常有區別性的。 通過添加連接到這些中間層的輔助分類器,我們期望在分類器的較低階段中鼓勵區分,增加回傳的梯度信號,並提供額外的正則化。 這些輔助分類器採用較小的卷積核,置於第三和第六個Inception mole的輸出之上。 在訓練期間,它們的損失會加到折扣權重的網路總損失中(輔助分類的損失加權為0.3)。 在預測時,這些輔助網路被丟棄。」——引自原論文
從2015年開始,網路的層數爆發式的增長,15-17年的冠軍都是有152層,開始了「深度革命」!
ResNet 是一種非常深的網路,使用了殘差連接。細節是:
表現這么好的ResNet僅僅是因為深嗎?答案是否定的,研究表明一個56層的卷積層堆疊網路訓練誤差和測試誤差都比一個20層的網路要大,並且不是過擬合的原因,而是更深的網路優化更難。但是一個更深的模型至少能和一個較淺的模型表現一樣好,如果想把一個較淺的層變成較深的層,可以用下面的方式來構建:將原來比較淺的層拷貝到較深的層中,然後添加一些等於本身的映射層。現在較深的模型可以更好的學習。
ResNet通過使用多個有參層來學習輸入與輸入輸出之間的 殘差映射( resial mapping ) ,而非像一般CNN網路(如AlexNet/VGG等)那樣使用有參層來直接學習輸入輸出之間的 底層映射( underlying mapping) 。
若將輸入設為X,將某一有參網路層映射設為H,那麼以X為輸入的該層的輸出將為H(X)。通常的CNN網路會直接通過訓練學習出參數函數H的表達式,從而直接得到 X 到 H(X) 的映射。而 殘差學習 則是致力於使用多個有參網路層來學習輸入到輸入、輸出間的殘差(H(X) - X)的映射,即學習 X -> (H(X) - X) ,然後加上X的 自身映射(identity mapping) 。也就是說網路的輸出仍然是 H(X) - X + X = H(X),只是學習的只是 (H(X) - X),X部分直接是本身映射。
殘差學習單元通過本身映射的引入在輸入、輸出之間建立了一條直接的關聯通道,從而使得強大的有參層集中精力學習輸入、輸出之間的殘差。一般我們用 來表示殘差映射,那麼殘差學習單元的輸出即為: 。當輸入、輸出通道數相同時,自然可以直接使用 X 進行相加。而當它們之間的通道數目不同時,我們就需要考慮建立一種有效的自身映射函數從而可以使得處理後的輸入 X 與輸出 Y 的通道數目相同即 。
當X與Y通道數目不同時,有兩種自身映射方式。一種是簡單地將X相對Y缺失的通道直接補零從而使其能夠相對齊,另一種則是通過使用1x1的卷積來表示 Ws 映射從而使得最終輸入與輸出的通道一致。
實驗表明使用一般意義上的有參層來直接學習殘差比直接學習輸入、輸出間映射要容易得多(收斂速度更快),也有效得多(可通過使用更多的層來達到更高的分類精度)。比如在極端情況下,如果自身映射是最優的,那麼將殘差設為零比通過使用一堆非線性層進行自身映射更容易。
完整的網路結構如下:
對於ResNet-50+的網路,為提高計算效率,使用類似GoogLeNet的「瓶頸層」。像Inception模塊那樣通過使用1x1卷積來巧妙地縮減或擴張特徵圖維度從而使得3x3 卷積的卷積核數目不受上一層輸入的影響,它的輸出也不會影響到下一層。不過它純是為了節省計算時間進而縮小整個模型訓練所需的時間而設計的,對最終的模型精度並無影響。
ResNet的實際訓練如下:
實際的訓練效果為可以堆疊很多的層而不使准確率下降:152在ImageNet上, 1202層在CIFAR上。現在和預想中的一致,網路越深,訓練准確率越高。橫掃了2015年所有的獎項,第一次超過人類的識別率。
下面左圖通過Top1准確率來比較各種網路的准確性;右圖是不同網路的運算復雜度,橫軸為計算量,圓圈大小表示內存佔用。其中 Inception-v4是 Resnet + Inception。
圖中可以看出:
還可以比較前向傳播時間和功率消耗:
⑺ 深度學習之卷積神經網路經典模型
LeNet-5模型 在CNN的應用中,文字識別系統所用的LeNet-5模型是非常經典的模型。LeNet-5模型是1998年,Yann LeCun教授提出的,它是第一個成功大規模應用在手寫數字識別問題的卷積神經網路,在MNIST數據集中的正確率可以高達99.2%。
下面詳細介紹一下LeNet-5模型工作的原理。
LeNet-5模型一共有7層,每層包含眾多參數,也就是卷積神經網路中的參數。雖然層數只有7層,這在如今龐大的神經網路中可是說是非常少的了,但是包含了卷積層,池化層,全連接層,可謂麻雀雖小五臟俱全了。為了方便,我們把卷積層稱為C層,下采樣層叫做下采樣層。
首先,輸入層輸入原始圖像,原始圖像被處理成32×32個像素點的值。然後,後面的隱層計在卷積和子抽樣之間交替進行。C1層是卷積層,包含了六個特徵圖。每個映射也就是28x28個神經元。卷積核可以是5x5的十字形,這28×28個神經元共享卷積核權值參數,通過卷積運算,原始信號特徵增強,同時也降低了雜訊,當卷積核不同時,提取到圖像中的特徵不同;C2層是一個池化層,池化層的功能在上文已經介紹過了,它將局部像素值平均化來實現子抽樣。
池化層包含了六個特徵映射,每個映射的像素值為14x14,這樣的池化層非常重要,可以在一定程度上保證網路的特徵被提取,同時運算量也大大降低,減少了網路結構過擬合的風險。因為卷積層與池化層是交替出現的,所以隱藏層的第三層又是一個卷積層,第二個卷積層由16個特徵映射構成,每個特徵映射用於加權和計算的卷積核為10x10的。第四個隱藏層,也就是第二個池化層同樣包含16個特徵映射,每個特徵映射中所用的卷積核是5x5的。第五個隱藏層是用5x5的卷積核進行運算,包含了120個神經元,也是這個網路中卷積運算的最後一層。
之後的第六層便是全連接層,包含了84個特徵圖。全連接層中對輸入進行點積之後加入偏置,然後經過一個激活函數傳輸給輸出層的神經元。最後一層,也就是第七層,為了得到輸出向量,設置了十個神經元來進行分類,相當於輸出一個包含十個元素的一維數組,向量中的十個元素即0到9。
AlexNet模型
AlexNet簡介
2012年Imagenet圖像識別大賽中,Alext提出的alexnet網路模型一鳴驚人,引爆了神經網路的應用熱潮,並且贏得了2012屆圖像識別大賽的冠軍,這也使得卷積神經網路真正意義上成為圖像處理上的核心演算法。上文介紹的LeNet-5出現在上個世紀,雖然是經典,但是迫於種種復雜的現實場景限制,只能在一些領域應用。不過,隨著SVM等手工設計的特徵的飛速發展,LeNet-5並沒有形成很大的應用狀況。隨著ReLU與dropout的提出,以及GPU帶來算力突破和互聯網時代大數據的爆發,卷積神經網路帶來歷史的突破,AlexNet的提出讓深度學習走上人工智慧的最前端。
圖像預處理
AlexNet的訓練數據採用ImageNet的子集中的ILSVRC2010數據集,包含了1000類,共1.2百萬的訓練圖像,50000張驗證集,150000張測試集。在進行網路訓練之前我們要對數據集圖片進行預處理。首先我們要將不同解析度的圖片全部變成256x256規格的圖像,變換方法是將圖片的短邊縮放到 256像素值,然後截取長邊的中間位置的256個像素值,得到256x256大小的圖像。除了對圖片大小進行預處理,還需要對圖片減均值,一般圖像均是由RGB三原色構成,均值按RGB三分量分別求得,由此可以更加突出圖片的特徵,更方便後面的計算。
此外,對了保證訓練的效果,我們仍需對訓練數據進行更為嚴苛的處理。在256x256大小的圖像中,截取227x227大小的圖像,在此之後對圖片取鏡像,這樣就使得原始數據增加了(256-224)x(256-224)x2= 2048倍。最後對RGB空間做PCA,然後對主成分做(0,0.1)的高斯擾動,結果使錯誤率下降1%。對測試數據而言,抽取以圖像4個角落的大小為224224的圖像,中心的224224大小的圖像以及它們的鏡像翻轉圖像,這樣便可以獲得10張圖像,我們便可以利用softmax進行預測,對所有預測取平均作為最終的分類結果。
ReLU激活函數
之前我們提到常用的非線性的激活函數是sigmoid,它能夠把輸入的連續實值全部確定在0和1之間。但是這帶來一個問題,當一個負數的絕對值很大時,那麼輸出就是0;如果是絕對值非常大的正數,輸出就是1。這就會出現飽和的現象,飽和現象中神經元的梯度會變得特別小,這樣必然會使得網路的學習更加困難。此外,sigmoid的output的值並不是0為均值,因為這會導致上一層輸出的非0均值信號會直接輸入到後一層的神經元上。所以AlexNet模型提出了ReLU函數,公式:f(x)=max(0,x)f(x)=max(0,x)。
用ReLU代替了Sigmoid,發現使用 ReLU 得到的SGD的收斂速度會比 sigmoid快很多,這成了AlexNet模型的優勢之一。
Dropout
AlexNet模型提出了一個有效的模型組合方式,相比於單模型,只需要多花費一倍的時間,這種方式就做Dropout。在整個神經網路中,隨機選取一半的神經元將它們的輸出變成0。這種方式使得網路關閉了部分神經元,減少了過擬合現象。同時訓練的迭代次數也得以增加。當時一個GTX580 GPU只有3GB內存,這使得大規模的運算成為不可能。但是,隨著硬體水平的發展,當時的GPU已經可以實現並行計算了,並行計算之後兩塊GPU可以互相通信傳輸數據,這樣的方式充分利用了GPU資源,所以模型設計利用兩個GPU並行運算,大大提高了運算效率。
模型分析
AlexNet模型共有8層結構,其中前5層為卷積層,其中前兩個卷積層和第五個卷積層有池化層,其他卷積層沒有。後面3層為全連接層,神經元約有六十五萬個,所需要訓練的參數約六千萬個。
圖片預處理過後,進過第一個卷積層C1之後,原始的圖像也就變成了55x55的像素大小,此時一共有96個通道。模型分為上下兩塊是為了方便GPU運算,48作為通道數目更加適合GPU的並行運算。上圖的模型里把48層直接變成了一個面,這使得模型看上去更像一個立方體,大小為55x55x48。在後面的第二個卷積層C2中,卷積核的尺寸為5x5x48,由此再次進行卷積運算。在C1,C2卷積層的卷積運算之後,都會有一個池化層,使得提取特徵之後的特徵圖像素值大大減小,方便了運算,也使得特徵更加明顯。而第三層的卷積層C3又是更加特殊了。第三層卷積層做了通道的合並,將之前兩個通道的數據再次合並起來,這是一種串接操作。第三層後,由於串接,通道數變成256。全卷積的卷積核尺寸也就變成了13×13×25613×13×256。一個有4096個這樣尺寸的卷積核分別對輸入圖像做4096次的全卷積操作,最後的結果就是一個列向量,一共有4096個數。這也就是最後的輸出,但是AlexNet最終是要分1000個類,所以通過第八層,也就是全連接的第三層,由此得到1000個類輸出。
Alexnet網路中各個層發揮了不同的作用,ReLU,多個CPU是為了提高訓練速度,重疊pool池化是為了提高精度,且不容易產生過擬合,局部歸一化響應是為了提高精度,而數據增益與dropout是為了減少過擬合。
VGG net
在ILSVRC-2014中,牛津大學的視覺幾何組提出的VGGNet模型在定位任務第一名和分類任務第一名[[i]]。如今在計算機視覺領域,卷積神經網路的良好效果深得廣大開發者的喜歡,並且上文提到的AlexNet模型擁有更好的效果,所以廣大從業者學習者試圖將其改進以獲得更好地效果。而後來很多人經過驗證認為,AlexNet模型中所謂的局部歸一化響應浪費了計算資源,但是對性能卻沒有很大的提升。VGG的實質是AlexNet結構的增強版,它側重強調卷積神經網路設計中的深度。將卷積層的深度提升到了19層,並且在當年的ImageNet大賽中的定位問題中獲得了第一名的好成績。整個網路向人們證明了我們是可以用很小的卷積核取得很好地效果,前提是我們要把網路的層數加深,這也論證了我們要想提高整個神經網路的模型效果,一個較為有效的方法便是將它的深度加深,雖然計算量會大大提高,但是整個復雜度也上升了,更能解決復雜的問題。雖然VGG網路已經誕生好幾年了,但是很多其他網路上效果並不是很好地情況下,VGG有時候還能夠發揮它的優勢,讓人有意想不到的收獲。
與AlexNet網路非常類似,VGG共有五個卷積層,並且每個卷積層之後都有一個池化層。當時在ImageNet大賽中,作者分別嘗試了六種網路結構。這六種結構大致相同,只是層數不同,少則11層,多達19層。網路結構的輸入是大小為224*224的RGB圖像,最終將分類結果輸出。當然,在輸入網路時,圖片要進行預處理。
VGG網路相比AlexNet網路,在網路的深度以及寬度上做了一定的拓展,具體的卷積運算還是與AlexNet網路類似。我們主要說明一下VGG網路所做的改進。第一點,由於很多研究者發現歸一化層的效果並不是很好,而且佔用了大量的計算資源,所以在VGG網路中作者取消了歸一化層;第二點,VGG網路用了更小的3x3的卷積核,而兩個連續的3x3的卷積核相當於5x5的感受野,由此類推,三個3x3的連續的卷積核也就相當於7x7的感受野。這樣的變化使得參數量更小,節省了計算資源,將資源留給後面的更深層次的網路。第三點是VGG網路中的池化層特徵池化核改為了2x2,而在AlexNet網路中池化核為3x3。這三點改進無疑是使得整個參數運算量下降,這樣我們在有限的計算平台上能夠獲得更多的資源留給更深層的網路。由於層數較多,卷積核比較小,這樣使得整個網路的特徵提取效果很好。其實由於VGG的層數較多,所以計算量還是相當大的,卷積層比較多成了它最顯著的特點。另外,VGG網路的拓展性能比較突出,結構比較簡潔,所以它的遷移性能比較好,遷移到其他數據集的時候泛化性能好。到現在為止,VGG網路還經常被用來提出特徵。所以當現在很多較新的模型效果不好時,使用VGG可能會解決這些問題。
GoogleNet
谷歌於2014年Imagenet挑戰賽(ILSVRC14)憑借GoogleNet再次斬獲第一名。這個通過增加了神經網路的深度和寬度獲得了更好地效果,在此過程中保證了計算資源的不變。這個網路論證了加大深度,寬度以及訓練數據的增加是現有深度學習獲得更好效果的主要方式。但是增加尺寸可能會帶來過擬合的問題,因為深度與寬度的加深必然會帶來過量的參數。此外,增加網路尺寸也帶來了對計算資源侵佔過多的缺點。為了保證計算資源充分利用的前提下去提高整個模型的性能,作者使用了Inception模型,這個模型在下圖中有展示,可以看出這個有點像金字塔的模型在寬度上使用並聯的不同大小的卷積核,增加了卷積核的輸出寬度。因為使用了較大尺度的卷積核增加了參數。使用了1*1的卷積核就是為了使得參數的數量最少。
Inception模塊
上圖表格為網路分析圖,第一行為卷積層,輸入為224×224×3 ,卷積核為7x7,步長為2,padding為3,輸出的維度為112×112×64,這裡面的7x7卷積使用了 7×1 然後 1×7 的方式,這樣便有(7+7)×64×3=2,688個參數。第二行為池化層,卷積核為3×33×3,滑動步長為2,padding為 1 ,輸出維度:56×56×64,計算方式:1/2×(112+2×1?3+1)=56。第三行,第四行與第一行,第二行類似。第 5 行 Inception mole中分為4條支線,輸入均為上層產生的 28×28×192 結果:第 1 部分,1×1 卷積層,輸出大小為28×28×64;第 2 部分,先1×1卷積層,輸出大小為28×28×96,作為輸入進行3×3卷積層,輸出大小為28×28×128;第 3部分,先1×1卷積層,輸出大小為28×28×32,作為輸入進行3×3卷積層,輸出大小為28×28×32;而第3 部分3×3的池化層,輸出大小為輸出大小為28×28×32。第5行的Inception mole會對上面是個結果的輸出結果並聯,由此增加網路寬度。
ResNet
2015年ImageNet大賽中,MSRA何凱明團隊的ResialNetworks力壓群雄,在ImageNet的諸多領域的比賽中上均獲得了第一名的好成績,而且這篇關於ResNet的論文Deep Resial Learning for Image Recognition也獲得了CVPR2016的最佳論文,實至而名歸。
上文介紹了的VGG以及GoogleNet都是增加了卷積神經網路的深度來獲得更好效果,也讓人們明白了網路的深度與廣度決定了訓練的效果。但是,與此同時,寬度與深度加深的同時,效果實際會慢慢變差。也就是說模型的層次加深,錯誤率提高了。模型的深度加深,以一定的錯誤率來換取學習能力的增強。但是深層的神經網路模型犧牲了大量的計算資源,學習能力提高的同時不應當產生比淺層神經網路更高的錯誤率。這個現象的產生主要是因為隨著神經網路的層數增加,梯度消失的現象就越來越明顯。所以為了解決這個問題,作者提出了一個深度殘差網路的結構Resial:
上圖就是殘差網路的基本結構,可以看出其實是增加了一個恆等映射,將原本的變換函數H(x)轉換成了F(x)+x。示意圖中可以很明顯看出來整個網路的變化,這樣網路不再是簡單的堆疊結構,這樣的話便很好地解決了由於網路層數增加而帶來的梯度原來越不明顯的問題。所以這時候網路可以做得很深,到目前為止,網路的層數都可以上千層,而能夠保證很好地效果。並且,這樣的簡單疊加並沒有給網路增加額外的參數跟計算量,同時也提高了網路訓練的效果與效率。
在比賽中,為了證明自己觀點是正確的,作者控制變數地設計幾個實驗。首先作者構建了兩個plain網路,這兩個網路分別為18層跟34層,隨後作者又設計了兩個殘差網路,層數也是分別為18層和34層。然後對這四個模型進行控制變數的實驗觀察數據量的變化。下圖便是實驗結果。實驗中,在plain網路上觀測到明顯的退化現象。實驗結果也表明,在殘差網路上,34層的效果明顯要好於18層的效果,足以證明殘差網路隨著層數增加性能也是增加的。不僅如此,殘差網路的在更深層的結構上收斂性能也有明顯的提升,整個實驗大為成功。
除此之外,作者還做了關於shortcut方式的實驗,如果殘差網路模塊的輸入輸出維度不一致,我們如果要使維度統一,必須要對維數較少的進行増維。而增維的最好效果是用0來填充。不過實驗數據顯示三者差距很小,所以線性投影並不是特別需要。使用0來填充維度同時也保證了模型的復雜度控制在比較低的情況下。
隨著實驗的深入,作者又提出了更深的殘差模塊。這種模型減少了各個層的參數量,將資源留給更深層數的模型,在保證復雜度很低的情況下,模型也沒有出現梯度消失很明顯的情況,因此目前模型最高可達1202層,錯誤率仍然控製得很低。但是層數如此之多也帶來了過擬合的現象,不過諸多研究者仍在改進之中,畢竟此時的ResNet已經相對於其他模型在性能上遙遙領先了。
殘差網路的精髓便是shortcut。從一個角度來看,也可以解讀為多種路徑組合的一個網路。如下圖:
ResNet可以做到很深,但是從上圖中可以體會到,當網路很深,也就是層數很多時,數據傳輸的路徑其實相對比較固定。我們似乎也可以將其理解為一個多人投票系統,大多數梯度都分布在論文中所謂的effective path上。
DenseNet
在Resnet模型之後,有人試圖對ResNet模型進行改進,由此便誕生了ResNeXt模型。
這是對上面介紹的ResNet模型結合了GoogleNet中的inception模塊思想,相比於Resnet來說更加有效。隨後,誕生了DenseNet模型,它直接將所有的模塊連接起來,整個模型更加簡單粗暴。稠密相連成了它的主要特點。
我們將DenseNet與ResNet相比較:
從上圖中可以看出,相比於ResNet,DenseNet參數量明顯減少很多,效果也更加優越,只是DenseNet需要消耗更多的內存。
總結
上面介紹了卷積神經網路發展史上比較著名的一些模型,這些模型非常經典,也各有優勢。在算力不斷增強的現在,各種新的網路訓練的效率以及效果也在逐漸提高。從收斂速度上看,VGG>Inception>DenseNet>ResNet,從泛化能力來看,Inception>DenseNet=ResNet>VGG,從運算量看來,Inception<DenseNet< ResNet<VGG,從內存開銷來看,Inception<ResNet< DenseNet<VGG。在本次研究中,我們對各個模型均進行了分析,但從效果來看,ResNet效果是最好的,優於Inception,優於VGG,所以我們第四章實驗中主要採用谷歌的Inception模型,也就是GoogleNet。
⑻ 卷積神經網路 有哪些改進的地方
卷積神經網路的研究的最新進展引發了人們完善立體匹配重建熱情。從概念看,基於學習演算法能夠捕獲全局的語義信息,比如基於高光和反射的先驗條件,便於得到更加穩健的匹配。目前已經探求一些兩視圖立體匹配,用神經網路替換手工設計的相似性度量或正則化方法。這些方法展現出更好的結果,並且逐步超過立體匹配領域的傳統方法。事實上,立體匹配任務完全適合使用CNN,因為圖像對是已經過修正過的,因此立體匹配問題轉化為水平方向上逐像素的視差估計。
與雙目立體匹配不同的是,MVS的輸入是任意數目的視圖,這是深度學習方法需要解決的一個棘手的問題。而且只有很少的工作意識到該問題,比如SurfaceNet事先重建彩色體素立方體,將所有像素的顏色信息和相機參數構成一個3D代價體,所構成的3D代價體即為網路的輸入。然而受限於3D代價體巨大的內存消耗,SurfaceNet網路的規模很難增大:SurfaceNet運用了一個啟發式的「分而治之」的策略,對於大規模重建場景則需要花費很長的時間。
⑼ 一文看懂卷積神經網路-CNN(基本原理+獨特價值+實際應用)
在 CNN 出現之前,圖像對於人工智慧來說是一個難題,有2個原因:
圖像需要處理的數據量太大,導致成本很高,效率很低
圖像在數字化的過程中很難保留原有的特徵,導致圖像處理的准確率不高
下面就詳細說明一下這2個問題:
圖像是由像素構成的,每個像素又是由顏色構成的。
現在隨隨便便一張圖片都是 1000×1000 像素以上的, 每個像素都有RGB 3個參數來表示顏色信息。
假如我們處理一張 1000×1000 像素的圖片,我們就需要處理3百萬個參數!
1000×1000×3=3,000,000
這么大量的數據處理起來是非常消耗資源的,而且這只是一張不算太大的圖片!
卷積神經網路 – CNN 解決的第一個問題就是「將復雜問題簡化」,把大量參數降維成少量參數,再做處理。
更重要的是:我們在大部分場景下,降維並不會影響結果。比如1000像素的圖片縮小成200像素,並不影響肉眼認出來圖片中是一隻貓還是一隻狗,機器也是如此。
圖片數字化的傳統方式我們簡化一下,就類似下圖的過程:
假如有圓形是1,沒有圓形是0,那麼圓形的位置不同就會產生完全不同的數據表達。但是從視覺的角度來看, 圖像的內容(本質)並沒有發生變化,只是位置發生了變化 。
所以當我們移動圖像中的物體,用傳統的方式的得出來的參數會差異很大!這是不符合圖像處理的要求的。
而 CNN 解決了這個問題,他用類似視覺的方式保留了圖像的特徵,當圖像做翻轉,旋轉或者變換位置時,它也能有效的識別出來是類似的圖像。
那麼卷積神經網路是如何實現的呢?在我們了解 CNN 原理之前,先來看看人類的視覺原理是什麼?
深度學習的許多研究成果,離不開對大腦認知原理的研究,尤其是視覺原理的研究。
1981 年的諾貝爾醫學獎,頒發給了 David Hubel(出生於加拿大的美國神經生物學家) 和TorstenWiesel,以及 Roger Sperry。前兩位的主要貢獻,是「 發現了視覺系統的信息處理 」,可視皮層是分級的。
人類的視覺原理如下:從原始信號攝入開始(瞳孔攝入像素 Pixels),接著做初步處理(大腦皮層某些細胞發現邊緣和方向),然後抽象(大腦判定,眼前的物體的形狀,是圓形的),然後進一步抽象(大腦進一步判定該物體是只氣球)。下面是人腦進行人臉識別的一個示例:
對於不同的物體,人類視覺也是通過這樣逐層分級,來進行認知的:
我們可以看到,在最底層特徵基本上是類似的,就是各種邊緣,越往上,越能提取出此類物體的一些特徵(輪子、眼睛、軀乾等),到最上層,不同的高級特徵最終組合成相應的圖像,從而能夠讓人類准確的區分不同的物體。
那麼我們可以很自然的想到:可以不可以模仿人類大腦的這個特點,構造多層的神經網路,較低層的識別初級的圖像特徵,若干底層特徵組成更上一層特徵,最終通過多個層級的組合,最終在頂層做出分類呢?
答案是肯定的,這也是許多深度學習演算法(包括CNN)的靈感來源。
典型的 CNN 由3個部分構成:
卷積層
池化層
全連接層
如果簡單來描述的話:
卷積層負責提取圖像中的局部特徵;池化層用來大幅降低參數量級(降維);全連接層類似傳統神經網路的部分,用來輸出想要的結果。
下面的原理解釋為了通俗易懂,忽略了很多技術細節,如果大家對詳細的原理感興趣,可以看這個視頻《 卷積神經網路基礎 》。
卷積層的運算過程如下圖,用一個卷積核掃完整張圖片:
這個過程我們可以理解為我們使用一個過濾器(卷積核)來過濾圖像的各個小區域,從而得到這些小區域的特徵值。
在具體應用中,往往有多個卷積核,可以認為,每個卷積核代表了一種圖像模式,如果某個圖像塊與此卷積核卷積出的值大,則認為此圖像塊十分接近於此卷積核。如果我們設計了6個卷積核,可以理解:我們認為這個圖像上有6種底層紋理模式,也就是我們用6中基礎模式就能描繪出一副圖像。以下就是25種不同的卷積核的示例:
總結:卷積層的通過卷積核的過濾提取出圖片中局部的特徵,跟上面提到的人類視覺的特徵提取類似。
池化層簡單說就是下采樣,他可以大大降低數據的維度。其過程如下:
上圖中,我們可以看到,原始圖片是20×20的,我們對其進行下采樣,采樣窗口為10×10,最終將其下采樣成為一個2×2大小的特徵圖。
之所以這么做的原因,是因為即使做完了卷積,圖像仍然很大(因為卷積核比較小),所以為了降低數據維度,就進行下采樣。
總結:池化層相比卷積層可以更有效的降低數據維度,這么做不但可以大大減少運算量,還可以有效的避免過擬合。
這個部分就是最後一步了,經過卷積層和池化層處理過的數據輸入到全連接層,得到最終想要的結果。
經過卷積層和池化層降維過的數據,全連接層才能」跑得動」,不然數據量太大,計算成本高,效率低下。
典型的 CNN 並非只是上面提到的3層結構,而是多層結構,例如 LeNet-5 的結構就如下圖所示:
卷積層 – 池化層- 卷積層 – 池化層 – 卷積層 – 全連接層
在了解了 CNN 的基本原理後,我們重點說一下 CNN 的實際應用有哪些。
卷積神經網路 – CNN 很擅長處理圖像。而視頻是圖像的疊加,所以同樣擅長處理視頻內容。下面給大家列一些比較成熟的應用�:
圖像分類、檢索
圖像分類是比較基礎的應用,他可以節省大量的人工成本,將圖像進行有效的分類。對於一些特定領域的圖片,分類的准確率可以達到 95%+,已經算是一個可用性很高的應用了。
典型場景:圖像搜索…
目標定位檢測
可以在圖像中定位目標,並確定目標的位置及大小。
典型場景:自動駕駛、安防、醫療…
目標分割
簡單理解就是一個像素級的分類。
他可以對前景和背景進行像素級的區分、再高級一點還可以識別出目標並且對目標進行分類。
典型場景:美圖秀秀、視頻後期加工、圖像生成…
人臉識別
人臉識別已經是一個非常普及的應用了,在很多領域都有廣泛的應用。
典型場景:安防、金融、生活…
骨骼識別
骨骼識別是可以識別身體的關鍵骨骼,以及追蹤骨骼的動作。
典型場景:安防、電影、圖像視頻生成、游戲…
今天我們介紹了 CNN 的價值、基本原理和應用場景,簡單總結如下:
CNN 的價值:
能夠將大數據量的圖片有效的降維成小數據量(並不影響結果)
能夠保留圖片的特徵,類似人類的視覺原理
CNN 的基本原理:
卷積層 – 主要作用是保留圖片的特徵
池化層 – 主要作用是把數據降維,可以有效的避免過擬合
全連接層 – 根據不同任務輸出我們想要的結果
CNN 的實際應用:
圖片分類、檢索
目標定位檢測
目標分割
人臉識別
骨骼識別
本文首發在 easyAI - 人工智慧知識庫
《 一文看懂卷積神經網路-CNN(基本原理+獨特價值+實際應用) 》
⑽ 神經網路簡述
機器學習中談論的神經網路是指「神經網路學習」,或者說,是機器學習和神經網路這兩個學科領域的交叉部分[1]。
在這里,神經網路更多的是指計算機科學家模擬人類大腦結構和智能行為,發明的一類演算法的統稱。
神經網路是眾多優秀仿生演算法中的一種,讀書時曾接觸過蟻群優化演算法,曾驚訝於其強大之處,但神經網路的強大,顯然蟻群優化還不能望其項背。
A、起源與第一次高潮。有人認為,神經網路的最早討論,源於現代計算機科學的先驅——阿蘭.圖靈在1948年的論文中描述的「B型組織機器」[2]。二十世紀50年代出現了以感知機、Adaling為代表的一系列成功,這是神經網路發展的第一個高潮[1]。
B、第一次低谷。1969年,馬文.明斯基出版《感知機》一書,書中論斷直接將神經網路打入冷宮,導致神經網路十多年的「冰河期」。值得一提的是,在這期間的1974年,哈佛大學Paul Webos發明BP演算法,但當時未受到應有的重視[1]。
C、第二次高潮。1983年,加州理工學院的物理學家John Hopfield利用神經網路,在旅行商問題上獲得當時最好結果,引起轟動;Rumelhart等人重新發明了BP演算法,BP演算法迅速走紅,掀起神經網路第二次高潮[1]。
D、第二次低谷。二十世紀90年代中期,統計學習理論和支持向量機興起,較之於這些演算法,神經網路的理論基礎不清晰等缺點更加凸顯,神經網路研究進入第二次低谷[1]。
E、深度學習的崛起。2010年前後,隨著計算能力的提升和大數據的涌現,以神經網路為基礎的「深度學習」崛起,科技巨頭公司谷歌、Facebook、網路投入巨資研發,神經網路迎來第三次高潮[1]。2016年3月9日至15日,Google人工智慧程序AlphaGo對陣韓國圍棋世界冠軍李世乭,以4:1大比分獲勝,比眾多專家預言早了十年。這次比賽,迅速在全世界經濟、科研、計算機產業各領域掀起人工智慧和深度學習的熱烈討論。
F、展望。從幾個方面討論一下。
1)、近期在Google AlphaGo掀起的熱潮中,民眾的熱情與期待最大,甚至有少許恐慌情緒;計算機產業和互聯網產業熱情也非常巨大,對未來充滿期待,各大巨頭公司對其投入大量資源;學術界的反應倒是比較冷靜的。學術界的冷靜,是因為神經網路和深度神經網路的理論基礎還沒有出現長足的進步,其缺點還沒有根本改善。這也從另一個角度說明了深度神經網路理論進步的空間很大。
2)、"當代神經網路是基於我們上世紀六十年代掌握的腦知識。"關於人類大腦的科學與知識正在爆炸式增長。[3]世界上很多學術團隊正在基於大腦機制新的認知建立新的模型[3]。我個人對此報樂觀態度,從以往的仿生演算法來看,經過億萬年進化的自然界對科技發展的促進從來沒有停止過。
3)、還說AlphaGo,它並不是理論和演算法的突破,而是基於已有演算法的工程精品。AlhphaGo的工作,為深度學習的應用提供了非常廣闊的想像空間。分布式技術提供了巨大而廉價的計算能力,巨量數據的積累提供了豐富的訓練樣本,深度學習開始騰飛,這才剛剛開始。
一直沿用至今的,是McChlloch和Pitts在1943年依據腦神經信號傳輸結構抽象出的簡單模型,所以也被稱作」M-P神經元模型「。
其中,
f函數像一般形如下圖的函數,既考慮階躍性,又考慮光滑可導性。
實際常用如下公式,因形如S,故被稱作sigmoid函數。
把很多個這樣的神經元按一定層次連接起來,就得到了神經網路。
兩層神經元組成,輸入層接收外界輸入信號,輸出層是M-P神經元(只有輸出層是)。
感知機的數學模型和單個M-P神經元的數學模型是一樣的,如因為輸入層只需接收輸入信號,不是M-P神經元。
感知機只有輸出層神經元是B-P神經元,學習能力非常有限。對於現行可分問題,可以證明學習過程一定會收斂。而對於非線性問題,感知機是無能為力的。
BP神經網路全稱叫作誤差逆傳播(Error Propagation)神經網路,一般是指基於誤差逆傳播演算法的多層前饋神經網路。這里為了不佔篇幅,BP神經網路將起篇另述。
BP演算法是迄今最為成功的神經網路學習演算法,也是最有代表性的神經網路學習演算法。BP演算法不僅用於多層前饋神經網路,還用於其他類型神經網路的訓練。
RBF網路全程徑向基函數(Radial Basis Function)網路,是一種單隱層前饋神經網路,其與BP網路最大的不同是採用徑向基函數作為隱層神經元激活函數。
卷積神經網路(Convolutional neural networks,簡稱CNNs)是一種深度學習的前饋神經網路,在大型圖片處理中取得巨大成功。卷積神經網路將起篇另述。
循環神經網路(Recurrent Neural Networks,RNNs)與傳統的FNNs不同,RNNs引入定向循環,能夠處理那些輸入之間前後關聯的問題。RNNs已經在眾多自然語言處理(Natural Language Processing, NLP)中取得了巨大成功以及廣泛應用[5]。RNNs將起篇另述。[5]
[1]、《機器學習》,周志華著
[2]、《模式識別(第二版)》,Richard O.Duda等著,李宏東等譯
[3]、《揭秘IARPA項目:解碼大腦演算法或將徹底改變機器學習》,Emily Singerz著,機器之心編譯出品
[4]、圖片來源於互聯網
[5]、 循環神經網路(RNN, Recurrent Neural Networks)介紹