起源
事情起源于同学的一个疑惑,他在阅读Transformer论文时,看到作者在前馈神经网络部分写有这么一句话:
Another way of describing this is as two convolutions with kernel size 1.
于是他向我问道“为什么全连接层可以用1*1卷积层代替呢?”
我对卷积的理解还不够深入,无法被问到,所以我立即开始寻找资源来解决这个问题。
以下是对与此问题相关的内容的分析,以供审阅。
解决
按照我之前的理解,对的一张原图的卷积操作是把原图的每个元素乘以一个卷积核参数,得到的特征图,那么这不是直接逐元素乘以常数 嘿!怎么可能更换全连接? !
造成这种误解的原因是,我们通常所说的卷积实际上省略了一个重要的东西,它实际上应该是卷积。
更广泛来说,当我们对K个通道的输入进行卷积时,我们需要一个shape为的kernel。
举个例子,对于一张的图像,它拥有RGB三个通道,我们想要执行的卷积操作,那么我们kernel的shape应为。
假设卷积核,相同空间位置的不同通道的输入从上到下是,那么输出特征图上对应的位置应该是。
所以说,卷积操作是在每个像素位置上,不同feature channels的线性叠加,其目的是保留原有图像平面结构的基础上,调整通道数(即depth),从而完成升维或降维的功能。
明白了这一点,就可以理解为什么卷积操作就相当于一个全连接层了。
依旧举例说明,假如现在有一层全连接网络,输入层维度为3,输出层维度为2,具体参数如下:
然后我们可以知道网络,其中。
此时我们将维度为3的输入展开为,同样地将维度为2的输出展开为,从卷积的角度可以看成是输入是空间维度为的3个通道的特征图,输出是空间维度为的2个通道的特征图。
对于空间维度的3通道输入,我们需要用的kernel,计算得到的输出特征图,那么使用两个这样的kernel便得到了两个输出通道,即。
假设每一个kernel的卷积核参数如下所示:
可以在卷积操作的基础上添加ReLU函数,那么有如下公式:
,其中。
此时卷积运算的公式与全连接层是一致的,这也是为什么卷积运算可以等效为全连接层的原因。
最后回到Transformer上去,如何用两个卷积代替MLP呢?假设,序列长度为,那么可以将每个token看作,并将其竖起来,使用shape为的kernel进行卷积,并使用个这样的kernel,便可得到维度的张量,维度扩大四倍,等价于第一层全连接。
同理再用个shape为的kernel便可得到的输出,回到原维度,等价于第二层全连接。
参考
解惑的主要参考资料
How are 1×1 convolutions the same as a fully connected layer?
辅助参考
卷积神经网络中用1*1 卷积有什么作用或者好处呢?
MLP conv layers
文章出处登录后可见!