DeepLearning CNN 筆記

記錄一下組會討論DeepLearning book的內容,輪到我做report,是書本第9章卷積網絡。上次沒有提前記錄,有時間的話,再整理一下之前的內容。這一章寫的很直白易懂,沒有公式推導,但是需要看過一些卷積神經網絡相關的論文,特別是9.4節之後的理解。這本書我覺得不適合想入門的小白看,更適合已經入門看過一些paper的同學看。以下是我第二次report的part 1部分。

上次組會,由於準備不充分,很多內容沒有解釋清楚,但是總的來說,這一章比較簡單。接下來簡單回顧一下上一週的內容。

9.1 卷積運算,9.2 動機

我主要介紹了卷積的概念、運算、意義以及卷積與矩陣乘法的關係,卷積運算可以看做是矩陣的乘法,一維情況下可以轉換成託普利茲矩陣(Toeplitz matrix),二維情況下可以轉換成雙重循環矩陣(doubly block circulant matrix)。卷積有三個重要的思想,第一個是稀疏交互(sparse interactions),通過使卷積核的大小遠遠小於輸入的大小來達到,這樣使得卷積運算比全連接運算需要更少的參數,不僅減少了模型的存儲需求,還提高了統計效率。第二個思想是參數共享(parameter sharing),指卷積運算在一個模型的多個函數中使用相同的參數,這個也非常容易理解,使用全連接時權重矩陣的每一個元素只使用一次,而對於卷積來說,用於一個輸入的權重也會被綁定在其他的權重上。參數共享的特殊形式使得神經網絡層具有平移等變(equivariant representations)的性質,這也是第三個重要的思想。如果我們移動輸入中的對象,它的表示也會在輸出中移動同樣的量。我們假設,如果在圖像某些地方探測到一個水平的邊界是很重要的,那麼在其他一些地方也是同樣有用的。但是參數共享也有可能沒有意義,特別是當卷積神經網絡的輸入圖像是一些明確的中心結構時,我們希望能在圖片的不同位置學習到完全不同的特徵。舉個例子,處理居中的人臉圖像時,我們可能想要提取不同位置上的不同特徵,比如眼睛特徵或者頭髮特徵。一般來說在這個例子中,通常會放鬆參數共享的限制,不使用參數共享的卷積,而使用局部連接層(也稱非共享卷積)。

9.3 池化

除了介紹卷積相關內容外,還簡單介紹了池化的概念以及特性,卷積神經網絡中的池化層(pooling layer)或者說匯聚層,主要目的是爲了降維,這樣做可以減少參數個數和計算量,並且一定程度上防止過擬合,提高模型泛化能力。目前最常用的池化層就是最大池化,給出相鄰矩形區域內的最大值,除此之外,還可以使用平均池化、L2範式池化、隨機池化等,但現在已經很少使用平均池化了,因爲實踐證明,最大池化的效果比平均池化要好。也有很多人不喜歡池化操作,認爲可以不使用它,因此有人提出用步長卷積代替池化操作,構建一個只含卷積層操作的網絡。此外,池化具有局部平移不變性,這個性質非常有用,特別是當我們關心某個特徵是否出現而不關心它出現的具體位置時

9.4 卷積與池化作爲一種無限強的先驗

對於上次沒有解釋明白的9.4節,在此特別說明一下,爲什麼說卷積與池化是無限強的先驗。先驗概率分佈刻畫了我們在看到數據之前認爲什麼樣的模型是合理的信念。它指的是,對於卷積來說,這個無限強的先驗是說一個隱藏單元的權重必須和它相鄰的權重相同,但可以在空間上移動,其實就是指卷積的參數共享和平移不變性。對於池化來說,也可以看作是增加了一個無限強的先驗:這一層學得的函數必須具有對少量平移的不變性。當這個假設成立時,池化可以極大地提高網絡的統計效率。但是這樣的先驗可能導致過擬合,因爲卷積和池化只有當先驗的假設合理且正確時纔有用。如果一項任務依賴於精確的空間信息(比如想要尋找一個由兩條邊相交的拐角時,就需要很好的保存邊的精確位置來判定它們是否相交),那麼所有的特徵上使用池化將會增大訓練誤差。因此有一些卷積神經網絡就設計成一些通道上使用池化,而在另一些通道上不使用。當一項任務涉及要對輸入中相隔較遠信息進行合併時,那麼卷積所利用的先驗就不正確了(比如處理人臉上不同位置的不同特徵)。

9.5 基本卷積函數的變體

9.5節,基本卷積函數的變體。其實是在講三個超參數:深度(deepth)、步長(stride)和零填充(zero-padding)。

  1. 首先,這裏的深度不是網絡層的層數,而是指每一層數據的通道數或者說濾波器的數量,比如最開始的圖像輸入有RGB三個顏色通道,那麼深度就爲3,第一個濾波器的數量也是3。
  2. 其次,在滑動濾波器的時候,必須指定步長。標準卷積步長爲1,濾波器每次就移動一個像素。當步長爲2時(或者更多,但實際中很少使用),濾波器滑動時每次移動2個像素。這個操作會讓輸出數據體在空間上變小。所以有人提出用步幅卷積代替池化操作。
  3. 爲了控制輸出數據體的空間尺寸,所以需要在輸入邊緣處進行零填充。根據輸出的大小,零填充有三種形式:第一個是有效卷積,即無論怎樣都不使用零填充,這樣必然會使輸出尺寸變小;第二個是相同卷積,進行足夠的零填充來保持輸出和輸入具有相同的大小,這也是最常用的;第三個是全卷積,使用足夠的零填使得輸出尺寸變大。

至此,總結一下卷積層的性質(其中兩個公式要牢記):

  • 輸入數據體的尺寸爲W1H1D1
  • 四個超參數:
    • 濾波器的數量K
    • 濾波器的空間尺寸F*F
    • 步長S
    • 零填充數量P
  • 輸出數據體的尺寸爲W2H2D2 ,其中
    • W2=(W1F+2P)/S+1
    • H2=(H1F+2P)/S+1 (寬度與高度計算方法相同)
    • D2=K
    • P=(FS)/2 (保證輸入和輸出尺寸相同)
  • 由於參數共享,每個濾波器包含FFD1 個權重,卷積層一共有FFD1K 個權重和K 個偏置。
  • 在輸出中,第d 個深度切片(空間尺寸是W2H2 ),用第d 個濾波器和輸入數據進行有效卷積運算的結果(使用步長S),最後再加上第d 個偏差。

在一些情況下,我們並不是真的想要使用卷積,而是想用一些局部連接的網絡層,比如上面所說到的人臉識別。這時我們就可以使用局部連接層,也稱非共享卷積(unshared convolution),因爲它和具有一個小核(1x1)的離散卷積運算很像,但不橫跨位置來共享參數。書中還提到了對卷積層和局部連接層進行折中的操作,稱爲平鋪卷積(tiled convolution)。這裏並不是對每一個空間位置的權重集合進行學習,我們學習一組核使得當我們在空間移動時它們可以循環利用。在圖9.16中,局部連接沒有共享參數;標準卷積只有1個卷積核;平鋪卷積有t個不同的卷積核(圖中爲t=2),每當我們在輸出中右移一個像素後,我們使用一個不同的核。這意味着,輸出中的相鄰單元具有不同的參數。當t等於輸出的寬度時,就是局部連接層。當t=1時,就是標準卷積。

我們一直在談論的參數都是指權重,但是一般來說,在卷積層從輸入到輸出的變換中不僅僅只用線性運算。我們一般也會在進行非線性運算前,對每個輸出加入一些偏置項(bias)。這樣就產生了如何在偏置項中共享參數的問題:

  • 對於局部連接層,很自然地對每個單元都給定它特有的偏置。
  • 對於平鋪卷積,也很自然地用與核一樣的平鋪模式來共享參數。
  • 對於卷積層來說,通常的做法是在輸出的每一個通道上都設置一個偏置,這個偏置在每個卷積映射的所有位置上共享。

如果輸入是已知的固定大小,也可以在輸出映射的每個位置學習一個單獨的偏置。分離這些偏置可能會稍稍降低模型的統計效率,但同時也允許模型來校正圖像中不同位置的統計差異。例如,當使用隱含的零填充時,圖像邊緣的探測單元接收到較少的輸入,因此需要較大的偏置。

以上,就是上一週組會的內容,這是第九章的乾貨內容,我提取了重點,簡單回顧了一遍。

接下來繼續書本內容。

9.6 結構化輸出

9.6節,結構化輸出。卷積神經網絡不僅僅可以用於圖像分類,目標識別,還可以用於圖像分割。對於圖像分割問題,就需要允許模型標記圖像中的每個像素,並繪製沿着單個對象輪廓的精確掩膜。但在卷積神經網絡中經常會出現一個問題,就是輸出平面可能比輸入平面要小,主要原因是使用了大步幅的池化層。因此爲了產生與輸入大小相似的輸出映射,我們可以避免把池化放在一起,或是單純地產生一張低分辨率的標籤網格,或是使用具有單位步幅的池化操作。對圖像逐個像素標記的一種策略是先產生圖像標籤的原始猜測,然後使用相鄰像素之間的交互來修正該原始猜測。對應於卷積神經網絡,修正就是指在最後幾層共享權重,如圖9.17,這就形成了循環卷積神經網絡。一旦對每個像素都進行了預測,就可以使用各種方法來進一步處理這些預測,以便獲得圖像在區域上的分割。

9.7 數據類型

9.7節,數據類型。這一節主要介紹了卷積網絡的各種應用場景。卷積網絡使用的數據通常包含多個通道,每個通道是時間上或空間中某一點的不同觀測量。表9.1是用於卷積網絡的不同數據格式的例子。單通道中的音頻波形,已經使用傅里葉變換預處理過的音頻數據,對應於將卷積網絡運用於語言識別領域。三維的體積數據一般來源於醫學成像技術,如CT掃描。多通道中你的骨架動畫數據,也可以衍生到人體姿態估計。彩色圖像數據是我們最瞭解的,一般的圖像分類,目標識別都屬於這一類。彩色視頻數據對應於卷積網絡用於視頻的例子。

到目前爲止,我們討論的都是訓練和測試數據中的每個樣例都有相同的空間維度的情況。但卷積網絡同樣可以用於處理具有可變的空間尺度的大小。這些類型的輸入不能用傳統的基於矩陣乘法的神經網絡來表示,但卷積核可以依據輸入的大小簡單地被使用不同次,並且卷積運算的輸出也相應地放縮。前面說過,卷積可以被視爲矩陣乘法,相同的卷積核爲每種大小的輸入引入了一個不同大小的雙重分塊循環矩陣。但要注意的是,這裏使用卷積處理可變尺寸的輸入,僅對輸入是因爲包含對同種事物的不同量的觀察而導致的尺寸變化纔有意義。比如特徵包括成績等級和標準化測試分數,但不是所有人有標準化測試分數,那麼這種情況下使用相同的權重來提取特徵是沒有意義的。

9.8 高效的卷積算法

9.8節,高效的卷積算法。除了使用GPU加速,也可以通過選擇適當的卷積算法來加速卷積。當一個d維的核可以表示成d個向量的外積時,該核被稱爲可分離的,這時普通的卷積是低效的。它等價於組合d個一維卷積,每個卷積使用這些向量中的一個。組合方法顯著快於使用它們的外積來執行一個d維的卷積,並且核也只要更少的參數來表示成向量。但並不是所有卷積都可以表示成組合形式。設計更快的執行卷積或近似卷積,而不損害模型準確性的方法,是一個活躍的研究領域。

9.9 隨機或無監督的特徵

9.9節,通常,卷積網絡訓練中最昂貴的部分是學習特徵,減少卷積網絡訓練成本的一種方式是使用那些不是由監督方式訓練得到的特徵。這裏有三種方法:

  1. 簡單地隨機初始化卷積核。隨機過濾器經常在卷積網絡中表現得出乎意料得好,因此這也是應用最多的方法。
  2. 手動設計卷積核。例如設置每個核在一個特定的方向或尺度開檢測邊緣
  3. 最後,使用無監督的標準來學習卷積核,例如將k-means聚類算法運用於小圖像塊,然後使得每個學得的中心作爲卷積核。更多關於無監督學習方法見書本第3部分。

有一箇中間方法是學習特徵,但是使用那種不需要在每個梯度計算步驟中都進行完整的前向和反向傳播的方法。與多層感知機一樣,使用貪心逐層預訓練,單獨訓練第一層,然後一次性地從第一層提取所有特徵,之後用那些特徵單獨訓練第二層,以此類推。貪心逐層預訓練的經典模型是卷積深度信念網絡(Convolutional deep belief network),它是一種生成模型,通過訓練其神經元間的權重,可以讓整個神經網絡按照最大概率來生成訓練數據。我們不僅可以使用它識別特徵、分類數據,還可以用它來生成數據。由於這一塊涉及到概率圖模型受限玻爾茲曼機,我還沒有深入瞭解,所以不展開介紹,書中第3部分有擴展。這意味着使用無監督學習來訓練卷積網絡並且在訓練的過程中完全不使用卷積是可能的,這種方法在2007-2013年流行,當時標記的數據集很小,而且能力有限。如今,大多數卷積網絡還是以純粹監督的方式訓練,在每次訓練迭代中使用通過整個網絡的完整的前向和反向傳播。

9.10 卷積網絡的神經科學基礎

卷積網絡是受神經科學啓發,應用於機器學習領域的一個成功案例。卷積網絡有其神經科學的基礎在。上世紀60年代, 神經生理學家David Hubel和Torsten Wiesel於1959年提出貓的初級視覺皮層中單個神經元的“感受野”(Receptive Field)概念,緊接着於1962年發現貓的視覺中樞中存在感受野、雙目視覺和其他功能結構,標誌着神經網絡結構首次在大腦視覺系統中被發現。從深度學習的角度,我們關注大腦功能視圖V1,也稱爲初級視覺皮層。卷積網絡層被設計爲描述V1的三個性質:

  1. V1可以進行空間映射。它實際上具有二維結構來反映視網膜中的圖像結構。在卷積網絡中,就是通過二維映射得到feature map來描述該特性。
  2. V1包含許多簡單細胞。卷積即是模擬初級視覺皮層的簡單細胞,其活動可以概括爲在一個小的空間位置感受野內的圖像的線性函數。
  3. V1包含許多複雜細胞。池化啓發自初級視覺皮層的複雜細胞,其對特徵位置的微小偏移具有不變性。

但是,卷積網絡和哺乳動物的視覺系統之間還有許多區別,目前有許多基本問題仍未得到回答。主要有以下幾個問題:

  1. 類似從神經科學中啓發出來的還有注意力機制,目前在NLP領域應用比較成功,但在視覺領域還沒有成爲主導方法。
  2. 人類視覺系統集成了許多其他感覺,但卷積網絡是純粹視覺的。
  3. 人類視覺系統不僅僅用於識別對象,還能夠理解場景,但卷積網絡目前在這些問題上海處於起步階段。
  4. 大腦區域會受到來自較高級別的反饋的嚴重影響,在卷積網絡中被廣泛探索,但還沒有被證明提供了引人注目的改進。
  5. 與卷積網絡的最後一層在特徵上最接近的類比是成爲顳下皮質(IT)的腦區,但是仍然不清楚中間計算的相似程度。

9.11 卷積網絡與深度學習的歷史

Hinton在1988年提出了基於反向傳播的時延神經網絡(time delay neural network,TDNN),主要用於一維的時間序列分析,此後LeCun在1988年左右將反向傳播應用到二維圖像的識別,成功發明了LeNet並開啓了現代卷積網絡的大門。

卷積網絡是第一批能使用反向傳播有效訓練的深度網絡之一。一般的反向傳播網絡被認爲是失敗的,但是卷積網絡加上反向傳播奇蹟般的發揮了很好的效果。本書作者認爲,可能是卷積網絡的計算效率更高,能夠快速運行實驗並進行調參的原因。

總的來說,卷積網絡是神經網絡的一種特化,這種特化在具有空間/序列等網格結構拓撲上表現良好,實際上,卷積網絡的殺手級應用還是在二維圖像方面。一維的序列處理,比如時間序列、文本序列等,主要被另一種神經網絡的特化——循環神經網絡所佔領。

參考資料

Deep Learning

CS231n Convolutional Neural Networks for Visual Recognition

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