目录
4.1.2、group conv 组卷积最早用于 AlexNet 网络中
4.2.1、AlexNet单层大卷积核到VGG多层小卷积核转变
4.3.2、pointwise conv【 1*1 的卷积核】
4.3.3、global depthwise conv 全局卷积“池化”
4.4、GoogleNet【同层卷积使用多尺寸卷积结果拼接】
4.5.2、1 * 1卷积核 加入inception 怎样减少模型参数
五、CNN网络设计的一些经验【卷积核层次、通道层次、卷积层层次】
六、多层卷积的理解 和 CNN 网络bn、relu、pool层的顺序
一、CNN网络与NLP任务
参考文章: CNN与NLP任务【CNN任务的特点】
1.1、卷积与池化计算后featuremap大小
卷积池化的计算公式:
tip:卷积向下取整,池化向上取整 ,池化的padding一般都是0层
二、迁移学习使用预训练模型
三、CNN 用于 文本分类 Text CNN
3.1、text cnn的思想
1、使用cnn做文本分类的特点
① 特征具有局部性(如:一段话的类别往往会集中在某几个高重要性的短语上)
② 特征具有平移性(如:同一个重要短语可以出现句子中的任意位置)
③ 特征具有收缩性(如:去掉句子中一些不相关的词不会影响句子类别的判断)
④ 当文本过长时RNN分类效果不是很好(我们只需要知道句子的类别,并不是很需要知道句子的整句意思,而cnn可以通过
不同大小的卷积核多层卷积后获得不错的感知视野)
综上所述:文本分类符合CNN网络的处理场景
2、text cnn 使用那几组尺寸的卷积核,为什么要使用多个尺寸多组卷积核?
2.1、为什么使用多个尺寸的多组卷积核
因为text cnn做了一个n-gram窗口,不同尺寸的卷积核可以确定句子不同长度的判别单元,因为句子的类别可以
由重要词语、短语、长短语、子句子来决定
2.2、使用那几组尺寸的卷积核?
2.2.1、1 * embedding 的卷积核:将每一个词语当做n-gram,词语与词语假设独立,stride设为1
2.2.2、2 * embedding 的卷积核:将两个词语的短语当做n-gram,短语与短语假设独立,这个时候需要注意
我们可以先将stride设置为2做多次下采样卷积,这个过程减小序列的长度因此可以增加下游卷积网络的感
知范围,然后用stride=1的卷积提取全局的高阶特征,类似resnet
2.2.3、3 * embedding 的卷积核:将3个词语的长短语当做n-gram,长短语与长短语假设独立,类似2-grarm的
卷积,先用stride=2扩大感知视野,再用stride=1提取全局的高阶特征
2.2.4、5 * embedding 的卷积核:将5个词语的长短语当做n-gram,长短语与长短语假设独立,类似2-grarm的
卷积,先用stride=2扩大感知视野,再用stride=1提取全局的高阶特征
2.2.5、7 * embedding 的卷积核:将7个词语的子句子当做n-gram,子句子与子句子假设独立,类似2-grarm的
卷积,先用stride=2扩大感知视野,再用stride=1提取全局的高阶特征
3.2、text cnn 的网络结构
3.2.1、一个尺寸卷积核 text cnn 的网络
3.2.1、多组不同尺寸卷积核 text cnn结构
四、经典CNN网络的几种特殊结构
1、经典CNN网络发展史:
lenet5 ----> AlexNet(大卷积核分组卷积) ----> VGG(多次小卷积核分组卷积)----> GoogleNet(同层使
用多尺寸卷积核) ----> inception/bottleneck结构(1*1卷积通道缩放减小多尺寸卷积核庞大的参数量) ----->
ResNet(残差网络结构使网络层次更深,缓解过拟合和浅层参数梯度消失问题) -----> SEGNet(输入通道添加attention)
4.1、Group Convolution 组卷积
1、为什么要用到 group convolution(组卷积),它与普通的卷积有什么区别?
普通conv网络是基于输入通道的”全连接“,group conv 是使用“局部输入通道连接“,降低卷积网络的参数,增加模型
的迭代速度,来减少单个设备的压力
普通conv参数量:
C1 * H * W * C2 ----- C1:输入通道数;C2:输出通道数
group conv 参数量:
C1/G * H * W * C2 ----- C1:输入通道数;C2:输出通道数;G:group组的个数
4.1.1、group conv 网络结构与参数量计算
4.1.2、group conv 组卷积最早用于 AlexNet 网络中
4.2、多个小卷积核代替大卷积核的结构(VGG网络)
4.2.1、AlexNet单层大卷积核到VGG多层小卷积核转变
1、AlexNet虽然使用的group conv,但仍然存在的缺点
AlexNet中用到了一些非常大的卷积核,比如11×11、5×5卷积核,之前人们的观念是,卷积核越大,receptive field
(感受野)越大,获取到的图片信息越多,因此获得的特征越好。虽说如此,但是大的卷积核会导致计算量的暴增,不利于模型
深度的增加,计算性能也会降低。
2、于是在VGG(最早使用)网络中,利用2个3×3卷积核的组合比1个5×5卷积核的效果更佳,同时参数量(3×3×2 VS 5×5×1)被降低;
4.2.2、小卷积核如何获得像大卷积核一样的感受视野
1、使用多层小卷积核为什么可以和一层大卷积核同样获得较大的感知视野?
① 可以使用小卷积核(例如 3*3),设置stride=2,这样可以使得图片缩小至原来的一半左右,多使用几层这样的结构
对图片进行下采样,然后使用3*3且stride=1的卷积核对全局特征进行卷积
② 可以使用池化pool,池化可以下采样图片缩小尺寸从而增加小卷积核的感受视野
③ 可以使用膨胀卷积,在不使用pool损失信息的前提下扩大感受视野
4.3、group conv的三种特例
4.3.1、depthwise conv
1、什么是depthwise convolution?
这是一种特殊的分组卷积,当 组的个数==输入通道数时,此时的conv层称为depthwise conv层
参数计算:由于组的个数等于输入通道的个数,带入group conv参数计算式子
参数量 = 1 * H * W * 输出通道数
4.3.2、pointwise conv【 1*1 的卷积核】
1、什么是pointhwise convolution?
使用 1 * 1 的卷积核,为了就是在少量参数量的前提下,缩放通道的个数,后期用于 bottleneck 模块中减小模型整
体参数量;1 * 1 卷积核在某种意义上实现了通道的全连接网络
4.3.3、global depthwise conv 全局卷积“池化”
1、什么是global depthwise convolution?
这是一种特殊的 depthwise conv层,当 group的个数等于输入通道的个数且卷积核的大小等于featuremap的
大小,这样卷积后featuremap大小为1且各个通道相互独立,实现了类似于“全局池化”的效果
2、global depthwise convolution 相对于直接maxpool的好处
① 直接maxpool虽然不会给模型增加额外的参数,但他仅仅保留最大的特征,完全不考虑其他特征的影响,造成了信息损失
② global depthwise convolution 虽然会为模型增加额外的参数,但是进行“池化”时所有的特征均会考虑,避免信
息直接流失
4.4、GoogleNet【同层卷积使用多尺寸卷积结果拼接】
0、以上传统的网络包含VGG存在的缺点:
同层的卷积核尺寸只有一个
1、GoogleNet 同层卷积使用多尺寸卷积核的思想
传统的层叠式网络,基本上都是一个个卷积层的堆叠,每层只用一个尺寸的卷积核,例如VGG结构中使用了大量的3×3卷积层。
事实上,同一层feature map可以分别使用多个不同尺寸的卷积核,以获得不同尺度的特征,再把这些特征结合起来,得到
的特征往往比使用单一卷积核的要好,谷歌的GoogleNet,或者说Inception系列的网络,就使用了多个卷积核的结构
2、GoogleNet的优势
一个输入的feature map分别同时经过1×1、3×3、5×5的卷积核的处理,得出的特征再组合起来,获得更佳的特征。
2、GoogleNet存在的问题
GoogleNet同层使用多尺寸的卷积核的结果进行拼接,特征缺失比单尺寸卷积核的效果要好很多,但是却增加了大量的
参数
4.5、 inception/bottleneck结构
0、bottleneck/inception的优点
为了解决GoogleNet多尺寸卷积核参数量过大的问题,多次使用 1 * 1 卷积核对通道数进行缩放
4.5.1、最经典的inception结构
4.5.2、1 * 1卷积核 加入inception 怎样减少模型参数
4.6、Resnet残差网络结构
4.6.1、传统网络存在的问题和残差网络的优点
0、以上所有网络包括inception结构都存在的两个共同的缺点:
① 传统的神经网络随着层次深度的提升,高阶特征处于一个不稳定且难以解释的状态,未必层次越深的高阶特征分类效果
越好,存在过拟合的风险;举个例子:有可能一个神经网络倒数第二层的高阶特征是最好的应该接入输出层进行预测的
特征,但由于又接入了一层卷积,就大概导致模型预测的效果变差,造成过拟合
② 传统的神经网络层次越深,其浅层的神经网络就越容易出现梯度消散,浅层的神经网络参数更新不动。
1、残差网络两个最大的优点:
① 通过每一个“子层”首尾相连的结构,可以给模型多一条选择的路,如果经过该子层预测效果变差,梯度可以跳过该子层
结构,一句话就是给网络开了个“走后门”的路径,随着网络层次的加深,模型预测的效果虽不保证越来越好,但至少
不至于变差
② 由于resnet结构输出 F(x) = f(x) + x,就算浅层网络的梯度f'(x) 梯度为0,网络至少还有梯度为 1 的一个
值,一句话来说就是使得网络的反向梯度至少大于一个值,不至于为0的出现梯度消失。
4.7、SENet “通道attention”block
0、之前所有的网络,包括resnet都存在的问题
卷积的过程中对于所有输入通道都是等权重一视同仁的
1、对SENet网络的理解
简单的理解就是SENet网路在卷积的过程中,对每一个输入通道都赋予一个可以自由训练的权重attention
tip:SEnet可以任意加入普通的卷积之后,对卷积的通道进行赋予不同的权重,例如:加入resnet残差网络中、加入inception
中等等等
查看文章:【注意力机制】SENet:Squeeze-and-Excitation Networks 通道注意力机制的理解
SENet【Squeeze-and-Excitation 】block 执行过程
SENet block 加入到resnet中
4.8、Dilated Convlution 膨胀卷积
1、膨胀卷积的作用?
传统的CNN网络通过卷积核 stride 与 pool 来下采样缩小图片尺寸获得更大的感受视野,但是却存在信息损失【尤其poo
l】,那么膨胀卷积就是不通过pool来增加感受视野的面积
2、膨胀卷积后图片的大小
① pytorch con2d 用膨胀参数 dilation_rate 控制,默认为1,为1是普通卷积
② dilation_rate > 1 时,卷积核的大小会发生变化,卷积的参数量不变,但会用0进行扩大填充,扩大后的卷积和普
通的卷积计算方法相同
膨胀后的卷积核的大小 = 膨胀系数 * (卷积核大小 - 1 ) + 1
③ 卷积后featuremap的大小
和普通卷积计算方法相同:
out size = [(inputsize + 2*p - f)/stride + 1 ] 卷积向下取整,池化向上取整。
2、膨胀卷积最大的优点就是不适用pooling信息损失的情况下扩大感受野的大小
3、膨胀卷积使用的场景:
在图像需要全局信息或者语音文本较长的sequence信息依赖的问题中,都能很好的使用膨胀卷积
五、CNN网络设计的一些经验【卷积核层次、通道层次、卷积层层次】
5.1、从卷积核层次
5.2、从通道层次
5.3、从卷积层层次
六、多层卷积的理解 和 CNN 网络bn、relu、pool层的顺序
0、conv2d 与 pool2d 的理解:
当 stride > 1 且没有padding时,多层conv2d具有下采样的作用,扩大感知视野【即便不使用pooling】
可以理解pooling是一种极端的下采样方式,相对conv2d来说,maxpool类似于仅仅是最大特征的参数为1其他区域参
数为0的卷积层
1、pool层的作用
① 增加模型的迭代速度 ② 增加感受视野
2、conv、bn、relu、pool顺序
conv --- bn --- relu ---- pool