神經網路是在傳統多項式迴歸的基礎上,受到了生物神經網路”啟用“現象的啟發,引入了啟用函數而構建起來的機器學習模型。
在影像處理領域,由於映像的資料量非常大,伴隨著產生的問題是網路參數量非常大,而卷積神經網路引入卷積核巧妙地最佳化了這個問題。卷積核對映像進行局部掃描,提取其中的特徵。對於小卷積核無法擷取全域特徵的問題,通過增加網路層數,前面多層小卷積核的感受野逐漸疊加後,後面小卷積核的感受野也會逐漸擴大。而且隨著網路層數的增加,每次完成卷積後都會引入ReLU啟用函數,對模型引入了更多的非線性,增強了網路的擬合能力。 卷積
關於卷積的含義,有很多種解釋。知乎上最經典的解釋: 降維打擊
卷積就是把二元函數 U(x,y) = f(x)g(y) 捲成一元函數 V(t) 嘛,俗稱降維打擊。
image.png 1)怎麼卷。
考慮到函數 f 和 g 應該地位平等,或者說變數 x 和 y 應該地位平等,一種可取的辦法就是沿直線 x+y = t 捲起來: 2)卷了有什麼用。
可以用來做多位元乘法呀,比如:
image.png
注意第二個等號右邊每個括弧裡的係數構成的序列 (14,34,14,4),實際上就是序列 (2,4) 和 (7,3,1) 的卷積。
這裡的“乘法轉加法”的運算還可以有更加直觀的一個解釋:
image.png
左圖序列保持不動,右圖序列順序反轉然後開始旋轉,每旋轉一次兩序列重合位置相乘求和,得到迴圈卷積序列。拿剛才的卷積為例,
image.png
(不知道為什麼此處想到了機械計算機,不知道會不會是類似的原理。) 訊號卷積的通俗理解
有了剛才的認識,就可以從非時變系統的角度去理解卷積,以離散訊號為例,連續訊號同理。
已知x[0]=a, x[1]=b, x[2]=c
image.png
已知y[0]=i, y[1]=j, y[2]=k
image.png
下面通過示範求x[n]*y[n]的過程,揭示卷積的物理意義。
第一步,x[n]乘以y[0]並平移到位置0:
image.png
第二步,x[n]乘以y[1]並平移到位置1:
image.png
第三步,x[n]乘以y[2]並平移到位置2:
image.png
最後,把上面三個圖疊加,就得到了:
image.png
從這裡可以看到卷積的重要的物理意義是:一個函數(如:單位響應)在另一個函數(如:輸入訊號)上的加權疊加。
對於線性時不變系統,如果知道該系統的單位響應,那麼將單位響應和輸入訊號求卷積,就相當於把輸入訊號的各個時間點的單位響應$$加權疊加$$,就直接得到了輸出訊號。通俗的說:
在輸入訊號的每個位置,疊加一個單位響應,就得到了輸出訊號。
這也正是單位響應是如此重要的原因。 卷積神經網路
用在Image Recognition領域,卷積神經網路中的卷積核(濾鏡)要實現的就是,將映像中的特徵提取出來。
具體怎麼提取。以貓為例,顯著特徵是圓眼睛三角耳朵尖下巴,但是總體來說狐狸也長這個樣子,只是耳朵更大,下巴更尖而已。這些細小的區別很難描述。 卷積核的引入
Image Recognition首先要解決的問題是:特徵是什麼。第二要解決的問題是:參數規模可控。
由於映像可以看住是資料矩陣,輸入傳統的神經網路後,將網路的輸出和標籤求交叉熵,代入sigmoid函數,或者求對數放入softmax函數,就可以得到映像屬於某個類別的機率。然後用梯度下降方法訓練網路參數即可。
但是根據映像矩陣的資料分布特點,對於一張1000*1000的圖片而言,如果用傳統的神經網路,以隱層節點為10^6為例,參數的資料量為10^3×10^3×10^6=10^12。如下圖中左圖。
image.png
但是,如果用卷積核來提取特徵,以10×10的卷積核為例,如右圖,參數量瞬間降到了10×10×10^6=10^8。參數降維的效果還是很明顯的。 參數共用
另外還有一個參數降維的好辦法就是參數共用。
怎麼理解權值共用呢。卷積核的這100個參數(也就是卷積操作)看成是提取特徵的方式,該方式與位置無關。這其中隱含的原理則是:映像的一部分的統計特性與其他部分是一樣的。這也意味著我們在這一部分學習的特徵也能用在另一部分上,所以對於這個映像上的所有位置,我們都能使用同樣的學習特徵。一個形象化的展示如下圖。相同的卷積核在整個圖片上掃描,得到的結果取值越大,說明該地區的資料特徵與卷積核越一致,通過這種方式,就提取出了映像的局部特徵。
image.png
從圖上可以看到,一個有著固定取值的卷積核對映像矩陣進行掃描,具體的運算過程見下圖。就是卷積核和被掃描地區的資料相乘後直接相加,最後相加的結果作為卷積後該位置的取值。這也是為何卷積網路的特徵提取可以保留其位置特徵的原因。
image.png
很顯然,映像矩陣的資料分布與卷積核越接近,取值就會越大。這樣,卷積核的取值會逐漸接近映像中資料的分布,而類似的映像(被打成同樣標籤)中的相同特徵被逐漸提取出來。 多個卷積核
在有多個卷積核時,如下圖所示:
image.png
上圖右,不同顏色表明不同的卷積核。每個卷積核都會將映像產生為另一幅映像。比如兩個卷積核就可以將產生兩幅映像,這兩幅映像可以看做是一張映像的不同的通道。 池化
在通過卷積獲得了特徵 (features) 之後,下一步我們希望利用這些特徵去做分類。理論上講,人們可以用所有提取得到的特徵去訓練分類器,例如 softmax 分類器,但這樣做面臨計算量的挑戰。例如:對於一個 96X96 像素的映像,假設我們已經學習得到了400個定義在8X8輸入上的特徵,每一個特徵和映像卷積都會得到一個 (96 − 8 + 1) × (96 − 8 + 1) = 7921 維的卷積特徵,由於有 400 個特徵,所以每個範例 (example) 都會得到一個7921× 400 = 3,168,400 維的卷積特徵向量。學習一個擁有超過 3 百萬特徵輸入的分類器十分不便,並且容易出現過擬合 (over-fitting)。
為瞭解決這個問題,首先回憶一下,我們之所以決定使用卷積後的特徵是因為映像具有一種“靜態性”的屬性,這也就意味著在一個映像地區有用的特徵極有可能在另一個地區同樣適用。因此,為了描述大的映像,一個很自然的想法就是對不同位置的特徵進行彙總統計,例如,人們可以計算映像一個地區上的某個特定特徵的平均值 (或最大值)。這些概要統計特徵不僅具有低得多的維度 (相比使用所有提取得到的特徵),同時還會改善結果(不容易過擬合)。這種彙總的操作就叫做池化 (pooling),有時也稱為平均池化或者最大池化 (取決於計算池化的方法)。
image.png 全串連層
全串連就是個矩陣乘法,相當於一個特徵空間變換,可以把有用的資訊提取整合。全串連層一般在卷積網路的最後,前面的卷積層、池化層和啟用函數將未經處理資料映射到隱層特徵空間,全串連層則起到將學到的“分布式特徵表示”映射到樣本標記空間。或者說,全串連層的主要目的就是維度變換,把高維的資料(分布式特徵表示)變成低維(樣本標記)。在這個過程中,有用的資訊保留下來,但會損失特徵的位置資訊。另外,全串連層可以用(h×w)個1×1的卷積核來代替,h和w分別為前層卷積結果的高和寬。
由於全串連層的引入帶來了大量參數,近來人們逐漸發現全串連層的存在與否對結果的影響並不明顯,另一方面,全域平均池化(global averaging pooling,AGP)取代FC來融合學到的深度特徵,最後仍用softmax等損失函數作為網路目標函數來指導學習過程的方式在ResNet和GoogleNet上都取得了非常好的預測結果。
另一方面,魏秀參等(見參考)近期的研究發現,FC可在模型表示能力遷移過程中充當“防火牆”的作用。 經典卷積網路模型
卷積神經網路的發展過程中,先後出現了很多裡程碑意義的網路模型,例如AlexNet,VGG和GoogleNet。 AlexNet
AlexNet由7層隱層構成。其中1~5是卷積層,6-7是全串連層。
下圖即為Alex的CNN結構圖。需要注意的是,該模型採用了2-GPU並行結構,即第1、2、4、5卷積層都是將模型參數分為2部分進行訓練的。在這裡,更進一步,並行結構分為資料並行與模型並行。資料並行是指在不同的GPU上,模型結構相同,但將訓練資料進行切分,分別訓練得到不同的模型,然後再將模型進行融合。而模型並行則是,將若干層的模型參數進行切分,不同的GPU上使用相同的資料進行訓練,得到的結果直接連接作為下一層的輸入。
image.png
上圖模型的基本參數為:
輸入:224×224大小的圖片,3通道
第一層卷積:5×5大小的卷積核96個,每個GPU上48個。
第一層max-pooling:2×2的核。
第二層卷積:3×3卷積核256個,每個GPU上128個。
第二層max-pooling:2×2的核。
第三層卷積:與上一層是全串連,3×3的卷積核384個。分到兩個GPU上個192個。
第四層卷積:3×3的卷積核384個,兩個GPU各192個。該層與上一層串連沒有經過pooling層。
第五層卷積:3×3的卷積核256個,兩個GPU上個128個。
第五層max-pooling:2×2的核。
第一層全串連:4096維,將第五層max-pooling的輸出串連成為一個一維向量,作為該層的輸入。
第二層全串連:4096維
Softmax層:輸出為1000,輸出的每一維都是圖片屬於該類別的機率。 VGG
VGG最大的貢獻是成功證明了小卷積核+小池化層+深度網路的潛力。通過反覆堆疊33的小型卷積核和22的池化層,VGG將卷積神經網路的深度拓展到了19層。更重要的是,VGG的拓展效能非常好,遷移到其他圖片資料上的泛化性非常好。
下圖中展示了VGGNet的網路結構。作者從A方案11層卷積神經網路開始,逐漸增加卷積的層數到E方案的19層。
image.png
從圖上可以看出,VGGNet有5段卷積,每段中都有1~3個3×3的小卷積核,每段卷積核的數量一樣,段數越大,卷積核心數量增加:64-128-256-512-512。後期層數增加後,會有兩個小卷積核堆疊在一起的情況,也就是多個小感受野堆疊後實際感受野擴大。例如2層3×3的小卷積核疊在一起,相當於1個5×5的卷積核,但是卷積核的參數比較小。
image.png
此外,每次做完卷積,都要帶入到ReLU啟用函數中去,也增加了模型的非線性表達能力。
未完待續。。。
最後,感謝知乎各位大神對卷積的精彩解釋。水平有限,在內容上表述上的疏忽,還有一些理解不到位不正確的地方,歡迎留言指出~謝謝。
參考:
[卷積解釋]
https://www.zhihu.com/question/54677157/answer/141316355
https://www.zhihu.com/question/22298352/answer/34267457
卷積神經網路模型:http://www.36dsj.com/archives/24006
全串連層:https://www.zhihu.com/question/41037974/answer/150522307
深度學習Deep Learning:https://github.com/exacity/deeplearningbook-chinese