須要搭建一個比較複雜的CNN網絡,但願經過預訓練來提升CNN的表現。數據庫
上網找了一下,關於CAE(Convolutional Auto-Encoders)的文章還真是少,勉強只能找到一篇瑞士的文章、網絡
Stacked Convolutional Auto-Encoders for Hierarchical Feature Extractionapp
乾貨少,不過好歹有對模型的描述,拿來看看。學習
概述:編碼
本文提出了一種卷積神經網絡的自編碼表達,用於對卷積神經網絡進行預訓練。spa
具體內容:3d
原文廢話挺多,我只關心模型——CAE:code
卷積層的得到:blog
再表達:數學
其中「 * 」表示卷積;再表達的係數矩陣是卷積矩陣在兩個維度上的翻轉(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貌似沒有太大的幫助,由於此文章在實踐方面的細節和數學過程的推導都是一筆帶過,沒有詳盡描述。(究竟是我水仍是文章水)