㈠ 卷積神經網路
關於花書中卷積網路的筆記記錄於 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的卷積相當於先進行一次特徵抽取 。
㈡ 2020-03-31【Tensor RT】
TensorRT優化方法主要有以下幾種方式,最主要的是前面兩種。
如下圖左側是GoogLeNetInception模塊的計算圖。這個結構中有很多層,在部署模型推理時,這每一層的運算操作都是由GPU完成的,但實際上是GPU通過啟動不同的CUDA(Compute unified device architecture)核心來完成計算的,CUDA核心計算張量的速度是很快的,但是往往大量的時間是浪山鋒費在CUDA核心的啟動和對每一層輸入/輸出張量的讀寫操作上面,這造成了內存帶寬的瓶頸和GPU資源的浪費。TensorRT通過對層間的橫向或縱向合並(合並後的結構稱為CBR,意指 convolution, bias, and ReLU layers are fused to form a single layer),使得層的數量大大減少。橫向合並可以把卷積、偏置和激活層合並成一個CBR結構,只佔用一個CUDA核心。縱向合並可以把結構相同,但是權值不同的層合並成一個更寬的層,也只佔用一個CUDA核心。合並之後的計算圖(圖4右側)的層次更少了,佔用的CUDA核心數也少了,因此整個模型結構會更小,更快,更高效。
大部分深度學習逗斗晌框架在訓練神經網路時網路中的張量(Tensor)都是32位浮點數的精度(Full 32-bit precision,FP32),一旦網路訓練完成,在部署推理的過程中由於不需要反向傳播,完全可以適當降低數據精度,比如降為FP16或INT8的精度。更低的數據精度將會使得內存佔用和延遲更低,模型體積更小。INT8隻有256個不同的數值,使用INT8來表示 FP32精度的數值,肯定會丟失信息,造成性能下降。不過TensorRT會提供完全自動化的校準(Calibration )過程,會以最好的匹配性能將FP32精度的數據降低為INT8精度,最小化性能損失。
網路模型在推理計算時,是調用GPU的CUDA核進行計算的。TensorRT可以針對不同的演算法,不同的網路模型,不同的GPU平台,進行 CUDA核的調整(怎麼調整的還不清楚),以保證當前模型在特定平銷肆台上以最優性能計算。
TensorRT will pick the implementation from a library of kernels that delivers the best performance for the target GPU, input data size, filter size, tensor layout, batch size and other parameters.
在每個tensor的使用期間,TensorRT會為其指定顯存,避免顯存重復申請,減少內存佔用和提高重復使用效率。
Scalable design to process multiple input streams in parallel,這個應該就是GPU底層的優化了
知乎大佬鏈接
https://zhuanlan.hu.com/p/64933639
㈢ PART 4 W1 卷積神經網路介紹
一個是圖像分類:如貓臉識別等;一個是目標檢測:如無人駕駛技術中的各種交通信號檢測技術
1. 卷積操作及過濾器/卷積核的概念
如上圖所示:最左側矩陣是一個灰度圖像,中間是一個3*3的小矩陣,稱為「卷積核」或「過濾器」。
卷積:先把卷積核放到灰度圖像左上角(綠色框),蓋住灰度圖像上一個3*3的矩陣區域,然後9對對應的元素相乘,然後求和(得到0),然後把卷積核逐漸移動一行一行的「掃描」,最終得到最右側矩陣。上述操作叫做「卷積」,最右側矩陣是卷積的輸出。
2. 垂直邊緣檢測
仍以上圖為例,可以看到3*3的卷積核具體的數值構成為「左邊一列1,中間一列0,右邊一列-1」,這種卷積核在「掃描」灰度圖像時,可以檢測到灰度圖像的垂直邊緣。分析如下:
1)假設正在掃描的灰度區域沒有垂直邊緣,意味著區域內的值在左右方向上分布差不多,與卷積核做完運算後,左邊的乘1,右邊的乘-1,相加正好有一定的抵消作用,其實計算出來的結果會接近0。即:卷積結果接近0代表沒有邊緣。
2)有垂直邊緣分為兩種情況:目標區域「左邊值較大,右邊值較小」 或「左邊值較小,右邊值較大」。前一種情況在卷積操作後會得到一個較大的正值,後一種情況卷積操作後會得到一個較大的負值。
可以看出,較大的正值代表著目標區域的變化趨勢與卷積核相同,即檢測到的是與卷積核相同的邊緣,而較大的負值代表目標區域的變化趨勢與卷積核相反,即檢測到的是與卷積核相反的邊緣。
3. 卷積應用在卷積神經網路中
卷積操作如何應用於神經網路中?簡言之,卷積核本身就是網路要學習的參數。如上圖所示,我們並不是事先設定好要檢測垂直邊緣或水平邊緣或其它什麼邊緣,而是要網路去學習要檢測什麼東西。
1. padding的原因
在上節展示的卷積操作中,可以看出,假設輸入圖像的大小為n*n,而卷積核的大小為f*f,那麼卷積核從輸入圖像的左上角掃描到右下角,最終得到的結果大小為(n-f+1)*(n-f+1),意味著如果一次次進行卷積,那麼結果的尺寸會越來越小
另外,顯然輸入圖像邊緣的像素被使用的較少(最邊緣的像素僅被使用一次),這顯然會造成信息的丟失。
2. 如何進行padding
非常簡單:把輸入圖像的四周補充p = (f-1)/2 圈的0,這樣輸入的圖像尺寸變成了(n+2p)*(n+2p),因此卷積後的大小變成了(n+2p -f + 1)*(n+2p -f + 1)=n*n,即與原始的圖像有了相同的大小,且原始圖像邊緣的像素也被較多的利用到。
3. 幾點補充
(1)卷積核的尺寸設置為 奇數 :因為① 這樣(f-1)/2就恰好是整數了,方便進行padding,② 有中心像素,便於表徵卷積核的位置,等。
(2)根據是否進行padding,分為 普通卷積(valid) 和 同尺寸卷積(same)
1. 步長概念
在上文中講到卷積,即使用一個卷積核對輸入圖像進行「掃描」並進行相應計算時,提到這個「掃描」是逐個像素逐個像素的邁進的。但是,並不一定非得這樣,也可以每次跨越兩個或更多個像素,這就是「步長」的概念,一般用s表示
2. 卷積結果尺寸與步長的關系
前文提到,若輸入圖像尺寸為n*n,卷積核尺寸為f*f,則卷積結果尺寸為(n+f-1)*(n+f-1),若算上padding操作,則結果為(n+2p -f + 1)*(n+2p -f + 1)。這是在步長s=1的前提下成立。若步長不為1,則結果為floor((n+2p-f)/s+1)**2
3. 其它:數學中的卷積和神經網路中的卷積
需要說明的是,神經網路中所說的卷積和數學中說的卷積不是一回事,但數學中的卷積是啥就不追究了。
神經網路中的卷積操作,在數學的描述上,更像是一種「交叉相關性」的計算,可以看出,若目標區域與卷積核有類似的分布,則會計算出較大的正值(正相關),若有相反的分布,則會計算出較大的負值(負相關),若沒什麼關系,則會計算出接近0的值(不相關)。卷積操作的確很像一種相關性的計算。
1. RGB圖像的數學構成
灰度圖像是一個n*n的二維矩陣,彩色圖像則是n*n*3 的三維矩陣,最外圍的三個維度分別代表了RGB三原色的值,其中數字「3」在卷積神經網路中被稱為通道數或信道數
2. 對RGB圖像進行卷積
在對灰度圖像進行卷積時,使用的是f*f的二維卷積核。在對RGB圖像進行卷積時,則卷積核的維度也+1,變成了f*f*3。一次卷積的結果仍然是把所有的值加起來輸出一個值。即: 一個三維的圖像,和一個三維的卷積核,在進行完卷積操作後,輸出的是一個二維的矩陣(如上圖) 。
3. 當使用多個卷積核時的輸出
如上圖所示,可以使用多個卷積核(一個亮黃色,一個屎黃色)。根據前文描述,一個立體的卷積核在一個立體的矩陣上掃描完,結果是一個二維的。但當使用多個卷積核時,則輸出了多個二維矩陣,這些二維矩陣沿著第三個維度排列到一起,使得結果重新變成了三維。此時,第三個維度的尺寸,反應的是卷積核數,也就是說 卷積核數就是信道數 。直觀理解,每一個卷積核代表著檢測了某一種特徵,多個卷積核就是同時檢測了多種特徵,傳遞了多種信息。
1. 一個卷積層的數據的基本流
如上圖所示,由於卷積核本身就是一堆待學參數w,所以卷積操作本質還是「加權求和」,之後會加入偏置值,然後進行非線性變換,然後輸出(到下一層),可見還是那一套。
需要提一下的是,卷積的輸入不一定是原始圖像構成的矩陣,還有可能是上一個卷積的結果。原始圖像是彩色的,有多個通道。卷積時可以用多個卷積核,最終產生的結果也是立體的。因此原始的輸入與中間卷積層的輸出,在數學形式上是統一的。因此可以「輸入->卷積層->卷積層->...」這樣操作。
2. 卷積層的參數規模
一個卷積層總的參數規模(包括w,不包括b)為: ,即:卷積核的大小的平方*上層輸出的通道數)*本層所用的卷積核數。與上層輸入的大小無關(但與通道數有關)
3. 一個卷積層涉及到的超參
卷積核的大小、是否padding、步長、卷積核數。
1. 一個示例
上圖為一個簡單的卷積神經網路示例: 一層一層的卷積,最後把所有的元素展開成一個一維向量,然後加一個全連接層。
2. 注意以下幾點:
1⃣️ 實際上CNN會有卷積層、池化層、全連接層,而非僅有卷積和全連接;
2⃣️ 從數據的構成形式上看,按照網路從前往後的順序,圖片尺寸不斷減小,信道數量不斷增加。一般遵從這個趨勢。
1. 池化
如上圖所示,假設輸入是一個4*4的矩陣,現在我們把它分割成2*2四個子矩陣(或者說使用一個2*2的核以2為步長掃描矩陣),對四個子區域分別求最大值,最終得到一個值為9、2、6、3的2*2的矩陣輸出。這種操作就叫池化,具體為最大值池化。
2. 池化的作用
1⃣️ 一般來說,較大的值往往代表學到了一個重要或典型的特徵,把原始輸入以某種方式濾除掉一些不重要的值,只保留一些較大的值,相當於 強化了一些重要信息的表達 。2⃣️ 降低圖片的尺寸,可以節省空間、加速運算等。
3. 池化的特點
並沒有需要學習的參數(w、b之類的),也因此「池化層」一般並不被稱為單獨的一層。在卷積神經網路中,通常把一個卷積層+一個池化層的組合叫一層。
4. 池化的超參數及經驗值
池化層沒有要學習的參數,只有核心的兩個超參:池化核的大小、池化步長。此外還有池化所用的rece操作:最大或者平均(沒有其它選項)。
一般把池化核的大小設置為3或2,步長為2。注意:步長為2意味著把圖片減小到原來的一半。
rece操作最常用最大池化,偶爾用平均池化,不會用其它操作。
上圖為一個典型的卷積神經網路示例,描述如下:
輸入層 :彩色的手寫數字圖片,數學構成為32*32*3的矩陣,其中3為通道數。
Layer 1-卷積層 :1)使用6個5*5*3的卷積核,以步長為1對輸入層進行卷積,輸出28*28*6的矩陣,2)然後使用2*2的最大池化,步長為2,最終輸出14*14*6的矩陣。其中14為圖片尺寸,6為信道數。
Layer2-卷積層 :1)使用16個5*5*3的卷積核以步長1對上層輸出進行卷積,輸出10*10*16的矩陣,2)然後使用2*2的最大池化,步長為2,最終輸出5*5*16的矩陣。
Layer3-全連接層: 把上層輸出的5*5*16矩陣展開成1*400的一維向量,以120*400的權重矩陣送入本層120個神經元,激活後輸出。
Layer4-全連接層: 120->84,激活後輸出
輸出層 :84 -> 10,然後softmax後輸出。
1. 參數少
假如原始圖片尺寸為100*100*3,假設使用全連接,即使第二層僅用100個神經元,那也已經產生了100*100*3*100 = 300w個參數,難以想像。
假設使用卷積層,使用10個10*10*3的卷積核,那就是只有3000個參數,而能輸出的矩陣規模是91*91*10=81000
2. 參數少的原因
1)稀疏連接:卷積核掃描矩陣產生輸出,這個過程就從「神經元連接」的角度看,輸入的左上角只連著輸出的左上角,右上角只連右上角,而非「全連接」,參數就會少很多。2)參數共享:這么稀疏的連接,還是使用了同一套參數,進一步減少了參數的量。
3. 參數共享的其它好處
如果圖片上有一隻貓,那麼不管這個貓在圖片的什麼位置,都不改變「這是一張貓的照片」。使用參數共享時,相當於用同樣的特徵提取作用到整個圖片的各個區域,適應平移不變性,增強魯棒性。
㈣ 卷積神經網路卷積層算完數據超閾怎麼辦
、計算方法不同1、前饋神經網路:一種最簡單的神經網路,各神經元分層排列AI愛發貓 www.aifamao.com。每個神經元只與前一層的神經元相連。接收前一層的輸出,並輸出給下一層塵中.各層間沒有反饋。
2、BP神經網路:是一種按照誤差逆向傳播演算法訓練的多層前饋神經網路。3、卷積神經網路:包含卷積計算且具有深度結構的前饋神經網路。
二、用途不同1、前饋神經網路:主要應用包括感知器網路、BP網路和RBF網路。
2、BP神經網路:(1)函數逼近:用輸入向量和相應的輸出向量訓練一個網路逼近一個函數;(2)模式識別:用一個待定的輸出向量將它與輸入向量聯系起來;(3)分類:把輸入向量所定義的合適方式進行分類;(4)數據壓縮:減少輸出向量維數以便於傳輸或存儲。
3、卷積神經網路:可應用於圖像識別、物體識別等計算機視覺、自然語言處理、物理學和遙感科學等領域。聯系:BP神經網路和卷積神經網路都屬於前饋神經網路,三者都屬於人工神經網路。因此,三者原理和結構相同。
三、作用不同1、前饋神經網路:結構簡單,應用廣泛,能夠以任意精度逼近任意連續函數及平方可積函數.而且可以精確實現任意有限訓練樣本集。2、BP神經網路:具有很強的非線性映射能力和柔性的網路結構。
網路的中間層數、各層的神經元個數可根據具體情況任意設定,並且隨著結構的差異其性能也有所不同。3、卷積神經網路頌兄拆:具有表徵學習能力,能夠按其階層結構對輸入信息進行平移不變分類。
(4)神經網路tensor相乘如何減少計算量擴展閱讀:1、BP神經網路優劣勢BP神經網路無論在網路理論還是在性能方面已比較成熟。其突出優點就是具有很強的非線性映射能力和柔性的網路結構。
網路的中間層數、各層的神經元個數可根據具體情況任意設定,並且隨著結構的差異其性能也有所不同。但是BP神經網路也存在以下的一些主要缺陷。
①學習速度慢,即使是一個簡單的問題,一般也需要幾百次甚至上千次的學習才能收斂。②容易陷入局部極小值。③網路層數、神經元個數的選擇沒有相應的理論指導。④網路推廣能力有限。
2、人工神經網路的特點和優越性,主要表現在以下三個方面①具有自學習功能。
例如實現圖像識別時,只在先把許多不同的圖像樣板和對應的應識別的結果輸入人工神經網路,網路就會通過自學習功能,慢慢學會識別類似的圖像。自學習功能對於預測有特別重要的意義。
預期未來的人工神經網路計算機將野棗為人類提供經濟預測、效益預測,其應用前途是很遠大的。②具有聯想存儲功能。用人工神經網路的反饋網路就可以實現這種聯想。③具有高速尋找優化解的能力。
尋找一個復雜問題的優化解,往往需要很大的計算量,利用一個針對某問題而設計的反饋型人工神經網路,發揮計算機的高速運算能力,可能很快找到優化解。
參考資料:網路—前饋神經網路網路—BP神經網路網路—卷積神經網路網路—人工神經網路。
卷積神經網路處理規格不同的圖片
用卷積神經網路處理 「圖」 結構數據應該怎麼辦
。
卷積神經網路有以下幾種應用可供研究:1、基於卷積網路的形狀識別物體的形狀是人的視覺系統分析和識別物體的基礎,幾何形狀是物體的本質特徵的表現,並具有平移、縮放和旋轉不變等特點,所以在模式識別領域,對於形狀的分析和識別具有十分重要的意義,而二維圖像作為三維圖像的特例以及組成部分,因此二維圖像的識別是三維圖像識別的基礎。
2、基於卷積網路的人臉檢測卷積神經網路與傳統的人臉檢測方法不同,它是通過直接作用於輸入樣本,用樣本來訓練網路並最終實現檢測任務的。
它是非參數型的人臉檢測方法,可以省去傳統方法中建模、參數估計以及參數檢驗、重建模型等的一系列復雜過程。本文針對圖像中任意大小、位置、姿勢、方向、膚色、面部表情和光照條件的人臉。
3、文字識別系統在經典的模式識別中,一般是事先提取特徵。提取諸多特徵後,要對這些特徵進行相關性分析,找到最能代表字元的特徵,去掉對分類無關和自相關的特徵。
然而,這些特徵的提取太過依賴人的經驗和主觀意識,提取到的特徵的不同對分類性能影響很大,甚至提取的特徵的順序也會影響最後的分類性能。同時,圖像預處理的好壞也會影響到提取的特徵。
卷積神經網路為什麼最後接一個全連接層
在常見的卷積神經網路的最後往往會出現一兩層全連接層,全連接一般會把卷積輸出的二維特徵圖(featuremap)轉化成(N*1)一維的一個向量全連接的目的是什麼呢?
因為傳統的端到到的卷積神經網路的輸出都是分類(一般都是一個概率值),也就是幾個類別的概率甚至就是一個數--類別號,那麼全連接層就是高度提純的特徵了,方便交給最後的分類器或者回歸。
但是全連接的參數實在是太多了,你想這張圖里就有20*12*12*100個參數,前面隨便一層卷積,假設卷積核是7*7的,厚度是64,那也才7*7*64,所以現在的趨勢是盡量避免全連接,目前主流的一個方法是全局平均值。
也就是最後那一層的featuremap(最後一層卷積的輸出結果),直接求平均值。有多少種分類就訓練多少層,這十個數字就是對應的概率或者叫置信度。
卷積神經網路是如何反向調整參數的?
卷積神經網路的模型問題? 50
。
怎麼又是你.....網路自然是搭建起來的啊,比如CNN,一層一層地建,如果你是用別人已經建好的網路,比如最簡單的LeNet-5,那麼Tensorflow中會直接提供你一個Net;但是如果你是自定義網路類型,那麼需要繼承nn.Noles,然後重新定義網路結構,封裝成一個Net,總結起來,模型是很多數學公式搭在一起,然鵝,數學公式是封裝好的,可以相互交流哈。
打開CSDN,閱讀體驗更佳
卷積神經網路的缺點是什麼?_土豆西瓜大芝麻的博客_卷積神經...
平移不變性 當我們說平移不變性時,我們意思是,稍微改變同一物體的朝向或位置,可能並不會激活那些識別該物體的神經元。 正如上圖所示,假如一個神經元是用來識別一隻貓的,其參數會隨著貓的位置和轉動的變化而變化。雖然數據擴增(data aug...
卷積神經網路存在的問題,卷積神經網路的卷積層_普通網友的博客-CSDN博 ...
對於無法完美解決的梯度消失問題,一個可能部分解決梯度消失問題的辦法是使用ReLU(RectifiedLinearUnit)激活函數,ReLU在卷積神經網路CNN中得到了廣泛的應用,在CNN中梯度消失似乎不再是問題。 那麼它是什麼樣子呢?其實很簡單,比我們前面提到的...
最新發布 影響深度卷積神經網路演算法的關鍵參數是網路結構
局部連接的概念參考局部感受域,即某個視神經元僅考慮某一個小區域的視覺輸入,因此相比普通神經網路的全連接層(下一層的某一個神經元需要與前一層的所有節點連接),卷積網路的某一個卷積層的所有節點只負責前層輸入的某一個區域(比如某個3*3的方塊)。卷積神經網路的連接性:卷積神經網路中卷積層間的連接被稱為稀疏連接(sparse connection),即相比於前饋神經網路中的全連接,卷積層中的神經元僅與其相鄰層的部分,而非全部神經元相連。權重共享和稀疏連接一樣,減少了卷積神經網路的參數總量,並具有正則化的效果。
繼續訪問
卷積神經網路難點梳理
目錄1 基本概念及原理1.1 基本概念1.2 基本原理2 卷積是怎麼「卷」的2.1 數學中的卷積2.2 CNN中的卷積3 損失函數是怎樣當好指揮官的4 梯度下降、反向傳播和顯卡參考內容 1 基本概念及原理 1.1 基本概念 概念名稱 目的 操作 示意圖 卷積(Convolution) 提取特徵 將圖像矩陣遍歷乘以卷積核矩陣並輸出 池化(Pooling) 降低數據量 對小塊矩陣中的所有數取平均(平均池化)或者取最大(最大池化)並只輸出一個值,再遍歷 激活(Activation) 對
繼續訪問
卷積神經網路的缺點_遼寧大學的博客_卷積神經網路的優缺點
1.做卷積神經網路需要將數據集歸一化。不同的尺寸混合在一起難以訓練。2.卷積神經網路沒有記憶功能。3.對圖像處理很友善,對視頻語音自然語言處理能力差...
關於CNN卷積神經網路的問題_麥格芬230的博客
將卷積神經網路CNN應用到文本分類任務,利用多個不同大小的卷積核來提取句子中的關鍵信息(類似於多窗口大小的N-gram),從而能夠更好地捕捉局部相關性。 4.在情感分析任務中,TextCNN的卷積核,卷積的是哪些向量呢?卷積卷的是這些向量的什麼...
深入淺出——搞懂卷積神經網路的過擬合、梯度彌散、batchsize的影響的問題(二)
過擬合 梯度彌散 batchsize 不平衡數據集
繼續訪問
cnn卷積神經網路反向傳播,卷積神經網路維度變化
深度學習框架,尤其是基於人工神經網路的框架可以追溯到1980年福島邦彥提出的新認知機[2],而人工神經網路的歷史更為久遠。1989年,燕樂存(YannLeCun)等人開始將1974年提出的標准反向傳播演算法[3]應用於深度神經網路,這一網路被用於手寫郵政編碼識別。盡管演算法可以成功執行,但計算代價非常巨大,神經網路的訓練時間達到了3天,因而無法投入實際使用[4]。...
繼續訪問
卷積神經網路CNN特點功能及其缺陷_一隻不出息的程序員的博客...
卷積:簡單地說,圖像經過平移,相應的特徵圖上的表達也是平移的。 下圖只是一個為了說明這個問題的例子。輸入圖像的左下角有一個人臉,經過卷積,人臉的特徵(眼睛,鼻子)也位於特徵圖的左下角。 在神經網路中,卷積被定義為不同位置的特徵...
記錄 訓練卷積神經網路時遇到的問題_後知後覺w的博客
記錄 訓練卷積神經網路時遇到的問題 問題1、softmax分類的loss最後會停在0.6931這個值 原因分析:在分類層使用了keras.layers.Lambda,導致分類器沒有可訓練的參數,因此沒有分類能力,即,無論是否為object,softmax的輸出都是0.5,根據loss...
都說卷積神經網路是個好東西,但它有什麼弊端呢?
圖片來源:Mathworks翻譯 | 王赫編輯 | Donna2012年,三位深度學習的「巨人」Alex Krizhevsky, Ilya Sutskever 和 Geoffrey Hinton,聯合發表了題為 「ImageNet Classification with Deep Convolutional Networks」 的論文。自此,卷積神經網路( CNNs )就成了一個萬人追捧的工具,並
繼續訪問
卷積神經網路—全連接層
卷積神經網路—全連接層 全連接層 全連接層與卷積層 全連接層與GAP(全局平均池化層) [1] https://blog.csdn.net/Touch_Dream/article/details/79775786 [2] https://www.cnblogs.com/zongfa/p/9048680.html [3] https://www.hu.com/question/410379...
繼續訪問
五、卷積神經網路CNN5(卷積相關問題2)_滿滿myno的博客
輸出深度(通道)與卷積核(過濾器)的個數相等。 激活函數通常放在卷積神經網路的那個操作之後 通常放在卷積層之後。 如何理解最大池化層有幾分縮小 池化層:對輸入的特徵圖進行壓縮,一方面使特徵圖變小,簡化網路計算復雜度;一方面 ...
卷積神經網路的缺點
(1)效果好是因為仿生學,缺點是無法擴展到平面視覺以外的地方吧。 (2)缺點一:實現比較復雜。缺點二:訓練所需時間比較久。 (3)不是單一演算法,不同的任務需要單獨訓練 (4)世界(物理空間、解空間等)是連續且局部平坦的+規律/特徵具有時空局部平移不變性,即世界存在局部平移不變的統計規律 舉個例子:在地球表面某局部畫三角形,發現內角和總是等於180,並且隨便跑到地球的哪裡都是如此,但是如果你
繼續訪問
神經網路 卷積神經網路,卷積神經網路常見問題
卷積神經網路(ConvolutionalNeuralNetwork,CNN)是一種前饋神經網路,它的人工神經元可以響應一部分覆蓋范圍內的周圍單元,對於大型圖像處理有出色表現。[1] 它包括卷積層(alternatingconvolutionallayer)和池層(poolinglayer)。卷積神經網路是近年發展起來,並引起廣泛重視的一種高效識別方法。...
繼續訪問
卷積神經網路(CNN)入門常見問題解答
目錄 什麼是神經元? 激活函數的作用? 什麼是神經網路? CNN怎麼進行識別? 計算機如何識別圖像? CNN如何更准確人性化的對比圖像? 什麼是卷積操作? 感謝作者: CNN筆記:通俗理解卷積神經網路_v_JULY_v的博客-CSDN博客_卷積神經網路通俗理解 什麼是神經元? 神經網路由大量的神經元相互連接而成。每個神經元接受線性組合的輸入後,最開始只是簡單的線性加權,後來給每個神經元加上了非線性的激活函數,從而進行非線性變換後輸出。每兩個神經元之間的連接代表加權值,稱...
繼續訪問
卷積神經網路——解決參數太多問題
一、全連接網路的局限性 圖像變大導致色彩書變多,不好解決 不便處理高維數據 對於比較復雜的高維數據,如果按照全連接的方法,則只能通過增加節點、增加層數的方式來解決。增加節點會引起參數過多的問題。由於隱藏層神經網路使用的是sigmod或tanh激活函數,其反向傳播的有效成層數只能在4~6層左右。 二、理解卷積神經網路 三、網路結構 卷積神經網路的結構與全連接網路相比復雜很多。它的網路結構主要包括卷積層、池化層。細節又可以分為濾波器、步長、卷積操作、池化操作。 1.網路結構描述 對於一般的圖片會使用多個卷積
繼續訪問
人工智慧深度學習卷積神經網路入門
<span style="font-size:16px;">"java大數據人工智慧培訓學校全套教材"系列課程由1000集視頻構成,基本就 是1)時下流行的java培訓學校主流內部教材,2)和市面上培訓學校的通 行的課程體系幾乎一樣。所以這套課程都能自己學下來,等於上了培訓學校一次,完全可以找個java工程師的工作了。</span><br /> <br /> <span style="font-size:14px;"><span style="font-size:16px;"> 通過學習卷積神經網路概述,為什麼引入神經網路來做識別,判斷,預測,</span><strong><span style="font-size:16px;">訓練模型</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">激活函數</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">sigmoid激活函數</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">導數和切線</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">sigmoid激活函數如何求導</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">鏈式法則</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">梯度</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">梯度下降法與delta法則</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">BP(back propagation)誤差逆傳播神經網路</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">卷積到底有什麼作用?如何做到特徵提取</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">池化的名字由來</span></strong><span style="font-size:16px;">,</span><strong><strong><span style="font-size:16px;">dropout</span></strong></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">Anaconda Prompt的用法</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">Jupyter notebook的用法</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">Spyder的用法</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">建立安裝Tensorflow所需的Anaconda虛擬環境</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">如何在Anaconda虛擬環境安裝Tensorflow與Keras</span></strong><span style="font-size:16px;">概念等讓大家對人工智慧,卷積神經網路快速入門。</span></span><br /> <br /> <span style="font-size:16px;">課程特色:專業細致,偏案例,理論強。</span><br /> <br /> <span style="font-size:14px;"><span style="font-size:16px;">課程軟體使用:</span><span style="font-size:14px;"><strong><span style="font-size:16px;">Anaconda,</span><span style="font-size:14px;"><strong><span><span style="font-size:16px;">Spyder,</span><span style="font-size:16px;"><strong><span style="font-size:16px;">Jupyter notebook</span></strong></span></span></strong></span></strong></span></span><br /> <br /> <span style="font-size:16px;">重要聲明:</span><br /> <br /> <span style="font-size:16px;">1) 如果感覺噪音大,可以選擇不用耳機,加音箱或用電腦原聲 </span><br /> <br /> <span style="font-size:14px;"><span style="font-size:16px;">2) 既然我們的名字叫</span><span style="font-size:16px;">人工智慧深度學習卷積神經網路入門</span><span style="font-size:16px;">,這個課程的特點就在於成本最低的, 讓你最快速的,最容易的入門。</span><span style="font-size:16px;">人工智慧深度學習卷積神經網路入門</span><span style="font-size:16px;">的最大的難點在於入門入不了,從而最終放棄。俗話說師傅領進門,修行在個人。只要入了門了,後面的事都好辦。選課前,務必注意本章的學習目標和內容。想學更多,注意後邊的課程。</span></span>
繼續訪問
python卷積神經網路回歸預測_回歸[keras]的一維卷積神經網路,做
在上一篇博客里我介紹了如何利用keras對一個給定的數據集來完成多分類任務。100%的分類准確度驗證了分類模型的可行性和數據集的准確度。在這篇博客當中我將利用一個稍加修改的數據集來完成線性回歸任務。相比較以往的線性回歸處理方式,我認為使用神經網路實現線性回歸要簡單和准確得多。數據集大小仍然是247*900,不同的是數據集的第247位變成了濕度特徵的真實濕度值。不同於分類演算法得到的決策面,回歸演算法得...
繼續訪問
卷積神經網路之全連接層
大多數內容來源於 :卷積神經網路中的全連接層 全連接層的作用是: 連接所有的特徵,將輸出值送給分類器 (如softmax分類器),其將卷積輸出的二維特徵圖轉化成 (N * 1)一維的一個向量。 最後的兩列小圓球就是兩個全連接層,在最後一層卷積結束後,又進行了一次池化操作,輸出了20個 12*12 的圖像(20指最後一層的厚度),然後通過了一個全連接層變成了 1*100 的向量(第一個全連接層神...
繼續訪問
人工神經網路的功能特點,神經網路的優缺點
此時,網路學習了過多的樣本細節,而不能反映樣本內含的規律由於BP演算法本質上為梯度下降法,而它所要優化的目標函數又非常復雜,因此,必然會出現「鋸齒形現象」,這使得BP演算法低效;多層前向BP網路的問題:從數學角度看,BP演算法為一種局部搜索的優化方法,但它要解決的問題為求解復雜非線性函數的全局極值,因此,演算法很有可能陷入局部極值,使訓練失敗;例如實現圖像識別時,只在先把許多不同的圖像樣板和對應的應識別的結果輸入人工神經網路,網路就會通過自學習功能,慢慢學會識別類似的圖像。第三,具有高速尋找優化解的能力。...
繼續訪問
【Keras】卷積神經網路數據回歸預測實戰
基於卷積神經網路的數據回歸預測
繼續訪問
熱門推薦 反向傳播演算法(過程及公式推導)
反向傳播演算法(Backpropagation)是目前用來訓練人工神經網路(Artificial Neural Network,ANN)的最常用且最有效的演算法。
繼續訪問
深度學習---卷積神經網路解決分類與回歸問題
一、CNN神經網路的發展史: Lenet,1986年 Alexnet,2012年 2012年,Imagenet比賽冠軍的model——Alexnet [2](以第一作者alex命名),AlexNet 是一種典型的 convolutional neural network,它由5層 convolutional layer,2層 fully connected layer,和最後一層 label layer (1000個node, 每個node代表ImageNet中的一個類別) 組成 GoogleNet
繼續訪問
深度學習之卷積神經網路CNN詳細
計算機視覺、自然語言處理等領域(圖像分類、圖像分割、圖像檢測、文本
繼續訪問
一文讓你徹底了解卷積神經網路
目錄 卷積層 直觀理解卷積 卷積計算流程 計算過程: 思考: 池化層(PoolingLayer) 卷積神經網路的組成 前向傳播與反向傳播 卷積神經網路(Convolutional Neural Network,CNN)是一種前饋神經網路,它的人工神經元可以響應一部分覆蓋范圍內的周圍單元,對於大型圖像處理有出
㈤ 神經網路淺談
人工智慧技術是當前炙手可熱的話題,而基於神經網路的深度學習技術更是熱點中的熱點。去年穀歌的Alpha Go 以4:1大比分的優勢戰勝韓國的李世石九段,展現了深度學習的強大威力,後續強化版的Alpha Master和無師自通的Alpha Zero更是在表現上完全碾壓前者。不論你怎麼看,以深度學習為代表的人工智慧技術正在塑造未來。
下圖為英偉達(NVIDIA)公司近年來的股價情況, 該公司的主要產品是「圖形處理器」(GPU),而GPU被證明能大大加快神經網路的訓練速度,是深度學習必不可少的計算組件。英偉達公司近年來股價的飛漲足以證明當前深度學習的井噴之勢。
好,話不多說,下面簡要介紹神經網路的基本原理、發展脈絡和優勢。
神經網路是一種人類由於受到生物神經細胞結構啟發而研究出的一種演算法體系,是機器學習演算法大類中的一種。首先讓我們來看人腦神經元細胞:
一個神經元通常具有多個樹突 ,主要用來接受傳入信息,而軸突只有一條,軸突尾端有許多軸突末梢,可以給其他多個神經元傳遞信息。軸突末梢跟其他神經元的樹突產生連接,從而傳遞信號。
下圖是一個經典的神經網路(Artificial Neural Network,ANN):
乍一看跟傳統互聯網的拓撲圖有點類似,這也是稱其為網路的原因,不同的是節點之間通過有向線段連接,並且節點被分成三層。我們稱圖中的圓圈為神經元,左邊三個神經元組成的一列為輸入層,中間神經元列為隱藏層,右邊神經元列為輸出層,神經元之間的箭頭為權重。
神經元是計算單元,相當於神經元細胞的細胞核,利用輸入的數據進行計算,然後輸出,一般由一個線性計算部分和一個非線性計算部分組成;輸入層和輸出層實現數據的輸入輸出,相當於細胞的樹突和軸突末梢;隱藏層指既不是輸入也不是輸出的神經元層,一個神經網路可以有很多個隱藏層。
神經網路的關鍵不是圓圈代表的神經元,而是每條連接線對應的權重。每條連接線對應一個權重,也就是一個參數。權重具體的值需要通過神經網路的訓練才能獲得。我們實際生活中的學習體現在大腦中就是一系列神經網路迴路的建立與強化,多次重復的學習能讓迴路變得更加粗壯,使得信號的傳遞速度加快,最後對外表現為「深刻」的記憶。人工神經網路的訓練也借鑒於此,如果某種映射關系出現很多次,那麼在訓練過程中就相應調高其權重。
1943年,心理學家McCulloch和數學家Pitts參考了生物神經元的結構,發表了抽象的神經元模型MP:
符號化後的模型如下:
Sum函數計算各權重與輸入乘積的線性組合,是神經元中的線性計算部分,而sgn是取符號函數,當輸入大於0時,輸出1,反之輸出0,是神經元中的非線性部分。向量化後的公式為z=sgn(w^T a)(w^T=(w_1,w_2,w_3),a=〖(a_1,a_2,a_3)〗^T)。
但是,MP模型中,權重的值都是預先設置的,因此不能學習。該模型雖然簡單,並且作用有限,但已經建立了神經網路大廈的地基
1958年,計算科學家Rosenblatt提出了由兩層神經元組成(一個輸入層,一個輸出層)的神經網路。他給它起了一個名字–「感知器」(Perceptron)
感知器是當時首個可以學習的人工神經網路。Rosenblatt現場演示了其學習識別簡單圖像的過程,在當時引起了轟動,掀起了第一波神經網路的研究熱潮。
但感知器只能做簡單的線性分類任務。1969年,人工智慧領域的巨擘Minsky指出這點,並同時指出感知器對XOR(異或,即兩個輸入相同時輸出0,不同時輸出1)這樣的簡單邏輯都無法解決。所以,明斯基認為神經網路是沒有價值的。
隨後,神經網路的研究進入低谷,又稱 AI Winter 。
Minsky說過單層神經網路無法解決異或問題,但是當增加一個計算層以後,兩層神經網路不僅可以解決異或問題,而且具有非常好的非線性分類效果。
下圖為兩層神經網路(輸入層一般不算在內):
上圖中,輸出層的輸入是上一層的輸出。
向量化後的公式為:
注意:
每個神經元節點默認都有偏置變數b,加上偏置變數後的計算公式為:
同時,兩層神經網路不再使用sgn函數作為激勵函數,而採用平滑的sigmoid函數:
σ(z)=1/(1+e^(-z) )
其圖像如下:
理論證明: 兩層及以上的神經網路可以無限逼近真實的對應函數,從而模擬數據之間的真實關系 ,這是神經網路強大預測能力的根本。但兩層神經網路的計算量太大,當時的計算機的計算能力完全跟不上,直到1986年,Rumelhar和Hinton等人提出了反向傳播(Backpropagation,BP)演算法,解決了兩層神經網路所需要的復雜計算量問題,帶動了業界使用兩層神經網路研究的熱潮。
但好景不長,演算法的改進僅使得神經網路風光了幾年,然而計算能力不夠,局部最優解,調參等一系列問題一直困擾研究人員。90年代中期,由Vapnik等人發明的SVM(Support Vector Machines,支持向量機)演算法誕生,很快就在若干個方面體現出了對比神經網路的優勢:無需調參;高效;全局最優解。
由於以上原因,SVM迅速打敗了神經網路演算法成為主流。神經網路的研究再一次進入低谷, AI Winter again 。
多層神經網路一般指兩層或兩層以上的神經網路(不包括輸入層),更多情況下指兩層以上的神經網路。
2006年,Hinton提出使用 預訓練 」(pre-training)和「微調」(fine-tuning)技術能優化神經網路訓練,大幅度減少訓練多層神經網路的時間
並且,他給多層神經網路相關的學習方法賦予了一個新名詞–「 深度學習 」,以此為起點,「深度學習」紀元開始了:)
「深度學習」一方面指神經網路的比較「深」,也就是層數較多;另一方面也可以指神經網路能學到很多深層次的東西。研究發現,在權重參數不變的情況下,增加神經網路的層數,能增強神經網路的表達能力。
但深度學習究竟有多強大呢?沒人知道。2012年,Hinton與他的學生在ImageNet競賽中,用多層的卷積神經網路成功地對包含一千類別的一百萬張圖片進行了訓練,取得了分類錯誤率15%的好成績,這個成績比第二名高了近11個百分點,充分證明了多層神經網路識別效果的優越性。
同時,科研人員發現GPU的大規模並行矩陣運算模式完美地契合神經網路訓練的需要,在同等情況下,GPU的速度要比CPU快50-200倍,這使得神經網路的訓練時間大大減少,最終再一次掀起了神經網路研究的熱潮,並且一直持續到現在。
2016年基於深度學習的Alpha Go在圍棋比賽中以4:1的大比分優勢戰勝了李世石,深度學習的威力再一次震驚了世界。
神經網路的發展歷史曲折盪漾,既有被捧上神壇的高潮,也有無人問津的低谷,中間經歷了數次大起大落,我們姑且稱之為「三起三落」吧,其背後則是演算法的改進和計算能力的持續發展。
下圖展示了神經網路自發明以來的發展情況及一些重大時間節點。
當然,對於神經網路我們也要保持清醒的頭腦。由上圖,每次神經網路研究的興盛期持續10年左右,從最近2012年算起,或許10年後的2022年,神經網路的發展將再次遇到瓶頸。
神經網路作為機器學習的一種,其模型訓練的目的,就是使得參數盡可能的與真實的模型逼近。理論證明,兩層及以上的神經網路可以無限逼近真實的映射函數。因此,給定足夠的訓練數據和訓練時間,總能通過神經網路找到無限逼近真實關系的模型。
具體做法:首先給所有權重參數賦上隨機值,然後使用這些隨機生成的參數值,來預測訓練數據中的樣本。假設樣本的預測目標為yp ,真實目標為y,定義值loss,計算公式如下:
loss = (yp -y) ^2
這個值稱之為 損失 (loss),我們的目標就是使對所有訓練數據的損失和盡可能的小,這就轉化為求loss函數極值的問題。
一個常用方法是高等數學中的求導,但由於參數不止一個,求導後計算導數等於0的運算量很大,所以常用梯度下降演算法來解決這樣的優化問題。梯度是一個向量,由函數的各自變數的偏導數組成。
比如對二元函數 f =(x,y),則梯度∇f=(∂f/∂x,∂f/∂y)。梯度的方向是函數值上升最快的方向。梯度下降演算法每次計算參數在當前的梯度,然後讓參數向著梯度的反方向前進一段距離,不斷重復,直到梯度接近零時截止。一般這個時候,所有的參數恰好達到使損失函數達到一個最低值的狀態。下圖為梯度下降的大致運行過程:
在神經網路模型中,由於結構復雜,每次計算梯度的代價很大。因此還需要使用 反向傳播 (Back Propagation)演算法。反向傳播演算法利用了神經網路的結構進行計算,不一次計算所有參數的梯度,而是從後往前。首先計算輸出層的梯度,然後是第二個參數矩陣的梯度,接著是中間層的梯度,再然後是第一個參數矩陣的梯度,最後是輸入層的梯度。計算結束以後,所要的兩個參數矩陣的梯度就都有了。當然,梯度下降只是其中一個優化演算法,其他的還有牛頓法、RMSprop等。
確定loss函數的最小值後,我們就確定了整個神經網路的權重,完成神經網路的訓練。
在神經網路中一樣的參數數量,可以用更深的層次去表達。
由上圖,不算上偏置參數的話,共有三層神經元,33個權重參數。
由下圖,保持權重參數不變,但增加了兩層神經元。
在多層神經網路中,每一層的輸入是前一層的輸出,相當於在前一層的基礎上學習,更深層次的神經網路意味著更深入的表示特徵,以及更強的函數模擬能力。更深入的表示特徵可以這樣理解,隨著網路的層數增加,每一層對於前一層次的抽象表示更深入。
如上圖,第一個隱藏層學習到「邊緣」的特徵,第二個隱藏層學習到「邊緣」組成的「形狀」的特徵,第三個隱藏層學習到由「形狀」組成的「圖案」的特徵,最後的隱藏層學習到由「圖案」組成的「目標」的特徵。通過抽取更抽象的特徵來對事物進行區分,從而獲得更好的區分與分類能力。
前面提到, 明斯基認為Rosenblatt提出的感知器模型不能處理最簡單的「異或」(XOR)非線性問題,所以神經網路的研究沒有前途,但當增加一層神經元後,異或問題得到了很好地解決,原因何在?原來從輸入層到隱藏層,數據發生了空間變換,坐標系發生了改變,因為矩陣運算本質上就是一種空間變換。
如下圖,紅色和藍色的分界線是最終的分類結果,可以看到,該分界線是一條非常平滑的曲線。
但是,改變坐標系後,分界線卻表現為直線,如下圖:
同時,非線性激勵函數的引入使得神經網路對非線性問題的表達能力大大加強。
對於傳統的樸素貝葉斯、決策樹、支持向量機SVM等分類器,提取特徵是一個非常重要的前置工作。在正式訓練之前,需要花費大量的時間在數據的清洗上,這樣分類器才能清楚地知道數據的維度,要不然基於概率和空間距離的線性分類器是沒辦法進行工作的。然而在神經網路中,由於巨量的線性分類器的堆疊(並行和串列)以及卷積神經網路的使用,它對雜訊的忍耐能力、對多通道數據上投射出來的不同特徵偏向的敏感程度會自動重視或忽略,這樣我們在處理的時候,就不需要使用太多的技巧用於數據的清洗了。有趣的是,業內大佬常感嘆,「你可能知道SVM等機器學習的所有細節,但是效果並不好,而神經網路更像是一個黑盒,很難知道它究竟在做什麼,但工作效果卻很好」。
人類對機器學習的環節干預越少,就意味著距離人工智慧的方向越近。神經網路的這個特性非常有吸引力。
1) 谷歌的TensorFlow開發了一個非常有意思的神經網路 入門教程 ,用戶可以非常方便地在網頁上更改神經網路的參數,並且能看到實時的學習效率和結果,非常適合初學者掌握神經網路的基本概念及神經網路的原理。網頁截圖如下:
2) 深度學習領域大佬吳恩達不久前發布的《 神經網路和深度學習 》MOOC,現在可以在網易雲課堂上免費觀看了,並且還有中文字幕。
3) 《神經網路於深度學習》(Michael Nielsen著)、《白話深度學習與TensorFlow》也是不錯的入門書籍。
㈥ 吳恩達 卷積神經網路 CNN
應用計算機視覺時要面臨的一個挑戰是數據的輸入可能會非常大。例如一張 1000x1000x3 的圖片,神經網路輸入層的維度將高達三百萬,使得網路權重 W 非常龐大。這樣會造成兩個後果:
神經網路結構復雜,數據量相對較少,容易出現過擬合;
所需內存和計算量巨大。
因此,一般的神經網路很難處理蘊含著大量數據的圖像。解決這一問題的方法就是使用卷積神經網路
我們之前提到過,神經網路由淺層到深層,分別可以檢測出圖片的邊緣特徵、局部特徵(例如眼睛、鼻子等),到最後面的一層就可以根據前面檢測的特徵來識別整體面部輪廓。這些工作都是依託卷積神經網路來實現的。
卷積運算(Convolutional Operation)是卷積神經網路最基本的組成部分。我們以邊緣檢測為例,來解釋卷積是怎樣運算的。
圖片最常做的邊緣檢測有兩類:垂直邊緣(Vertical Edges)檢測和水平邊緣(Horizontal Edges)檢測。
比如檢測一張6x6像素的灰度圖片的vertical edge,設計一個3x3的矩陣(稱之為filter或kernel),讓原始圖片和filter矩陣做卷積運算(convolution),得到一個4x4的圖片。 具體的做法是,將filter矩陣貼到原始矩陣上(從左到右從上到下),依次可以貼出4x4種情況。 讓原始矩陣與filter重合的部分做element wise的乘積運算再求和 ,所得的值作為4x4矩陣對應元素的值。如下圖是第一個元素的計算方法,以此類推。
可以看到,卷積運算的求解過程是從左到右,由上到下,每次在原始圖片矩陣中取與濾波器同等大小的一部分,每一部分中的值與濾波器中的值對應相乘後求和,將結果組成一個矩陣。
下圖對應一個垂直邊緣檢測的例子:
如果將最右邊的矩陣當作圖像,那麼中間一段亮一些的區域對應最左邊的圖像中間的垂直邊緣。
下圖3x3濾波器,通常稱為垂直 索伯濾波器 (Sobel filter):
看看用它來處理知名的Lena照片會得到什麼:
現在可以解釋卷積操作的用處了:用輸出圖像中更亮的像素表示原始圖像中存在的邊緣。
你能看出為什麼邊緣檢測圖像可能比原始圖像更有用嗎?
回想一下MNIST手寫數字分類問題。在MNIST上訓練的CNN可以找到某個特定的數字。比如發現數字1,可以通過使用邊緣檢測發現圖像上兩個突出的垂直邊緣。
通常,卷積有助於我們找到特定的局部圖像特徵(如邊緣),用在後面的網路中。
假設輸入圖片的大小為 n×n,而濾波器的大小為 f×f,則卷積後的輸出圖片大小為 (n−f+1)×(n−f+1)。
這樣就有兩個問題:
為了解決這些問題,可以在進行卷積操作前,對原始圖片在邊界上進行填充(Padding),以增加矩陣的大小。通常將 0 作為填充值。
設每個方向擴展像素點數量為 p,則填充後原始圖片的大小為 (n+2p)×(n+2p),濾波器大小保持 f×f不變,則輸出圖片大小為 (n+2p−f+1)×(n+2p−f+1)。
因此,在進行卷積運算時,我們有兩種選擇:
在計算機視覺領域,f通常為奇數。原因包括 Same 卷積中 p=(f−1)/ 2 能得到自然數結果,並且濾波器有一個便於表示其所在位置的中心點。
卷積過程中,有時需要通過填充來避免信息損失,有時也需要通過設置 步長(Stride) 來壓縮一部分信息。
步長表示濾波器在原始圖片的水平方向和垂直方向上每次移動的距離。之前,步長被默認為 1。而如果我們設置步長為 2,則卷積過程如下圖所示:
設步長為 s,填充長度為p, 輸入圖片大小為n x n, 濾波器大小為f x f, 則卷積後圖片的尺寸為:
注意公式中有一個向下取整的符號,用於處理商不為整數的情況。向下取整反映著當取原始矩陣的圖示藍框完全包括在圖像內部時,才對它進行運算。
如果我們想要對三通道的 RGB 圖片進行卷積運算,那麼其對應的濾波器組也同樣是三通道的。過程是將每個單通道(R,G,B)與對應的濾波器進行卷積運算求和,然後再將三個通道的和相加,將 27 個乘積的和作為輸出圖片的一個像素值。
如果想同時檢測垂直和水平邊緣,或者更多的邊緣檢測,可以增加更多的濾波器組。例如設置第一個濾波器組實現垂直邊緣檢測,第二個濾波器組實現水平邊緣檢測。設輸入圖片的尺寸為 n×n×nc(nc為通道數),濾波器尺寸為 f×f×nc,則卷積後的輸出圖片尺寸為 (n−f+1)×(n−f+1)×n′c,n′c為濾波器組的個數。
與之前的卷積過程相比較,卷積神經網路的單層結構多了激活函數和偏移量;而與標准神經網路相比,濾波器的數值對應著權重 W[l],卷積運算對應著 W[l]與 A[l−1]的乘積運算,所選的激活函數變為 ReLU。
對於一個 3x3x3 的濾波器,包括偏移量 b(27+1)在內共有 28 個參數。不論輸入的圖片有多大,用這一個濾波器來提取特徵時,參數始終都是 28 個,固定不變。即選定濾波器組後,參數的數目與輸入圖片的尺寸無關。因此,卷積神經網路的參數相較於標准神經網路來說要少得多。這是 CNN 的優點之一。
圖像中的相鄰像素傾向於具有相似的值,因此通常卷積層相鄰的輸出像素也具有相似的值。這意味著,卷積層輸出中包含的大部分信息都是冗餘的。如果我們使用邊緣檢測濾波器並在某個位置找到強邊緣,那麼我們也可能會在距離這個像素1個偏移的位置找到相對較強的邊緣。但是它們都一樣是邊緣,我們並沒有找到任何新東西。池化層解決了這個問題。這個網路層所做的就是通過減小輸入的大小降低輸出值的數量。池化一般通過簡單的最大值、最小值或平均值操作完成。以下是池大小為2的最大池層的示例:
在計算神經網路的層數時,通常只統計具有權重和參數的層,因此池化層通常和之前的卷積層共同計為一層。
圖中的 FC3 和 FC4 為全連接層,與標準的神經網路結構一致。
個人推薦 一個直觀感受卷積神經網路的網站 。
相比標准神經網路,對於大量的輸入數據,卷積過程有效地減少了 CNN 的參數數量,原因有以下兩點:
-參數共享(Parameter sharing):特徵檢測如果適用於圖片的某個區域,那麼它也可能適用於圖片的其他區域。即在卷積過程中,不管輸入有多大,一個特徵探測器(濾波器)就能對整個輸入的某一特徵進行探測。
-稀疏連接(Sparsity of connections):在每一層中,由於濾波器的尺寸限制,輸入和輸出之間的連接是稀疏的,每個輸出值只取決於輸入在局部的一小部分值。
池化過程則在卷積後很好地聚合了特徵,通過降維來減少運算量。
由於 CNN 參數數量較小,所需的訓練樣本就相對較少,因此在一定程度上不容易發生過擬合現象。並且 CNN 比較擅長捕捉區域位置偏移。即進行物體檢測時,不太受物體在圖片中位置的影響,增加檢測的准確性和系統的健壯性。
在神經網路可以收斂的前提下,隨著網路深度增加,網路的表現先是逐漸增加至飽和,然後迅速下降
需要注意,網路退化問題不是過擬合導致的,即便在模型訓練過程中,同樣的訓練輪次下,退化的網路也比稍淺層的網路的訓練錯誤更高,如下圖所示。
這一點並不符合常理:如果存在某個 K層網路是當前F的最優的網路,我們構造更深的網路。那麼K之後的層數可以擬合成恆等映射,就可以取得和F一直的結果。如果K不是最佳層數,那麼我們比K深,可以訓練出的一定會不差於K的。總而言之,與淺層網路相比,更深的網路的表現不應該更差。因此,一個合理的猜測就是, 對神經網路來說,恆等映射並不容易擬合。
也許我們可以對網路單元進行一定的改造,來改善退化問題?這也就引出了殘差網路的基本思路
既然神經網路不容易擬合一個恆等映射,那麼一種思路就是構造天然的恆等映射。
實驗表明,殘差網路 很好地解決了深度神經網路的退化問題 ,並在ImageNet和CIFAR-10等圖像任務上取得了非常好的結果,同等層數的前提下殘差網路也 收斂得更快 。這使得前饋神經網路可以採用更深的設計。除此之外, 去除個別神經網路層,殘差網路的表現不會受到顯著影響 ,這與傳統的前饋神經網路大相徑庭。
2018年的一篇論文,The Shattered Gradients Problem: If resnets are the answer, then what is the question,指出了一個新的觀點,盡管殘差網路提出是為了解決梯度彌散和網路退化的問題, 它解決的實際上是梯度破碎問題
作者通過可視化的小型實驗(構建和訓練一個神經網路發現,在淺層神經網路中,梯度呈現為棕色雜訊(brown noise),深層神經網路的梯度呈現為白雜訊。在標准前饋神經網路中,隨著深度增加, 神經元梯度的相關性(corelation)按指數級減少 (1 / 2^L) ;同時, 梯度的空間結構也隨著深度增加被逐漸消除 。這也就是梯度破碎現象。
梯度破碎為什麼是一個問題呢?這是因為許多優化方法假設梯度在相鄰點上是相似的,破碎的梯度會大大減小這類優化方法的有效性。另外,如果梯度表現得像白雜訊,那麼某個神經元對網路輸出的影響將會很不穩定。
相較標准前饋網路, 殘差網路中梯度相關性減少的速度從指數級下降到亞線性級 ) (1 / sqrt(L)) ,深度殘差網路中,神經元梯度介於棕色雜訊與白雜訊之間(參見上圖中的c,d,e);殘差連接可以 極大地保留梯度的空間結構 。殘差結構緩解了梯度破碎問題。
1x1 卷積指濾波器的尺寸為 1。當通道數為 1 時,1x1 卷積意味著卷積操作等同於乘積操作。
而當通道數更多時,1x1 卷積的作用實際上類似全連接層的神經網路結構,從而降低(或升高,取決於濾波器組數)數據的維度。
池化能壓縮數據的高度(nH)及寬度(nW),而 1×1 卷積能壓縮數據的通道數(nC)。在如下圖所示的例子中,用 filters個大小為 1×1×32 的濾波器進行卷積,就能使原先數據包含的 32個通道壓縮為 filters 個。
在這之前,網路大都是這樣子的:
也就是卷積層和池化層的順序連接。這樣的話,要想提高精度,增加網路深度和寬度是一個有效途徑,但也面臨著參數量過多、過擬合等問題。(當然,改改超參數也可以提高性能)
有沒有可能在同一層就可以提取不同(稀疏或不稀疏)的特徵呢(使用不同尺寸的卷積核)?於是,2014年,在其他人都還在一味的增加網路深度時(比如vgg),GoogleNet就率先提出了卷積核的並行合並(也稱Bottleneck Layer),如下圖。
和卷積層、池化層順序連接的結構(如VGG網路)相比,這樣的結構主要有以下改進:
按照這樣的結構來增加網路的深度,雖然可以提升性能,但是還面臨計算量大(參數多)的問題。為改善這種現象,GooLeNet借鑒Network-in-Network的思想,使用1x1的卷積核實現降維操作(也間接增加了網路的深度),以此來減小網路的參數量(這里就不對兩種結構的參數量進行定量比較了),如圖所示。
最後實現的inception v1網路是上圖結構的順序連接
由於卷積這門課的其他內容和計算機視覺關系比較密切。對我理解推薦系統幫助不大。所以這個系列就到這里。吳恩達的課還是很好的,作業和課和測驗我都認真做啦。
㈦ 神經網路為什麼計算量大
因為神經網路比如BP演算法,是用梯度下降的方法來找到誤差最小點,胡棗瞎需要經岩鬧過幾千,幾萬,甚至更多,才能達到收斂。所以訓練褲空時間非常長。
㈧ 深度卷積網路
LeNet網路的結構如下圖所示,可以看出,LeNet網路並沒有使用padding,每進行一次卷積,圖像的高度和寬度都會縮小,而通道數會一直增加。在全連接層中有400個節點,每個極點都有120個神經元,有時還會從這400個節點抽取一部分節點構建一個全連接層,即有兩個全連接層。在該網路中,最後一步就是利用84個特徵得到最後的輸出,該網路剛開始使用的是 sigmoid 函數 tanh 函數,而現在常常傾向於使用 softmax 函數。需要注意的是,LeNet-5網路進行圖像分類時,輸入的圖像是單通道的灰度圖像。
AlexNet是以論文第一作者的名字命名的,該網路的結構,如下圖所示,該網路的輸出層使用了 softmax 函數。AlexNet網路比LeNet網路規模更大,大約有6000萬個參數,用於訓練圖像和數據集時,能夠處理非常相似的基本構造模塊,這些模塊中包含著大量的隱藏單元,並且與LeNet網路不同的是,該網路使用了ReLu的激活函數。
VGG-16網路沒有太多的超參數,這是一種專注於構建卷積層的簡單網路。如下圖所示,該網路首先利用64個過濾器進行了兩次卷積,接著在池化層將輸入圖像壓縮,接著又是128個過濾器進行兩次卷積,接著載池化。繼續用256個過濾器進行3次卷積,再池化,接著再利用512個過濾器卷積3次,再池化,將稍後得到的特徵圖進行全連接操作,再進 softmax 激活。
由於存在梯度消失和梯度爆炸的原因,深層次的神經網路是很難訓練的,如果採用一種跳躍連接的方式,即從某一層網路層獲取激活,然後迅速反饋給另外一層,甚至是神經網路的更深層。這種利用跳躍連接構建的深度神經網路ResNets,深度能夠超過100層
一個簡單的兩層神經網路示例,如下圖所示:
常規的輸出和輸出之間的關系可以用如下的公式表示:
如上公式所述,這是一條神經網路的主路徑。如果將 的輸入直接到深層的激活函數之前,此時,神經網路有了一條副路徑,其對應輸出將有公式(5)變成如下所示的公式(6)
此時的輸入除了原先的輸入 外,多了一個 項,即由於 產生了一個殘差塊。
構建一個ResNet網路就是將很多這樣的殘差塊堆積在一起,形成一個深度神經網路,如下所示:
使用傳統的標准優化演算法訓練一個網路,隨著網路深度的增加,訓練誤差會先減小再增加,隨著網路層數的增加,優化演算法會越難以訓練,訓練誤差也會越來越多。但是,使用ResNet網路,能夠有效地避免這種情況。
如上所述,加入殘差網路之後,其輸出計算公式如公式(6)所示,展開這個公式,則有:
如果使用L2正則化或者權重衰減,則會壓縮權重參數 的值,如果參數 和參數 等於0,其輸出將由公式(7)變成 ,假定使用ReLU激活函數,則有:
由於殘差網路存在的這種跳躍連接,很容易得出以上等式,這意味著,即使給神經網路增加兩層,但是其效率並不遜色與更簡單的神經網路。並且由於存在以上恆等式,使得網路學習隱藏層的單元的信息更加容易。而普通網路,隨著網路層數的增加,學習參數會變得很困難。
此外,關於殘差網路,如公式(6)所示,假設 與 具有相同的維度,由於ResNets使用了許多same卷積, 的維度等於輸出層的維度。如果輸入和輸出具有不同的維度,可以再增加一個矩陣 ,使得 和 具有相同的維度。而 的維度可以通過0值填充調節。
在卷積網路的架構設計中,一種有趣的想法是會使用到1×1的過濾矩陣,實際上,對於單通道的圖像而言,1×1的過濾矩陣,意義不大,但是,對於多通道的圖像而言,1×1的過濾矩陣能夠有效減少圖像卷積之後的通道數量。
根據卷積和池化的基本知識,隨著神經網路層數的增加,圖像的通道數量會逐漸增加,採用1×1的過濾矩陣卷積之後,可以有效減少圖像的通道數量,一個簡單的示例,如下所示:
假設有一個6×6×32的圖片,使用1×1×32的過濾矩陣進行卷積運算,整個運算過程將會遍歷36個單元格,並計算過濾矩陣所覆蓋區域的元素積之和,將其應用到ReLu非線性函數,會得到一個輸出值。此計算過程中,可能會用到多個1×1×32的過濾器,那麼,通過以上計算會得到一個 6×6×過濾器數量 的矩陣。
構建卷積神經網路時,有時會很難決定過濾器的大小,而Inception網路的引入,卻能很好的解決這個問題。
Inception網路的作用就是代替人工確定選擇卷積層的過濾器類型。如下圖所示,對於一個多通道圖像,可以使用不同的過濾矩陣或者池化層,得到不同的輸出,將這些輸出堆積起來。
有了如上圖所示的Inception塊,最終輸出為32+32+64+128=256,而Inception模塊的輸入為28×28×192,其整個計算成本,以5×5的過濾矩陣為例,其乘法的計算次數為:28×28×32×5×5×192,整個計算次數超過了1.2億次。而如果使用如下所示的優化計算方法,則可以有效減少計算量。
如果利用1×1的過濾器,將輸入矩陣的通道減少至16,則可以有效減少計算量,如下所示:
如上圖所示的價格中,整個網路的運算次數為:28×28×192×16+28×28×32×5×5×16=1240萬,整個計算成本降低至原來的十分之一。而,通過1×1×192過濾器卷積得到的這個網路層被稱之為瓶頸層。
如上,所示,可以給每一個非1×1的卷積層之前,加入一個1×1的瓶頸層,就可以構建一個基本的inception模塊了,如下圖所示:
而一個inception網路就是多個Inception模塊連接起來,如下圖所示:
事實上,以上網路中,還存在一些分支,如編號1所示,這些分支就是全連接層,而全連接層之後就是一個softmax層用於預測。又如分支2所示,包含一些隱藏層(編號3),通過全連接層和softmax進行預測。這些分支結構能夠確保,即使是隱藏層和中間層也參與了特徵計算,並且也能夠預測圖片的分類。這種做法能夠有效避免網路過擬合。
對於計算機視覺領域而言,神經網路的訓練可能需要大量的數據,但是當數據量有限時,可以通過數據增強來實現數據量的擴充,以提高系統的魯棒性,具體的數據增強方法如下所示:
除了以上三種數據增強的方法外,更多的數據增強方法和實現可以參考 圖像數據增強
數據增強可以利用計算機多線程實現,一個線程用來實現載入數據,實現數據增強,其他線程可以訓練這些數據以加快整體的運算速度。
㈨ 超詳細解讀Faster R-CNN-FPN
2021年了,竟然還有人寫關於Faster R-CNN的文章?我的原因主要有兩點:
我們先從全局上了解Faster R-CNN-FPN,然後再關注其中涉及的細節。下面是Faster R-CNN-FPN的網路框架圖(或稱為tensor流動圖)。
眾所周知,Faster R-CNN-FPN(主要是Faster R-CNN)是個兩階段的對象檢測方法,主要由兩部分網路組成,RPN和Fast R-CNN。
RPN的作用是以bouding box(後簡稱為box)的方式預測出圖片中對象可能的位置,並過濾掉圖片中絕大部分的背景區域,目標是達到盡量召回圖像中感興趣唯帆的對象,預測box盡量能夠與實際對象的box貼合,並且保證一定的預測精度(Precision)。另外,RPN並不需要指出預測的box中對象具體的類別,RPN預測的box稱為RoI(Region of Interest),由於是以box的方式輸出,所以後面我們統一將其稱為proposal box。
Fast R-CNN則是在FPN預測的proposal box基礎上進一步預測box中對象具體的類別,並對proposal box進行微調,使得最終預測的box盡量貼合目標對象。大致的做法是根據RPN預測的proposal box,從原圖backbone的feature map上通過RoIPooling或RoIAlign(Faster R-CNN-FPN使用RoIAlign)提取每個proposal box對應區域的feature map,在這些區域feature map上進一步預測box的類別和相對proposal box的偏移量(微調)。另外,RPN和Fast R-CNN共用同一個backbone網路提取圖像的feature map,大大減少了推理耗時。
從上面的介紹可以看出,RPN和Fast R-CNN的配合作用其實可以理解為一種注意力機制,先大致確定迅山兄目標在視野中的位置,然後再鎖定目標仔細觀察,確定目標的類別和更加精確的位置,簡單來說就是look twice,相比單階段的look once,當然是比較耗時的,但也換來了更好的效果(雖然很多單階段方法號稱已經獲得相當或好於兩階段的效果)。
下面以Faster R-CNN-FPN發展順序的匯總介紹每個改進的核心思想。
在R-CNN中,CNN只被用來作為特徵抽取,後接SVM和線性回歸模型分別用於分類和box修正回歸。在此基礎上,Fast R-CNN直接對原輸入圖進行特徵抽取,然後在整張圖片的特徵圖上分別對每個RoI使用RoIPooling提取(後面會介紹RoIPooling的原理)特定長度的特徵向量(論文中空降尺寸為7*7),去掉SVM和線性回歸模型,在特徵向量上直接使用若干FC層畝襲進行回歸,然後分別使用兩個FC分支預測RoI相關的類別和box,從而顯著提升速度和預測效果。 整體框架圖如下:
在Fast RCNN的基礎上進一步優化,用CNN網路代替Fast R-CNN中的region proposal模塊(使用傳統Selective Search方法),從而實現了全神經網路的檢測方法,在召回和速度上都超過了傳統的Selective Search。作者將提供proposal region的網路稱為RPN(Region Proposal Network),與檢測網路Fast RCNN共享同一backbone,大大縮減了推理速度。
RPN在backbone產生的feature map(圖中的conv feature map)之上執行 的滑窗操作,每個滑窗范圍內的feature map會被映射為多個proposal box(圖中的reg layer分支)以及每個box對應是否存在對象的類別信息(圖中的cls layer分支)。由於CNN天然就是滑窗操作,所以RPN使用CNN作為窗口內特徵的提取器(對應圖中的intermediate layer,後面簡稱為「新增CNN層」),窗口大小 ,將feature map映射為較低維的feature map以節省計算量(論文中為256)。雖然只使用了 的卷積,但是在原圖上的有效的感受野還是很大的,感受野大小不等於網路的降采樣率,對於VGG網路,降采樣率為16,但是感受野為228像素。類似於Fast-RCNN,為了分別得到box和box對應的類別(此處類別只是表示有沒有目標,不識別具體類別),CNN操作之後會分為兩個子網路,它們的輸入都是新增CNN層輸出的feature map,一個子網路負責box回歸,一個負責類別回歸。由於新增CNN層產生的feature map的每個空間位置的特徵(包括通道方向,shape為 )都被用來預測映射前窗口對應位置是否存在對象(類別)和對象的box,那麼使用 的CNN進行計算正合適(等效於FC層),這便是RPN的做法。綜上所述,所有滑窗位置共享一個新增CNN層和後續的分類和box回歸分支網路。下圖是RPN在一個窗口位置上執行計算的原理示意。
由於滑窗操作是通過正方形的CNN卷積實現的,為了訓練網路適應不同長寬比和尺寸的對象,RPN引入了anchor box的概念。每個滑窗位置會預置k個anchor box,每個anchor box的位置便是滑窗的中心點,k個anchor box的長寬比和尺寸不同,作者使用了9種,分別是長寬比為 、 和 ,尺寸為 , 和 的9種不同組合。分類分支和box回歸分支會將新增CNN層輸出的feature map的每個空間位置的tensor(shape為 )映射為k個box和與之對應的類別,假設每個位置的anchor box數量為k(如前所述, ),則分類分支輸出的特徵向量為2k(兩個類別),box回歸分支輸出為4k(4為box信息,box中心點x坐標、box中心點y坐標、box寬w和box高h)。box分支預測的位置(x,y,w,h)都是相對anchor box的偏移量。從功能上來看,anchor box的作用有點類似於提供給Fast RCNN的propsal box的作用,也表示目標可能出現的位置box,但是anchor box是均勻采樣的,而proposal box是通過特徵抽取(或包含訓練)回歸得到的。由此可以看出,anchor box與預測的box是一一對應的。從後文將會了解到,通過anchor box與gt box的IoU的關系,可以確定每個預測box的正負樣本類別。通過監督的方式讓特定的box負責特定位置、特定尺寸和特定長寬比的對象,模型就學會了擬合不同尺寸和大小的對象。另外,由於預測的box是相對anchor box的偏移量,而anchor box是均勻分布在feature map上的,只有距離和尺寸與gt box接近(IoU較大)的anchor box對應的預測box才會與gt box計算損失,這大大簡化了訓練,不然會有大量的預測box與gt box計算損失,尤其是在訓練初始階段,當一切都是瞎猜的時候。
在Faster RCNN基礎上,將backbone替換為ResNet50或ResNet101,涉及部分細節的改動,我們放在本文的細節部分進行描述。
在Faster RCNN-ResNet基礎上,引入FPN(特徵金字塔網路)模塊,利用CNN網路天然的特徵金字塔特點,模擬圖像金字塔功能,使得RPN和Fast RCNN可以在多個尺度級別(scale level)的feature map上分別預測不同尺寸的對象,大大提高了Faster RCNN的檢測能力。相比圖像金字塔大大節省了推理時間。原理如下圖所示:
從上圖中可以看出,FPN並不是簡單地使用backbone的多個CNN層輸出的feature map進行box回歸和分類,而是將不同層的feature map進行了top-down和lateral connection形式的融合後使用。這樣便將CNN網路前向傳播(bottom-up)產生的深層語義低解析度特徵與淺層的淺語義高解析度的特徵進行融合,從而彌補低層特徵語義抽象不足的問題,類似增加上下文信息。其中,top-down過程只是簡單地使用最近鄰插值將低解析度的feature map上采樣到即將與之融合的下層feature map相同的尺寸(尺寸上采樣到2倍),lateral connection則是先將低層的feature map使用 的卷積縮放為即將與之融合的上層feature map相同的通道數(減少計算量),然後執行像素級相加。融合後的feature map不僅會用於預測,還會繼續沿著top-down方向向下傳播用於下層的特徵融合,直到最後一層。
mask R-CNN提出的RoI Align緩解了RoIPooling的缺陷,能夠顯著提升小目標物體的檢測能力。網上介紹RoIPooling和RoIAlign的文章很多,此處不再贅述,推薦閱讀個人覺得比較好的兩篇博客: RoIPooling 和 RoIAlign 。
此處稍微啰嗦下個人對RoIPooling的思考: 為什麼RoIPooling不使用自適應的池化操作,即根據輸入的feature map的尺寸和希望輸出的feature map尺寸,自動調整池化窗口的大小和步長以計算想要尺寸的feature map,類似於自適應池化操作,而不是將輸入的feature map劃分成均勻的小區域(bins,論文中劃分為 個bins),然後每個小區域中分別計算MaxPooling。不管計算上是否高效,至少這種做法在輸入的feature map尺寸(比如 )小於期望的輸出feature map尺寸(比如 )時會失效,因為在3*3的feature map上如果不使用padding的話是無法得到 的特徵的,而使用padding又是很低效的操作,因為要擴展局部feature map的尺寸,而使用劃分bins的方法,即使輸出的feature map尺寸遠小於要輸出的feature map尺寸,也僅僅是在同一位置采樣多次而已。
本人之前介紹YOLOv3的 文章 也介紹過anchor box的作用,再加上本文1.1.2節中的介紹應該比較全面了,不再贅述。
此處的絕大部分細節來自論文,論文中未提及的部分,主要參考了mmdetection中的 實現 。
整個模型的網路結構可以劃分為四個部分,分別為backbone、FPN、RPN head和Fast RCNN head。
1.backbone: 原圖短邊被resize到800像素,這里值得注意的是,如此resize後一個batch內的每張圖片的大小很有可能並不一致,所以還無法合並為一個輸入矩陣,普遍的做法是將batch內的每張圖片的左上角對齊,然後計算resize後batch內所有圖片的最大寬和高,最後按照最大寬或高分別對每張圖片的寬或高進行0值padding;輸出為4個不同尺寸的feature map(C2、C3、C4、C5)。
2.FPN: ResNet backbone產生的4個不同尺寸的feature map(C2、C3、C4、C5)作為輸入,輸出5個不同尺寸的feature map(P2、P3、P4、P5、P6),P6是對P5進行2倍降采樣得到,每個feature map的通道數為固定的256;使用P6的原因是為了預測更大尺寸的對象。
3.RPN:輸入為FPN產生的feature map(P2、P3、P4、P5、P6);由於RPN是在5個輸入feature map上進行獨立的預測,則每個feature map都會輸出 proposal box,因此不可能將所有的proposal box都提供給Fast R-CNN,這里的做法是對每個feature map上產生的proposal box按類別概率進行排序(每個feature map上的proposal box獨立進行),然後選擇前k個proposal box, 5個feature map一共會 產生 個proposal box,訓練時 ,推理時 。最後,將所有的 個proposal box合並後統一進行NMS(IoU threshold=0.7)去掉冗餘的box,最後選擇前m個輸出給Fast R-CNN,訓練和測試時m都取1000。
訓練時將gt box通過下面的公式轉換為相對anchor box的偏移值,與網路的預測計算loss,至於將每個gt與具體的哪個anchor box計算偏移,則需要根據2.3.1節中的正負樣本方法來確定。測試時將預測的box通過該公式中的逆運算計算出當前box相對原圖的位置和大小, , , , 指相對全圖的box中心點坐標以及寬和高, , , , 指每個anchor相對全圖的box中心點坐標以及寬和高。由此可以看出,box回歸分支直接預測的便是相對anchor的偏移值,即公式中的 、 、 和 。
以上提到的2000和1000是作為Fast R-CNN的輸入proposal box,在訓練時參與RPN loss計算的anchor boxs數量為256個,正負樣本數量為 ,正樣本不足128的用負樣本補足。這里的256是從所有feature map中的anchor box中選擇的,並非每個feature map都獨立取得256個正負樣本。這也是合理的,因為每個gt box由於尺寸的原因,幾乎不可能與所有feature map上的anchor box的IoU都大於一定的閾值(原因參考2.3.1節)。注意選擇前並未進行NMS處理,而是直接根據2.3.1節中確定正負樣本的方式確定每個預測box正負類別,然後分別在正樣本中隨機選擇128個正樣本,在負樣本中隨機選擇128個負樣本。
4.Fast R-CNN:輸入為FPN產生的前4個feature map和RPN輸出的proposal box,4個feature map為P2、P3、P4、P5,與backbone對應,不使用P6。那麼,如何確定在哪個feature map上執行每個proposal box對應的RoIAlign操作並得到 大大小的feature map呢?論文中的做法是通過下面的公式將特定尺寸的proposal box與FPN產生的4個feature map中尺寸最適合的對應起來,即讓感受野更接近對象尺寸的feature map預測該對象 ,其中224為backbone在ImageNet上預訓練的尺寸,w和h為proposal box的長和寬,k表示適合尺寸為w和h的propsal box的feature map的位置,即4個feature map為P2、P3、P4、P5的下標,k_0為proposal box大致為224*224時對應feature map位置值( ),表示proposal box大致為 時在P4上執行RoIAlign,小於 時,在P2或P3上執行,大於則在P5上。
網路都會針對每個RoI會輸出一個類別概率分布(包括背景類別)和一個相對RoI box的長度為4的box偏移向量。概率分支由softmax激活函數得到。與RPN的類似,訓練時,如2.4.2節loss計算中所述,會將gt box通過下面的公式轉換為相對proposal box(前提是該RoI是正樣本)的偏移量,然後使用loss計算公式直接與預測的相對偏移量進行loss計算;測試時,會通過下列公式的逆運算將偏移值換算回相對原圖的位置box,然後使用NMS去掉冗餘的box,最終輸出。
訓練時,通過2.3.2中的方式確定每個proposal box屬於正樣本或負樣本後,隨機選擇512個樣本,其中正負比例為1:3進行loss計算,正樣本不足的由負樣本補足。
在RPN中,由於每個feature map的每個滑窗位置上的張量( 維張量,C為feature map的通道數)會被用來預測k個box和每個box對應的類別概率,那麼具體哪個box才能參與gt box的損失計算(包括類別和box回歸損失)?這便需要在所有預測的box中確定正負樣本,因為一個anchor對應一個預測的box和類別,那麼確定預測的box是正例還是負例等價於確定anchor box的是正例還是反例。為了便於訓練,RPN中使用雙IoU閾值的方式確定正負樣本,與gt box的IoU為最大或者大於0.7的anchor box被設置為正樣本,這會導致一個gt box與多個預測box計算損失,即允許多個box預測同一對象,與gt box的IoU小於0.3的anchor box被設置為負樣本,其餘的忽略掉,即不參與loss計算。在此基礎上,如2.2節中所述,會對正負樣本進行隨機采樣,總數為256,其他不參與損失函數計算。
與gt box的IoU大於0.5的proposal box作為正樣本,注意,是將proposal box與gt box計算IoU,Fast-RCNN中的proposal box的作用與anchor box有些類似,即確定正負樣本和預測的box 都是針對它們的偏移值 ,其餘IoU在 之間的作為負樣本,低於0.1的作為難例挖掘時的啟發式樣本(mmdetection中的做法是單閾值方式,與gt box的IoU大於0.5的proposal box作為正樣本,小於的都是負樣本)。
Faster R-CNN中是以分步的方式聯合訓練RPN和Fast R-CNN,大致的過程為:
但在mmdetection中,已經將RPN和Fast R-CNN的loss進行權重加和,從而進行聯合訓練,訓練流程簡化很多,且能夠達到相同的效果。
確定了每個預測box或anchor box的正負類別後,便可以計算損失函數了,類似於Fast RCNN的做法,只有正樣本的box才會參與box損失計算,損失函數如下:
為類別損失為類別損失函數,使用交叉熵損失, 為box回歸損失,使用smooth L1損失,論文中平衡因子lambda為10。 表示第i個anchor box對應的gt 類別(背景為0,對象為1), 為gt box相對anchor box的偏移量(如果該anchor box被確定為正樣本),通過下面的公式計算得到, 即表示只有 ,即為正樣本時才會計算box的損失。
Fast R-CNN的loss類似於RPN,只有proposal box為非背景類別(正樣本)時才計算box損失, 為類別損失, 為box損失, 表示proposal box的 , 時表示背景(通過2.3.2的方式確定proposal box的類別)。 為平衡因子,作者所有實驗中 。為了防止box回歸的L2 loss放大雜訊(異常loss)從而影響訓練,作者將L2 loss修改為 loss,當box尺寸的差異較大時使用L1 loss,抑制異常值對梯度的貢獻。
其中v是通過下面的公式將gt box( , , , )轉換得到,其中,( , , , )為proposal box的在原圖中的中心點坐標和寬與高。
在Faster R-CNN和Faster R-CNN-ResNet中,由於RPN只是在單尺寸的feature map上進行滑窗,為了緩解多尺寸的問題,每個滑窗位置會設計多個尺寸的anchor,但是在Faster R-CNN-FPN中使用了FPN,則天然就具有了適應對象多尺寸的問題,因此不用再為每個滑窗設計多個尺寸的anchor。即在Faster RCNN-FPN中,為每種尺寸feature map上的滑窗只設計了單一尺寸多種長寬比的anchor,長寬比有 、 和 ,不同feature map上anchor的尺寸為: , , , 和 ,依次對應P2、P3、P4、P5和P6。
COCO上的訓練細節:RPN的weight decay為0.0001,SGD的 ,初始學習率為0.002,學習率調整使用step decay方式。
㈩ 卷積神經網路模型參數量和運算量計算方法
本文是對卷積神經網路模型參數量和浮點運算量的計算推導公式和方法,使用API自動計算這些數據請移步另一篇博客: 自動計算模型參數量、FLOPs、乘加數以及所需內存等數據
其中 表示輸出通道數, 表示輸入通道數, 表示卷積核寬, 表示卷積核高。
括弧內的 表示一個卷積核的權重數量,+1表示bias,括弧表示一個卷積核的參數量, 表示該層有 個卷積核。
若卷積核是方形的,即 ,則上式變為:
需要注意的是握雀,使用Batch Normalization時不需要bias,此時計算式中的+1項去除。
FLOPs是英文floating point operations的縮寫,表示 浮點運算量 ,中括弧內的值表示卷積操作計算出feature map中一個點所需要的運算量(乘法和加法), 表示一次卷積操作中核御的乘法運算量, 表示一次卷積操作中的加法運算量,+ 1 表示bias,W和H分別表示feature map的長和寬, 表示feature map的所有元素數。
若是方形卷積核,即 ,則有:
上面是乘運算和加運算的總和,將一次乘改皮岩運算或加運算都視作一次浮點運算。
在計算機視覺論文中,常常將一個『乘-加』組合視為一次浮點運算,英文表述為'Multi-Add',運算量正好是上面的演算法減半,此時的運算量為:
值得注意的是,最初由feature map flatten而來的向量視為第一層全連接層,即此處的 。
可以這樣理解上式:每一個輸出神經元連接著所有輸入神經元,所以有 個權重,每個輸出神經元還要加一個bias。
也可以這樣理解:每一層神經元(O這一層)的權重數為 ,bias數量為O。
其中
中括弧的值表示計算出一個神經元所需的運算量,第一個 表示乘法運算量, 表示加法運算量,+1表示bias, 表示計算O個神經元的值。
分組卷積和深度分離卷積的情況待更……