突然发现好记性不如烂笔头真的很有道理,到了写毕业论文的时候,发现之前看过的论文都貌似没看过。今天写一下关于《Stacked Convolutional Auto-Encoders for Hierarchical Feature Extraction》的笔记,后期慢慢将以前比较好的论文补上来,希望对我对大家都有收获。
论文可以自己搜,懒得搜的可以去CSDN免费下载。
进入正题,这篇论文写的是在卷积神经网络的卷积层加入Denoise Autoencoder代替,池化层则采用Max pooling。这样2层就构成一个CAE结构,将多个CAE串起来,就构成了含有深度结构的CAEs。CAEs先使用无监督逐层训练方法预训练,然后采用BP算法进行微调,也就是使用不带规则化的梯度下降算法, 根据作者所做的实验来看,结果比较好。不知道描述的清楚与否,作者也没有给出网络结构图。
卷积层-卷积:初始化k个卷积核(W),每个卷积核搭配一个偏置b,与输入x卷积(
∗
)后生成k个特征图h,激活函数
hk=σ(x∗Wk+bk)(1)
卷积层-自编码:每张特征图h与其对应的卷积核的转置(
W˜=WT
)进行卷积操作并将结果求和,然后加上偏置c,激活函数
σ
仍然是
tanh
。公式如下:
y=σ(Σkhk∗W˜k+c)(2)
卷积层-更新权值:要更新权值,首先要确定cost function,此处作者采用的MSE(最小均方差)函数,即:目标值减去实际值的平方和再求均值,2n是为了简化求导。其中
θ是关于W和b的函数
。公式如下:
E(θ)=12nΣni=1(xi−yi)2(3)
此处有个问题,经过2次卷积操作以后,输入x和输出y是相同的维度吗?作者没有明确指出,但是我是这样考虑的:公式(1)卷积操作采用valid方式,比如原图
x=28∗28
,卷积核
W=5∗5
,那么特征图
h=24∗24
;公式(2)卷积操作采用full方式,输入
h=24∗24
,卷积核
WT=5∗5
,那么输出
y=28∗28
,这样在公式(3)中, x与y就同维度了。
继续,确定好cost function以后,就是对W和b求导,公式如下:
∂E(θ)∂Wk=x∗δhk+h˜k∗δy(4)
由于论文没有具体给出
δ
的值,只是说
δh and δy are the deltas of the hidden states and the reconstruction, respectively.
我自己尝试了好久,但是由于功底差,未能求解出,希望有能力的朋友可以指点一下。(y是关于h和W˜的,而h又是关于W的)
然后就可以使用随机梯度下降法更新权值,论文中未提到偏置的更新。
Max pooling:引入Max pooling下采样技术,获取到特征的平移不变性。Max pooling就是pooling时选取最大值。由于采用了pooling技术,因此就没有必须使用L1/L2规则化项了。
将上述卷积层和pooling层堆积起来,形成CAEs,最后加入SVMs或其他的分类器。据实验结果显示,CAEs在泛化性、鲁棒性方面表现特别好,尤其是在无监督训练界。至于有多好,大家可以去看一下论文的实验及结论部分。
[1]: Stacked Convolutional Auto-Encoders for Hierarchical Feature Extraction