最近复习一下之前看的深度学习的网络,在deeplearning-toolbox中看到一个CAE一时没想起来就看了一下官方的解释
CAE(Convolutional Auto-Encode) 卷积自编码 ,对于这个深度学习的网络的的解释很少。
下面谈一下自己的认识,算是总结吧
CAE(Convolutional Auto-Encode) 卷积自编码 :一种卷积自编码器,其实现的过程与Auto-Encode的思想是一致的
都是使用的是先编码在解码,比较解码的数据与原始的数据的差异进行训练,最后得到比较稳定的参数,待这一层的参数都训练好的时,再进行下一个的训练
如此堆积起来的网络看作是Stacked Auto-Encode 为了增加其抗干扰的能力,有时在训练时加入随机噪声进而增加其鲁棒性,称为Stacked denoise Auto-Encode。
但是今天要介绍的CAE只是加入了卷积的训练。其中主要思想是加入一些卷积的操作
1.CAE-UP 可以看做是卷积的的操作(在图像中进行卷积计算,得到卷积的图像)
2.CAE-Down 可以看做是一种翻卷的过程(在上层的基础之上,进行反卷积,得到原始的数据(肯定会有差距))
3.CAE-BP 可以看做是反向椽笔算法来计算残差,损失,计算出梯度与变化值。使用残差值对网络的参数进行更新。
主要的步骤就是这些,剩下的就是堆在一起了。
下面介绍一下在CAE中的数学计算
卷积层-卷积:初始化k个卷积核(W),每个卷积核搭配一个偏置b,与输入x卷积( ∗ )后生成k个特征图h,激活函数 σ 是 tanh 。公式如下:
卷积层-自编码:每张特征图h与其对应的卷积核的转置 进行卷积操作并将结果求和,然后加上偏置c,激活函数 σ 仍然是 tanh 。公式如下:
卷积层-更新权值:要更新权值,首先要确定cost function,此处作者采用的MSE(最小均方差)函数,即:目标值减去实际值的平方和再求均值,2n是为了简化求导。其中 θ是关于W和b的函数 。公式如下:
但是会存在一种输入要与输出的维度一样才可以进行残差的计算,这个时候,就要对卷积的三种方式就要理清楚是怎样的操作的
卷积的三种操作: 假设原始图像的size是AxA的 卷积核的大小BxB 在计算时候对于边界如果需要进行边界补零操作
1.valid 得到的图像是 (A-B+1)x(A-B+1)
2.full 得到的图像是 (A+B-1)x(A+B-1)
3.same 得到的图像是 AxA
确定好cost function以后,就是对W和b求导,公式如下:
在此参考一下deeplearning-toolbox中的CAE的代码中,其对于卷积使用的full操作,而在进行down时使用的是valid,
这样就是的输入前与输入后保持一致的维度了。
caesdlm是进行梯度检测的
可以进行pooling 也可以选择不使用,只是用来减少参数的,其在计算中只是随机的将某些数据值置为0.
Max pooling:引入Max pooling下采样技术,获取到特征的平移不变性。Max pooling就是pooling时选取最大值。由于采用了pooling技术,因此就没有必须使用L1/L2规则化项了。
文中的实验结果
将上述卷积层和pooling层堆积起来,形成CAEs,最后加入SVMs或其他的分类器。据实验结果显示,CAEs在泛化性、鲁棒性方面表现特别好,尤其是在无监督训练界。
参考文献
[1]: Stacked Convolutional Auto-Encoders for Hierarchical Feature Extraction