1×1的卷积的作用

1×1的卷积大概有两个方面的作用吧:
1. 实现跨通道的交互和信息整合
2. 进行卷积核通道数的降维和升维
 
下面详细解释一下:
1. 这一点孙琳钧童鞋讲的很清楚。1×1的卷积层(可能)引起人们的重视是在NIN的结构中,论文中林敏师兄的想法是利用MLP代替传统的线性卷积核,从而提高网络的表达能力。文中同时利用了跨通道pooling的角度解释,认为文中提出的MLP其实等价于在传统卷积核后面接cccp层,从而实现多个feature map的线性组合,实现跨通道的信息整合。而cccp层是等价于1×1卷积的,因此细看NIN的caffe实现,就是在每个传统卷积层后面接了两个cccp层(其实就是接了两个1×1的卷积层)。
2. 进行降维和升维引起人们重视的(可能)是在GoogLeNet里。对于每一个Inception模块(如下图),原始模块是左图,右图中是加入了1×1卷积进行降维的。虽然左图的卷积核都比较小,但是当输入和输出的通道数很大时,乘起来也会使得卷积核参数变的很大,而右图加入1×1卷积后可以降低输入的通道数,卷积核参数、运算复杂度也就跟着降下来了。以GoogLeNet的3a模块为例,输入的feature map是28×28×192,3a模块中1×1卷积通道为64,3×3卷积通道为128,5×5卷积通道为32,如果是左图结构,那么卷积核参数为1×1×192×64+3×3×192×128+5×5×192×32,而右图对3×3和5×5卷积层前分别加入了通道数为96和16的1×1卷积层,这样卷积核参数就变成了1×1×192×64+(1×1×192×96+3×3×96×128)+(1×1×192×16+5×5×16×32),参数大约减少到原来的三分之一。同时在并行pooling层后面加入1×1卷积层后也可以降低输出的feature map数量,左图pooling后feature map是不变的,再加卷积层得到的feature map,会使输出的feature map扩大到416,如果每个模块都这样,网络的输出会越来越大。而右图在pooling后面加了通道为32的1×1卷积,使得输出的feature map数降到了256。GoogLeNet利用1×1的卷积降维后,得到了更为紧凑的网络结构,虽然总共有22层,但是参数数量却只是8层的AlexNet的十二分之一(当然也有很大一部分原因是去掉了全连接层)。
1.JPG

最近大热的MSRA的ResNet同样也利用了1×1卷积,并且是在3×3卷积层的前后都使用了,不仅进行了降维,还进行了升维,使得卷积层的输入和输出的通道数都减小,参数数量进一步减少,如下图的结构。(不然真不敢想象152层的网络要怎么跑起来TAT)
2.JPG

 
 
### 1x1 卷积的概念及其在神经网络中的应用 #### 定义与基本概念 1x1 卷积是一种特殊的卷积操作,在深度学习框架中被广泛应用于减少维度和调整通道数量。尽管其核大小仅为 \(1 \times 1\),但它仍然能够通过线性变换来改变输入张量的深度(即通道数)。这种操作通常用于降低计算成本以及优化模型性能。 具体来说,当执行一次 \(1 \times 1\) 的卷积时,实际上是将每个空间位置上的多个输入通道组合成一个新的输出通道[^4]。这一步骤可以通过权重矩阵实现,从而允许不同输入通道之间的交互作用得以保留甚至增强。 #### 功能与用途 - **降维**:\(1 \times 1\) 卷积最显著的功能之一就是能够在不丢失太多信息的情况下压缩特征图的深度。例如,在处理具有大量滤波器层之后产生的厚特征地图时非常有用。 - **非线性引入**:虽然本身是一个简单的加权求和过程,但如果紧随激活函数如 ReLU,则可增加额外一层非线性的表达能力[^1]。 - **效率提升**:相比传统的大尺寸内核 (比如 \(3\times3\), 或更大),采用更少参数的小型化设计有助于加速训练时间并减轻过拟合风险[^2]。 下面给出一段 Python 实现代码作为参考: ```python import tensorflow as tf def one_by_one_conv(input_tensor, output_channels): conv_layer = tf.keras.layers.Conv2D( filters=output_channels, kernel_size=(1, 1), strides=1, padding='same', activation='relu' ) return conv_layer(input_tensor) # Example usage: input_data = tf.random.normal([10, 32, 32, 3]) # Batch size: 10; Image Size: 32x32 RGB images. output_features = one_by_one_conv(input_data, 64) # Reduce/expand to 64 feature maps. print(output_features.shape) # Output shape should be [10, 32, 32, 64]. ``` 上述脚本定义了一个接受任意形状二维图像数据集为输入的一次一维卷积运算方法,并指定最终要转换到的目标特性数目——这里是 `64`。 #### 结构示意图说明 对于深层循环神经网络预测架构而言,类似于下述结构描述那样存在连接关系: ![Deep Recurrent Neural Network Prediction Architecture](figure_url)[^3] 其中圆圈表示各隐藏状态或者记忆单元;实线指示标准前馈路径而虚线则代表反馈机制或者是对未来时刻做出估计的部分。然而这里讨论的重点并不涉及具体的RNN变体而是强调如何利用小型局部感受野完成高效的信息传递任务。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值