首页 > 其他分享 >卷积神经网络 - 基本卷积函数的变体篇

卷积神经网络 - 基本卷积函数的变体篇

时间:2024-08-05 10:53:49浏览次数:17  
标签:输出 bold 卷积 text 神经网络 变体 连接 输入

序言

在深度学习和卷积神经网络( CNN \text{CNN} CNN)的广阔领域中,基本卷积函数是构建网络结构的基础,它们通过滑动窗口的方式对输入数据进行特征提取。然而,随着应用场景和数据复杂性的增加,单一的卷积方式已难以满足所有需求。因此,基本卷积函数的变体应运而生,这些变体在保留传统卷积优势的同时,通过不同的操作方式和参数设置,进一步增强了卷积神经网络的灵活性和表达能力。

基本卷积函数的变体

  • 当在神经网络的上下文中讨论卷积时,我们通常不是特指数学文献中使用的那种标准的离散卷积运算。实际应用中的函数略微有些不同。这里我们详细讨论一下这些差异,并且对神经网络中用到的函数的一些重要性质进行重点说明。

  • 首先,当我们提到神经网络中的卷积时,我们通常是指一次特定的运算,而这种运算包含了并行地使用多个卷积。

    • 这是因为带有单个核的卷积只能提取一种类型的特征,尽管它作用在多个空间位置上。
    • 我们通常希望神经网络的一层能够在多个位置提取多种类型的特征。
  • 另外,输入通常也不仅仅是实值的网格,而是由一系列向量值的观测数据构成的网格。

    • 例如,一幅彩色图像在每一个像素点都会有红绿蓝三种颜色的亮度。
    • 在多层的卷积神经网络中,第二层的输入是第一层的输出,通常在每个位置包含多个卷积的输出。
    • 当用于图像时,我们通常把卷积的输入输出都看作是 3 3 3维的张量,其中一个索引用于标明不同的通道(例如红绿蓝),另外两个索引标明在每个通道上的空间坐标。
    • 软件实现通常使用批处理模式,所以它们会使用 4 4 4维的张量,第四维索引用于标明批处理中不同的实例,但我们为简明起见这里忽略批处理索引。
  • 因为卷积神经网络通常使用多通道的卷积,它们基于的线性运算并不保证一定是可交换的,即使使用了核翻转也是如此。这些多通道的运算只有当其中的每个运算的输出和输入具有相同的通道数时才是可交换的。

  • 假定我们有一个 4 4 4维的核张量 K \bold{K} K,它的每一个元素是 K i , j , k , l K_{i,j,k,l} Ki,j,k,l​,表示输出的处于通道 i i i中的一个单元和输入的处于通道 j j j中的一个单元连接强度,并且在输出单元和输入单元之间有一个 k k k行 l l l列的偏置。

  • 假定我们的输入由观测数据 V \bold{V} V组成,它的每一个元素是 V i , j , k V_{i,j,k} Vi,j,k​,表示处于在通道 k k k中第 j j j行第 k k k列的值。

  • 假定我们的输出 Z \bold{Z} Z和输入 V \bold{V} V具有相同的形式。如果输出 Z \bold{Z} Z是通过对 K \bold{K} K和 V \bold{V} V进行卷积而不涉及翻转 K \bold{K} K得到的,那么:
    Z i , j , k = ∑ l , m , n V l , j + m − 1 , k + n − 1 K i , l , m , n Z_{i,j,k}=\sum\limits_{l,m,n}V_{l,j+m-1,k+n-1}K_{i,l,m,n} Zi,j,k​=l,m,n∑​Vl,j+m−1,k+n−1​Ki,l,m,n​ — 公式1 \quad\textbf{---\footnotesize{公式1}} —公式1
    这里对所有的 l l l, m m m和 n n n进行求和是对所有(在求和式中)有效的张量索引的值进行求和。在线性代数中,向量的索引通常从 1 1 1开始,这就是上述公式中 − 1 −1 −1的由来。但是像 C \text{C} C或 Python \text{Python} Python这类编程语言索引通常从 0 0 0开始,这使得上述公式可以更加简洁。

  • 我们有时会希望跳过核中的一些位置来降低计算的开销(即相应的代价是提取特征没有先前那么好了)。

    • 我们可以把这一过程看作是对卷积函数输出的下采样( downsampling \text{downsampling} downsampling)。如果我们只想对输出的每个方向上的 s s s个像素进行采样,那么我们可以定义一个下采样卷积函数 c c c使得:
      Z i , j , k = c ( K , V , s ) i , j , k = ∑ l , m , n [ V l , ( j − 1 ) × s + m , ( k − 1 ) × s + n , K i , l , m , n ] Z_{i,j,k}=c(\bold{K},\bold{V},s)_{i,j,k}=\sum\limits_{l,m,n}[V_{l,(j-1)\times s+m,(k-1)\times s+n,}K_{i,l,m,n}] Zi,j,k​=c(K,V,s)i,j,k​=l,m,n∑​[Vl,(j−1)×s+m,(k−1)×s+n,​Ki,l,m,n​] — 公式2 \quad\textbf{---\footnotesize{公式2}} —公式2
    • 我们把 s s s称为下采样卷积的步幅( stride \text{stride} stride)。当然也可以对每个移动方向定义不同的步幅。图例1演示了一个实例。
  • 在任何卷积神经网络的应用中都有一个重要性质,那就是能够隐含地对输入 V \bold{V} V用零进行填充 ( pad \text{pad} pad) 使得它加宽。

    • 如果没有这个性质,表示的宽度在每一层就会缩减,缩减的幅度是比核少一个像素这么多。
    • 对输入进行零填充允许我们对核的宽度和输出的大小进行独立的控制。
    • 如果没有零填充,我们就被迫面临二选一的局面,要么选择网络空间宽度的快速缩减,要么选择一个小型的核——这两种情境都会极大得限制网络的表示能力。
    • 图例2给出了一个例子。
  • 三种零填充设定的情况值得注意。

    • 第一种是无论怎样都不使用零填充的极端情况,并且卷积核只允许访问那些图像中能够完全包含整个核的位置。
      • 在 MATLAB \text{MATLAB} MATLAB中,这称为有效 ( valid \text{valid} valid) 卷积。
      • 在这种情况下,输出的所有像素都是输入中相同数量像素的函数,这使得输出像素的表示更加规范。
      • 然而,输出的大小在每一层都会缩减。如果输入的图像宽度是 m m m,核的宽度是 k k k,那么输出的宽度就会变成 m − k + 1 m − k + 1 m−k+1。
      • 如果卷积核非常大的话缩减率会非常显著。
      • 因为缩减数大于 0 0 0,这限制了网络中能够包含的卷积层的层数。
      • 当层数增加时,网络的空间维度最终会缩减到 1 × 1 1 × 1 1×1,这种情况下另外的层就不可能进行有意义的卷积了。
    • 第二种特殊的情况是只进行足够的零填充来保持输出和输入具有相同的大小。
      • 在 MATLAB \text{MATLAB} MATLAB 中,这称为相同 ( same \text{same} same) 卷积。
      • 在这种情况下,网络能够包含任意多的卷积层,只要硬件可以支持,这是因为卷积运算并没有改变相关的结构。
      • 然而,输入像素中靠近边界的部分相比于中间部分对于输出像素的影响更小。
      • 这可能会导致边界像素存在一定程度的欠表示。
    • 这使得第三种极端情况产生了,在 MATLAB \text{MATLAB} MATLAB 中称为 ( full \text{full} full) 卷积。它进行了足够多的零填充使得每个像素在每个方向上恰好被访问了 k k k 次 3 \text{次}^3 次3,最终输出图像的宽度为 m + k − 1 m + k − 1 m+k−1。

    注:图例2给出了有效卷积和相同卷积的例子,这里对全卷积略作说明:我们可以认为全卷积是在输入的两端各填充 k − 1 k − 1 k−1个零,使得输入的每个像素都恰好被核访问 k k k次,最终得到的输出的宽度为 [ m + 2 ( k − 1 ) ] − k + 1 = m + k − 1 [m + 2(k − 1)] − k + 1 = m + k − 1 [m+2(k−1)]−k+1=m+k−1


    • 在这种情况下,输出像素中靠近边界的部分相比于中间部分是更少像素的函数。这将导致学得一个在卷积特征映射的所有位置都表现不错的单核更为困难。通常零填充的最优数量(对于测试集的分类正确率)处于 “有效卷积“ 和 “相同卷积” 之间的某个位置。
  • 在一些情况下,我们并不一定真正想用卷积,而只是用一些局部连接的网络层( LeCun, 1986, 1989 \text{LeCun, 1986, 1989} LeCun, 1986, 1989)。

    • 在这种情况下,我们的多层感知机对应的邻接矩阵是相同的,但每一个连接都有它自己的权重,用一个 6 6 6维的张量 W \bold{W} W来表示。
    • W \bold{W} W的索引分别是:输出的通道 i i i,输出的行 j j j和列 k k k,输入的通道 l l l,输入的行偏置 m m m和列偏置 n n n。局部连接层的线性部分可以表示为:
      Z i , j , k = ∑ l , m , n [ V l , j + m − 1 , k + n − 1 w i , j , k , l , m , n ] Z_{i,j,k}=\sum\limits_{l,m,n}[V_{l,j+m-1,k+n-1}w_{i,j,k,l,m,n}] Zi,j,k​=l,m,n∑​[Vl,j+m−1,k+n−1​wi,j,k,l,m,n​] — 公式3 \quad\textbf{---\footnotesize{公式3}} —公式3
    • 这有时也被称为非共享卷积 ( unshared convolution \text{unshared convolution} unshared convolution),因为它和带有一个小核的离散卷积运算很像,但并不横跨位置来共享参数。图例3比较了局部连接、卷积和全连接的区别。
  • 当我们指导每一个特征都是一小部分空间的函数而不是整个空间的特征时,局部连接层是很有用的。例如,如果我们想要辨别一张图片是否是人脸图像时,我们只需要去寻找嘴是否在图像的下部中央部分即可。

  • 使用那些连接被更进一步限制的卷积或者局部连接层也是有用的,例如,限制每一个输出的通道 i i i仅仅是输入通道 l l l的一部分的函数时。

    • 实现这种情况的一种通用方法是使输出的前 m m m个通道仅仅连接到输入的前 n n n个通道,输出的接下来的 m m m个通道仅仅连接到输入的接下来的 n n n个通道,以此类推。
    • 图例4给出了一个例子。
    • 对少量通道间的连接进行建模允许网络使用更少的参数,这降低了存储的消耗以及提高了统计效率,并且减少了前向和反向传播所需要的计算量。
    • 这些目标的实现并没有减少隐藏单元的数目。
  • 拼贴卷积 ( tiled convolution \text{tiled convolution} tiled convolution)( Gregor and LeCun, 2010a; Le et al., 2010 \text{Gregor and LeCun, 2010a; Le et al., 2010} Gregor and LeCun, 2010a; Le et al., 2010) 对卷积层和局部连接层进行了折衷。

    • 这里并不是对每一个空间位置的权重集合进行学习,我们学习一组核使得当我们在空间移动时它们可以循环利用。
    • 这意味着在近邻的位置上拥有不同的过滤器,就像局部连接层一样,但是对于这些参数的存储需求仅仅会增长常数倍,这个常数就是核的集合的大小,而不是整个输出的特征映射的大小。
    • 图例5对局部连接层、 拼贴卷积和标准卷积进行了比较。
    • 为了代数地定义拼贴卷积,令 K \bold{K} K是一个 6 6 6维的张量,其中的两维对应着输出映射中的不同位置。我们这里并不是使用分别的索引来表示输出映射中的每一个位置,输出的位置在每个方向上在 t t t个不同的核的组成的集合中进行循环。
      • 如果 t t t等于输出的宽度,这就是局部连接层了。
        Z i , j , k = ∑ l , m , n V l , j + m − 1 , k + n − 1 K i , l , m , n , j % t + 1 , k % t + 1 , Z_{i,j,k}=\sum\limits_{l,m,n}V_{l,j+m-1,k+n-1}K_{i,l,m,n,j\%t+1,k\%t+1,} Zi,j,k​=l,m,n∑​Vl,j+m−1,k+n−1​Ki,l,m,n,j%t+1,k%t+1,​ — 公式4 \quad\textbf{---\footnotesize{公式4}} —公式4
      • 这里百分号是取模运算,其中 t % t = 0 , ( t + 1 ) % t = 1 t\%t = 0, (t + 1)\%t = 1 t%t=0,(t+1)%t=1 等等。在每一维上使用不同的 t t t可以很直观地对这个方程进行扩展。
  • 局部连接层与拼贴卷积层都和最大池化有一些有趣的关联:这些层的探测单元都是由不同的过滤器驱动的。

    • 如果这些过滤器能够学会探测相同隐含特征的不同变换形式,那么最大池化的单元对于学得的变换就具有不变性(如池化(Pooling)篇 - 图例3:学习不变的示例所示)。
    • 卷积层对于平移具有内置的不变性。
  • 实现卷积神经网络时,采用除卷积以外的其他一些运算通常也是必须的。

    • 为了实现学习,必须在给定输出的梯度时能够计算核的梯度。
    • 在一些简单情况下,这种运算可以通过卷积来实现,但在很多我们感兴趣的情况下,包括步幅大于 1 1 1的情况,并不具有这样的性质。
  • 回忆一下卷积是一种线性运算,所以可以表示成矩阵乘法的形式(如果我们首先把输入张量变形为一个扁平的向量)。

    • 涉及到的矩阵是卷积核的函数。
    • 这个矩阵是稀疏的并且核的每个元素都复制给矩阵的很多个元素。
    • 这种观点能够帮助我们导出卷积神经网络需要的很多其他运算。
  • 通过卷积定义的矩阵转置的乘法就是这样一种运算。

    • 这种运算用于通过卷积层反向传播误差的导数,所以它在训练多于一个隐藏层的卷积神经网络时是必要的。
    • 如果我们想要从隐藏层单元重构可视化单元时,同样的运算也是需要的 ( Simard et al.,1992 \text{Simard et al.,1992} Simard et al.,1992)。
    • 重构可视化单元是篇章:深度学习研究的模型广泛用到的一种运算,这些模型包括自编码器、 RBM \text{RBM} RBM和稀疏编码等等。
    • 构建这些模型的卷积化的版本都要用到转置化卷积。
    • 就像核梯度的运算,这种输入梯度运算在某些情况下可以用卷积来实现,但在一般情况下需要用到第三种运算来实现。
    • 必须非常小心地来使这种转置运算和前向传播过程相协调。
    • 转置运算返回的输出的大小取决于三个方面:零填充的策略、前向传播运算的步幅和前向传播的输出映射的大小。
    • 在一些情况下,不同大小的输入通过前向传播过程能够得到相同大小的输出映射,所以必须明确地告知转置运算原始输入的大小。
    • 这三种运算 — 卷积、从输出到权重的反向传播和从输出到输入的反向传播 — 对于训练任意深度的前馈卷积网络,以及训练带有(基于卷积的转置的)重构函数的卷积网络,这三种运算都足以计算它们所需的所有梯度。对于完全一般的多维、多样例情况下的公式,完整的推导可以参见 Goodfellow (2010) \text{Goodfellow (2010)} Goodfellow (2010)。为了直观说明这些公式是如何起作用的,我们这里给出一个二维单个样例的版本。
  • 假设我们想要训练这样一个卷积神经网络,它包含步幅为 s s s的步幅卷积,该卷积的核为 K \bold{K} K,作用于多通道的图像 V \bold{V} V,表示为 c ( K , V , s ) c(\bold{K}, \bold{V}, s) c(K,V,s),就像公式2中一样。

    • 假设我们想要最小化某个损失函数 J ( V , K ) J(\bold{V}, \bold{K}) J(V,K)。
    • 在前向传播过程中,我们需要用 c c c本身来输出 Z \bold{Z} Z,然后 Z \bold{Z} Z传递到网络的其余部分并且被用来计算损失函数 J J J。
    • 在反向传播过程中,我们会收到一个张量 G \bold{G} G表示为 G i , j , k = ∂ ∂ Z i , j , k J ( V , K ) G_{i,j,k}=\frac{\partial}{\partial Z_{i,j,k}}J(\bold{V}, \bold{K}) Gi,j,k​=∂Zi,j,k​∂​J(V,K)。
  • 为了训练网络,我们需要对核中的权重求导。为了实现这个目的,我们可以使用一个函数
    g ( G , V , s ) i , j , k , l = ∂ ∂ K i , j , k , l J ( V , K ) = ∑ m , n G i , m , n V j , ( m − 1 ) × s + k , ( n − 1 ) × s + l g(\bold{G},\bold{V},s)_{i,j,k,l}=\frac{\partial}{\partial K_{i,j,k,l}}J(\bold{V}, \bold{K})=\sum\limits_{m,n}G_{i,m,n}V_{j,(m-1)\times s+k,(n-1)\times s+l} g(G,V,s)i,j,k,l​=∂Ki,j,k,l​∂​J(V,K)=m,n∑​Gi,m,n​Vj,(m−1)×s+k,(n−1)×s+l​ — 公式5 \quad\textbf{---\footnotesize{公式5}} —公式5

  • 如果这一层不是网络的底层,我们需要对 V 求梯度来使得误差进一步反向传播。我们可以使用如下的函数
    { h ( K , G , s ) i , j , k = ∂ ∂ V i , j , k J ( V , K ) = ∑ l , m s . t . ( l − 1 ) × s + m = j ∑ n , p s . t . ( n − 1 ) × s + p = k ∑ q K q , i , m , p G q , l , n \begin{cases}\begin{aligned}h(\bold{K},\bold{G},s)_{i,j,k}&=\frac{\partial}{\partial V_{i,j,k}}J(\bold{V},\bold{K})\\&=\sum\limits_{\substack{l,m\\s.t.\\\substack{(l-1)\times s+m=j}}} \sum\limits_{\substack{n,p\\s.t.\\\substack{(n-1)\times s+p=k}}}\sum\limits_q K_{q,i,m,p}G_{q,l,n}\end{aligned}\end{cases} ⎩ ⎧​h(K,G,s)i,j,k​​=∂Vi,j,k​∂​J(V,K)=l,ms.t.(l−1)×s+m=j​​∑​n,ps.t.(n−1)×s+p=k​​∑​q∑​Kq,i,m,p​Gq,l,n​​​ — 公式6 \quad\textbf{---\footnotesize{公式6}} —公式6

  • 后续篇章:自编码器网络,是一些训练成把输入拷贝到输出的前馈网络。一个简单的例子是 PCA \text{PCA} PCA算法,将输入 x \boldsymbol{x} x拷贝到一个近似的重构值 r \boldsymbol{r} r,通过函数 W ⊤ W x \boldsymbol{W}^\top\boldsymbol{W}\boldsymbol{x} W⊤Wx来实现。为了使这些模型卷积化,我们可以用函数 h h h来实现卷积运算的转置。假定我们有和 Z \bold{Z} Z相同格式的隐藏单元 H \bold{H} H,并且我们定义一种重构运算: R = h ( K , H , s ) \bold{R}=h(\bold{K},\bold{H},s) R=h(K,H,s) — 公式7 \quad\textbf{---\footnotesize{公式7}} —公式7

  • 为了训练自编码器,我们会收到关于 R \bold{R} R的梯度,表示为一个张量 E \bold{E} E。为了训练解码器,我们需要获得对于 K \bold{K} K的梯度,通过 g ( H , E , s ) g(\bold{H},\bold{E},s) g(H,E,s)来得到。为了训练编码器,我们需要获得对于 H \bold{H} H的梯度,通过 c ( K , E , s ) c(\bold{K},\bold{E},s) c(K,E,s)来得到。也可能通过用 c c c和 h h h对 g g g求微分得到,但这些运算对于任何标准神经网络上的反向传播算法来说都是不需要的。

  • 一般来说,在卷积层从输入到输出的变换中我们不仅仅只用线性运算。我们一般也会在进行非线性运算前,对每个输出加入一些偏置项。这样就产生了如何在偏置项中共享参数的问题。对于局部连接层,很自然地对每个单元都给定它特有的偏置,对于拼贴卷积,也很自然地用与核一样的拼贴模式来共享参数。对于卷积层来说,通常的做法是在输出的每一个通道上都设置一个偏置,这个偏置在每个卷积映射的所有位置上共享。然而,如果输入是已知的固定大小,也可以在输出映射的每个位置学习一个单独的偏置。分离这些偏置可能会稍稍降低模型的统计效率,但同时也允许模型来校正图像中不同位置的统计差异。例如,当使用隐含的零填充时,图像边缘的探测单元接收到较少的输入,因此需要较大的偏置。


  • 图例1:带有步幅的卷积。

    • 带有步幅的卷积
      在这里插入图片描述

    • 说明:

      • 在这个例子中,我们的步幅为二。
      • 上图:
        • 在单个操作中实现的步幅为二的卷积。
      • 下图:
        • 步幅大于一个像素的卷积在数学上等价于单位步幅的卷积随后下采样。
        • 显然,涉及下采样的两步法在计算上是浪费的,因为它计算了许多将被丢弃的值。
  • 图例2:零填充对网络大小的影响。

    • 零填充对网络大小的影响
      在这里插入图片描述

    • 说明:

      • 考虑一个卷积网络,每层有一个宽度为六的核。在这个例子中,我们不使用任何池化,所以只有卷积操作本身缩小网络的大小。
      • 上图:
        • 在这个卷积网络中,我们不使用任何隐含的零填充。
        • 这使得表示在每层缩小五个像素。
        • 从十六个像素的输入开始,我们只能有三个卷积层,并且最后一层不能移动核,所以可以说只有两层是真正的卷积层。
        • 可以通过使用较小的核来减缓收缩速率,但是较小的核表示能力不足,并且在这种结构中一些收缩是不可避免的。
      • 下图:
        • 通过向每层添加五个隐含的零,我们防止了表示随深度收缩。
        • 这允许我们设计一个任意深的卷积网络。
  • 图例3:局部连接,卷积和全连接的比较。

    • 局部连接,卷积和全连接的比较
      在这里插入图片描述

    • 说明:

      • 上图:
        • 每一小片(接受域)有两个像素的局部连接层。
        • 每条边用唯一的字母标记,来显示每条边都有自身的权重参数。
      • 中图:
        • 核宽度为两个像素的卷积层。该模型与局部连接层具有完全相同的连接。
        • 区别不在于哪些单元相互交互,而在于如何共享参数。
        • 局部连接层没有参数共享。
        • 卷积层在整个输入上重复使用相同的两个权重,正如用于标记每条边的字母重复出现所指示的那样。
      • 下图:
        • 全连接层类似于局部连接层,它的每条边都有其自身的参数(在该图中用字母明确标记的话就太多了)。
        • 然而,它不具有局部连接层的连接受限的特征。
  • 图例4:卷积网络的前两个输出通道只和前两个输入通道相连,随后的两个输出通道只和随后的两个输入通道相连。
    在这里插入图片描述

  • 图例5:局部连接层、 拼贴卷积和标准卷积的比较。

    • 局部连接层、 拼贴卷积和标准卷积的比较
      在这里插入图片描述

    • 说明:

      • 当使用大小相同的核时,这三种方法的单元之间具有相同的连接。此图是对使用两个像素宽的核的说明。这三种方法之间的区别在于它们如何共享参数。
      • 上图:
        • 局部连接层根本没有共享参数。
        • 我们对每个连接使用唯一的字母标记,来表明每个连接都有它自身的权重。
      • 中图:
        • 拼贴卷积有 t t t个不同的核。这里我们说明 t = 2 t = 2 t=2的情况。
        • 其中一个核具有标记为 “ a \text{a} a“ 和 “ b \text{b} b” 的边,而另一个具有标记为 “ c \text{c} c“ 和 “ d \text{d} d” 的边。
        • 我们每次在输出中向右移动一个像素,移动后使用不同的核。
        • 这意味着,与局部连接层类似,输出中的相邻单元具有不同的参数。
        • 与局部连接层不同的是,在我们遍历所有可用的 t t t个核之后,我们循环回到了第一个核。
        • 如果两个输出单元间隔 t t t个步长的倍数,则它们共享参数。
      • 下图:
        • 传统卷积等效于 t = 1 t = 1 t=1的拼贴卷积。
        • 它只有一个核,并且被应用到各个地方,我们在图中表示为在各处使用具有标记为“ a \text{a} a“ 和 “ b \text{b} b”的边的核。

总结

基本卷积函数的变体主要包括但不限于以下几种:

  • 反卷积( Transposed Convolution \text{Transposed Convolution} Transposed Convolution):
    • 也称为转置卷积,它通过调整卷积核和步长,实现了对输入特征图的上采样,常用于生成对抗网络( GAN \text{GAN} GAN)中的图像放大或分割任务中的特征恢复。
  • 空洞卷积( Dilated Convolution \text{Dilated Convolution} Dilated Convolution):
    • 通过在卷积核的元素之间插入空格(空洞),增大了卷积核的感受野,同时保持参数数量不变,有助于捕捉更广泛的上下文信息。
  • 局部卷积( Local Convolution \text{Local Convolution} Local Convolution):
    • 与全局共享的卷积核不同,局部卷积为每个位置或区域分配独立的卷积核,增强了模型对不同位置特征的适应性。
  • 平铺卷积( Tiled Convolution \text{Tiled Convolution} Tiled Convolution):
    • 通过将输入数据划分为多个小块,并在每个小块上独立进行卷积操作,最后再将结果合并,实现了对输入数据的分块处理。
      此外,还有有效( Valid \text{Valid} Valid)卷积和相同( Same \text{Same} Same)卷积等变体,它们通过调整零填充( Padding \text{Padding} Padding)和步长( Stride \text{Stride} Stride)等参数,改变了卷积输出的尺寸和边界处理方式。这些基本卷积函数的变体,为卷积神经网络的设计提供了更多的选择和可能性,推动了深度学习在图像处理、语音识别、自然语言处理等领域的应用和发展。

往期内容回顾

卷积神经网络 - 卷积运算篇
卷积神经网络 - 池化(Pooling)篇

标签:输出,bold,卷积,text,神经网络,变体,连接,输入
From: https://blog.csdn.net/benny_zhou2004/article/details/140898055

相关文章

  • 思考|卷积、注意力
    参考链接:卷积:https://www.bilibili.com/video/BV1Vd4y1e7pj/?spm_id_from=333.999.0.0&vd_source=fa1d778abbb911d02be7ac36f2b2e32aTransformer:https://www.bilibili.com/video/BV1TZ421j7Ke/?spm_id_from=333.999.0.0&vd_source=fa1d778abbb911d02be7ac36f2b2e32ah......
  • 卷积全家桶
    卷积全家桶FFT快速傅里叶变换应用场景:有\(2^n-1\)次多项式\(f(x),g(x)\),求多项式\(f(x)g(x)\)的各项系数.换言之,有长为\(2^n\)数组\(f,g\),(下标从\(0\)开始),求长为\(2^{n+1}-1\)数组\(h\)满足\(h_i=\sum_{j=0}^{i}f_jg_{i-j}\)(超出\(f,g\)下标范围的地方用\(0\)补全).......
  • Pytorch笔记|小土堆|P16-22|神经网络基本骨架、卷积层、池化层、非线性激活层、归一化
    torch.nnContainers是神经网络骨架,含6个类,最常用的是Module——BaseclassforallNNmodulesModule所有神经网络模型(子类)都必须继承Module(父类),Module相当于给所有的神经网络提供了模板,但可进行修改官方示例:importtorch.nnasnnimporttorch.nn.functionalasFclass......
  • 翻译: 可视化深度学习神经网络一
    这是一个随意书写的28*28像素、分辨率很低的数字3但你的大脑一看见就能轻松辨识出来,我想要你好好欣赏这点人脑能够毫无障碍地辨识是非常厉害的我的意思是,这个、这个、还有这个,都能被识别为3即使前后图像的图形组成有很大差异当你看到这张3在眼中所激发的感光细......
  • 神经网络训练(二):基于残差连接的图片分类网络(进阶篇②)
    目录日常·唠嗑3基于ResNet18的优化3.1初步构思3.1.1数据预处理3.1.2批量大小3.1.3参数初始化3.1.4optimizer3.1.5学习速率3.2hyper-parameter测试3.2.1批量大小日常·唠嗑       昨天写完了神经网络训练(二):基于残差连接的图片分类......
  • 【MATLAB源码】机器视觉与图像识别技术(7)续---BP神经网络
    系列文章目录在最后面,各位同仁感兴趣可以看看!BP神经网络第一节、BP网络定义第二节、BP网络结构及其特点第三节、信息传播方式信息的正向传播:实质是计算网络的输出误差的反向传播:实质是学习过程第四节、BP网络的算法流程图及设计第五节、BP网络的局限与不足第八节、BP网络......
  • 深入探索EPSA:提升卷积神经网络性能的新式注意力模块
     原论文地址:https://arxiv.org/abs/2105.14447摘要摘要部分提出了一种新的注意力模块——金字塔分割注意力(PSA)模块,该模块通过替代ResNet瓶颈块中的3x3卷积,显著提升了模型性能。PSA模块能够作为即插即用组件,增强网络的多尺度表征能力,使EPSANet在多个计算机视觉任务上超越了......
  • 基于深度学习的适应硬件的神经网络
    基于深度学习的适应硬件的神经网络设计旨在最大限度地利用特定硬件平台的计算和存储能力,提高模型的执行效率和性能。这些硬件包括图形处理单元(GPU)、张量处理单元(TPU)、现场可编程门阵列(FPGA)和专用集成电路(ASIC)。以下是关于适应硬件的神经网络的详细介绍:1.背景和动机硬件异构......
  • PyTorch 训练自定义功能齐全的神经网络模型的详细教程
    在前面的文章中,老牛同学介绍了不少大语言模型的部署、推理和微调,也通过大模型演示了我们的日常的工作需求场景。我们通过大语言模型,实实在在的感受到了它强大的功能,同时也从中受益颇多。今天,老牛同学想和大家一起来训练一个自定义的、但是功能齐全的简单的神经网络模型。这个模型......
  • 【眼疾病识别】图像识别+深度学习技术+人工智能+卷积神经网络算法+计算机课设+Python+
    一、项目介绍眼疾识别系统,使用Python作为主要编程语言进行开发,基于深度学习等技术使用TensorFlow搭建ResNet50卷积神经网络算法,通过对眼疾图片4种数据集进行训练('白内障','糖尿病性视网膜病变','青光眼','正常'),最终得到一个识别精确度较高的模型。然后使用Django框架开发Web网......