【神经网络结构的组成】深入理解 转置卷积与转置卷积核

发布于:2025-04-17 ⋅ 阅读:(25) ⋅ 点赞:(0)

🌈 个人主页:十二月的猫-CSDN博客
🔥 系列专栏: 🏀《深度学习理论直觉三十讲》_十二月的猫的博客-CSDN博客

💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 

目录

1. 前言

2. 转置卷积

2.1 上采样的必要性

2.2 为什么要使用转置卷积

2.3 卷积运算

2.4 卷积运算多对一关系的思考

2.5 卷积核的本质(从矩阵卷积转为行卷积)

2.7 对转置卷积核的思考

3. 总结


1. 前言

        之前有机会看过这篇文章:【深度学习基础】深入理解 卷积与卷积核-CSDN博客的友友一定对卷积并不陌生,这也算是各种网络结构(RNN、LSTM等)的构成基础之一。因为网络结构研究的就是各种层(卷积、池化、全连接等)的组合方式。然后模型就是研究如何使用这些网络结构用来解决特定的问题。本篇文章的内容——转置卷积 就属于网络结构的组成部分,各种层结构

深度学习的三层次:

  • 卷积、池化、全连接等层是深度学习中最基础的东西。他们的不同组合方式产生了不同的网络结构。
  • 不同的网络结构对特征的提取是完全不同的。例如RNN结构能够提取上下文的信息适用于语言、时间等;CNN结构能够提取同一个图片从局部到整体的信息适用于计算机视觉上的使用;U-Net结构能够在提取特征的同时输出一个高分辨率的图片,因此适用于语义切割。
  • 在对问题充分理解后,对该问题进行数学建模。在这个模型中,我们需要定义数据来源、完整架构(包括一个或多个网络结构)、训练方式、损失函数等。例如:生成对抗网络模型、扩散模型等。

使用说明:三层次的内容层层递进:前者是后者的基础,后者是前者的递进。因此猫猫也将其分到两个专栏中,第一部分(深度学习中的层结构)作为【神经网络结构的组成】安排在《AI认知筑基三十讲》专栏中,用于初学者的学习;第二部分(网络结构、模型)分为【深度学习的骨架与脉搏】和【深度学习的灵魂】安排在《深度学习理论直觉三十讲》专栏中,用于深度学习爱好者学习。

2. 转置卷积

        明确一个点:转置卷积用于上采样

2.1 上采样的必要性

        使用神经网络生成图像通常涉及从低分辨率到高分辨率的上采样。因为神经网络理解一个图片的过程中就会用池化层、卷积层等下采样层将图片不断压缩,由此来获得更上层的信息(更抽象的图片信息)。理解之后想要再输出原本的图片+其他信息就需要用到上采样去处理了。下图就是一个上采样:

进行上采样操作的方法有多种:

  • 最近邻插值
  • 双线性插值
  • 双三次插值

        所有这些方法都涉及一些插值方法,我们必须在决定网络架构时选择它们。这就像手动特征工程,网络无法学习任何东西。

当然,最近大家都是用扩散模型或者对抗模型去完成超分辨率的工作(也就是把一个图片变更清晰)。使用生成模型去做上采样和使用插值或者转置卷积的方法是不同的,可以说生成模型

2.2 为什么要使用转置卷积

        如果我们希望网络学习如何以最佳方式进行上采样,可以使用转置卷积。它不使用预定义的插值方法。它具有可学习的参数。理解转置卷积概念很有帮助,因为重要的论文和项目都使用它,例如:

  • DCGAN 中的生成器采用随机采样值来生成全尺寸图像。
  • 语义分割在编码器中使用卷积层提取特征,然后在解码器中恢复原始图像大小,从而对原始图像中的每个像素进行分类。

转置卷积也称为:

  • 分数步长卷积
  • 反卷积

我将在本文中仅使用转置卷积这个词,但您可能会在其他文章中注意到其他名称。

2.3 卷积运算

        让我们用一个简单的例子来解释卷积运算的工作原理。假设我们有一个 4x4 矩阵,并应用一个 3 x 3 核的卷积运算,该核没有填充,步长为 1。如下所示,输出是一个 2x2 矩阵。

        卷积运算计算输入矩阵与核矩阵之间元素乘积之和。由于没有填充且步长为 1,我们只能执行四次。因此,输出矩阵为 2x2。

        这种卷积运算的关键点是输入值和输出值之间存在位置连通性。例如,输入矩阵的左上角值会影响输出矩阵的左上角值。我们使用 3 x 3 核将 9 个输入矩阵值连接到 1 个输出矩阵值。 卷积运算形成多对一关系 。记住这一点,稍后我们会用到它。

2.4 卷积运算多对一关系的思考

        现在,假设我们想反过来。我们想将一个矩阵中的一个值与另一个矩阵中的九个值关联起来。这是一种一对多的关系。这就像卷积运算中的逆向操作,也就是转置卷积的核心思想。

        例如,我们将一个 2x2 矩阵上采样为 4x4 矩阵,该操作保持 1 比 9 的关系。

        但是我们如何执行这样的操作呢? 其实也不难理解了,卷积操作依靠卷积核实现多对一操作,那么转置卷积自然也可以依靠转置卷积核实现一对多关系

2.5 卷积核的本质(从矩阵卷积转为行卷积)

        我们可以用矩阵来表示卷积运算。它是一个重新排列的核矩阵,因此我们可以使用矩阵乘法来进行卷积运算。

        但是,现在我说卷积操作可以转化为一维的方式展开,也就说一行代表一个卷积结果。原本卷积结果如下:

        现在想要转变为这样:

1. 首先必然要将输入的矩阵做变化:将输入矩阵(4x4)展平为列向量(16x1)

2. 将卷积核变化:将 3x3 内核重新排列成 4x16 矩阵,如下所示:

        因此就有下面的这种卷积:

上面操作就将矩阵卷积转为行卷积了!! 

2.7 对转置卷积核的思考

        看到上面对卷积核的变化,不难发现,卷积核的本质都可以转化为每一行的卷积。从矩阵卷积到行卷积的转变,让猫猫有了下面的思考:使用卷积矩阵,你可以从 16(4x4)变为 4(2x2),本质是因为卷积矩阵本身就是 4x16。然后,如果你有一个 16x4 矩阵,你可以从 4(2x2)变为 16(4x4)

        我们希望从 4 (2x2) 变为 16 (4x4)。因此,我们使用一个 16x4 矩阵。但这里还有一件事,我们需要检查一下是否满足,那就是是否保持 1 到 9 的关系。假设我们将卷积矩阵 C (4x16) 转置为 CT (16x4)。我们可以将 CT (16x4) 与列向量 (4x1) 进行矩阵乘法,生成一个输出矩阵 (16x1)。转置后的矩阵将一个值与输出中的 9 个值联系起来。

        由此可以看到,我们将一个较小的矩阵(2x2)上采样为一个较大的矩阵(4x4)。同时也保证了一个值和九个值之间的对应关系。注意:矩阵中的实际权重值并非来自原始卷积矩阵(这是一个可训练的参数,和卷积核一样)。重要的是,权重布局与卷积矩阵形状的转置相同

3. 总结

        转置卷积运算与常规卷积形成相同的连通性,但在转置的方向上,我们可以用它来进行上采样。此外,转置卷积中的权重是可学习的。因此,我们不需要预先定义插值方法。虽然它被称为转置卷积,但这并不意味着我们采用某个现有的卷积核并对其进行转置。重点在于,与标准卷积矩阵相比,转置卷积对输入和输出之间的关联进行了反向处理(一对多关联,而非多对一关联)。因此,转置卷积并非真正的卷积。但我们可以用卷积来模拟转置卷积。我们通过在输入矩阵的值之间添加零来对输入进行上采样,这样直接卷积就能产生与转置卷积相同的效果。你可能会找到一些文章以这种方式解释转置卷积。然而,由于需要在卷积之前添加零来对输入进行上采样,因此效率较低。

        简单点来说,转置卷积和卷积类似,只是提供一个形式固定的模板,核内部的值是多少是通过学习得到的。特别地:转置卷积会造成生成图像的棋盘格伪影。因此建议先进行插值方法,然后再进行转置卷积操作,以减少此类问题

【如果想学习更多深度学习知识,可以订阅热门专栏】

  如果想要学习更多人工智能的知识,大家可以点个关注并订阅,持续学习、天天进步你的点赞就是我更新的动力,如果觉得对你有帮助,辛苦友友点个赞,收个藏呀~~~


网站公告

今日签到

点亮在社区的每一天
去签到