需要搭建一個比較復雜的CNN網絡,希望通過預訓練來提高CNN的表現。
上網找了一下,關於CAE(Convolutional Auto-Encoders)的文章還真是少,勉強只能找到一篇瑞士的文章、
Stacked Convolutional Auto-Encoders for Hierarchical Feature Extraction
干貨少,不過好歹有對模型的描述,拿來看看。
概述:
本文提出了一種卷積神經網絡的自編碼表達,用於對卷積神經網絡進行預訓練。
具體內容:
原文廢話挺多,我只關心模型——CAE:
卷積層的獲得:
再表達:
其中“ * ”表示卷積;再表達的系數矩陣是卷積矩陣
在兩個維度上的翻轉(rot180)。
關於CAE的具體結構論文講得不清不楚(果真是水),這里有兩個明顯的問題:一是兩次用同樣大小卷積核做的卷積如何恢復原來圖像的大小,論文中提到full convolution和valid convolution,大概是指兩次卷積的卷積方法不同;另一個就是用卷積核的反轉卷積隱藏層的意義和作用何在,這個實在是無端端冒出來的計算方法;
輸出的誤差使用均方誤差MSE:
偏導的求法:
deltaH和deltaY分別是隱藏層和輸出層的敏感度。這里又有問題:只有一個隱藏層怎么來敏感度?如果是反向傳播怎么傳播過去?論文此處的“ * ”還是代表的是卷積嗎?如果是的話用的是full還是valid?為什么用隱藏層和敏感度做運算而不是卷積核?這個公式到底怎么來的?(天到底是我太水還是論文太渣)
接着論文提到了在非監督學習下的non-overlapping maxpooling。說這東西真是厲害,maxpooling抹去了區域非最大值,因此引入稀疏性。強大到甚至連稀疏性懲罰項都不用就可以獲得好結果。(你給我講清楚為什么啊喂!)
試驗結果:
論文使用MNIST和CIFAR10數據庫各做了4組實驗,每組訓練20個features,結果如下:
MNIST:
CIFAR10:
其中a)是簡單的CAE,b)引入了30%噪聲,C)引入maxpooling,D)引入maxpooling和30%噪聲。
單從這兩組結果來看有maxpooling的CAE,通過訓練獲得較好特征。
與其他方法對比:
文中最后利用CAE做pretraining訓練一個6層隱藏層的CNN,與無pretraining的CNN相比,其實提高不明顯。
感想:看完這篇文章對我想構建的CAE貌似沒有太大的幫助,因為此文章在實踐方面的細節和數學過程的推導都是一筆帶過,沒有詳盡描述。(到底是我水還是文章水)