深度学习中的卷积操作

一.卷积操作

下面两个图带我们复习一下普通的卷积操作:先乘再加。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二. 矩阵卷积

我们希望可以定义这样一个矩阵。:输入矩阵和我们所定义的矩阵进行矩阵相乘就可以完成卷积计算。这个矩阵称为卷积矩阵,它是对卷积核kernel进行重新排列之后获得的。举个例子:3x3的卷积核参数如下:

在这里插入图片描述

我们对这个3x3卷积核重新排列得到了一个4x16的矩阵:

在这里插入图片描述

上面就是一个卷积矩阵( convolution matrix)。每一行定义了一个卷积操作。卷积矩阵的每一行其实是重新排列的卷积核加了一些不同位置零填充(zero padding)。这个卷积矩阵怎么用呢?首先我们需要去把输入矩阵(4x4)扁平化为一个列向量(16x1)。这样我们对这个4x16的卷积矩阵和一个16x1的输入矩阵进行矩阵乘法,进而把输出的4x1的矩阵reshape为2x2的矩阵,就能得到和上述直接进行卷积一样的结果了。

在这里插入图片描述

从上面的过程中,我们可以进行如下思考:
如果我们有一个4x16的卷积矩阵,我们就可以把16x1的输入矩阵变为4x1的输出矩阵。
那么如果我们有一个4x1的输入和一个16x4的矩阵,我们是不是可以通过矩阵乘法得到一个16x1的输出呢?

三.反卷积矩阵

我们希望从4(2x2)到16(4x4)。因此我们需要用到16x4的矩阵。但是我们希望同时保持1对9的对应关系。

假设我们把卷积矩阵C(4x16)转置为CT(16x4),把CT(16x4)和一个列向量(4x1)相乘即可产生一个输出矩阵,而且这个反卷积矩阵C^T将输入向量中的每一个元素都跟输出向量中的9个元素相关联。

这里1对9的对应关系我自己可以用线性代数的知识去理解:反卷积矩阵中的第一列都需要且只需要跟输入向量中的第一个元素进行乘法和加法运算;反卷积矩阵中的第一列有9个非零元素;反卷积矩阵的第一列的不同元素和输入向量中的第一个元素进行乘法加法,都会影响输出向量中不同位置的元素。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_30150579/article/details/129753202