Deconvolution

卷积的矩阵形式

二维卷积可以写成矩阵乘积的形式,比如一个3x3的卷积核w,可以写成下面的矩阵形式C

矩阵形式卷积

如果存在一个4x4的图像,那么则可以将其转化为一个16x1维度的向量X,矩阵乘法则变化为:

C*X = Y

得到的结果Y为4x1维向量,将其reshape为2x2维,就是我们需要的卷积后结果。
根据矩阵求导公式(下图第一行),我们可以看到,该卷积运算的梯度其实就是C^T。当你反向传播误差时,该运算就是将一个4维度的向量作为输入,然后产生一个16维度的输出,并且由于C矩阵的结构性,反向传播时的连接关系和正向传播时是一样的,只是方向相反。

Deconvolution_第1张图片
部分矩阵求导公式

Deconvolution(反向卷积)

Deconvolution从字面意义上看的话,应该意为反卷积。容易给人造成一种错误的印象,以为它的作用是复原卷积之前的图像值(或者特征值),事实上并非如此,也是不可能的。试想一下,如果一个4x4的图像和一个3x3的模板进行卷积,最后得到的结果应该是2x2。如果要想求出4x4的图像中的值,那么存在16个未知数,而只能联立2x2=4个方程,所以准确的值是无法求解出来的。

在A guide to convolution arithmetic for deep learning一文中有下面这样一句话:

Let’s now consider what would be required to go the other way around, i.e., map from a 4-dimensional space to a 16-dimensional space, while keeping the connectivity pattern of the convolution depicted in Figure 2.1. This operation is known as a transposed convolution.

这一句话说明Transposed convolution(也就是deconvolution)的目的是将一个低维度的空间映射到高维度,同时保持他们之间的连接关系/模式(这里的连接关系即是指卷积时候的连接关系)。联系到刚刚介绍的卷积的矩阵形式,我们刚好可以用这样一个C^T矩阵来实现这一目的。所以Deconvolution也被称作Transposed convolution。


更加直白的一种表示是,在我们的神经网络计算卷积的时候,我们会设定一个Kernel w,这样一个Kernel被首先按照规律展开成为C的矩阵形式。如果我们要计算卷积的时候则计算C*input = output来得到从高维度向低维度的计算。如果我们的神经网络中设计了deconv层的话,那么我们就采用C^T*input= output来得到从低维度向高维度的计算。

你可能感兴趣的:(Deconvolution)