卷积,逆卷积/转置卷积
1、卷积计算公式:
w' = (w+2p-k)/s +1,w'指卷积后的图像尺寸,w指输入的图像尺寸,p指填充大小,k是指卷积核的大小,s是指移动的步长。
2、逆卷积(deconvolution):
逆卷积(反卷积)其实就是卷积,只是中间padding了下,然后在做卷积。其实更应该叫做转置卷积,因为做了逆卷积只能还原原来的特征图的大小,而不是原来的值。
反卷积和转置卷积的真正区别:反卷积在数学含义上是可以还原输入信号的,但是转置卷积只能还原到原来输入的shape,其value值是不一样的。
为什么翻译成转置卷积更合适?
对于一个图像,输入矩阵可以展开为向量,记做X,输出矩阵可以展开为向量,记做Y,卷积运算可以表示为Y= CX。
那么对于神经网络的正向传播,就转换成了如Y=CX的矩阵运算。
对于反向传播来说,求导如下:
计算公式中由C变成了C的转置,所以说翻译成转置卷积更合适。逆卷积(转置卷积)用来在神经网络的反向传播中计算导数。
关于转置卷积的理解,看完这篇英文文献就理解了:https://arxiv.org/pdf/1603.07285.pdf
3、deconvolution大致可以分为:
(1)CNN可视化:通过deconv将cnn中conv得到的feature map还原到像素空间,以观察特定的feature map对哪些pattern的图片敏感,这里的deconv其实不是conv的可逆运算,只是conv的transpose,所以tensorflow里一般取名叫做transpose_conv。
(2)上采样:在pixel-wise prediction比如image segmentation以及image generation中,由于需要做原始图片尺寸空间的预测,而卷积由于stride往往会降低图片的size,所以往往需要通过upsampling的方法来还原到原始图片尺寸,deconv就充当了一个upsampling的角色。
(3)非监督学习:其实就是convolutional sparse coding。这里的deconv只是观念上和传统的conv反向,传统的conv是从图片生成feature map,而deconv是用unsupervised方法找到一组kernel和feature map,让他们重构图片。【这条我没见过过,上面两条以前见过实际应用】
4、反卷积的运算起点不一定是在原feature map上,而是从padding的区域上开始。
5、生成模型与判别模型:
判别模型是由数据直接学习决策函数或者条件概率分布作为预测的模型。即可以根据给定的输入直接预测输出。
生成模型是由数据学习联合概率分布,然后求出条件概率分布作为预测的模型。
6、深度学习的核心思想就是不断的增加层级,增加模型的深度。有很多理由这样做:
一个理由就是,如果你的参数足够有效,你可以利用更少的参数通过增加深度而不是广度来获得性能上的提升。另一个理由,很多你感兴趣的自然现象也会有分层的结构,而深度学习的特性可以很好的与其匹配。