1. 程式人生 > >CNN卷積神經網路的理解

CNN卷積神經網路的理解

        機器學習的兩大部分:淺層學習(shallow learning)和深度學習(deep learning),兩者的主要區別是:淺層學習(如SVM、BP、AdaBoost等)的輸入都是人工規則提取的特徵;而深度學習是用CNN提取深層次的特徵,然後將這些特徵作為分類器(如SVM、BP、AdaBoost等)的輸入。

    深度學習的實質,是通過構建具有很多隱層的機器學習模型和海量的訓練資料,來學習更有用的特徵,從而最終提升分類或預測的準確性。(引用)    區別於傳統的淺層學習,深度學習的不同在於: 1)強調了模型結構的深度,通常有 5層、 6 層,甚至 10 多層的隱層節點; 2)明確突出了特徵學習的重要性,也就是說,通過逐層特徵變換,將樣本在原空間的特徵表示變換到一個新特徵空間,從而使分類或預測更加容易。與人工規則構造特徵的方法相比,利用大資料來學習特徵,更能夠刻畫資料的豐富內在資訊。(引用)


        卷積神經網路中卷積的含義:卷積是一種積分運算,從輸入訊號型別的角度,卷積運算分連續的和離散的,比如連續的電訊號f(t)脈衝,對其求卷積即是對電訊號脈衝不同時刻f(t)作用於系統產生的響應進行累加,由於電訊號是連續的,因此就是積分運算,積分的結果就是電訊號不同時刻的點產生的響應之和,當然離現在越遠的時刻的點對積分結果的貢獻越小,是一種加權求和的思想;而影象數是離散的,對影象卷積運算就是sigama求和;從輸入訊號作用域來看,卷積運算分時域和空域的,比如電流脈衝是與時間相關的函式,而影象只是在空間分佈,且影象是離散的資料,對影象進行卷積運算就是對各個畫素點的加權求和,而不同位置的加權值組成的矩陣就是卷積核,也叫卷積運算元,在卷積神經網路中也叫濾波器;

        在影象處理中,幾乎到處都要用到卷積運算,比如求影象的倒數需要微分運算元(比如常見的sobel運算元),直觀上就是得到影象的邊緣特徵,這裡的運算元就是卷積核;還有對影象的各種形態學操作(開運算、閉運算、膨脹、腐蝕、形態學梯度等等),用到的運算元其實都是卷積核,是一個東西,只是叫法不一樣;因此,可以說卷積運算是影象的基本運算,任何對影象複雜的處理操作都是在卷積運算的基礎之上。

      離散型輸入的卷積公式:R(u,v)=∑∑G(u-i,v-j)f(i,j) ,其中f為輸入,G為卷積核。

       事實上,在卷積神經網路中,卷積核中每個元素的值就是卷積神經網路的權值。在每一個卷積層,對影象的卷積運算實際上是在求每個神經元的輸出(只不過卷積的結果加上了偏置,又經過了啟用函式),一個卷積核對應一個神經元,一幅影象被同一種卷積核在不同區域多次作用後就得到一個特徵平面(feature map)(這其實就是權值共享的本質,同一種卷積核自然權值都一樣),事實上特徵平面是由帶著一簇簇權值的神經元組成,想想那個畫面就像是許多章魚舉著觸角一排排擺在了一起,而且每個章魚的觸角都是相同的(但這並不代表對一個章魚來說,它所有的觸角是相同的);這時候你可能有疑問,既然相同卷積核那神經元的輸出不就一樣了?事實上雖然卷積核相同,但由於作用於影象不同的區域(這其實就是區域性感知的思想

),因此輸出是不同的,即每個神經元輸出的響應是不一樣的,這些神經元放在一起就得到了影象的一個特徵向量或feature map;如果我們採用不同的卷積核對影象進行卷積運算,自然就可以得到不同的特徵平面。由於採取了局部感知、權值共享的策略(該策略參考於人腦的視覺系統),有效減少了待確定引數(權值)個數。

        那捲積核如何才能確定呢?事實上確定卷積核的過程就是求取引數(權值)的過程,即是對神經網路進行訓練的過程。

         那如何對卷積神經網路進行訓練呢?即如何讓卷積神經網路自動提取特徵呢?這個問題困擾了研究者很久,直到生物學上對腦神經研究的發現給了研究者啟發之後,一些研究者相繼研究,不斷站在前人的肩膀上,直到Hinton及其研究者發表了一篇文章提出了逐層訓練權值的方式,開啟了對卷積神經網路研究的熱潮。近十年,卷積神經網路發展迅速,從最初的RCNN,到fast-RCNN、faster-RCNN、yolo、SSD等。對於訓練的過程,可以先從最基本的訓練演算法瞭解,比如自動編碼演算法,是對卷積層訓練的一種演算法,後來又有稀疏自動編碼器演算法等。具體訓練過程參考(