深度網絡結構是由多個單層網絡疊加而成的,而常見的單層網絡按照編碼解碼情況可以分為下面3類:
- 既有encoder部分也有decoder部分:比如常見的RBM系列(由RBM可構成的DBM, DBN等),autoencoder系列(以及由其擴展的sparse autoencoder, denoise autoencoder, contractive autoencoder, saturating autoencoder等)。
- 只包含decoder部分:比如sparse coding, 和今天要講的deconvolution network.
- 只包含encoder部分,那就是普通的feed-forward network.
Deconvolution network的中文名字是反卷積網絡,那么什么是反卷積呢?其概念從字面就很容易理解,假設A=B*C 表示的是:B和C的卷積是A,也就是說已知B和C,求A這一過程叫做卷積。那么如果已知A和B求C或者已知A和C求B,則這個過程就叫做反卷積了,deconvolution.
Deconvolution network是和convolution network(簡稱CNN)對應的,在CNN中,是由input image卷積feature filter得到feature map, 而在devonvolution network中,是由feature map卷積feature filter得到input image. 所以從這點看,作者強調deconvolution network是top-down是有道理的(具體可參考Zeiler的Deconvolutional networks),看下圖便可知:
上圖表示的是DN(deconvolution network的簡稱)的第一層,其輸入圖像是3通道的RGB圖,學到的第一層特征有12個,說明每個輸入通道圖像都學習到了4個特征。而其中的特征圖Z是由對應通道圖像和特征分別卷積后再求和得到的。
本人感覺層次反卷積網絡和層次卷積稀疏編碼網絡(Hierarchical Convolution Sparse Coding)非常相似,只是在Sparse Coding中對圖像的分解采用的是矩陣相乘的方式,而在DN這里采用的是矩陣卷積的形式。和Sparse coding中train過程交叉優化基圖像和組合系數的類似,DN中每次train時也需要交叉優化feature filter和feature map.
DN的train過程:
學習DN中第l(小寫的L)層網絡的特征時,需優化下面的目標函數:
它是將第l層網絡的輸出當做第l+1層網絡的輸入(這和通常的deep network訓練過程類似),其中的 表示第l層的特征圖k和第l-1層的特征圖c的連接情況,如果連接則為1,否則為0. 對上面loss函數優化的思想大致為:
- 固定
,優化
,但是這樣不能直接優化(沒弄清楚原因,可參考博客下面網友的評論),因此作者引入了一個輔助變量
,則這時的loss函數變為:
上式loss函數中對輔助變量 和
之間的距離進行了懲罰,因此這個輔助變量的引入是合理的,接着交替優化 和
,直到
收斂(具體可參考文章公式細節)。
2. 固定 ,優化
,直接采用梯度下降法即可。
DN的test過程:
學習到每層網絡的filter后,當輸入一張新圖片時,可同樣采用重構誤差和特征圖稀疏約束來優化得到本層的feature map, 比如在第一層時,需優化:
其中的f是在訓練過程中得到的。
提取出圖片y的DN特征后(可多層),可以用該特征進行圖像的識別,也可以將該特征從上到下一層層卷積下來得到圖像y’,而這個圖像y’可理解為原圖像y去噪后的圖像。因此DN提取的特征至少有圖像識別和圖像去噪2個功能。
不難發現,如果讀者對卷積稀疏編碼網絡熟悉的話,也就比較容易理解反卷積網絡了。同理,和sparse coding一樣,DA的train過程和test過程的速度都非常慢。
讀完這篇paper,不得不佩服搞數學優化的人。
參考資料:
Deconvolutional Networks, Matthew D. Zeiler, Dilip Krishnan, Graham W. Taylor and Rob Fergus.