这种矩阵叫做Toeplitz(Toeplitz matrix)。对于二维情况,卷积对应着一个双重分块循环矩阵(doubly block circulant matrix)。...卷积是一种线性运算,所以可以表示成矩阵乘法的形式(如果我们首先把输入张量变形为一个扁平的向量)。其中包含的矩阵是关于卷积核的函数。这个矩阵时稀疏的,并且核的每个元素都复制给矩阵的多个元素。...这种观点能够帮助我们导出实现一个卷积网络所需的很多其他运算。 通过卷积定义的矩阵转置的乘法就是这样一种运算。这种运算用于在卷积层反向传播误差的导数,所以它在训练多余一个隐藏层的卷积网络时是必要的。...构建这些模型的卷积化版本都要用到转置化卷积。类似核梯度运算,这种输入梯度运算在某些情况下可以用卷积来实现,但在一般情况下需要用到第三种运算来实现。必须非常小心地来是这种转置运算和前向传播过程相协调。...这些类型的输入不能用传统的基于矩阵乘法的神经网络来表示。这为卷积网络的使用提供了令人信服的理由,即使当计算开销和过拟合都不是主要问题时。 随机或无监督的特征 卷积网络训练中最昂贵的部分是学习特征。
而以往标准的卷积过程可以用下面的图来表示: ?...在上图中扩张卷积的感受野可以由以下公式计算得到 ? ;其中i+1表示dilated rate。...你可以理解成,至少在数值方面上,转置卷积不能实现卷积操作的逆过程。所以说转置卷积与真正的反卷积有点相似,因为两者产生了相同的空间分辨率。...△卷积核为3×3、步幅为2和无边界扩充的二维转置卷积 需要注意的是,转置前后padding,stride仍然是卷积过程指定的数值,不会改变。...但即使不知道这个矩阵,转置卷积的具体工作也应该能够明白的。
在上图中扩张卷积的感受野可以由以下公式计算得到 ;其中i+1表示dilated rate。...你可以理解成,至少在数值方面上,转置卷积不能实现卷积操作的逆过程。所以说转置卷积与真正的反卷积有点相似,因为两者产生了相同的空间分辨率。...转置卷积的动态图 △卷积核为3×3、步幅为2和无边界扩充的二维转置卷积 需要注意的是,转置前后padding,stride仍然是卷积过程指定的数值,不会改变。...比如有输入数据:3×3,Reshape之后,为A :1×9,B(可以理解为滤波器):9×4(Toeplitz matrix) 那么A*B=C:1×4;Reshape C=2×2。...但即使不知道这个矩阵,转置卷积的具体工作也应该能够明白的。
首先为什么它叫转置卷积呢? 在解释这个之前,我们得先来看看正常的卷积在代码实现过程中的一个具体操作:对于正常的卷积,我们需要实现大量的相乘相加操作,而这种乘加的方式恰好是矩阵乘法所擅长的。...所以在代码实现的时候,通常会借助矩阵乘法快速的实现卷积操作, 那么这是怎么做的呢? 我们假设图像尺寸为 , 卷积核为 , padding=0, stride=1,也就是下面这个图: ?...这就是用矩阵乘法输出一个二维卷积的这样一个示例。这就是那个过程: ?...我们这里的输入图像尺寸是 , 卷积核为 , padding=0, stride=1, 我们的输入图像尺寸是 ,我们看看这个在代码中是怎么通过矩阵乘法进行实现的。...这是因为卷积核在转变成矩阵的时候,与正常卷积的卷积核形状上是互为转置,注意是形状,具体数值肯定是不一样的。所以正常卷积核转置卷积的关系并不是可逆的,故逆卷积这个名字不好。
正如卷积有分组卷积一样,FC也可以分组。由于torch里没有现成的算子,分组FC可以用分组1x1卷积实现。组数为g,参数量和计算量就会变成1/g。可惜,这也引入了局部性。RepMLP用了这种操作。...3) 把一个FC拆分成两次操作,第一次操作对channel维度线性重组,spatial共享参数(等价于1x1卷积);第二次操作对spatial维度线性重组,channel共享参数(等价于先转置后1x1卷积...我们用这种方法构造出fc_K并打印出来,可以看出它是一个稀疏且有很多元素相同的矩阵(Toeplitz矩阵)。如下图的代码和结果所示。 ? ?...用我们提出的方法把卷积全都转换为等效FC kernel后,由于矩阵乘法的可加性(AX + BX = (A+B)X),一个稀疏且共享参数的FC(Toeplitz矩阵)加一个不稀疏不共享参数的FC(全自由度的矩阵...只剩下一个问题了:我们相信存在一个FC kernel等价于卷积的卷积核,但是给定一个训练好的卷积核,怎么构造出FC kernel(Toeplitz矩阵)呢?
后面我们会介绍为什么将这种运算称为转置卷积更自然且更合适。 我们可以使用常见卷积实现转置卷积。...通过观察上述例子中的转置卷积能够帮助我们构建起一些直观的认识。但为了进一步应用转置卷积,我们还需要了解计算机的矩阵乘法是如何实现的。从实现过程的角度我们可以理解为何转置卷积才是最合适的名称。...在卷积中,我们这样定义:用代表卷积核,为输入图像,为输出图像。经过卷积(矩阵乘法)后,我们将从大图像下采样为小图像。这种矩阵乘法实现遵循。 下面的例子展示了这种运算在计算机内的工作方式。...它将输入平展()矩阵,并将卷积核转换为一个稀疏矩阵()。然后,在稀疏矩阵和平展的输入之间使用矩阵乘法。之后,再将所得到的矩阵()转为输出。 ?...但值得注意的是,上述两次操作并不是可逆关系,对于同一个卷积核(因非其稀疏矩阵不是正交矩阵),结果转置操作之后并不能恢复到原始的数值,而仅仅保留原始的形状,所以转置卷积的名字由此而来。
卷积矩阵 我们可以将一个卷积操作用一个矩阵表示。这个表示很简单,无非就是将卷积核重新排列到我们可以用普通的矩阵乘法进行矩阵卷积操作。...为了将卷积操作表示为卷积矩阵和输入矩阵的向量乘法,我们将输入矩阵 4 × 4 4 \times 4 4×4摊平(flatten)为一个列向量,形状为 16 × 1 16 \times 1 16×1,如下图所示...简单来说,这个卷积矩阵除了重新排列卷积核的权重之外就没有啥了,然后卷积操作可以通过表示为卷积矩阵和输入矩阵的列向量形式的矩阵乘积形式进行表达。...总结 转置卷积操作构建了和普通的卷积操作一样的连接关系,只不过这个是从反向方向开始连接的。我们可以用它进行上采样。另外,这个转置卷积矩阵的参数是可以学习的,因此我们不需要一些人为预先定义的方法。...即使它被称为转置卷积,它并不是意味着我们将一些现存的卷积矩阵简单转置并且使用其转置后的值。 从本质来说,转置卷积不是一个卷积,但是我们可以将其看成卷积,并且当成卷积这样去用。
其中A和B可以进行转置或hermitian共轭转置,而A、B和C都可以被忽略(be strided),因此实际上这个公式就表示了任意矩阵之间所有可能的加法和乘法组合,例如最基本的A*B,可以将α置1,C...置为全0矩阵即可,这也是其通用性的表现。...例如可以将A和B分解为分块矩阵,使得GEMM可以递归实现。有关GEMM的详细信息可以参见[1][2][3]。如何对GEMM进行优化,是BLAS相关工作的研究热点。...通过将卷积操作用矩阵乘法来代替,进而使用GEMM算法来间接进行卷积操作,这使得卷积操作可以在任何包含GEMM的平台上进行,并且受益于矩阵乘法的高效性,任何针对GEMM的改进和研究都能有助于卷积运算效率的提升...图1 原始GEMM操作 其中 im2col buffer 代表矩阵A,filter tensor 代表矩阵B,A和B的乘积就是输出copy表示将输入的张量展开为一个二维矩阵,也就是im2col buffer
机器学习 深度学习 长按二维码关注 如果你听说过深度学习中不同种类的卷积(比如 2D / 3D / 1x1 /转置/扩张(Atrous)/空间可分/深度可分/平展/分组/混洗分组卷积),并且搞不清楚它们究竟是什么意思...因此,某些作者强烈反对将转置卷积称为去卷积。人们称之为去卷积主要是因为这样说很简单。后面我们会介绍为什么将这种运算称为转置卷积更自然且更合适。 我们一直都可以使用直接的卷积实现转置卷积。...将 2×2 的输入上采样成 5×5 的输出 观察上述例子中的转置卷积能帮助我们构建起一些直观认识。但为了泛化其应用,了解其可以如何通过计算机的矩阵乘法实现是有益的。...从这一点上我们也可以看到为何「转置卷积」才是合适的名称。 在卷积中,我们定义 C 为卷积核,Large 为输入图像,Small 为输出图像。经过卷积(矩阵乘法)后,我们将大图像下采样为小图像。...卷积的矩阵乘法:将 Large 输入图像(4×4)转换为 Small 输出图像(2×2) 现在,如果我们在等式的两边都乘上矩阵的转置 CT,并借助「一个矩阵与其转置矩阵的乘法得到一个单位矩阵」这一性质,
因此,某些作者强烈反对将转置卷积称为去卷积。人们称之为去卷积主要是因为这样说很简单。后面我们会介绍为什么将这种运算称为转置卷积更自然且更合适。 我们一直都可以使用直接的卷积实现转置卷积。...将 2×2 的输入上采样成 5×5 的输出 观察上述例子中的转置卷积能帮助我们构建起一些直观认识。但为了泛化其应用,了解其可以如何通过计算机的矩阵乘法实现是有益的。...从这一点上我们也可以看到为何「转置卷积」才是合适的名称。 在卷积中,我们定义 C 为卷积核,Large 为输入图像,Small 为输出图像。经过卷积(矩阵乘法)后,我们将大图像下采样为小图像。...卷积的矩阵乘法:将 Large 输入图像(4×4)转换为 Small 输出图像(2×2) 现在,如果我们在等式的两边都乘上矩阵的转置 CT,并借助「一个矩阵与其转置矩阵的乘法得到一个单位矩阵」这一性质,...可以在水平5个位置和垂直3个位置扫描这样的核,总共就是5x3=15个位置,表示为下图中的点。在每个位置,会应用3次逐元素乘法,总共就是15x3=45次乘法。现在我们得到了一个3x5的矩阵。
因此,某些作者强烈反对将转置卷积称为去卷积。人们称之为去卷积主要是因为这样说很简单。后面我们会介绍为什么将这种运算称为转置卷积更自然且更合适。 我们一直都可以使用直接的卷积实现转置卷积。...将 2×2 的输入上采样成 5×5 的输出 观察上述例子中的转置卷积能帮助我们构建起一些直观认识。但为了泛化其应用,了解其可以如何通过计算机的矩阵乘法实现是有益的。...从这一点上我们也可以看到为何「转置卷积」才是合适的名称。 在卷积中,我们定义 C 为卷积核,Large 为输入图像,Small 为输出图像。经过卷积(矩阵乘法)后,我们将大图像下采样为小图像。...卷积的矩阵乘法:将 Large 输入图像(4×4)转换为 Small 输出图像(2×2) 现在,如果我们在等式的两边都乘上矩阵的转置 CT,并借助「一个矩阵与其转置矩阵的乘法得到一个单位矩阵」这一性质,...总共就是 5×3=15 个位置,表示为下图中的点。在每个位置,会应用 3 次逐元素乘法。总共就是 15×3=45 次乘法。现在我们得到了一个 3×5 的矩阵。
但是要想较好地掌握它的应用,在电脑上看看它怎样通过矩阵乘法来实现会比较有用。从中,我们还可以了解到为什么「转置卷积」这个名字更合适。...卷积的矩阵乘法:从大小 4 x 4 为 Large 输入图像到大小为 2 x 2 的 Small 输出图像 现在,如下图所示,如果我们对等式两边的矩阵 CT 进行多次转置,并利用一个矩阵和其转置矩阵相乘得出一个单元矩阵的属性...卷积的矩阵乘法:从大小 2x 2 为 Large 输入图像到大小为 4 x 4 的 Small 输出图像 正如你在这里看到的,转置卷积执行的是从小图像到大图像的上采样。这也是我们所要实现的。...而现在,你也可以了解到「转置卷积」这个名字的由来。...因为二维上的两个模式会相乘,因而最终的不均匀性是原来的平方。 在应用转置卷积时,可以做两件事情来减轻这种效应。第一,确认使用的过滤器的大小是能够被卷积步长整除的,从而来避免重叠问题。
但是要想较好地掌握它的应用,在电脑上看看它怎样通过矩阵乘法来实现会比较有用。从中,我们还可以了解到为什么「转置卷积」这个名字更合适。...卷积的矩阵乘法: 从大小 4 x 4 为 Large 输入图像到大小为 2 x 2 的 Small 输出图像 现在,如下图所示,如果我们对等式两边的矩阵 CT 进行多次转置,并利用一个矩阵和其转置矩阵相乘得出一个单元矩阵的属性...卷积的矩阵乘法: 从大小 2x 2 为 Large 输入图像到大小为 4 x 4 的 Small 输出图像 正如你在这里看到的,转置卷积执行的是从小图像到大图像的上采样。这也是我们所要实现的。...而现在,你也可以了解到「转置卷积」这个名字的由来。...因为二维上的两个模式会相乘,因而最终的不均匀性是原来的平方。 在应用转置卷积时,可以做两件事情来减轻这种效应。 第一,确认使用的过滤器的大小是能够被卷积步长整除的,从而来避免重叠问题。
领取专属 10元无门槛券
手把手带您无忧上云