DO-Conv中kernel composition和feature composition为什么数学上等价?

img


DO-Conv的这两种形式为什么在数学上是等价的?怎么推到出来?其中◦代表深度卷积(相比于深度可分离卷积,深度扩展操作)、 ∗ 代表传统卷积。

参考chatGPT的回答内容,在深度学习中,有两种常见的卷积方式:分离卷积(Depthwise Convolution)和组卷积(Group Convolution),它们的组合被称为Depthwise Separable Convolution(DO-Conv)。DO-Conv中的kernel composition和feature composition可以被证明在数学上是等价的。

在DO-Conv中,首先进行分离卷积,这个操作将输入张量的每个通道分别用不同的卷积核进行卷积,这样可以得到与输入张量相同数量的输出张量。然后,将所有输出张量连接起来,并用一个1x1的卷积核进行卷积,这个操作被称为组卷积。组卷积中的卷积核对于所有通道都是相同的,但是对于每个组的通道是不同的。

可以用数学方法证明,这两个操作可以交换顺序。假设输入张量为$X$,第$i$个分离卷积核为$K_i$,$G$为组卷积的数量,$F$为组卷积的卷积核。那么DO-Conv的输出可以表示为:

$Y= (K_1 * X) \oplus (K_2 * X) \oplus ... \oplus (K_G * X)$

$Z= F * Y$

其中,$\oplus$ 表示张量的连接操作,$*$表示卷积操作。这个操作的推导可以参考原始的Depthwise Separable Convolution论文(Chollet, 2017)。

我们可以对DO-Conv进行重写:

$Y_i= K_i * X$

$Y= [Y_1, Y_2, ..., Y_G]$

$Z= F * Y$

其中,$Y_i$是输入张量$X$与第$i$个分离卷积核$K_i$的卷积输出,$[Y_1, Y_2, ..., Y_G]$表示将这些张量连接起来。

将这两个式子相乘:

$Z= F * [K_1 * X, K_2 * X, ..., K_G * X]$

根据卷积的结合律,可以将$F$和所有$K_i$连接起来:

$Z= (F * K_1) * X \oplus (F * K_2) * X \oplus ... \oplus (F * K_G) * X$

这个结果与之前的$Y$的表达式相同,所以kernel composition和feature composition在数学上是等价的。

以上是通过代数的方式推导,也可以通过直观的方式理解,因为在DO-Conv中,每个通道都是独立卷积的,所以在进行组卷积时,卷积核可以看作是对所有通道的特征图进行组合,不管是kernel composition还是feature composition,其本质都是组合不同通道的特征信息。

参考GPT和自己的思路,DO-Conv(Depthwise and Orthogonal Convolution)是一种卷积神经网络的计算操作,将深度卷积和传统卷积组合起来,能够有效减少计算量和参数量。DO-Conv可以通过两种不同的方式实现:特征组合和卷积核组合,这两种方式在数学上是等价的。

特征组合是指将输入的特征图分成多个通道,对每个通道进行深度卷积,然后将结果进行通道合并,再通过传统卷积得到最终的输出特征图。假设输入特征图为P,深度卷积的卷积核为D,传统卷积的卷积核为W,输出特征图为Y,则可以表示为:

Y = (P ◦ D) * W

卷积核组合是指将深度卷积和传统卷积的卷积核进行组合,得到一个新的卷积核,然后将输入的特征图通过这个新的卷积核进行卷积得到输出特征图。假设输入特征图为P,深度卷积的卷积核为D,传统卷积的卷积核为W,输出特征图为Y,则可以表示为:

Y = P * (D ◦ W)

这两种方式在数学上是等价的,可以通过简单的代数计算得到。首先将特征组合中的深度卷积展开,得到:

Y = ((P ◦ D1) + (P ◦ D2) + ... + (P ◦ DC)) * W

然后将卷积核组合中的深度卷积展开,得到:

Y = P * ((D1 ◦ W) + (D2 ◦ W) + ... + (DC ◦ W))

可以看到,这两种方式的本质是一样的,只是计算顺序不同。而且由于深度卷积的卷积核D比传统卷积的卷积核W小得多,因此特征组合的方式可以减少计算量和参数量。

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
DO-Conv是一种卷积神经网络中的操作,其具有两种形式:kernel composition和feature composition。一个动机是将深度方向上的计算和空间方向上的计算分离。在kernel composition中,先对每个channel执行传统卷积操作,然后按channel相加;在feature composition中,先将输入在channel维度上分组,然后对每个group内的通道进行卷积,最后在channel维度上concatenate。

对于同一个输入和同一个参数,kernel composition和feature composition求解的结果是相同的。数学上的证明可以由以下公式进行推导:

假设输入为$x_{i,j,k}$,卷积核为$w_{i',j',k',m}$,那么kernel composition的结果$y_{i,j,m}$可以表示为以下形式:

$$y_{i,j,m}=\sum_{i',j',k'}w_{i',j',k',m}\cdot x_{i+i',j+j',k}$$

feature composition的结果$y_{i,j,m}$可以表示为以下形式:

$$y_{i,j,m}=\sum_{i',j',k'}w_{i',j',k',m} \cdot x_{i+i',j+j',\frac{m\cdot g+k'}{g}}$$

其中,$g$为feature group的数量,即将输入的channel分为多少组。可以看到两种形式的公式几乎相同,只是feature composition中多了一个$k'$和$g$的计算。但是由于$g$可以被视为卷积核的一个虚拟channel,所以两个公式具有相同的形式。因此,kernel composition和feature composition在数学上是等价的。

以下是使用Pytorch实现的代码示例:

import torch
import torch.nn as nn

class DOConv(nn.Module):
    def __init__(self, in_channels, out_channels, kernel_size, stride=1, padding=0, groups=1, bias=False):
        super(DOConv, self).__init__()
        self.groups = groups
        self.conv1 = nn.Conv2d(in_channels, in_channels * groups, kernel_size, stride, padding, groups=in_channels, bias=bias)
        self.conv2 = nn.Conv2d(in_channels * groups, out_channels, 1, bias=bias)

    def forward(self, x):
        x = self.conv1(x)  # execute depth-wise convolution
        x = x.view(-1, self.groups, x.shape[1] // self.groups, x.shape[2], x.shape[3])
        x = x.sum(dim=1)  # sum over feature groups
        x = self.conv2(x)  # execute point-wise convolution
        return x

如果我的回答解决了您的问题,请采纳!

在DO-Conv中,我们可以使用特征组合或卷积组合来实现它。从数学上讲,这两种形式是等价的,因为它们实际上是将深度可分离卷积与传统卷积结合起来,以在计算效率和模型性能之间达到平衡。

现在,让我们看看怎么推导出来的。

假设我们有输入张量X,使用深度可分离卷积进行卷积,然后使用传统卷积将其输出映射到所需的数量的通道。假设一个深度可分离卷积的输出是Y,并且需要将其映射到Cour个通道。

使用特征组合:

我们首先使用深度可分离卷积对输入进行卷积,生成输出Y。然后,我们将训练的传统卷积核作用于Y,以生成最终输出。

在数学上,这个操作可以表示为:

Z(x) = λsum_i (D(W_i) * X_i)

Y(x) = D(W_i) * X

Z(x) = λsum_i (K_i * Y_i)

这里,D代表深度卷积,*代表传统卷积。

使用核组合:

在卷积核组合中,我们首先将传统卷积核和深度可分离卷积的卷积核组合在一起,形成一个新的可训练卷积核。然后,我们将这个新卷积核应用于输入,以生成输出。

在数学上,这个操作可以表示为:

W = [W_{dw},W_t]

Z(x) = K * (D(W_i) * X)

这里,D代表深度卷积,*代表传统卷积。

因此,这两种形式在数学上是等价的。特征组合需要更多的计算,但可训练的参数更少,而卷积核组合需要更少的计算,但可训练的参数更多。应该根据具体情况选择哪一种形式。