CNN卷積神經網絡新想法

     最近一直在看卷積神經網絡,想改進改進弄出點新東西來,看了好多論文,寫了一篇綜述,對深度學習中卷積神經網絡有了一些新認識,和大家分享下。

  其實卷積神經網絡並不是一項新興的算法,早在上世紀八十年代就已經被提出來,但當時硬件運算能力有限,所以當時只用來識別支票上的手寫體數字,並且應用於實際。2006年深度學習的泰斗在《科學》上發表一篇文章,論證了深度結構在特徵提取問題上的潛在實力,從而掀起了深度結構研究的浪潮,卷積神經網絡作爲一種已經存在的、有一定應用經驗的深度結構,重新回到人們視線,此時硬件的運算能力也比之前有了質的飛躍,要芯片有芯片要GPU有GPU,還有開源的Caffe框架,於是CNN就起來了。

  縱觀目前已經發表的有關CNN方面的文獻,多是側重應用領域。國內期刊上有關CNN的期刊發表得並不多,一般都是從2012年之後開始出現,而且四大學報對CNN方面的文章發表力度還並沒有想想中的大,不知道是大家不願意投呢,還是期刊那對這個領域的東西持猶豫態度,不過CNN方面的學術論文可是非常多,可見很多學校,很多老師,很多學生都在搞這個。國外方面對於CNN的論文就相對多一些了,圖像識別,語音識別等方面都有涉獵,與國內不同的是國外發表的文獻在理論方面下的功夫要多一些,國內一般都是直接把CNN直接拿來用,老方法新問題,而且效果還不錯,可見CNN作爲深度學習的重要成員,確實很強。

  之前一直想着怎樣對傳統CNN進行改進,看了看大家的工作,改進的方向無非是要麼在結構上改,要麼在訓練算法上改,目前CNN的改進基本上都在遵循着這個框架。

  一、在結構上的改進

  傳統的CNN本質上是一個映射的堆疊,圖下圖所示


之所以說它是傳統,主要是它對輸入形式、卷積核、級聯形式、初始化方法都沒有嚴格要求,就使用最原始的卷積核,隨機初始化。當然也正是因爲他的傳統、原始,才使得其有改進的空間。下面說說已有的比較成功的改進方法。

  1、在網絡輸入上下功夫。傳統的CNN呢,直接把圖片作爲數據輸入進去了,從道理上講剛好符合稀疏表示理論中“像素本身是圖像語音最冗餘的表示”的觀點,但是大家還是希望對圖像進行一些預處理,畢竟機器視覺比不上人眼,人的肉眼看東西時可能一下完成了好多種模式分類的工作,而我們在做研究時,一次一般也就研究一種或者幾種特定的模式分類問題。既然問題是特定的,理論上必然會有對付這種問題的特效藥,就好比我們要識別白紙上的毛筆字,沒必要把整張紙都送進去操作,那樣確實信息夠全,但是速度太慢,反過來想想,要是條件理想,說不定直接閾值化一把就OK了,雖然信息損失了不少,但重要的信息還在,速度也快,正確率也可以接受,因此需要對圖像預處理。可見,並不是所有的問題都是直接把圖像直接以輸入就OK了,做些預處理還是很有必要,比如顏色分層處理、構建尺度金字塔、提取點什麼特徵(Gabor、SIFT、PCA等等),都是可以的,因問題而已。有人在用CNN做顯著性檢測時就是把圖像先進行了一把超像素分割,然後把分割後的超像素作爲新的網絡輸入,而且是三個通道同時輸入,如下圖:

        2、特徵融合上下功夫。傳統CNN就是把圖像一層層映射,映射到最後就是特徵提取的結果,通俗的講就好比用篩子篩穀子,一邊一邊的篩,篩到最後就是精華,但那些中間篩出去的東西呢,肯定不是垃圾,也是包含一定信息,對圖像由一定表現能力的,因此何不把這部分的映射結果也加以融合利用,這樣得到的特徵豈不是更有表現力?有人在做人臉識別的時候就想到了這一點,並努力實現了,如下圖

他是把各個層的映射結果PCA降維後融合到一起的,效果不錯。

  3、在卷積核上加限制。前面說過,傳統CNN就是單純的卷積核,於是我們想,能不能把那些卷積核改成Gabor核呢?小波核行不行?稀疏映射矩陣是不是也可以,不過那時候的神經網絡就不能再叫卷積神經網絡了,估計就應該叫深度Gabor卷積網絡了吧,重要的是這點還沒有人做,說不定以後可以下下功夫,不過已經有人把卷積核改進到加權PCA 矩陣,做出深度特徵臉卷積神經網絡了,結構如下圖:

這個看上去有點複雜,其實就是先對圖像進行分塊,然後將每個小塊都送入深度網絡中進行映射,映射核即爲加權PCA矩陣,然後將每層映射結果經過碼本聚合,得到最終的特徵表示形式。其實這種針對特定問題構建特定映射核的方法在理論上是有道理的,比如說之前的場景分類,用Gist特徵有奇效,那就不妨將卷積核改爲Gist核,其實也就類似於Gabor核,弄個深度Gist卷積神經網絡來解決場景分類問題,說不定就會有更好的效果,科研重在實驗嘛。其實這種卷積核的改進和以前的傳統CNN已經有了很大區別,主要是抽象的借鑑了深度結構的概念,不過我認爲這也正是深度學習的精髓所在。

  4、與其他分類器結合。卷積神經網絡可以看做是特徵提取與分類器的結合體,單從它的各個層的映射來看,類似於一個特徵提取的過程,提取了不同層次的特徵。但如果映射來映射去,最後就映射到幾個標籤上,則它又有了分類的功能。但我更傾向於把CNN看成是一個特徵提取的手段。那既然是特徵提取,就必然要搭配一些好的分類器了,SVM、稀疏表示分了器,都不錯,相信兩者結合肯定能取得好的效果,不過這部分工作目前沒有多少人做,不知道爲什麼。

  二、在訓練算法上的改進

  一提到算法的改進,涉及到更多的是理論的部分,難度比較大,目前已有的改進主要體現在兩個方面:一是對非線性映射函數的改動,二是網絡訓練的無監督化

  1、非線性映射函數改進

  在CNN每個映射層之後其結果都會經過一個非線性函數處理,主要是調整映射結果的範圍。傳統CNN一般採用sigmoid函數或雙曲正切函數(tanh)。後來稀疏表示興起了,人們發現稀疏的東西效果都比較好,因此我們希望卷積層的映射結果也能儘量稀疏一點,更接近人的視覺反應。對非線性函數的一個最成功的改進就是糾正線性單元(Rectified Linear Units,ReLU),其作用是如果卷積計算的值小於0,則讓其等於0,否則即保持原來的值不變。這種做法所謂是簡單粗暴,但結果卻能得到很好的稀疏性,實驗說明一切。

  2、訓練算法的無監督化

  其實訓練算法的無監督化改進是CNN非常重要的一項改進,原因非常簡單,深度學習需要海量數據,對海量數據進行標註可不是一項簡單的工作,更不用說想表情、美麗度等等這種抽象標註了。CNN的無監督改進目前比較成功的只有少數幾個方案,其中最具代表性的應該算是2011年J Ngiam等人提出稀疏濾波(Sparse filtering)算法,通過構建特徵分佈矩陣(feature distributions),對矩陣按照特徵方向求解一次稀疏優化問題,同時對每個樣本的特徵進行L2範數歸一化,最終得到一個具有樣本分佈稀疏性((Population Sparsity)、激活時間稀疏性(Lifetime Sparsity)以及高離散性(High Dispersal)等特點的樣本分佈矩陣,並指出可以通過將這些樣本分佈矩陣進行多層級聯擴展,形成無監督深度學習模型。其實這有點像稀疏表示的一點延伸,說白了就是把卷積核改成稀疏字典了,捨棄了原來的BP算法,既然不依賴BP了,自然也就可以實現無監督。稀疏濾波算法在這裏一兩句話也說不清楚,在這裏推薦兩篇文獻,一個是作者的原始文獻,另一個是它的應用,這兩篇文獻在谷歌都可以下載得到,要是登陸谷歌出現困難的話再這裏給大家提供一種穩定的登陸方法,一個月10元也不貴。

(1)Ngiam, Jiquan,Koh Pang Wei,Chen Zheng hao,Bhaskar Sonia,Ng Andrew Y. Sparse filtering,[C]. Advances in Neural Information Processing Systems 24: 25th Annual Conference on Neural Information Processing Systems,2011:1125-1133.

(2) Zhen Dong,Ming tao Pei,Yang He,Ting Liu,Yan mei Dong,Yun de Jia. Vehicle Type Classification Using Unsupervised Convolutional Neural Network,[C]. Pattern Recognition (ICPR), 2014 22nd International Conference on,2014:172-177.

FQ地址:點擊打開鏈接

 CNN作爲深度學習中應用最爲廣泛的網絡模型,最有影響力之一的應用應該算是香港理工大學王曉剛教授團隊提出的DeepID人臉識別算法,其三代算法已經達到了99%,確實厲害。


如果覺得這篇文章對您有所啓發,歡迎關注我的公衆號,我會儘可能積極和大家交流,謝謝。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章